Subversion Repositories external

Compare Revisions

Ignore whitespace Rev 192 → Rev 193

/branches/automake-1_1_5/cinelerra/hvirtual/global_config
1,5 → 1,4
HAVE_ALSA := n
HAVE_LIBXXF86VM := $(shell if [ -f /usr/X11R6/include/X11/extensions/xf86vmode.h ]; then echo y; fi )
HAVE_XFT := n
HAVE_ESOUND := y
HAVE_AVIFILE := n
43,10 → 42,6
endif
 
 
ifeq ($(HAVE_LIBXXF86VM), y)
CFLAGS += -DHAVE_LIBXXF86VM
XXF86VM = -lXxf86vm
endif
 
 
ifeq ($(HAVE_ESOUND), y)
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/device1394input.C
314,8 → 314,29
thread->audio_samples * 2 * 2,
(unsigned char*)thread->temp,
thread->bytes_read,
thread->channels,
thread->channels,
thread->bits);
int real_freq=thread->decoder->decoder->audio->frequency;
if (real_freq == 32000)
{
// do in-place _FAST_ && _SIMPLE_ upsampling to 48khz
// i also think user should get a warning that his material is effectively 32khz
// we take 16bit samples for both channels in one 32bit int
int *twosample = (int*) (thread->audio_buffer + thread->audio_samples * 2 * 2);
int from = decode_result - 1;
int new_result = decode_result * 48000 / real_freq;
for (int to = new_result - 1; to >=0; to--)
{
if ((to % 3) == 0 || (to % 3) == 1) from --;
twosample[to]=twosample[from];
}
decode_result = new_result;
// printf("decoder real_freq: %i, upsampled_samples_in_frame %i\n", real_freq, decode_result);
}
 
thread->audio_samples += decode_result;
 
//printf("Device1394Input::dv_iso_handler 25 %d\n", decode_result);
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/batchrender.inc
6,5 → 6,7
class BatchRenderThread;
class BatchRenderGUI;
 
#define BATCH_PATH "batchrender.rc"
 
 
#endif
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/asset.C
67,6 → 67,7
strcpy(vcodec, QUICKTIME_YUV2);
strcpy(acodec, QUICKTIME_TWOS);
jpeg_quality = 100;
aspect_ratio = -1;
ampeg_bitrate = 256;
ampeg_derivative = 3;
165,8 → 166,8
dither = asset->dither;
mp3_bitrate = asset->mp3_bitrate;
use_header = asset->use_header;
aspect_ratio = asset->aspect_ratio;
 
 
video_data = asset->video_data;
layers = asset->layers;
frame_rate = asset->frame_rate;
434,10 → 435,10
 
 
jpeg_quality = file->tag.get_property("JPEG_QUALITY", jpeg_quality);
aspect_ratio = file->tag.get_property("ASPECT_RATIO", aspect_ratio);
 
 
 
 
vmpeg_iframe_distance = file->tag.get_property("VMPEG_IFRAME_DISTANCE", vmpeg_iframe_distance);
vmpeg_bframe_distance = file->tag.get_property("VMPEG_BFRAME_DISTANCE", vmpeg_bframe_distance);
vmpeg_progressive = file->tag.get_property("VMPEG_PROGRESSIVE", vmpeg_progressive);
638,6 → 639,7
 
 
file->tag.set_property("JPEG_QUALITY", jpeg_quality);
file->tag.set_property("ASPECT_RATIO", aspect_ratio);
 
file->tag.set_property("VMPEG_IFRAME_DISTANCE", vmpeg_iframe_distance);
file->tag.set_property("VMPEG_BFRAME_DISTANCE", vmpeg_bframe_distance);
780,6 → 782,7
 
 
jpeg_quality = GET_DEFAULT("JPEG_QUALITY", jpeg_quality);
aspect_ratio = GET_DEFAULT("ASPECT_RATIO", aspect_ratio);
 
// MPEG format information
vmpeg_iframe_distance = GET_DEFAULT("VMPEG_IFRAME_DISTANCE", vmpeg_iframe_distance);
869,6 → 872,7
 
 
UPDATE_DEFAULT("JPEG_QUALITY", jpeg_quality);
UPDATE_DEFAULT("ASPECT_RATIO", aspect_ratio);
 
// MPEG format information
UPDATE_DEFAULT("VMPEG_IFRAME_DISTANCE", vmpeg_iframe_distance);
965,8 → 969,8
printf(" audio_data %d channels %d samplerate %d bits %d byte_order %d signed %d header %d dither %d acodec %c%c%c%c\n",
audio_data, channels, sample_rate, bits, byte_order, signed_, header, dither, acodec[0], acodec[1], acodec[2], acodec[3]);
printf(" audio_length %lld\n", audio_length);
printf(" video_data %d layers %d framerate %f width %d height %d vcodec %c%c%c%c\n",
video_data, layers, frame_rate, width, height, vcodec[0], vcodec[1], vcodec[2], vcodec[3]);
printf(" video_data %d layers %d framerate %f width %d height %d vcodec %c%c%c%c aspect_ratio %f\n",
video_data, layers, frame_rate, width, height, vcodec[0], vcodec[1], vcodec[2], vcodec[3], aspect_ratio);
printf(" video_length %lld \n", video_length);
return 0;
}
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/batchrender.C
59,9 → 59,9
 
 
 
BatchRenderJob::BatchRenderJob(MWindow *mwindow)
BatchRenderJob::BatchRenderJob(Preferences *preferences)
{
this->mwindow = mwindow;
this->preferences = preferences;
asset = new Asset;
edl_path[0] = 0;
strategy = 0;
123,7 → 123,7
 
void BatchRenderJob::fix_strategy()
{
strategy = Render::fix_strategy(strategy, mwindow->preferences->use_renderfarm);
strategy = Render::fix_strategy(strategy, preferences->use_renderfarm);
}
 
 
142,14 → 142,28
current_job = 0;
rendering_job = -1;
is_rendering = 0;
default_job = 0;
}
 
BatchRenderThread::BatchRenderThread()
: BC_DialogThread()
{
mwindow = 0;
current_job = 0;
rendering_job = -1;
is_rendering = 0;
default_job = 0;
}
 
void BatchRenderThread::handle_close_event(int result)
{
// Save settings
save_jobs();
save_defaults();
char path[BCTEXTLEN];
path[0] = 0;
save_jobs(path);
save_defaults(mwindow->defaults);
delete default_job;
default_job = 0;
jobs.remove_all_objects();
}
 
157,10 → 171,12
{
current_start = 0.0;
current_end = 0.0;
default_job = new BatchRenderJob(mwindow);
default_job = new BatchRenderJob(mwindow->preferences);
 
load_jobs();
load_defaults();
char path[BCTEXTLEN];
path[0] = 0;
load_jobs(path, mwindow->preferences);
load_defaults(mwindow->defaults);
this->gui = new BatchRenderGUI(mwindow,
this,
mwindow->session->batchrender_x,
172,14 → 188,16
}
 
 
void BatchRenderThread::load_jobs()
void BatchRenderThread::load_jobs(char *path, Preferences *preferences)
{
char path[BCTEXTLEN];
FileXML file;
int result = 0;
 
jobs.remove_all_objects();
file.read_from_file(create_path(path));
if(path[0])
file.read_from_file(path);
else
file.read_from_file(create_path(path));
 
while(!result)
{
188,16 → 206,15
if(file.tag.title_is("JOB"))
{
BatchRenderJob *job;
jobs.append(job = new BatchRenderJob(mwindow));
jobs.append(job = new BatchRenderJob(preferences));
job->load(&file);
}
}
}
}
 
void BatchRenderThread::save_jobs()
void BatchRenderThread::save_jobs(char *path)
{
char path[BCTEXTLEN];
FileXML file;
 
for(int i = 0; i < jobs.total; i++)
205,47 → 222,59
file.tag.set_title("JOB");
jobs.values[i]->save(&file);
}
file.write_to_file(create_path(path));
 
if(path[0])
file.write_to_file(path);
else
file.write_to_file(create_path(path));
}
 
void BatchRenderThread::load_defaults()
void BatchRenderThread::load_defaults(Defaults *defaults)
{
default_job->asset->load_defaults(mwindow->defaults,
"BATCHRENDER_",
1,
1,
1,
1,
1);
default_job->fix_strategy();
if(default_job)
{
default_job->asset->load_defaults(defaults,
"BATCHRENDER_",
1,
1,
1,
1,
1);
default_job->fix_strategy();
}
 
for(int i = 0; i < BATCHRENDER_COLUMNS; i++)
{
char string[BCTEXTLEN];
sprintf(string, "BATCHRENDER_COLUMN%d", i);
column_width[i] = mwindow->defaults->get(string, list_widths[i]);
column_width[i] = defaults->get(string, list_widths[i]);
}
// current_job = mwindow->defaults->get("BATCHRENDER_JOB", 0);
}
 
void BatchRenderThread::save_defaults()
void BatchRenderThread::save_defaults(Defaults *defaults)
{
default_job->asset->save_defaults(mwindow->defaults,
"BATCHRENDER_",
1,
1,
1,
1,
1);
mwindow->defaults->update("BATCHRENDER_STRATEGY", default_job->strategy);
if(default_job)
{
default_job->asset->save_defaults(defaults,
"BATCHRENDER_",
1,
1,
1,
1,
1);
defaults->update("BATCHRENDER_STRATEGY", default_job->strategy);
}
for(int i = 0; i < BATCHRENDER_COLUMNS; i++)
{
char string[BCTEXTLEN];
sprintf(string, "BATCHRENDER_COLUMN%d", i);
mwindow->defaults->update(string, column_width[i]);
defaults->update(string, column_width[i]);
}
// mwindow->defaults->update("BATCHRENDER_JOB", current_job);
mwindow->save_defaults();
// defaults->update("BATCHRENDER_JOB", current_job);
if(mwindow)
mwindow->save_defaults();
else
defaults->save();
}
 
char* BatchRenderThread::create_path(char *string)
253,13 → 282,13
FileSystem fs;
sprintf(string, "%s", BCASTDIR);
fs.complete_path(string);
strcat(string, "batchrender.rc");
strcat(string, BATCH_PATH);
return string;
}
 
void BatchRenderThread::new_job()
{
BatchRenderJob *result = new BatchRenderJob(mwindow);
BatchRenderJob *result = new BatchRenderJob(mwindow->preferences);
result->copy_from(get_current_job());
jobs.append(result);
current_job = jobs.total - 1;
303,17 → 332,10
return get_current_job()->edl_path;
}
 
void BatchRenderThread::start_rendering()
{
if(is_rendering) return;
 
is_rendering = 1;
save_jobs();
save_defaults();
gui->new_batch->disable();
gui->delete_batch->disable();
 
// Test EDL files for existence
int BatchRenderThread::test_edl_files()
{
for(int i = 0; i < jobs.total; i++)
{
if(jobs.values[i]->enabled)
321,18 → 343,27
FILE *fd = fopen(jobs.values[i]->edl_path, "r");
if(!fd)
{
ErrorBox error_box(PROGRAM_NAME ": Error",
mwindow->gui->get_abs_cursor_x(),
mwindow->gui->get_abs_cursor_y());
char string[BCTEXTLEN];
sprintf(string, _("EDL %s not found.\n"), jobs.values[i]->edl_path);
error_box.create_objects(string);
error_box.run_window();
if(mwindow)
{
ErrorBox error_box(PROGRAM_NAME ": Error",
mwindow->gui->get_abs_cursor_x(),
mwindow->gui->get_abs_cursor_y());
error_box.create_objects(string);
error_box.run_window();
gui->new_batch->enable();
gui->delete_batch->enable();
}
else
{
fprintf(stderr,
"%s",
string);
}
 
is_rendering = 0;
gui->new_batch->enable();
gui->delete_batch->enable();
is_rendering = 0;
return;
return 1;
}
else
{
340,9 → 371,13
}
}
}
return 0;
}
 
// Predict all destination paths
ArrayList<char*> paths;
void BatchRenderThread::calculate_dest_paths(ArrayList<char*> *paths,
Preferences *preferences,
ArrayList<PluginServer*> *plugindb)
{
for(int i = 0; i < jobs.total; i++)
{
BatchRenderJob *job = jobs.values[i];
357,7 → 392,7
 
// Use command to calculate range.
command->command = NORMAL_FWD;
command->get_edl()->load_xml(mwindow->plugindb,
command->get_edl()->load_xml(plugindb,
file,
LOAD_ALL);
command->change_type = CHANGE_ALL;
367,7 → 402,7
// Create test packages
packages->create_packages(mwindow,
command->get_edl(),
mwindow->preferences,
preferences,
job->strategy,
job->asset,
command->start_position,
378,7 → 413,7
for(int j = 0; j < packages->get_total_packages(); j++)
{
RenderPackage *package = packages->get_package(j);
paths.append(strdup(package->path));
paths->append(strdup(package->path));
}
 
// Delete package harness
387,8 → 422,70
delete file;
}
}
}
 
 
void BatchRenderThread::start_rendering(char *config_path,
char *batch_path)
{
Defaults *boot_defaults;
Preferences *preferences;
Render *render;
ArrayList<PluginServer*> *plugindb;
 
// Initialize stuff which MWindow does.
MWindow::init_defaults(boot_defaults, config_path);
load_defaults(boot_defaults);
preferences = new Preferences;
preferences->load_defaults(boot_defaults);
MWindow::init_plugins(preferences, plugindb, 0);
 
load_jobs(batch_path, preferences);
save_jobs(batch_path);
save_defaults(boot_defaults);
 
// Test EDL files for existence
if(test_edl_files()) return;
 
 
// Predict all destination paths
ArrayList<char*> paths;
calculate_dest_paths(&paths,
preferences,
plugindb);
 
int result = ConfirmSave::test_files(0, &paths);
// Abort on any existing file because it's so hard to set this up.
if(result) return;
 
render = new Render(0);
render->start_batches(&jobs,
boot_defaults,
preferences,
plugindb);
}
 
void BatchRenderThread::start_rendering()
{
if(is_rendering) return;
 
is_rendering = 1;
char path[BCTEXTLEN];
path[0] = 0;
save_jobs(path);
save_defaults(mwindow->defaults);
gui->new_batch->disable();
gui->delete_batch->disable();
 
// Test EDL files for existence
if(test_edl_files()) return;
 
// Predict all destination paths
ArrayList<char*> paths;
calculate_dest_paths(&paths,
mwindow->preferences,
mwindow->plugindb);
 
// Test destination files for overwrite
int result = ConfirmSave::test_files(mwindow, &paths);
paths.remove_all_objects();
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/tests/bandwipe.xml
1,20 → 1,20
<?xml version="1.0"?>
<EDL>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=8.0000000000000000e+00 LOOP_END=8.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=4.7786666666666669e+01 SELECTION_END=4.7786666666666669e+01 CLIP_TITLE=/home/root/cinelerra/cinelerra/tests/bandwipe.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=0 ZOOM_SAMPLE=16384 ZOOMY=64 ZOOM_TRACK=64>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=8.0000000000000000e+00 LOOP_END=8.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=4.6913533333333334e+01 SELECTION_END=4.6913533333333334e+01 CLIP_TITLE=/root/hvirtual/cinelerra/tests/bandwipe.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=0 ZOOM_SAMPLE=8192 ZOOMY=64 ZOOM_TRACK=64 PREVIEW_START=0.0000000000000000e+00 PREVIEW_END=1.4237556666666666e+02>
 
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=100 ASSET_COLUMN1=100 AUDIO_MODULE_FRAGMENT=4096 PLAYBACK_READ_LENGTH=131072 SHOW_FADE=0 SHOW_PAN=0 SHOW_PLAY=0 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=0 SHOW_CAMERA=0 SHOW_PROJECTOR=0 SHOW_MODE=0 SHOW_MASK=0 AUTO_KEYFRAMES=0 AUTOS_FOLLOW_EDITS=1 CACHE_SIZE=5 CROP_X1=342 CROP_Y1=262 CROP_X2=343 CROP_Y2=262 CURRENT_FOLDER="Video Transitions" CURSOR_ON_FRAMES=0 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=0 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=0 CWINDOW_YSCROLL=0 CWINDOW_ZOOM=1.000000e+00 DEFAULT_TRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=5.0000000000000000e+00 EDITING_MODE=1 FOLDERLIST_FORMAT=1 FORCE_UNIPROCESSOR=0 HIGHLIGHTED_TRACK=0 LABELS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 TOOL_WINDOW=1 VWINDOW_METER=1 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=100 ASSET_COLUMN1=100 AUDIO_MODULE_FRAGMENT=4096 SHOW_FADE=0 SHOW_PAN=0 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=0 SHOW_CAMERA=0 SHOW_PROJECTOR=0 SHOW_MODE=0 SHOW_MASK=0 SHOW_CZOOM=0 SHOW_PZOOM=0 AUTO_KEYFRAMES=0 AUTOS_FOLLOW_EDITS=1 BRENDER_START=0.0000000000000000e+00 CROP_X1=342 CROP_Y1=262 CROP_X2=343 CROP_Y2=262 CURRENT_FOLDER=Media CURSOR_ON_FRAMES=0 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=0 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=0 CWINDOW_YSCROLL=0 CWINDOW_ZOOM=1.000000e+00 DEFAULT_ATRANSITION=Crossfade DEFAULT_VTRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=5.0000000000000000e+00 EDITING_MODE=1 FOLDERLIST_FORMAT=1 HIGHLIGHTED_TRACK=0 LABELS_FOLLOW_EDITS=1 MPEG4_DEBLOCK=0 PLUGINS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 NUDGE_SECONDS=1 TOOL_WINDOW=1 VWINDOW_METER=1 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
 
<VIDEO INTERPOLATION_TYPE=1 COLORMODEL="YUV-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970030000000001e+01 FRAMES_PER_FOOT=1.600000e+01 TRACKW=720 TRACKH=480 OUTPUTW=720 OUTPUTH=480 ASPECTW=1.600000e+01 ASPECTH=9.000000e+00>
<VIDEO INTERPOLATION_TYPE=1 COLORMODEL="YUV-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970029970029969e+01 FRAMES_PER_FOOT=1.600000e+01 OUTPUTW=720 OUTPUTH=480 ASPECTW=4.000000e+00 ASPECTH=3.000000e+00>
 
<AUDIO SAMPLERATE=48000 CHANNELS=2 ACHANNEL_ANGLE_0=168 ACHANNEL_ANGLE_1=7>
 
<FOLDER>Clips</FOLDER>
<FOLDER>Media</FOLDER>
<ASSETS>
<ASSET SRC=/home/mov/darkcity2.mov>
<ASSET SRC=/hmov/take1.mov>
<FOLDER>Media</FOLDER>
<FORMAT TYPE="Quicktime for Linux">
<VIDEO HEIGHT=480 WIDTH=720 LAYERS=1 FRAMERATE=2.9970029970029969e+01 VCODEC=jpeg VIDEO_LENGTH=4615 JPEG_QUALITY=100 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 DIVX_BITRATE=910000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=0 PNG_USE_ALPHA=0>
<FORMAT TYPE="Quicktime for Linux" USE_HEADER=1>
<VIDEO HEIGHT=480 WIDTH=720 LAYERS=1 FRAMERATE=2.9970029970029969e+01 VCODEC=jpeg VIDEO_LENGTH=4615 JPEG_QUALITY=100 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 VMPEG_SEQ_CODES=0 DIVX_BITRATE=910000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=0 DIVX_USE_DEBLOCKING=1 MS_BITRATE=1000000 MS_BITRATE_TOLERANCE=500000 MS_INTERLACED=0 MS_QUANTIZATION=10 MS_GOP_SIZE=45 MS_FIX_BITRATE=1 PNG_USE_ALPHA=0>
</ASSET>
</ASSETS>
 
26,25 → 26,22
<PRESENTATIONS>
</PRESENTATIONS>
 
<TRACK RECORD=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TRACK RECORD=1 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TITLE>Video 1</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=1442><FILE SRC=/home/mov/darkcity2.mov></EDIT>
<EDIT STARTSOURCE=1790 CHANNEL=0 LENGTH=2825><FILE SRC=/home/mov/darkcity2.mov>
<TRANSITION TITLE=BandWipe LENGTH=150><ON><KEYFRAME POSITION=0><BANDWIPE BANDS=50></KEYFRAME>
<KEYFRAME POSITION=0><BANDWIPE BANDS=50></KEYFRAME>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=1442><FILE SRC=/hmov/take1.mov></EDIT>
<EDIT STARTSOURCE=1790 CHANNEL=0 LENGTH=2825><FILE SRC=/hmov/take1.mov>
<TRANSITION TITLE=BandWipe LENGTH=150><ON><KEYFRAME POSITION=0><BANDWIPE BANDS=10 DIRECTION=0></KEYFRAME>
<KEYFRAME POSITION=0><BANDWIPE BANDS=10 DIRECTION=0></KEYFRAME>
</TRANSITION>
</EDIT>
</EDITS>
<PLAYAUTOS>
<AUTO POSITION=0 VALUE=1>
</PLAYAUTOS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+02>
<AUTO POSITION=0 VALUE=1.000000e+02 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
60,6 → 57,12
 
</AUTO>
</MASKAUTOS>
<CZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</CZOOMAUTOS>
<PZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</PZOOMAUTOS>
</TRACK>
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/tests/alpha2.xml
1,8 → 1,8
<?xml version="1.0"?>
<EDL>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=0.0000000000000000e+00 LOOP_END=5.5670794791666667e+03 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=0.0000000000000000e+00 SELECTION_END=6.6199466666666666e+01 CLIP_TITLE=Program CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=0 ZOOM_SAMPLE=4096 ZOOMY=64 ZOOM_TRACK=64 PREVIEW_START=0.0000000000000000e+00 PREVIEW_END=6.6199466666666666e+01>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=0.0000000000000000e+00 LOOP_END=5.5670794791666667e+03 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=0.0000000000000000e+00 SELECTION_END=6.6199466666666666e+01 CLIP_TITLE=/root/hvirtual/cinelerra/tests/alpha2.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=0 ZOOM_SAMPLE=4096 ZOOMY=64 ZOOM_TRACK=64 PREVIEW_START=0.0000000000000000e+00 PREVIEW_END=6.6199466666666666e+01>
 
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=163 ASSET_COLUMN1=106 AUDIO_MODULE_FRAGMENT=4096 PLAYBACK_READ_LENGTH=131072 SHOW_FADE=0 SHOW_PAN=1 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=1 SHOW_CAMERA=1 SHOW_PROJECTOR=0 SHOW_MODE=0 SHOW_MASK=1 SHOW_CZOOM=0 SHOW_PZOOM=0 AUTO_KEYFRAMES=0 AUTOS_FOLLOW_EDITS=1 BRENDER_START=0.0000000000000000e+00 CROP_X1=0 CROP_Y1=0 CROP_X2=320 CROP_Y2=240 CURRENT_FOLDER="Video Effects" CURSOR_ON_FRAMES=1 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=0 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=193 CWINDOW_YSCROLL=87 CWINDOW_ZOOM=2.500000e-01 DEFAULT_ATRANSITION=Crossfade DEFAULT_VTRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=1.0000000000000000e+00 EDITING_MODE=1 FOLDERLIST_FORMAT=1 HIGHLIGHTED_TRACK=0 LABELS_FOLLOW_EDITS=1 MPEG4_DEBLOCK=0 PLUGINS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 NUDGE_SECONDS=1 TOOL_WINDOW=0 VWINDOW_METER=0 VWINDOW_FOLDER= VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=163 ASSET_COLUMN1=106 AUDIO_MODULE_FRAGMENT=4096 SHOW_FADE=0 SHOW_PAN=1 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=1 SHOW_CAMERA=1 SHOW_PROJECTOR=0 SHOW_MODE=0 SHOW_MASK=1 SHOW_CZOOM=0 SHOW_PZOOM=0 AUTO_KEYFRAMES=0 AUTOS_FOLLOW_EDITS=1 BRENDER_START=0.0000000000000000e+00 CROP_X1=0 CROP_Y1=0 CROP_X2=320 CROP_Y2=240 CURRENT_FOLDER="Video Effects" CURSOR_ON_FRAMES=1 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=0 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=193 CWINDOW_YSCROLL=87 CWINDOW_ZOOM=2.500000e-01 DEFAULT_ATRANSITION=Crossfade DEFAULT_VTRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=1.0000000000000000e+00 EDITING_MODE=1 FOLDERLIST_FORMAT=1 HIGHLIGHTED_TRACK=1 LABELS_FOLLOW_EDITS=1 MPEG4_DEBLOCK=0 PLUGINS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 NUDGE_SECONDS=1 TOOL_WINDOW=0 VWINDOW_METER=0 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
 
<VIDEO INTERPOLATION_TYPE=2 COLORMODEL="YUVA-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970029970029969e+01 FRAMES_PER_FOOT=1.600000e+01 OUTPUTW=720 OUTPUTH=480 ASPECTW=4.000000e+00 ASPECTH=3.000000e+00>
 
30,7 → 30,7
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+02 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
<AUTO POSITION=0 VALUE=5.200000e+01 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
54,8 → 54,8
</PZOOMAUTOS>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=1984 TYPE=1 TITLE=Gradient>
<IN><OUT><ON>
<KEYFRAME POSITION=0 DEFAULT=1><GRADIENT ANGLE=0.0000000000000000e+00 IN_RADIUS=3.1000000000000000e+01 OUT_RADIUS=1.3000000000000000e+01 IN_R=255 IN_G=255 IN_B=255 IN_A=255 OUT_R=255 OUT_G=255 OUT_B=255 OUT_A=255></KEYFRAME>
<IN><OUT><SHOW><ON>
<KEYFRAME POSITION=0 DEFAULT=1><GRADIENT ANGLE=-2.5399999618530273e+01 IN_RADIUS=2.3000000000000000e+01 OUT_RADIUS=5.1000000000000000e+01 IN_R=0 IN_G=46 IN_B=255 IN_A=255 OUT_R=255 OUT_G=238 OUT_B=0 OUT_A=255></KEYFRAME>
</PLUGIN>
</PLUGINSET>
</TRACK>
95,8 → 95,8
</PZOOMAUTOS>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=1984 TYPE=1 TITLE=Gradient>
<IN><OUT><ON>
<KEYFRAME POSITION=0 DEFAULT=1><GRADIENT ANGLE=0.0000000000000000e+00 IN_RADIUS=3.1000000000000000e+01 OUT_RADIUS=1.3000000000000000e+01 IN_R=255 IN_G=255 IN_B=255 IN_A=255 OUT_R=255 OUT_G=255 OUT_B=255 OUT_A=255></KEYFRAME>
<IN><OUT><SHOW><ON>
<KEYFRAME POSITION=0 DEFAULT=1><GRADIENT ANGLE=4.5100002288818359e+01 IN_RADIUS=2.6000000000000000e+01 OUT_RADIUS=7.1000000000000000e+01 IN_R=51 IN_G=255 IN_B=0 IN_A=255 OUT_R=255 OUT_G=12 OUT_B=0 OUT_A=255></KEYFRAME>
</PLUGIN>
</PLUGINSET>
</TRACK>
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/tests/chromakey_feather.xml
1,20 → 1,20
<?xml version="1.0"?>
<EDL>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=0.0000000000000000e+00 LOOP_END=0.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=4.8982266666666668e+01 SELECTION_END=5.6556500000000000e+01 CLIP_TITLE=/home/mov/test.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=1870 ZOOM_SAMPLE=1024 ZOOMY=64 ZOOM_TRACK=64>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=0.0000000000000000e+00 LOOP_END=0.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=4.9578666666666663e+01 SELECTION_END=4.9578666666666663e+01 CLIP_TITLE=/root/hvirtual/cinelerra/tests/chromakey_feather.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=1870 ZOOM_SAMPLE=1024 ZOOMY=64 ZOOM_TRACK=64 PREVIEW_START=0.0000000000000000e+00 PREVIEW_END=1.5755740000000000e+02>
 
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=100 ASSET_COLUMN1=100 AUDIO_MODULE_FRAGMENT=4096 PLAYBACK_READ_LENGTH=131072 SHOW_FADE=0 SHOW_PAN=0 SHOW_PLAY=0 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=0 SHOW_CAMERA=0 SHOW_PROJECTOR=0 SHOW_MODE=0 SHOW_MASK=1 AUTO_KEYFRAMES=1 AUTOS_FOLLOW_EDITS=1 CACHE_SIZE=5 CROP_X1=342 CROP_Y1=262 CROP_X2=343 CROP_Y2=262 CURRENT_FOLDER="Video Effects" CURSOR_ON_FRAMES=0 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=2 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=0 CWINDOW_YSCROLL=0 CWINDOW_ZOOM=1.000000e+00 DEFAULT_TRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=1.0000000000000000e+00 EDITING_MODE=0 FOLDERLIST_FORMAT=1 FORCE_UNIPROCESSOR=0 HIGHLIGHTED_TRACK=0 LABELS_FOLLOW_EDITS=0 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 TOOL_WINDOW=1 VWINDOW_METER=1 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=100 ASSET_COLUMN1=100 AUDIO_MODULE_FRAGMENT=4096 SHOW_FADE=0 SHOW_PAN=0 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=0 SHOW_CAMERA=0 SHOW_PROJECTOR=0 SHOW_MODE=0 SHOW_MASK=1 SHOW_CZOOM=0 SHOW_PZOOM=0 AUTO_KEYFRAMES=1 AUTOS_FOLLOW_EDITS=1 BRENDER_START=0.0000000000000000e+00 CROP_X1=342 CROP_Y1=262 CROP_X2=343 CROP_Y2=262 CURRENT_FOLDER=Media CURSOR_ON_FRAMES=0 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=2 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=0 CWINDOW_YSCROLL=0 CWINDOW_ZOOM=1.000000e+00 DEFAULT_ATRANSITION=Crossfade DEFAULT_VTRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=1.0000000000000000e+00 EDITING_MODE=0 FOLDERLIST_FORMAT=1 HIGHLIGHTED_TRACK=2 LABELS_FOLLOW_EDITS=0 MPEG4_DEBLOCK=0 PLUGINS_FOLLOW_EDITS=0 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 NUDGE_SECONDS=0 TOOL_WINDOW=1 VWINDOW_METER=1 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
 
<VIDEO INTERPOLATION_TYPE=0 COLORMODEL="YUVA-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970029970029969e+01 FRAMES_PER_FOOT=1.600000e+01 TRACKW=720 TRACKH=480 OUTPUTW=720 OUTPUTH=480 ASPECTW=4.000000e+00 ASPECTH=3.000000e+00>
<VIDEO INTERPOLATION_TYPE=0 COLORMODEL="YUVA-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970029970029969e+01 FRAMES_PER_FOOT=1.600000e+01 OUTPUTW=720 OUTPUTH=480 ASPECTW=4.000000e+00 ASPECTH=3.000000e+00>
 
<AUDIO SAMPLERATE=48000 CHANNELS=2 ACHANNEL_ANGLE_0=168 ACHANNEL_ANGLE_1=7>
 
<FOLDER>Clips</FOLDER>
<FOLDER>Media</FOLDER>
<ASSETS>
<ASSET SRC=darkcity2.mov>
<ASSET SRC=/hmov/take1.mov>
<FOLDER>Media</FOLDER>
<FORMAT TYPE="Quicktime for Linux">
<VIDEO HEIGHT=480 WIDTH=720 LAYERS=1 FRAMERATE=2.9970029970029969e+01 VCODEC=jpeg VIDEO_LENGTH=4615 JPEG_QUALITY=100 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 DIVX_BITRATE=910000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=0 PNG_USE_ALPHA=0>
<FORMAT TYPE="Quicktime for Linux" USE_HEADER=1>
<VIDEO HEIGHT=480 WIDTH=720 LAYERS=1 FRAMERATE=2.9970029970029969e+01 VCODEC=jpeg VIDEO_LENGTH=4615 JPEG_QUALITY=100 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 VMPEG_SEQ_CODES=0 DIVX_BITRATE=910000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=0 DIVX_USE_DEBLOCKING=1 MS_BITRATE=1000000 MS_BITRATE_TOLERANCE=500000 MS_INTERLACED=0 MS_QUANTIZATION=10 MS_GOP_SIZE=45 MS_FIX_BITRATE=1 PNG_USE_ALPHA=0>
</ASSET>
</ASSETS>
 
26,23 → 26,20
<PRESENTATIONS>
</PRESENTATIONS>
 
<TRACK RECORD=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TRACK RECORD=1 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TITLE>Video 3</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=1468></EDIT>
<EDIT STARTSOURCE=1468 CHANNEL=0 LENGTH=128><FILE SRC=darkcity2.mov></EDIT>
<EDIT STARTSOURCE=1271 CHANNEL=0 LENGTH=59><FILE SRC=darkcity2.mov></EDIT>
<EDIT STARTSOURCE=2077 CHANNEL=0 LENGTH=40><FILE SRC=darkcity2.mov></EDIT>
<EDIT STARTSOURCE=1468 CHANNEL=0 LENGTH=128><FILE SRC=/hmov/take1.mov></EDIT>
<EDIT STARTSOURCE=1271 CHANNEL=0 LENGTH=59><FILE SRC=/hmov/take1.mov></EDIT>
<EDIT STARTSOURCE=2077 CHANNEL=0 LENGTH=40><FILE SRC=/hmov/take1.mov></EDIT>
</EDITS>
<PLAYAUTOS>
<AUTO POSITION=0 VALUE=1>
</PLAYAUTOS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+02>
<AUTO POSITION=0 VALUE=1.000000e+02 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
68,32 → 65,32
 
</AUTO>
</MASKAUTOS>
<PLUGINSET>
<CZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</CZOOMAUTOS>
<PZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</PZOOMAUTOS>
<PLUGINSET RECORD=1>
</PLUGINSET>
<PLUGINSET>
</PLUGINSET>
</TRACK>
 
 
 
<TRACK RECORD=0 GANG=1 DRAW=1 EXPAND=1 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TRACK RECORD=0 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=1 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TITLE>Video 1</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=1596><FILE SRC=darkcity2.mov></EDIT>
<EDIT STARTSOURCE=1271 CHANNEL=0 LENGTH=59><FILE SRC=darkcity2.mov></EDIT>
<EDIT STARTSOURCE=2077 CHANNEL=0 LENGTH=48><FILE SRC=darkcity2.mov></EDIT>
<EDIT STARTSOURCE=1596 CHANNEL=0 LENGTH=3019><FILE SRC=darkcity2.mov></EDIT>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=1596><FILE SRC=/hmov/take1.mov></EDIT>
<EDIT STARTSOURCE=1271 CHANNEL=0 LENGTH=59><FILE SRC=/hmov/take1.mov></EDIT>
<EDIT STARTSOURCE=2077 CHANNEL=0 LENGTH=48><FILE SRC=/hmov/take1.mov></EDIT>
<EDIT STARTSOURCE=1596 CHANNEL=0 LENGTH=3019><FILE SRC=/hmov/take1.mov></EDIT>
</EDITS>
<PLAYAUTOS>
<AUTO POSITION=0 VALUE=1>
<AUTO POSITION=1468 VALUE=1>
</PLAYAUTOS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+02>
<AUTO POSITION=0 VALUE=1.000000e+02 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
109,45 → 106,48
 
</AUTO>
</MASKAUTOS>
<PLUGINSET>
<PLUGIN STARTPROJECT=0 LENGTH=1442 TYPE=0 TITLE=>
<CZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</CZOOMAUTOS>
<PZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</PZOOMAUTOS>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=1442 TYPE=0 TITLE=>
<IN><OUT><ON>
<KEYFRAME POSITION=0></KEYFRAME>
<KEYFRAME POSITION=0 DEFAULT=1></KEYFRAME>
</PLUGIN>
<PLUGIN STARTPROJECT=1442 LENGTH=286 TYPE=1 TITLE="Chroma key">
<PLUGIN LENGTH=286 TYPE=1 TITLE="Chroma key">
<IN><OUT><ON>
<KEYFRAME POSITION=0><CHROMAKEY HUE=2.214000e+02 VALUE=1.000000e-01 THRESHOLD=1.000000e+02 SLOPE=0.000000e+00 USE_VALUE=0></KEYFRAME>
<KEYFRAME POSITION=1442 DEFAULT=1><CHROMAKEY HUE=2.214000e+02 VALUE=1.000000e-01 THRESHOLD=1.000000e+02 SLOPE=0.000000e+00 USE_VALUE=0></KEYFRAME>
</PLUGIN>
</PLUGINSET>
<PLUGINSET>
<PLUGIN STARTPROJECT=0 LENGTH=1468 TYPE=0 TITLE=>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=1468 TYPE=0 TITLE=>
<IN><OUT><ON>
<KEYFRAME POSITION=0></KEYFRAME>
<KEYFRAME POSITION=0 DEFAULT=1></KEYFRAME>
</PLUGIN>
<PLUGIN STARTPROJECT=1468 LENGTH=227 TYPE=1 TITLE=Blur>
<IN><OUT><SHOW><ON>
<KEYFRAME POSITION=0><BLUR VERTICAL=1 HORIZONTAL=1 RADIUS=27 R=0 G=0 B=0 A=1></KEYFRAME>
<PLUGIN LENGTH=227 TYPE=1 TITLE=Blur>
<IN><OUT><ON>
<KEYFRAME POSITION=1468 DEFAULT=1><BLUR VERTICAL=1 HORIZONTAL=1 RADIUS=27 R=0 G=0 B=0 A=1></KEYFRAME>
</PLUGIN>
</PLUGINSET>
</TRACK>
 
 
 
<TRACK RECORD=0 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TRACK RECORD=0 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TITLE>Video 2</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=1468></EDIT>
<EDIT STARTSOURCE=1596 CHANNEL=0 LENGTH=227><FILE SRC=darkcity2.mov></EDIT>
<EDIT STARTSOURCE=1596 CHANNEL=0 LENGTH=227><FILE SRC=/hmov/take1.mov></EDIT>
</EDITS>
<PLAYAUTOS>
<AUTO POSITION=0 VALUE=1>
</PLAYAUTOS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+02>
<AUTO POSITION=0 VALUE=1.000000e+02 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=2.610000e+02 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
163,14 → 163,20
 
</AUTO>
</MASKAUTOS>
<PLUGINSET>
<PLUGIN STARTPROJECT=0 LENGTH=3064 TYPE=0 TITLE=>
<CZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</CZOOMAUTOS>
<PZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</PZOOMAUTOS>
<PLUGINSET RECORD=1>
<PLUGIN LENGTH=3064 TYPE=0 TITLE=>
<IN><OUT><ON>
<KEYFRAME POSITION=0></KEYFRAME>
<KEYFRAME POSITION=0 DEFAULT=1></KEYFRAME>
</PLUGIN>
<PLUGIN STARTPROJECT=3064 LENGTH=227 TYPE=1 TITLE="Chroma key">
<PLUGIN LENGTH=227 TYPE=1 TITLE="Chroma key">
<IN><OUT><ON>
<KEYFRAME POSITION=0><CHROMAKEY HUE=2.214000e+02 VALUE=1.000000e-01 THRESHOLD=1.000000e+02 SLOPE=0.000000e+00 USE_VALUE=0></KEYFRAME>
<KEYFRAME POSITION=3064 DEFAULT=1><CHROMAKEY HUE=2.214000e+02 VALUE=1.000000e-01 THRESHOLD=1.000000e+02 SLOPE=0.000000e+00 USE_VALUE=0></KEYFRAME>
</PLUGIN>
</PLUGINSET>
</TRACK>
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/tests/shift_keyframes.xml
1,8 → 1,8
<?xml version="1.0"?>
<EDL>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=4.0000000000000000e+00 LOOP_END=4.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=8.8746666666666670e+01 SELECTION_END=8.8746666666666670e+01 CLIP_TITLE=reflection.mov CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=0 ZOOM_SAMPLE=16384 ZOOMY=64 ZOOM_TRACK=64 PREVIEW_START=0.0000000000000000e+00 PREVIEW_END=2.1641620000000000e+02>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=4.0000000000000000e+00 LOOP_END=4.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=8.8746666666666670e+01 SELECTION_END=8.8746666666666670e+01 CLIP_TITLE=/root/hvirtual/cinelerra/tests/shift_keyframes.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=0 ZOOM_SAMPLE=16384 ZOOMY=64 ZOOM_TRACK=64 PREVIEW_START=0.0000000000000000e+00 PREVIEW_END=2.1641620000000000e+02>
 
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=163 ASSET_COLUMN1=106 AUDIO_MODULE_FRAGMENT=4096 PLAYBACK_READ_LENGTH=131072 SHOW_FADE=1 SHOW_PAN=0 SHOW_PLAY=0 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=0 SHOW_CAMERA=1 SHOW_PROJECTOR=0 SHOW_MODE=1 SHOW_MASK=0 SHOW_CZOOM=0 SHOW_PZOOM=0 AUTO_KEYFRAMES=1 AUTOS_FOLLOW_EDITS=1 CACHE_SIZE=5 CROP_X1=0 CROP_Y1=0 CROP_X2=320 CROP_Y2=240 CURRENT_FOLDER="Video Effects" CURSOR_ON_FRAMES=0 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=3 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=24 CWINDOW_YSCROLL=-39 CWINDOW_ZOOM=1.000000e+00 DEFAULT_TRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=1.0000000000000001e-01 EDITING_MODE=1 FOLDERLIST_FORMAT=1 FORCE_UNIPROCESSOR=0 HIGHLIGHTED_TRACK=2 LABELS_FOLLOW_EDITS=1 PLUGINS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 TOOL_WINDOW=1 VWINDOW_METER=0 VWINDOW_FOLDER= VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=163 ASSET_COLUMN1=106 SHOW_FADE=1 SHOW_PAN=0 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=0 SHOW_CAMERA=1 SHOW_PROJECTOR=0 SHOW_MODE=1 SHOW_MASK=0 SHOW_CZOOM=0 SHOW_PZOOM=0 AUTO_KEYFRAMES=1 AUTOS_FOLLOW_EDITS=1 BRENDER_START=1.6820804000000001e+03 CROP_X1=0 CROP_Y1=0 CROP_X2=320 CROP_Y2=240 CURRENT_FOLDER=Media CURSOR_ON_FRAMES=0 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=3 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=24 CWINDOW_YSCROLL=-39 CWINDOW_ZOOM=1.000000e+00 DEFAULT_ATRANSITION=Crossfade DEFAULT_VTRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=1.0000000000000001e-01 EDITING_MODE=1 FOLDERLIST_FORMAT=1 HIGHLIGHTED_TRACK=2 LABELS_FOLLOW_EDITS=1 MPEG4_DEBLOCK=0 PLUGINS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 NUDGE_SECONDS=1 TOOL_WINDOW=1 VWINDOW_METER=0 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
 
<VIDEO INTERPOLATION_TYPE=0 COLORMODEL="YUV-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970029970029969e+01 FRAMES_PER_FOOT=1.600000e+01 OUTPUTW=720 OUTPUTH=480 ASPECTW=4.000000e+00 ASPECTH=3.000000e+00>
 
11,11 → 11,11
<FOLDER>Clips</FOLDER>
<FOLDER>Media</FOLDER>
<ASSETS>
<ASSET SRC=/home/mov/reflection.mov>
<ASSET SRC=/hmov/take1.mov>
<FOLDER>Media</FOLDER>
<FORMAT TYPE="Quicktime for Linux">
<FORMAT TYPE="Quicktime for Linux" USE_HEADER=1>
<AUDIO CHANNELS=2 RATE=48000 BITS=24 BYTE_ORDER=0 SIGNED=0 HEADER=0 DITHER=0 ACODEC=twos AUDIO_LENGTH=10387456 AMPEG_BITRATE=256 AMPEG_DERIVATIVE=3 VORBIS_VBR=0 VORBIS_MIN_BITRATE=-1 VORBIS_BITRATE=128000 VORBIS_MAX_BITRATE=-1 MP3_BITRATE=256000>
<VIDEO HEIGHT=480 WIDTH=720 LAYERS=1 FRAMERATE=2.9970029970029969e+01 VCODEC=jpeg VIDEO_LENGTH=6486 JPEG_QUALITY=100 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 DIVX_BITRATE=2000000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=1 MS_BITRATE=1000000 MS_QUANTIZATION=10 MS_GOP_SIZE=45 MS_FIX_BITRATE=1 PNG_USE_ALPHA=0>
<VIDEO HEIGHT=480 WIDTH=720 LAYERS=1 FRAMERATE=2.9970029970029969e+01 VCODEC=jpeg VIDEO_LENGTH=6486 JPEG_QUALITY=100 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 VMPEG_SEQ_CODES=0 DIVX_BITRATE=2000000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=1 DIVX_USE_DEBLOCKING=1 MS_BITRATE=1000000 MS_BITRATE_TOLERANCE=500000 MS_INTERLACED=0 MS_QUANTIZATION=10 MS_GOP_SIZE=45 MS_FIX_BITRATE=1 PNG_USE_ALPHA=0>
</ASSET>
</ASSETS>
 
27,16 → 27,13
<PRESENTATIONS>
</PRESENTATIONS>
 
<TRACK RECORD=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TRACK RECORD=1 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TITLE>Video 1</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=1493></EDIT>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=6486><FILE SRC=/home/mov/reflection.mov></EDIT>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=6486><FILE SRC=/hmov/take1.mov></EDIT>
</EDITS>
<PLAYAUTOS>
<AUTO POSITION=0 VALUE=1>
</PLAYAUTOS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
72,17 → 69,14
 
 
 
<TRACK RECORD=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=AUDIO>
<TRACK RECORD=1 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=AUDIO>
 
<TITLE>Audio 1</TITLE>
</TITLE TYPE=AUDIO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=2392064></EDIT>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=10387456><FILE SRC=/home/mov/reflection.mov></EDIT>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=10387456><FILE SRC=/hmov/take1.mov></EDIT>
</EDITS>
<PLAYAUTOS>
<AUTO POSITION=0 VALUE=1>
</PLAYAUTOS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
96,17 → 90,14
 
 
 
<TRACK RECORD=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=AUDIO>
<TRACK RECORD=1 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=AUDIO>
 
<TITLE>Audio 2</TITLE>
</TITLE TYPE=AUDIO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=2392064></EDIT>
<EDIT STARTSOURCE=0 CHANNEL=1 LENGTH=10387456><FILE SRC=/home/mov/reflection.mov></EDIT>
<EDIT STARTSOURCE=0 CHANNEL=1 LENGTH=10387456><FILE SRC=/hmov/take1.mov></EDIT>
</EDITS>
<PLAYAUTOS>
<AUTO POSITION=0 VALUE=1>
</PLAYAUTOS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/tests/slide.xml
1,21 → 1,21
<?xml version="1.0"?>
<EDL>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=8.0000000000000000e+00 LOOP_END=8.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=9.3827066572839598e+01 SELECTION_END=9.3827066572839598e+01 CLIP_TITLE=/home/root/cinelerra/cinelerra/tests/slide.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=0 ZOOM_SAMPLE=16384 ZOOMY=64 ZOOM_TRACK=64>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=8.0000000000000000e+00 LOOP_END=8.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=9.3827066572839598e+01 SELECTION_END=9.3827066572839598e+01 CLIP_TITLE=/root/hvirtual/cinelerra/tests/slide.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=0 ZOOM_SAMPLE=16384 ZOOMY=64 ZOOM_TRACK=64 PREVIEW_START=0.0000000000000000e+00 PREVIEW_END=1.8261576666666667e+02>
 
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=100 ASSET_COLUMN1=100 AUDIO_MODULE_FRAGMENT=4096 PLAYBACK_READ_LENGTH=131072 SHOW_FADE=0 SHOW_PAN=0 SHOW_PLAY=0 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=0 SHOW_CAMERA=0 SHOW_PROJECTOR=0 SHOW_MODE=0 SHOW_MASK=0 AUTO_KEYFRAMES=0 AUTOS_FOLLOW_EDITS=1 CACHE_SIZE=5 CROP_X1=342 CROP_Y1=262 CROP_X2=343 CROP_Y2=262 CURRENT_FOLDER="Video Transitions" CURSOR_ON_FRAMES=0 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=0 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=0 CWINDOW_YSCROLL=0 CWINDOW_ZOOM=1.000000e+00 DEFAULT_TRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=5.0000000000000000e+00 EDITING_MODE=1 FOLDERLIST_FORMAT=1 FORCE_UNIPROCESSOR=0 HIGHLIGHTED_TRACK=0 LABELS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 TOOL_WINDOW=1 VWINDOW_METER=1 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=100 ASSET_COLUMN1=100 SHOW_FADE=0 SHOW_PAN=0 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=0 SHOW_CAMERA=0 SHOW_PROJECTOR=0 SHOW_MODE=0 SHOW_MASK=0 SHOW_CZOOM=0 SHOW_PZOOM=0 AUTO_KEYFRAMES=0 AUTOS_FOLLOW_EDITS=1 BRENDER_START=1.6820804000000001e+03 CROP_X1=342 CROP_Y1=262 CROP_X2=343 CROP_Y2=262 CURRENT_FOLDER=Media CURSOR_ON_FRAMES=0 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=0 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=0 CWINDOW_YSCROLL=0 CWINDOW_ZOOM=1.000000e+00 DEFAULT_ATRANSITION=Crossfade DEFAULT_VTRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=5.0000000000000000e+00 EDITING_MODE=1 FOLDERLIST_FORMAT=1 HIGHLIGHTED_TRACK=0 LABELS_FOLLOW_EDITS=1 MPEG4_DEBLOCK=0 PLUGINS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 NUDGE_SECONDS=1 TOOL_WINDOW=1 VWINDOW_METER=1 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
 
<VIDEO INTERPOLATION_TYPE=0 COLORMODEL="YUV-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970030000000001e+01 FRAMES_PER_FOOT=1.600000e+01 TRACKW=720 TRACKH=480 OUTPUTW=720 OUTPUTH=480 ASPECTW=4.000000e+00 ASPECTH=3.000000e+00>
<VIDEO INTERPOLATION_TYPE=0 COLORMODEL="YUV-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970029970029969e+01 FRAMES_PER_FOOT=1.600000e+01 OUTPUTW=720 OUTPUTH=480 ASPECTW=4.000000e+00 ASPECTH=3.000000e+00>
 
<AUDIO SAMPLERATE=48000 CHANNELS=2 ACHANNEL_ANGLE_0=168 ACHANNEL_ANGLE_1=7>
 
<FOLDER>Clips</FOLDER>
<FOLDER>Media</FOLDER>
<ASSETS>
<ASSET SRC=/home/mov/reflection.mov>
<ASSET SRC=/hmov/take1.mov>
<FOLDER>Media</FOLDER>
<FORMAT TYPE="Quicktime for Linux">
<AUDIO CHANNELS=2 RATE=48000 BITS=24 BYTE_ORDER=0 SIGNED=0 HEADER=0 DITHER=0 ACODEC=twos AUDIO_LENGTH=10387456 AMPEG_BITRATE=256 AMPEG_DERIVATIVE=3 VORBIS_MIN_BITRATE=-1 VORBIS_BITRATE=128000 VORBIS_MAX_BITRATE=-1>
<VIDEO HEIGHT=480 WIDTH=720 LAYERS=1 FRAMERATE=2.9970029970029969e+01 VCODEC=jpeg VIDEO_LENGTH=6486 JPEG_QUALITY=100 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 DIVX_BITRATE=910000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=0 PNG_USE_ALPHA=0>
<FORMAT TYPE="Quicktime for Linux" USE_HEADER=1>
<AUDIO CHANNELS=2 RATE=48000 BITS=24 BYTE_ORDER=0 SIGNED=0 HEADER=0 DITHER=0 ACODEC=twos AUDIO_LENGTH=10387456 AMPEG_BITRATE=256 AMPEG_DERIVATIVE=3 VORBIS_VBR=0 VORBIS_MIN_BITRATE=-1 VORBIS_BITRATE=128000 VORBIS_MAX_BITRATE=-1 MP3_BITRATE=256000>
<VIDEO HEIGHT=480 WIDTH=720 LAYERS=1 FRAMERATE=2.9970029970029969e+01 VCODEC=jpeg VIDEO_LENGTH=6486 JPEG_QUALITY=100 VMPEG_IFRAME_DISTANCE=45 VMPEG_BFRAME_DISTANCE=0 VMPEG_PROGRESSIVE=0 VMPEG_DENOISE=1 VMPEG_BITRATE=1000000 VMPEG_DERIVATIVE=1 VMPEG_QUANTIZATION=15 VMPEG_CMODEL=0 VMPEG_FIX_BITRATE=0 VMPEG_SEQ_CODES=0 DIVX_BITRATE=910000 DIVX_RC_PERIOD=50 DIVX_RC_REACTION_RATIO=45 DIVX_RC_REACTION_PERIOD=10 DIVX_MAX_KEY_INTERVAL=250 DIVX_MAX_QUANTIZER=31 DIVX_MIN_QUANTIZER=1 DIVX_QUANTIZER=15 DIVX_QUALITY=5 DIVX_FIX_BITRATE=0 DIVX_USE_DEBLOCKING=1 MS_BITRATE=1000000 MS_BITRATE_TOLERANCE=500000 MS_INTERLACED=0 MS_QUANTIZATION=10 MS_GOP_SIZE=45 MS_FIX_BITRATE=1 PNG_USE_ALPHA=0>
</ASSET>
</ASSETS>
 
27,25 → 27,22
<PRESENTATIONS>
</PRESENTATIONS>
 
<TRACK RECORD=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TRACK RECORD=1 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=VIDEO>
<TITLE>Video 1</TITLE>
</TITLE TYPE=VIDEO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=2598><FILE SRC=/home/mov/reflection.mov></EDIT>
<EDIT STARTSOURCE=3611 CHANNEL=0 LENGTH=2875><FILE SRC=/home/mov/reflection.mov>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=2598><FILE SRC=/hmov/take1.mov></EDIT>
<EDIT STARTSOURCE=3611 CHANNEL=0 LENGTH=2875><FILE SRC=/hmov/take1.mov>
<TRANSITION TITLE=Slide LENGTH=150><ON><KEYFRAME POSITION=0></KEYFRAME>
<KEYFRAME POSITION=0></KEYFRAME>
</TRANSITION>
</EDIT>
</EDITS>
<PLAYAUTOS>
<AUTO POSITION=0 VALUE=1>
</PLAYAUTOS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+02>
<AUTO POSITION=0 VALUE=1.000000e+02 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<CAMERAAUTOS>
<AUTO POSITION=0 CENTER_X=0.000000e+00 CENTER_Y=0.000000e+00 CENTER_Z=1.000000e+00 CONTROL_IN_X=0.000000e+00 CONTROL_IN_Y=0.000000e+00 CONTROL_IN_Z=0.000000e+00 CONTROL_OUT_X=0.000000e+00 CONTROL_OUT_Y=0.000000e+00 CONTROL_OUT_Z=0.000000e+00>
61,6 → 58,12
 
</AUTO>
</MASKAUTOS>
<CZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</CZOOMAUTOS>
<PZOOMAUTOS>
<AUTO POSITION=0 VALUE=1.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</PZOOMAUTOS>
</TRACK>
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/tests/audio_transition.xml
1,20 → 1,20
<?xml version="1.0"?>
<EDL>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=8.0000000000000000e+00 LOOP_END=8.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=1.3938474376417234e+03 SELECTION_END=1.3938474376417234e+03 CLIP_TITLE=/home/root/cinelerra/cinelerra/tests/audio_transition.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=14614 ZOOM_SAMPLE=4096 ZOOMY=64 ZOOM_TRACK=64>
<LOCALSESSION IN_POINT=-1.0000000000000000e+00 LOOP_PLAYBACK=0 LOOP_START=8.0000000000000000e+00 LOOP_END=8.0000000000000000e+00 OUT_POINT=-1.0000000000000000e+00 SELECTION_START=1.3919573333333333e+03 SELECTION_END=1.3919573333333333e+03 CLIP_TITLE=/root/hvirtual/cinelerra/tests/audio_transition.xml CLIP_NOTES="Hello world" FOLDER=Clips TRACK_START=0 VIEW_START=1368 ZOOM_SAMPLE=32768 ZOOMY=64 ZOOM_TRACK=64 PREVIEW_START=0.0000000000000000e+00 PREVIEW_END=3.1171673469387756e+03>
 
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=100 ASSET_COLUMN1=100 AUDIO_MODULE_FRAGMENT=4096 PLAYBACK_READ_LENGTH=131072 SHOW_FADE=0 SHOW_PAN=0 SHOW_PLAY=0 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=0 SHOW_CAMERA=0 SHOW_PROJECTOR=0 SHOW_MODE=0 SHOW_MASK=0 AUTO_KEYFRAMES=0 AUTOS_FOLLOW_EDITS=1 CACHE_SIZE=5 CROP_X1=342 CROP_Y1=262 CROP_X2=343 CROP_Y2=262 CURRENT_FOLDER="Audio Transitions" CURSOR_ON_FRAMES=0 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=0 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=0 CWINDOW_YSCROLL=0 CWINDOW_ZOOM=1.000000e+00 DEFAULT_TRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=1.0000000000000000e+00 EDITING_MODE=1 FOLDERLIST_FORMAT=1 FORCE_UNIPROCESSOR=0 HIGHLIGHTED_TRACK=1 LABELS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 TOOL_WINDOW=1 VWINDOW_METER=1 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
<SESSION ASSETLIST_FORMAT=1 ASSET_COLUMN0=100 ASSET_COLUMN1=100 AUDIO_MODULE_FRAGMENT=16384 SHOW_FADE=0 SHOW_PAN=0 SHOW_MUTE=0 SHOW_TRANSITIONS=1 SHOW_PLUGINS=0 SHOW_CAMERA=0 SHOW_PROJECTOR=0 SHOW_MODE=0 SHOW_MASK=0 SHOW_CZOOM=0 SHOW_PZOOM=0 AUTO_KEYFRAMES=0 AUTOS_FOLLOW_EDITS=1 BRENDER_START=0.0000000000000000e+00 CROP_X1=342 CROP_Y1=262 CROP_X2=343 CROP_Y2=262 CURRENT_FOLDER=Media CURSOR_ON_FRAMES=0 CWINDOW_DEST=0 CWINDOW_MASK=0 CWINDOW_METER=0 CWINDOW_OPERATION=0 CWINDOW_SCROLLBARS=0 CWINDOW_XSCROLL=0 CWINDOW_YSCROLL=0 CWINDOW_ZOOM=1.000000e+00 DEFAULT_ATRANSITION=Crossfade DEFAULT_VTRANSITION=Dissolve DEFAULT_TRANSITION_LENGTH=1.0000000000000000e+00 EDITING_MODE=1 FOLDERLIST_FORMAT=1 HIGHLIGHTED_TRACK=1 LABELS_FOLLOW_EDITS=1 MPEG4_DEBLOCK=0 PLUGINS_FOLLOW_EDITS=1 PLAYBACK_PRELOAD=0 SAFE_REGIONS=0 SHOW_TITLES=1 TEST_PLAYBACK_EDITS=1 TIME_FORMAT=0 NUDGE_SECONDS=1 TOOL_WINDOW=1 VWINDOW_METER=1 VWINDOW_FOLDER=VWINDOW_SOURCE=-1 VWINDOW_SOURCE=-1 VWINDOW_ZOOM=1.000000e+00>
 
<VIDEO INTERPOLATION_TYPE=1 COLORMODEL="YUV-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970030000000001e+01 FRAMES_PER_FOOT=1.600000e+01 TRACKW=720 TRACKH=480 OUTPUTW=720 OUTPUTH=376 ASPECTW=1.600000e+01 ASPECTH=9.000000e+00>
<VIDEO INTERPOLATION_TYPE=1 COLORMODEL="YUV-8 Bit" CHANNELS=1 VCHANNEL_X_0=0 VCHANNEL_Y_0=0 FRAMERATE=2.9970029970029969e+01 FRAMES_PER_FOOT=1.600000e+01 OUTPUTW=720 OUTPUTH=376 ASPECTW=1.600000e+01 ASPECTH=9.000000e+00>
 
<AUDIO SAMPLERATE=44100 CHANNELS=2 ACHANNEL_ANGLE_0=168 ACHANNEL_ANGLE_1=7>
<AUDIO SAMPLERATE=48000 CHANNELS=2 ACHANNEL_ANGLE_0=168 ACHANNEL_ANGLE_1=7>
 
<FOLDER>Clips</FOLDER>
<FOLDER>Media</FOLDER>
<ASSETS>
<ASSET SRC=/home/mov/bezer.wav>
<ASSET SRC=/hmov/audio.wav>
<FOLDER>Media</FOLDER>
<FORMAT TYPE="Microsoft WAV">
<AUDIO CHANNELS=2 RATE=44100 BITS=16 BYTE_ORDER=0 SIGNED=1 HEADER=44 DITHER=0 ACODEC=twos AUDIO_LENGTH=151622856 AMPEG_BITRATE=256 AMPEG_DERIVATIVE=3 VORBIS_MIN_BITRATE=-1 VORBIS_BITRATE=128000 VORBIS_MAX_BITRATE=-1>
<FORMAT TYPE="Microsoft WAV" USE_HEADER=1>
<AUDIO CHANNELS=2 RATE=48000 BITS=16 BYTE_ORDER=0 SIGNED=1 HEADER=44 DITHER=0 ACODEC=twos AUDIO_LENGTH=126943866 AMPEG_BITRATE=256 AMPEG_DERIVATIVE=3 VORBIS_VBR=0 VORBIS_MIN_BITRATE=-1 VORBIS_BITRATE=128000 VORBIS_MAX_BITRATE=-1 MP3_BITRATE=256000>
</ASSET>
</ASSETS>
 
26,22 → 26,23
<PRESENTATIONS>
</PRESENTATIONS>
 
<TRACK RECORD=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=AUDIO>
<TRACK RECORD=1 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=AUDIO>
 
<TITLE>Audio 1</TITLE>
</TITLE TYPE=AUDIO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=61603839><FILE SRC=/home/mov/bezer.wav></EDIT>
<EDIT STARTSOURCE=75759615 CHANNEL=0 LENGTH=75863241><FILE SRC=/home/mov/bezer.wav><TRANSITION TITLE=Crossfade LENGTH=44100><ON></TRANSITION></EDIT>
<EDIT STARTSOURCE=0 CHANNEL=0 LENGTH=66813952><FILE SRC=/hmov/audio.wav></EDIT>
<EDIT STARTSOURCE=78369686 CHANNEL=0 LENGTH=86661993><FILE SRC=/hmov/audio.wav>
<TRANSITION TITLE=Crossfade LENGTH=44100><ON><KEYFRAME POSITION=0></KEYFRAME>
<KEYFRAME POSITION=0></KEYFRAME>
</TRANSITION>
</EDIT>
</EDITS>
<PLAYAUTOS>
<AUTO POSITION=0 VALUE=1>
</PLAYAUTOS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=-4.000000e+01>
<AUTO POSITION=0 VALUE=0.000000e+00 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<PANAUTOS>
<AUTO POSITION=0 HANDLE_X=2 HANDLE_Y=40 VALUE0=1.000000e+00 VALUE1=0.000000e+00>
50,22 → 51,23
 
 
 
<TRACK RECORD=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=AUDIO>
<TRACK RECORD=1 NUDGE=0 PLAY=1 GANG=1 DRAW=1 EXPAND=0 TRACK_W=720 TRACK_H=480 TYPE=AUDIO>
 
<TITLE>Audio 2</TITLE>
</TITLE TYPE=AUDIO>
<EDITS>
<EDIT STARTSOURCE=0 CHANNEL=1 LENGTH=61603839><FILE SRC=/home/mov/bezer.wav></EDIT>
<EDIT STARTSOURCE=75759615 CHANNEL=1 LENGTH=75863241><FILE SRC=/home/mov/bezer.wav><TRANSITION TITLE=Crossfade LENGTH=44100><ON></TRANSITION></EDIT>
<EDIT STARTSOURCE=0 CHANNEL=1 LENGTH=66813952><FILE SRC=/hmov/audio.wav></EDIT>
<EDIT STARTSOURCE=78369686 CHANNEL=1 LENGTH=86661993><FILE SRC=/hmov/audio.wav>
<TRANSITION TITLE=Crossfade LENGTH=44100><ON><KEYFRAME POSITION=0></KEYFRAME>
<KEYFRAME POSITION=0></KEYFRAME>
</TRANSITION>
</EDIT>
</EDITS>
<PLAYAUTOS>
<AUTO POSITION=0 VALUE=1>
</PLAYAUTOS>
<MUTEAUTOS>
<AUTO POSITION=0 VALUE=0>
</MUTEAUTOS>
<FADEAUTOS>
<AUTO POSITION=0 VALUE=-4.000000e+01>
<AUTO POSITION=0 VALUE=1.490116e-08 CONTROL_IN_VALUE=0.000000e+00 CONTROL_OUT_VALUE=0.000000e+00 CONTROL_IN_POSITION=0 CONTROL_OUT_POSITION=0>
</FADEAUTOS>
<PANAUTOS>
<AUTO POSITION=0 HANDLE_X=99 HANDLE_Y=44 VALUE0=0.000000e+00 VALUE1=1.000000e+00>
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/Makefile
310,7 → 310,7
-lXv \
-lpthread \
-lm \
$(XXF86VM) \
-lXxf86vm \
-lpng \
-lz \
-ldl
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/CHANGELOG.1.1.9
New file
0,0 → 1,138
Command line option for alternate configure file.
Pinch works if whirl is zero.
Push method replaced by pull method in virtual console.
- less memory
- realtime time domain effects possible
- no distinction between amount to read from disk and amount to send through console
Popup menu instead of text entry for playback fragment size.
Video decimation
Parametric EQ, pitch shift, time stretch have no delay.
Synchronized start of video and audio playback.
Controls can be hidden from compositor.
Mov not improperly detected as OGG Vorbis
- ov_open result also needs testing against first 8 bytes
Fixed histogram crashes due to not all LoadClients being called.
Attach button attaches shared effects properly.
Automatic filename generation doesn't change directory.
Nudge values updated when project rates change.
Background rendering detects nudge change.
Loading an EDL with the CWindow tool followed by loading an EDL without
the CWindow tool crashes less.
PCM format configuration more reliable.
Freeze frame freezes on the exact frame the effect starts
or on the latest keyframe.
Better alignment of fade out in Titler.
Better text entry in titler.
Video overlay effect.
Realtime reverse video and audio.
Loop audio and video effects.
Colorbalance tabulation doesn't leave last entry empty
Zoom menu goes towards center instead of top left of compositor.
Middle mouse button scrolling works when compositor output is smaller than canvas.
Aspect ratio saved in mpeg video.
Default keyframe position stays at 0 after shifting effect right then left.
Batch render from command line without GUI.
Titler reverted to old freetype API.
- 400 less lines of code and better vertical alignment.
- the "stroker" outline looked terrible. Outlines need to be done with a real
outline filter.
Rendering load balancing tests for infinite frame rate.
Frame -> fields optimized for pull console.
Fields -> frame converted to realtime.
Bounds checking in crop entry point.
Credits screen. Send omitted names to broadcast@earthling.net
Memory debug system.
An optimization error in GCC 3.3.2 causes RGB16 colormodels to crash.
Easier changing of the nudge parameters during playback.
 
quicktime: Memory leak in raw.c with temp_rows removed.
RLE decoding
 
libmpeg3: multiple title stream handling and table of contents moved to
absolute offsets
- mpeg3toc takes -a to limit the number of audio streams scanned.
 
 
Patches (Send whining to billg@microsoft.com):
 
 
 
Andraz Tori:
 
locale.diff more language bindings
applied
bctheme_memfix.diff different arraylist handling
applied
cinelerra-gettext-6.diff more language bindings
applied
sharpen.diff engine debug
applied
buttons.diff + buttons_pngs.tar.gz 3 segment replacement for text
rejected.
Why don't you add support for picons in generic buttons
instead of requiring different 3segment bitmaps.
Set real x and y in the initialize() instead of guessing in the constructor.
canvas_cache2.diff picon and rendering cache with preferences rejected.
Make File work without *preferences.
Caching picons should only involve FrameCache and ResourcePixmap.
Picon caching is good. Playback caching is too slow.
Either require a total cache bytes or a total cache items but not both.
libdv yuv->rgb conversion used again.
version_define.diff version macro renamed
applied
dv_in_32khz.diff 12 bit hack for 1394
applied
alsa_fix.diff ALSA API change
applied
crop_crush.diff new crop interface
Partially applied. The corners shouldn't snap to the cursor.
qt_mpeg_cleanup.diff:
Partially applied. The temp rows are needed for packed colormodels.
overlay-speedup5.diff TRANSFER_REPLACE overlay optimization:
applied
maskengine4* mask engine rewrite:
rejected - not SMP compatible
masks_fixes.diff new rerendering test + interpolation rewrite
new rerendering test imported
new interpolation rejected. This needs to be done with the existing API
instead of an orthogonal one. Try confining it to CWindowGUI.
Mask points need to interpolate in every
previous and every next keyframe instead of just the previous.
 
 
David Arendt <admin@prnet.org>
 
xml.diff different xml syntax
rejected. These standards points are ignored in
most every web page anyway, and Cinelerra exports aren't used by
anything else.
render.diff rendering hack
rejected. Command line rendering should run without a GUI and do
batches.
 
 
 
Eric Seigne <eric.seigne@ryxeo.com>
 
french translation imported
 
 
 
ga <ga@kutxa.homeunix.org>
 
drag.diff different drag behavior
rejected. Most people seem to want arbitary dropping with an
option to paste to arbitrary positions.
spanish translation imported
 
 
 
koen muylkens <koen.muylkens@esat.kuleuven.ac.be>
 
newskin-cinelerra.diff - rejected. Move Cinelerra specific settings
from BC_Resources to Theme. Put default values back in BC_Resources so
it can be used by other applications. Need button picons instead of 3
segment button. Make splash screen determined by a default field, set
when the user sets a theme.
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/TESTS
18,8 → 18,13
MJPEG recording with kernel driver
Number of open file descriptors matches reality.
Nudge audio and video.
Change number of tracks shared by a plugin on the fly.
Pan automation
Fade automation
Overlay tracks of different sizes
 
 
 
Background render:
play with effect
detach effect and play
27,6 → 32,8
quit during playback
 
 
 
 
Batch render:
Batch render with and without labels.
Batch render with renderfarm and labels.
36,16 → 43,15
Batch record:
record several batches 1 minute apart.
 
Load all tests in tests directory in succession.
 
 
XMovie:
Load DVD
 
 
Load all tests in tests directory in succession.
 
track_bounce2.xml - should output monaural audio on both speakers.
 
 
 
 
 
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/asset.h
156,11 → 156,12
int mp3_bitrate;
 
 
// Set by package render during file creation. -1 means square pixels.
double aspect_ratio;
 
 
 
 
 
// for jpeg compression
int jpeg_quality;
 
/branches/automake-1_1_5/cinelerra/hvirtual/cinelerra/batchrender.h
6,8 → 6,10
#include "batchrender.inc"
#include "bcdialog.h"
#include "browsebutton.inc"
#include "filexml.inc"
#include "formattools.h"
#include "mwindow.inc"
#include "preferences.inc"
#include "timeentry.h"
 
#define BATCHRENDER_COLUMNS 4
28,7 → 30,7
class BatchRenderJob
{
public:
BatchRenderJob(MWindow *mwindow);
BatchRenderJob(Preferences *preferences);
~BatchRenderJob();
 
void copy_from(BatchRenderJob *src);
44,7 → 46,7
int enabled;
// Amount of time elapsed in last render operation
double elapsed;
MWindow *mwindow;
Preferences *preferences;
};
 
 
58,15 → 60,21
{
public:
BatchRenderThread(MWindow *mwindow);
BatchRenderThread();
void handle_close_event(int result);
BC_Window* new_gui();
 
int test_edl_files();
void calculate_dest_paths(ArrayList<char*> *paths,
Preferences *preferences,
ArrayList<PluginServer*> *plugindb);
 
// Load batch rendering jobs
void load_jobs();
void load_jobs(char *path, Preferences *preferences);
// Not applicable to western civilizations
void save_jobs();
void load_defaults();
void save_defaults();
void save_jobs(char *path);
void load_defaults(Defaults *defaults);
void save_defaults(Defaults *defaults);
// Create path for persistent storage functions
char* create_path(char *string);
void new_job();
75,6 → 83,9
BatchRenderJob* get_current_job();
Asset* get_current_asset();
char* get_current_edl();
// For command line usage
void start_rendering(char *config_path, char *batch_path);
// For GUI usage
void start_rendering();
void stop_rendering();
// Highlight the currently rendering job.
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/renderfarm.C
5,8 → 5,9
#include "edl.h"
#include "filesystem.h"
#include "filexml.h"
#include "language.h"
#include "mutex.h"
#include "mwindow.h"
//#include "mwindow.h"
#include "packagedispatcher.h"
#include "preferences.h"
#include "render.h"
29,13 → 30,9
#include <unistd.h>
 
 
#include <libintl.h>
#define _(String) gettext(String)
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
 
 
RenderFarmServer::RenderFarmServer(MWindow *mwindow,
RenderFarmServer::RenderFarmServer(ArrayList<PluginServer*> *plugindb,
PackageDispatcher *packages,
Preferences *preferences,
int use_local_rate,
46,7 → 43,7
EDL *edl,
BRender *brender)
{
this->mwindow = mwindow;
this->plugindb = plugindb;
this->packages = packages;
this->preferences = preferences;
this->use_local_rate = use_local_rate;
73,7 → 70,7
for(int i = 0; i < preferences->get_enabled_nodes() && !result; i++)
{
client_lock->lock();
RenderFarmServerThread *client = new RenderFarmServerThread(mwindow,
RenderFarmServerThread *client = new RenderFarmServerThread(plugindb,
this,
i);
clients.append(client);
109,12 → 106,12
 
// Waits for requests from every client.
// Joins when the client is finished.
RenderFarmServerThread::RenderFarmServerThread(MWindow *mwindow,
RenderFarmServerThread::RenderFarmServerThread(ArrayList<PluginServer*> *plugindb,
RenderFarmServer *server,
int number)
: Thread()
{
this->mwindow = mwindow;
this->plugindb = plugindb;
this->server = server;
this->number = number;
socket_fd = -1;
467,7 → 464,7
FileXML file;
//printf("RenderFarmServerThread::send_asset 1\n");
 
server->default_asset->write(mwindow->plugindb,
server->default_asset->write(plugindb,
&file,
0,
0);
484,7 → 481,7
FileXML file;
 
// Save the XML
server->edl->save_xml(mwindow->plugindb,
server->edl->save_xml(plugindb,
&file,
0,
0,
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/pluginarray.C
4,6 → 4,7
#include "edlsession.h"
#include "file.h"
#include "keyframe.h"
#include "language.h"
#include "mainprogress.h"
#include "mwindow.h"
#include "mwindowgui.h"
12,10 → 13,6
#include "preferences.h"
#include "bcprogressbox.h"
 
#include <libintl.h>
#define _(String) gettext(String)
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
 
 
 
53,13 → 50,11
this->file = file;
 
cache = new CICache(this->edl, mwindow->preferences, mwindow->plugindb);
//printf("PluginArray::start_plugins 1\n");
buffer_size = get_bufsize();
get_recordable_tracks();
create_modules();
create_buffers();
 
//printf("PluginArray::start_plugins 2\n");
if(!plugin_server->realtime)
{
PluginServer *plugin;
71,11 → 66,10
// start 1 plugin for each track
for(i = 0; i < total_tracks(); i++)
{
//printf("PluginArray::start_plugins 3 %d\n", i);
append(plugin = new PluginServer(*plugin_server));
plugin->set_mwindow(mwindow);
plugin->set_keyframe(keyframe);
plugin->set_module(modules[i]);
plugin->append_module(modules[i]);
plugin->open_plugin(0,
mwindow->preferences,
mwindow->edl,
83,23 → 77,17
-1);
if(i == 0) plugin->set_interactive();
plugin->start_loop(start, end, buffer_size, 1);
//printf("PluginArray::start_plugins 4\n");
}
}
else
{
// ============================ multichannel
// start 1 plugin for all tracks
//printf("PluginArray::start_plugins 5\n");
append(plugin = new PluginServer(*plugin_server));
//printf("PluginArray::start_plugins 4\n");
plugin->set_mwindow(mwindow);
//printf("PluginArray::start_plugins 4\n");
plugin->set_keyframe(keyframe);
//printf("PluginArray::start_plugins 4\n");
for(i = 0; i < total_tracks(); i++)
plugin->set_module(modules[i]);
//printf("PluginArray::start_plugins 4\n");
plugin->append_module(modules[i]);
plugin->open_plugin(0,
mwindow->preferences,
mwindow->edl,
107,9 → 95,7
-1);
// set one plugin for progress bars
plugin->set_interactive();
//printf("PluginArray::start_plugins 4\n");
plugin->start_loop(start, end, buffer_size, total_tracks());
//printf("PluginArray::start_plugins 6\n");
}
 
//printf("PluginArray::start_plugins 5\n");
128,14 → 114,13
append(plugin = new PluginServer(*plugin_server));
plugin->set_mwindow(mwindow);
plugin->set_keyframe(keyframe);
plugin->append_module(modules[i]);
plugin->open_plugin(0,
mwindow->preferences,
mwindow->edl,
0,
-1);
plugin->init_realtime(0, 1, get_bufsize());
// Plugin loads configuration on its own
// plugin->get_configuration_change(plugin_data);
}
}
else
145,14 → 130,14
append(plugin = new PluginServer(*plugin_server));
plugin->set_mwindow(mwindow);
plugin->set_keyframe(keyframe);
for(i = 0; i < total_tracks(); i++)
plugin->append_module(modules[i]);
plugin->open_plugin(0,
mwindow->preferences,
mwindow->edl,
0,
-1);
plugin->init_realtime(0, total_tracks(), get_bufsize());
// Plugin loads configuration on its own
// plugin->get_configuration_change(plugin_data);
}
}
//printf("PluginArray::start_plugins 8\n");
171,18 → 156,15
 
done = 0; // for when done
error = 0;
//printf("PluginArray::run_plugins 1\n");
if(plugin_server->realtime)
{
int64_t len;
MainProgressBar *progress;
char string[BCTEXTLEN], string2[BCTEXTLEN];
 
//printf("PluginArray::run_plugins 2\n");
sprintf(string, _("%s..."), plugin_server->title);
progress = mwindow->mainprogress->start_progress(string, end - start);
 
//printf("PluginArray::run_plugins 3\n");
for(int current_position = start;
current_position < end && !done && !error;
current_position += len)
190,25 → 172,21
len = buffer_size;
if(current_position + len > end) len = end - current_position;
 
//printf("PluginArray::run_plugins 4\n");
// Arm buffers
for(i = 0; i < total_tracks(); i++)
{
load_module(i, current_position, len);
}
//printf("PluginArray::run_plugins 5\n");
// // Arm buffers
// for(i = 0; i < total_tracks(); i++)
// {
// load_module(i, current_position, len);
// }
 
// Process in plugin
// Process in plugin. This pulls data from the modules
for(i = 0; i < total; i++)
{
process_realtime(i, current_position, len);
}
//printf("PluginArray::run_plugins 6 %d\n", len);
 
// Write to file
error = write_buffers(len);
done = progress->update(current_position - start + len);
//printf("PluginArray::run_plugins 7 %d %d %d %d\n", error, done, current_position, end);
}
 
progress->get_time(string2);
219,7 → 197,6
mwindow->gui->lock_window();
mwindow->gui->show_message(string2, BLACK);
mwindow->gui->unlock_window();
//printf("PluginArray::run_plugins 8\n");
}
else
{
230,16 → 207,13
{
for(i = 0; i < total; i++)
{
//printf("PluginArray::run_plugins 9 %d\n", i);
write_length = 0;
done += process_loop(i, write_length);
//printf("PluginArray::run_plugins 10 %d\n", write_length);
}
 
 
if(write_length)
error = write_buffers(write_length);
//printf("PluginArray::run_plugins 11 %d\n", write_length);
}
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/patchgui.h
39,7 → 39,7
virtual int update(int x, int y);
virtual void synchronize_fade(float change) {};
void synchronize_faders(float change, int audio, int video);
char* calculate_nudge_text();
char* calculate_nudge_text(int *changed);
void set_nudge_value(char *string);
 
MWindow *mwindow;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/renderfarm.h
10,6 → 10,7
#include "mutex.inc"
#include "mwindow.inc"
#include "packagedispatcher.inc"
#include "pluginserver.inc"
#include "preferences.inc"
#include "render.inc"
#include "renderfarm.inc"
98,7 → 99,7
{
public:
// MWindow is required to get the plugindb to save the EDL.
RenderFarmServer(MWindow *mwindow,
RenderFarmServer(ArrayList<PluginServer*> *plugindb,
PackageDispatcher *packages,
Preferences *preferences,
int use_local_rate,
121,7 → 122,8
 
 
ArrayList<RenderFarmServerThread*> clients;
MWindow *mwindow;
ArrayList<PluginServer*> *plugindb;
// MWindow *mwindow;
PackageDispatcher *packages;
Preferences *preferences;
// Use master node's framerate
141,7 → 143,7
class RenderFarmServerThread : public Thread
{
public:
RenderFarmServerThread(MWindow *mwindow,
RenderFarmServerThread(ArrayList<PluginServer*> *plugindb,
RenderFarmServer *server,
int number);
~RenderFarmServerThread();
170,7 → 172,8
void run();
MWindow *mwindow;
// MWindow *mwindow;
ArrayList<PluginServer*> *plugindb;
RenderFarmServer *server;
RenderFarmFSServer *fs_server;
int socket_fd;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/pluginarray.h
36,8 → 36,14
int stop_plugins();
virtual void create_modules() {};
virtual void create_buffers() {};
virtual void load_module(int module, int64_t input_position, int64_t len) {};
virtual void process_realtime(int module, int64_t input_position, int64_t len) {};
/*
* virtual void load_module(int module,
* int64_t input_position,
* int64_t len) {};
*/
virtual void process_realtime(int module,
int64_t input_position,
int64_t len) {};
virtual int process_loop(int module, int64_t &write_length) {};
virtual int write_buffers(int64_t len) { return 0; };
virtual int64_t get_bufsize() { return 0; };
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/labels.C
196,17 → 196,21
return result;
}
 
 
 
Labels& Labels::operator=(Labels &that)
void Labels::copy_from(Labels *labels)
{
while(last) delete last;
 
for(Label *current = that.first; current; current = NEXT)
for(Label *current = labels->first; current; current = NEXT)
{
append(new Label(edl, this, current->position));
}
}
 
 
Labels& Labels::operator=(Labels &that)
{
copy_from(&that);
printf("Labels::operator= 1\n");
return *this;
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/aattachmentpoint.C
1,78 → 1,122
#include "aattachmentpoint.h"
#include "edl.h"
#include "edlsession.h"
#include "playbackconfig.h"
#include "plugin.h"
#include "pluginserver.h"
#include "renderengine.h"
#include "transportque.h"
 
AAttachmentPoint::AAttachmentPoint(RenderEngine *renderengine, Plugin *plugin)
: AttachmentPoint(renderengine, plugin)
{
buffer_in = 0;
buffer_out = 0;
buffer_vector = 0;
buffer_allocation = 0;
}
 
AAttachmentPoint::~AAttachmentPoint()
{
delete_buffer_vector();
}
 
void AAttachmentPoint::delete_buffer_vectors()
void AAttachmentPoint::delete_buffer_vector()
{
if(buffer_in) delete [] buffer_in;
if(buffer_out) delete [] buffer_out;
buffer_in = 0;
buffer_out = 0;
if(buffer_vector)
{
for(int i = 0; i < virtual_plugins.total; i++)
delete [] buffer_vector[i];
delete [] buffer_vector;
}
buffer_vector = 0;
buffer_allocation = 0;
}
 
void AAttachmentPoint::new_buffer_vectors()
void AAttachmentPoint::new_buffer_vector(int total, int size)
{
buffer_in = new double*[total_input_buffers];
buffer_out = new double*[total_input_buffers];
if(buffer_vector && size > buffer_allocation)
delete_buffer_vector();
 
if(!buffer_vector)
{
buffer_allocation = size;
buffer_vector = new double*[virtual_plugins.total];
for(int i = 0; i < virtual_plugins.total; i++)
{
buffer_vector[i] = new double[buffer_allocation];
}
}
}
 
int AAttachmentPoint::get_buffer_size()
{
//printf("AAttachmentPoint::get_buffer_size 1 %p\n", renderengine);
return renderengine->edl->session->audio_module_fragment;
return renderengine->config->aconfig->fragment_size;
}
 
void AAttachmentPoint::render(double *audio_in,
double *audio_out,
long fragment_size,
long current_position)
void AAttachmentPoint::render(double *output,
int buffer_number,
int64_t start_position,
int64_t len,
int64_t sample_rate)
{
// Arm buffer vectors
buffer_in[current_buffer] = audio_in;
buffer_out[current_buffer] = audio_out;
// Run base class
AttachmentPoint::render(current_position, fragment_size);
}
if(!plugin_server || !plugin->on) return;
 
void AAttachmentPoint::dispatch_plugin_server(int buffer_number,
long current_position,
long fragment_size)
{
//printf("AAttachmentPoint::dispatch_plugin_server 1\n");
// Current position must be relative to plugin position since the keyframes
// are relative.
 
if(plugin_server->multichannel)
{
plugin_servers.values[0]->process_realtime(
buffer_in,
buffer_out,
current_position /* - plugin->startproject */,
fragment_size,
plugin->length);
// Test against previous parameters for reuse of previous data
if(is_processed &&
this->start_position == start_position &&
this->len == len &&
this->sample_rate == sample_rate)
{
memcpy(output, buffer_vector[buffer_number], sizeof(double) * len);
return;
}
 
// Update status
this->start_position = start_position;
this->len = len;
this->sample_rate = sample_rate;
is_processed = 1;
 
// Allocate buffer vector
new_buffer_vector(virtual_plugins.total, len);
 
// Create temporary buffer vector with output argument substituted in
double **output_temp = new double*[virtual_plugins.total];
for(int i = 0; i < virtual_plugins.total; i++)
{
if(i == buffer_number)
output_temp[i] = output;
else
output_temp[i] = buffer_vector[i];
}
 
// Process plugin
plugin_servers.values[0]->process_buffer(output_temp,
start_position,
len,
sample_rate,
plugin->length *
sample_rate /
renderengine->edl->session->sample_rate,
renderengine->command->get_direction());
 
// Delete temporary buffer vector
delete [] output_temp;
}
else
{
plugin_servers.values[buffer_number]->process_realtime(
&buffer_in[buffer_number],
&buffer_out[buffer_number],
current_position /* - plugin->startproject */,
fragment_size,
plugin->length);
// Process plugin
double *output_temp[1];
output_temp[0] = output;
plugin_servers.values[buffer_number]->process_buffer(output_temp,
start_position,
len,
sample_rate,
plugin->length *
sample_rate /
renderengine->edl->session->sample_rate,
renderengine->command->get_direction());
}
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/canvas.C
83,8 → 83,9
{
if(xscroll)
{
if(conformed_w < w_visible)
return -(float)(w_visible - conformed_w) / 2;
// If the projection is smaller than the canvas, this forces it in the center.
// if(conformed_w < w_visible)
// return -(float)(w_visible - conformed_w) / 2;
 
return (float)get_xscroll();
}
122,8 → 123,9
{
if(yscroll)
{
if(conformed_h < h_visible)
return -(float)(h_visible - conformed_h) / 2;
// If the projection is smaller than the canvas, this forces it in the center.
// if(conformed_h < h_visible)
// return -(float)(h_visible - conformed_h) / 2;
 
return (float)get_yscroll();
}
277,8 → 279,8
canvas_to_output(edl, 0, in_x1, in_y1);
canvas_to_output(edl, 0, in_x2, in_y2);
 
// printf("Canvas::get_transfers 1 %.0f %.0f %.0f %.0f -> %.0f %.0f %.0f %.0f\n",
// in_x1, in_y1, in_x2, in_y2, out_x1, out_y1, out_x2, out_y2);
//printf("Canvas::get_transfers 1 %.0f %.0f %.0f %.0f -> %.0f %.0f %.0f %.0f\n",
//in_x1, in_y1, in_x2, in_y2, out_x1, out_y1, out_x2, out_y2);
 
if(in_x1 < 0)
{
745,6 → 747,7
{
add_item(new CanvasPopupResetCamera(canvas));
add_item(new CanvasPopupResetProjector(canvas));
add_item(toggle_controls = new CanvasToggleControls(canvas));
}
if(canvas->use_rwindow)
{
814,7 → 817,29
 
 
 
CanvasToggleControls::CanvasToggleControls(Canvas *canvas)
: BC_MenuItem(calculate_text(canvas->get_cwindow_controls()))
{
this->canvas = canvas;
}
int CanvasToggleControls::handle_event()
{
canvas->toggle_controls();
set_text(calculate_text(canvas->get_cwindow_controls()));
return 1;
}
 
char* CanvasToggleControls::calculate_text(int cwindow_controls)
{
if(!cwindow_controls)
return _("Show controls");
else
return _("Hide controls");
}
 
 
 
 
CanvasPopupRemoveSource::CanvasPopupRemoveSource(Canvas *canvas)
: BC_MenuItem(_("Close source"))
{
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/filempeg.C
91,7 → 91,6
int result = 0;
this->rd = rd;
this->wr = wr;
//printf("FileMPEG::open_file: 1 %d %d %d\n", rd, wr, asset->format);
 
if(rd)
{
116,7 → 115,6
if(!asset->sample_rate)
asset->sample_rate = mpeg3_sample_rate(fd, 0);
asset->audio_length = mpeg3_audio_samples(fd, 0);
//printf("FileMPEG::open_file 1 %d\n", asset->audio_length);
}
 
asset->video_data = mpeg3_has_video(fd);
129,12 → 127,10
asset->vmpeg_cmodel = (mpeg3_colormodel(fd, 0) == MPEG3_YUV422P) ? 1 : 0;
if(!asset->frame_rate)
asset->frame_rate = mpeg3_frame_rate(fd, 0);
//printf("FileMPEG::open_file 2 %d\n", asset->video_length);
}
}
}
//printf("FileMPEG::open_file 2 %d\n", asset->video_length);
if(wr && asset->format == FILE_VMPEG)
151,6 → 147,21
if(!result)
{
append_vcommand_line("mpeg2enc");
 
 
if(asset->aspect_ratio > 0)
{
append_vcommand_line("-a");
if(EQUIV(asset->aspect_ratio, 1.333))
append_vcommand_line("2");
else
if(EQUIV(asset->aspect_ratio, 1.777))
append_vcommand_line("3");
else
if(EQUIV(asset->aspect_ratio, 2.11))
append_vcommand_line("4");
}
 
append_vcommand_line(asset->vmpeg_derivative == 1 ? "-1" : "");
append_vcommand_line(asset->vmpeg_cmodel == 1 ? "-422" : "");
if(asset->vmpeg_fix_bitrate)
751,6 → 762,10
 
void FileMPEGVideo::run()
{
printf("FileMPEGVideo::run ");
for(int i = 0; i < file->vcommand_line.total; i++)
printf("%s ", file->vcommand_line.values[i]);
printf("\n");
mpeg2enc(file->vcommand_line.total, file->vcommand_line.values);
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/aattachmentpoint.h
4,25 → 4,27
 
#include "attachmentpoint.h"
 
 
class AAttachmentPoint : public AttachmentPoint
{
public:
AAttachmentPoint(RenderEngine *renderengine, Plugin *plugin);
~AAttachmentPoint();
void delete_buffer_vectors();
void new_buffer_vectors();
void render(double *audio_in,
double *audio_out,
long fragment_size,
long current_position);
void delete_buffer_vector();
void new_buffer_vector(int total, int size);
void render(double *output,
int buffer_number,
int64_t start_position,
int64_t len,
int64_t sample_rate);
void dispatch_plugin_server(int buffer_number,
long current_position,
long fragment_size);
int get_buffer_size();
 
double **buffer_in, **buffer_out;
// Storage for multichannel plugins
double **buffer_vector;
int buffer_allocation;
};
 
#endif
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/mainprogress.C
128,7 → 128,12
double eta;
 
if(value > 0.001)
eta = (double)current_eta / 1000 * length / value - current_eta / 1000;
eta = (double)current_eta /
1000 *
length /
value -
current_eta /
1000;
else
eta = 0;
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/canvas.h
10,6 → 10,7
class CanvasXScroll;
class CanvasYScroll;
class CanvasPopup;
class CanvasToggleControls;
 
// The EDL arguments can be set to 0 if the canvas_w and canvas_h are used
class Canvas
48,6 → 49,8
virtual int button_press_event();
virtual int cursor_motion_event() { return 0; };
virtual void draw_overlays() { };
virtual void toggle_controls() { } ;
virtual int get_cwindow_controls() { return 0; };
// Provide canvas dimensions since a BC_Bitmap containing obsolete dimensions
// is often the output being transferred to
void get_transfers(EDL *edl, int &in_x,
210,6 → 213,7
void create_objects();
 
Canvas *canvas;
CanvasToggleControls *toggle_controls;
};
 
class CanvasPopupSize : public BC_MenuItem
238,6 → 242,15
Canvas *canvas;
};
 
class CanvasToggleControls : public BC_MenuItem
{
public:
CanvasToggleControls(Canvas *canvas);
int handle_event();
static char* calculate_text(int cwindow_controls);
Canvas *canvas;
};
 
class CanvasPopupResetTranslation : public BC_MenuItem
{
public:
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/assetedit.C
298,13 → 298,14
if(allow_edits)
{
x = x2;
add_subwindow(hilo = new AssetEditByteOrderHILO(this,
!asset->byte_order,
 
add_subwindow(lohi = new AssetEditByteOrderLOHI(this,
asset->byte_order,
x,
y));
x += 70;
add_subwindow(lohi = new AssetEditByteOrderLOHI(this,
asset->byte_order,
add_subwindow(hilo = new AssetEditByteOrderHILO(this,
!asset->byte_order,
x,
y));
y += vmargin;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/transportque.C
40,18 → 40,21
return edl;
}
 
void TransportCommand::copy_from(TransportCommand *command)
{
this->command = command->command;
this->change_type = command->change_type;
this->edl->copy_all(command->edl);
this->start_position = command->start_position;
this->end_position = command->end_position;
this->playbackstart = command->playbackstart;
this->realtime = command->realtime;
this->resume = command->resume;
}
 
TransportCommand& TransportCommand::operator=(TransportCommand &command)
{
this->command = command.command;
this->change_type = command.change_type;
//printf("TransportCommand::operator= 1\n");
*this->edl = *command.edl;
//printf("TransportCommand::operator= 2\n");
this->start_position = command.start_position;
this->end_position = command.end_position;
this->playbackstart = command.playbackstart;
this->realtime = command.realtime;
this->resume = command.resume;
copy_from(&command);
return *this;
}
 
248,7 → 251,8
change_type == CHANGE_ALL)
{
// Copy EDL
*this->command.get_edl() = *new_edl;
//printf("TransportQue::send_command 1 %p %p\n", this->command.get_edl(), new_edl);
this->command.get_edl()->copy_all(new_edl);
}
else
if(change_type == CHANGE_PARAMS)
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/transportque.h
18,6 → 18,7
// Get the direction based on the command
int get_direction();
float get_speed();
void copy_from(TransportCommand *command);
TransportCommand& operator=(TransportCommand &command);
// Get the range to play back from the EDL
void set_playback_range(EDL *edl = 0);
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/record.C
16,6 → 16,7
#include "filethread.h"
#include "formatcheck.h"
#include "indexfile.h"
#include "language.h"
#include "localsession.h"
#include "mainundo.h"
#include "mwindow.h"
43,10 → 44,6
 
#include <string.h>
 
#include <libintl.h>
#define _(String) gettext(String)
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
 
 
RecordMenuItem::RecordMenuItem(MWindow *mwindow)
390,6 → 387,7
edl->session->output_h = default_asset->height;
edl->session->aspect_w = mwindow->edl->session->aspect_w;
edl->session->aspect_h = mwindow->edl->session->aspect_h;
 
record_gui = new RecordGUI(mwindow, this);
record_gui->load_defaults();
record_gui->create_objects();
424,8 → 422,11
close_output_file();
delete record_monitor;
record_gui->save_defaults();
TRACE("Record::run 1");
delete record_gui;
TRACE("Record::run 2");
delete edl;
TRACE("Record::run 3");
}
 
menu_item->current_state = RECORD_NOTHING;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/render.C
22,6 → 22,7
#include "formatpopup.h"
#include "formattools.h"
#include "labels.h"
#include "language.h"
#include "loadmode.h"
#include "localsession.h"
#include "mainprogress.h"
51,13 → 52,8
#include <ctype.h>
#include <string.h>
 
#include <libintl.h>
#define _(String) gettext(String)
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
 
 
 
RenderItem::RenderItem(MWindow *mwindow)
: BC_MenuItem(_("Render..."), "Shift+R", 'R')
{
150,14 → 146,47
{
render->counter_lock->lock();
render->total_rendered += value;
//printf("MainPackageRenderer::set_progress 1 %lld %lld\n", value, render->total_rendered);
// render->total_rendered += audio_read_length;
 
// If non interactive, print progress out
if(!render->progress)
{
int64_t current_eta = render->progress_timer->get_scaled_difference(1000);
if(current_eta - render->last_eta > 1000)
{
double eta = 0;
 
 
if(render->total_rendered)
{
eta = current_eta /
1000 *
render->progress_max /
render->total_rendered -
current_eta /
1000;
}
 
char string[BCTEXTLEN];
Units::totext(string,
eta,
TIME_HMS2);
 
printf("%d%% ETA: %s \r", (int)(100 *
(float)render->total_rendered /
render->progress_max),
string);
fflush(stdout);
render->last_eta = current_eta;
}
}
 
render->counter_lock->unlock();
}
 
int MainPackageRenderer::progress_cancelled()
{
return render->progress->is_cancelled() || render->batch_cancelled;
return (render->progress && render->progress->is_cancelled()) ||
render->batch_cancelled;
}
 
 
175,11 → 204,15
: Thread()
{
this->mwindow = mwindow;
if(mwindow) plugindb = mwindow->plugindb;
in_progress = 0;
progress = 0;
preferences = 0;
elapsed_time = 0.0;
package_lock = new Mutex;
counter_lock = new Mutex;
completion = new Condition;
package_lock = new Mutex("Render::package_lock");
counter_lock = new Mutex("Render::counter_lock");
completion = new Condition(0, "Render::completion");
progress_timer = new Timer;
}
 
Render::~Render()
187,6 → 220,8
delete package_lock;
delete counter_lock;
delete completion;
if(preferences) delete preferences;
delete progress_timer;
}
 
void Render::start_interactive()
211,11 → 246,11
 
void Render::start_batches(ArrayList<BatchRenderJob*> *jobs)
{
batch_cancelled = 0;
if(!Thread::running())
{
mode = Render::BATCH;
this->jobs = jobs;
batch_cancelled = 0;
completion->reset();
Thread::start();
}
229,13 → 264,29
}
}
 
void Render::start_batches(ArrayList<BatchRenderJob*> *jobs,
Defaults *boot_defaults,
Preferences *preferences,
ArrayList<PluginServer*> *plugindb)
{
mode = Render::BATCH;
batch_cancelled = 0;
this->jobs = jobs;
this->preferences = preferences;
this->plugindb = plugindb;
 
completion->reset();
run();
this->preferences = 0;
}
 
void Render::stop_operation()
{
if(Thread::running())
{
batch_cancelled = 1;
// Wait for completion
completion->lock();
completion->lock("Render::stop_operation");
completion->reset();
}
}
290,26 → 341,58
BatchRenderJob *job = jobs->values[i];
if(job->enabled)
{
mwindow->batch_render->update_active(i);
if(mwindow)
{
mwindow->batch_render->update_active(i);
}
else
{
printf("Render::run: %s\n", job->edl_path);
}
 
 
FileXML *file = new FileXML;
EDL *edl = new EDL;
edl->create_objects();
file->read_from_file(job->edl_path);
edl->load_xml(mwindow->plugindb, file, LOAD_ALL);
if(!plugindb && mwindow)
plugindb = mwindow->plugindb;
edl->load_xml(plugindb, file, LOAD_ALL);
 
render(0, job->asset, edl, job->strategy);
 
delete edl;
delete file;
if(!result)
mwindow->batch_render->update_done(i, 1, elapsed_time);
{
if(mwindow)
mwindow->batch_render->update_done(i, 1, elapsed_time);
else
{
char string[BCTEXTLEN];
elapsed_time =
(double)progress_timer->get_scaled_difference(1);
Units::totext(string,
elapsed_time,
TIME_HMS2);
printf("Render::run: done in %s\n", string);
}
}
else
mwindow->batch_render->update_active(-1);
{
if(mwindow)
mwindow->batch_render->update_active(-1);
else
printf("Render::run: failed\n");
}
}
}
 
mwindow->batch_render->update_active(-1);
mwindow->batch_render->update_done(-1, 0, 0);
if(mwindow)
{
mwindow->batch_render->update_active(-1);
mwindow->batch_render->update_done(-1, 0, 0);
}
}
}
 
374,19 → 457,26
char filename[BCTEXTLEN];
char string[BCTEXTLEN];
FileSystem fs;
// Generate the progress box
fs.extract_name(filename, default_asset->path);
sprintf(string, _("Rendering %s..."), filename);
 
// Don't bother with the filename since renderfarm defeats the meaning
progress = mwindow->mainprogress->start_progress(_("Rendering..."),
Units::to_int64(default_asset->sample_rate *
progress_max = Units::to_int64(default_asset->sample_rate *
(total_end - total_start)) +
Units::to_int64(preferences->render_preroll *
packages->total_allocated *
default_asset->sample_rate));
render_progress = new RenderProgress(mwindow, this);
render_progress->start();
default_asset->sample_rate);
progress_timer->update();
last_eta = 0;
if(mwindow)
{
// Generate the progress box
fs.extract_name(filename, default_asset->path);
sprintf(string, _("Rendering %s..."), filename);
 
// Don't bother with the filename since renderfarm defeats the meaning
progress = mwindow->mainprogress->start_progress(_("Rendering..."),
progress_max);
render_progress = new RenderProgress(mwindow, this);
render_progress->start();
}
}
 
void Render::stop_progress()
437,9 → 527,17
this->default_asset = asset;
progress = 0;
result = 0;
preferences = new Preferences;
*preferences = *mwindow->preferences;
// Create rendering commandw
 
if(mwindow)
{
if(!preferences)
preferences = new Preferences;
 
preferences->copy_from(mwindow->preferences);
}
 
 
// Create rendering command
command = new TransportCommand;
command->command = NORMAL_FWD;
command->get_edl()->copy_all(edl);
462,8 → 560,8
}
 
// Create caches
audio_cache = new CICache(command->get_edl(), preferences, mwindow->plugindb);
video_cache = new CICache(command->get_edl(), preferences, mwindow->plugindb);
audio_cache = new CICache(command->get_edl(), preferences, plugindb);
video_cache = new CICache(command->get_edl(), preferences, plugindb);
 
default_asset->frame_rate = command->get_edl()->session->frame_rate;
default_asset->sample_rate = command->get_edl()->session->sample_rate;
495,7 → 593,7
if(!result)
{
// Stop background rendering
mwindow->stop_brender();
if(mwindow) mwindow->stop_brender();
 
fs.complete_path(default_asset->path);
strategy = Render::fix_strategy(strategy, preferences->use_renderfarm);
526,12 → 624,20
if(!result)
{
// Start dispatching external jobs
mwindow->gui->lock_window();
mwindow->gui->show_message(_("Starting render farm"), BLACK);
mwindow->gui->unlock_window();
if(mwindow)
{
mwindow->gui->lock_window();
mwindow->gui->show_message(_("Starting render farm"), BLACK);
mwindow->gui->unlock_window();
}
else
{
printf("Render::render: starting render farm\n");
}
 
if(strategy == SINGLE_PASS_FARM || strategy == FILE_PER_LABEL_FARM)
{
farm_server = new RenderFarmServer(mwindow,
farm_server = new RenderFarmServer(plugindb,
packages,
preferences,
1,
545,15 → 651,21
 
if(result)
{
mwindow->gui->lock_window();
mwindow->gui->show_message(_("Failed to start render farm"), BLACK);
mwindow->gui->unlock_window();
if(mwindow)
{
mwindow->gui->lock_window();
mwindow->gui->show_message(_("Failed to start render farm"), BLACK);
mwindow->gui->unlock_window();
}
else
{
printf("Render::render: Failed to start render farm\n");
}
}
}
}
 
 
//printf("Render 5\n");
 
 
// Perform local rendering
566,17 → 678,14
 
 
//printf("Render 6\n");
MainPackageRenderer package_renderer(this);
//printf("Render 7\n");
package_renderer.initialize(mwindow,
command->get_edl(), // Copy of master EDL
preferences,
default_asset,
mwindow->plugindb);
plugindb);
 
 
//printf("Render 8\n");
 
 
 
589,9 → 698,7
 
if(strategy == SINGLE_PASS_FARM)
{
//printf("Render 9\n");
package = packages->get_package(frames_per_second, -1, 1);
//printf("Render 10\n");
}
else
{
606,26 → 713,27
}
 
 
//printf("Render 11\n");
 
Timer timer;
timer.update();
 
if(package_renderer.render_package(package))
result = 1;
 
// Result is also set directly by the RenderFarm.
//printf("Render 12\n");
 
frames_per_second = (double)(package->video_end - package->video_start) /
(double)(timer.get_difference() / 1000);
 
//printf("Render 13\n");
 
} // file_number
 
 
 
//printf("Render::run: Session finished.\n");
 
 
//printf("Render::render 80\n");
 
 
 
634,36 → 742,42
farm_server->wait_clients();
}
 
//printf("Render::render 90\n");
 
// Notify of error
if(result &&
!progress->is_cancelled() &&
(!progress || !progress->is_cancelled()) &&
!batch_cancelled)
{
ErrorBox error_box(PROGRAM_NAME ": Error",
mwindow->gui->get_abs_cursor_x(),
mwindow->gui->get_abs_cursor_y());
error_box.create_objects(_("Error rendering data."));
error_box.run_window();
if(mwindow)
{
ErrorBox error_box(PROGRAM_NAME ": Error",
mwindow->gui->get_abs_cursor_x(),
mwindow->gui->get_abs_cursor_y());
error_box.create_objects(_("Error rendering data."));
error_box.run_window();
}
else
{
printf("Render::render: Error rendering data\n");
}
}
 
// Delete the progress box
stop_progress();
 
//printf("Render::render 100\n");
 
 
 
 
} // !result
 
// mwindow->gui->lock_window();
// if(!result) mwindow->gui->statusbar->default_message();
// mwindow->gui->unlock_window();
 
// Paste all packages into timeline if desired
 
if(!result && load_mode != LOAD_NOTHING)
{ // paste it in
if(!result && load_mode != LOAD_NOTHING && mwindow)
{
mwindow->gui->lock_window();
 
 
691,17 → 805,18
2,
1,
1,
0,
1,
1,
0);
mwindow->sync_parameters(CHANGE_ALL);
mwindow->gui->unlock_window();
}
 
//printf("Render::render 110\n");
// Need to restart because brender always stops before render.
mwindow->restart_brender();
if(mwindow)
mwindow->restart_brender();
if(farm_server) delete farm_server;
delete preferences;
delete command;
delete playback_config;
delete audio_cache;
710,7 → 825,8
delete packages;
in_progress = 0;
completion->unlock();
//printf("Render::render 120\n");
 
return result;
}
 
755,14 → 871,19
int i, j;
int len = strlen(path);
char number_text[BCTEXTLEN];
char *ptr = path;
char *ptr = 0;
char *ptr2 = 0;
 
total_digits = 0;
number_start = 0;
 
// Search for first 0.
ptr = strchr(ptr, '0');
// Search for last /
ptr2 = strrchr(path, '/');
 
// Search for first 0 after last /.
if(ptr2)
ptr = strchr(ptr2, '0');
 
if(ptr && isdigit(*ptr))
{
number_start = ptr - path;
868,8 → 989,8
y,
(char*)((render->strategy == FILE_PER_LABEL ||
render->strategy == FILE_PER_LABEL_FARM) ?
"Select the first file to render to:" :
"Select a file to render to:")));
_("Select the first file to render to:") :
_("Select a file to render to:"))));
y += 25;
 
format_tools = new FormatTools(mwindow,
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/automation.C
57,6 → 57,7
 
Automation& Automation::operator=(Automation& automation)
{
printf("Automation::operator= 1\n");
copy_from(&automation);
return *this;
}
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/resourcepixmap.C
732,7 → 732,6
 
//printf("ResourcePixmap::draw_video_resource 1 %s\n", edit->asset->path);
File *source = mwindow->video_cache->check_out(edit->asset);
//printf("ResourcePixmap::draw_video_resource 2\n");
if(!source) return;
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/vdevicebuz.C
22,7 → 22,7
#include <errno.h>
#include <stdint.h>
#include <linux/kernel.h>
//#include "videodev2.h"
//#include <linux/videodev2.h>
#include <linux/videodev.h>
#include <fcntl.h>
#include <sys/ioctl.h>
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/TODO
1,6 → 1,5
Big bugs
-----------
Double click and drag item drags it but doesn't drop it.
----------------
Undo doesn't restore project title from previous load.
Master node framerate not displaying.
Need to stop building on first error.
8,16 → 7,20
If region in VWindow and CWindow is 100% it should follow the timeline length.
Autoplacement of new clips in AWindow doesn't work.
Hitting space rapidly locks up recording sometimes.
Test lame, toolame termination.
Drawing cache not cleared if pcm parameters changed
Drawing cache not cleared after recording.
Lockup when render finishes and video is playing.
Stop immediately followed by paste in CWindow locks up
Test XMovie with DVD.
Load shift_keyframes.xml then load slide.xml
Load pan_photo.xml then load pan.xml
Pinch doesn't work unless whirl is nonzero.
Batch record lockup up after start near FileThread::get_buffer
Double click and drag item drags it but doesn't drop it.
An optimization error in GCC 3.3.2 causes RGB16 colormodels to crash.
- Recompiling the cmodel files with just -O works.
Drag effect before timeline is finished drawing after a load -> lockup
 
 
 
playlist.xml not playing all the way through
 
 
 
Small bugs
----------------
List problems:
30,11 → 33,13
 
Big Features
----------------
Test pull console with LAD.
Signal handling for non interactive rendering.
Compressor using readahead buffer.
Sound level using readahead buffer.
Batch render from command line.
hourglass
time decimation
Pitch shift and time stretch using single window.
remote control in Video In
Hide controls in Compositor and Record Monitor
color curves
hide cursor when over video output
SUV theme
52,8 → 57,6
 
Small Features
-----------------
Pencil and chain instead of G and D.
N for Normal overlay
left and right arrow in track title
 
 
64,11 → 67,11
 
Not going to happen
---------------------
Hide controls in Record Monitor
Time domain pitch shift
File sequence testing.
Drag plugin handle should only affect plugins with matching handles.
Independant record options for plugin sets.
12 bit DV recording test
 
 
 
77,14 → 80,58
 
 
 
Patches
--------------------
koen muylkens <koen.muylkens@esat.kuleuven.ac.be>
newskin-cinelerra.diff
 
 
 
Andraz Tori:
masks_fixes.diff
 
Fixes are:
- when adding a point to the mask by just clicking and not dragging,
mask is not rerendered (changes to cwindowgui.C)
- when working with autokeyframes enabled with masks. If you have
keyframe A at position 0 and keyframe B at position 100, when you
would
like to edit mask at position 50 and you add a new point or move
previous one, the whole mask at position 50 snaps back to the position
as specified in keyframe A (all changes except to cwindowgui.C)
 
the first fix is pretty obvious, just rerendering was mising in a
codepath
 
the second one is more deep-trough, since it adds missing
functionality
to auto.h/C ... when autocreating keyframe, keyframe should be
interpolated from frame before and after it (if they exist).
 
masks_fixes.diff
 
if there is more than one mask, they all have to be counted
in order to figure y-bounding interval for redraw.
 
maskengine4_fix.diff
 
plugindialog_fix.diff - already done
 
If there are only two video tracks, and one has a shared track effect
from the other. and the other is deleted. cinelerra crushes.
 
shared_track_deletion_crush.diff
 
 
 
 
 
 
 
 
 
 
 
Not reproducible
----------------------
Quit freezes when background rendering is on.
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/render.h
82,8 → 82,14
 
// Start dialogue box and render interactively.
void start_interactive();
// Start batch rendering jobs
// Start batch rendering jobs.
// A new thread is created and the rendering is interactive.
void start_batches(ArrayList<BatchRenderJob*> *jobs);
// The batches are processed in the foreground in non interactive mode.
void start_batches(ArrayList<BatchRenderJob*> *jobs,
Defaults *boot_defaults,
Preferences *preferences,
ArrayList<PluginServer*> *plugindb);
// Called by BatchRender to stop the operation.
void stop_operation();
void run();
148,7 → 154,10
PlayableTracks *playable_tracks;
PackageDispatcher *packages;
Mutex *package_lock, *counter_lock;
// Copy of mwindow preferences
Preferences *preferences;
// For use in non interactive mode
ArrayList<PluginServer*> *plugindb;
int strategy;
// Total selection to render in seconds
double total_start, total_end;
170,6 → 179,11
double frames_per_second;
// Time used in last render
double elapsed_time;
 
// For non interactive mode, maintain progress here.
int64_t progress_max;
Timer *progress_timer;
int64_t last_eta;
};
 
class RenderToTracks;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/commonrender.C
111,7 → 111,6
 
void CommonRender::start_plugins()
{
//printf("CommonRender::start_plugins 1\n");
// Only start if virtual console was created
if(restart_plugins)
{
120,7 → 119,6
modules[i]->render_init();
}
}
//printf("CommonRender::start_plugins 2\n");
}
 
int CommonRender::test_reconfigure(int64_t position, int64_t &length)
158,7 → 156,6
delete_vconsole();
create_modules();
build_virtual_console();
vconsole->start_playback();
start_plugins();
 
done = 0;
233,6 → 230,7
if(renderengine->command->single_frame())
current_render_length = 1;
 
if(current_render_length < 0) current_render_length = 0;
return 0;
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/new.C
4,6 → 4,7
#include "edl.h"
#include "edlsession.h"
#include "filexml.h"
#include "language.h"
#include "levelwindow.h"
#include "mainundo.h"
#include "mainmenu.h"
20,11 → 21,6
 
#include <string.h>
 
#include <libintl.h>
#define _(String) gettext(String)
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
 
New::New(MWindow *mwindow)
: BC_MenuItem(_("New..."), "n", 'n')
{
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/virtualnode.C
25,25 → 25,14
Module *real_module,
Plugin *real_plugin,
Track *track,
VirtualNode *parent_module,
int input_is_master,
int output_is_master,
int in,
int out)
VirtualNode *parent_node)
{
this->renderengine = renderengine;
this->vconsole = vconsole;
this->real_module = real_module;
this->real_plugin = real_plugin;
this->track = track;
this->parent_module = parent_module;
this->ring_buffers = vconsole->total_ring_buffers();
this->input_is_master = input_is_master;
this->output_is_master = output_is_master;
this->in = in;
this->out = out;
shared_input = 1;
shared_output = 1;
this->parent_node = parent_node;
render_count = 0;
plugin_type = 0;
waiting_real_plugin = 0;
51,12 → 40,13
plugin_autos = 0;
plugin_auto_before = plugin_auto_after = 0;
attachment = 0;
is_exit = 0;
//printf("VirtualNode::VirtualNode 1\n");
}
 
VirtualNode::~VirtualNode()
{
vplugins.remove_all_objects();
subnodes.remove_all_objects();
//printf("VirtualNode::VirtualNode 2\n");
}
 
65,14 → 55,17
void VirtualNode::dump(int indent)
{
PRINT_INDENT
printf("VirtualNode title=%s\n", track->title);
printf("VirtualNode %p title=%s %s\n",
this,
track->title,
is_exit ? "*" : " ");
if(real_module)
{
PRINT_INDENT
printf(" Plugins total=%d\n", vplugins.total);
for(int i = 0; i < vplugins.total; i++)
printf(" Plugins total=%d\n", subnodes.total);
for(int i = 0; i < subnodes.total; i++)
{
vplugins.values[i]->dump(indent + 2);
subnodes.values[i]->dump(indent + 2);
}
}
else
82,53 → 75,24
}
}
 
int VirtualNode::expand(int persistant_plugins, int64_t current_position)
int VirtualNode::expand(int persistent_plugins, int64_t current_position)
{
expand_buffers();
 
//printf("VirtualNode::expand 1 %p\n", this);
// module needs to know where the input data for the next process is
data_in_input = 1;
if(real_module)
{
//printf("VirtualNode::expand 3\n");
expand_as_module(persistant_plugins, current_position);
//printf("VirtualNode::expand 4\n");
expand_as_module(persistent_plugins, current_position);
}
else
if(real_plugin)
{
// attach to a real plugin for a plugin
// plugin always takes data from input to output
//printf("VirtualNode::expand 5\n");
expand_as_plugin(persistant_plugins);
expand_as_plugin(persistent_plugins);
}
//printf("VirtualNode::expand 6\n");
 
return 0;
}
 
int VirtualNode::expand_buffers()
{
// temp needed for the output
if(!out)
{
new_output_buffer();
shared_output = 0;
output_is_master = 0;
}
 
// temp needed for the output
if(!in)
{
new_input_buffer();
shared_input = 0;
input_is_master = 0;
}
 
return 0;
}
 
int VirtualNode::expand_as_module(int duplicate, int64_t current_position)
{
Transition *transition = 0;
142,17 → 106,10
0,
1);
 
// printf("VirtualNode::expand_as_module 1 %d %d %p %p\n",
// i,
// track->plugin_set.total,
// plugin,
// real_plugin);
 
// Switch off if circular reference. This happens if a plugin set or a track is deleted.
if(plugin == real_plugin) continue;
 
 
//printf("VirtualNode::expand_as_module 2 %d %p\n", i, plugin);
if(plugin)
{
if(plugin->on)
161,29 → 118,28
if(plugin_type == PLUGIN_SHAREDMODULE)
{
// plugin is a module
//printf("VirtualNode::expand_as_module 3\n");
attach_virtual_module(plugin,
i,
duplicate,
current_position);
//printf("VirtualNode::expand_as_module 4\n");
}
else
if(plugin_type == PLUGIN_SHAREDPLUGIN ||
plugin_type == PLUGIN_STANDALONE)
{
// plugin is a plugin
//printf("VirtualNode::expand_as_module 5\n");
attach_virtual_plugin(plugin,
i,
duplicate,
current_position);
//printf("VirtualNode::expand_as_module 6\n");
}
}
}
//printf("VirtualNode::expand_as_module 7\n");
}
 
 
if(!parent_node) vconsole->append_exit_node(this);
 
return 0;
}
 
214,7 → 170,7
real_plugin = attachment->plugin;
 
// Real plugin not on then null it.
if(!real_plugin->on) real_plugin = 0;
if(!real_plugin || !real_plugin->on) real_plugin = 0;
}
else
real_plugin = 0;
234,14 → 190,12
Module *module = vconsole->module_of(track);
 
attachment = module->attachment_of(real_plugin);
//printf("VirtualNode::expand_as_plugin 1 %p %p\n", attachment, real_plugin);
}
 
 
 
 
 
 
// Add to real plugin's list of virtual plugins for configuration updates
// and plugin_server initializations.
// Input and output are taken care of when the parent module creates this plugin.
249,8 → 203,7
// real_plugin may become NULL after shared plugin test.
if(real_plugin && attachment)
{
 
if(attachment)
if(attachment)
plugin_buffer_number = attachment->attach_virtual_plugin(this);
}
 
280,15 → 233,12
 
 
 
// working data is now in output
if(plugin->out) data_in_input = 0;
//printf("VirtualNode::attach_virtual_module 1\n");
VirtualNode *virtual_module = create_module(plugin,
real_module,
track);
//printf("VirtualNode::attach_virtual_module 1\n");
 
vplugins.append(virtual_module);
subnodes.append(virtual_module);
//printf("VirtualNode::attach_virtual_module 1\n");
virtual_module->expand(duplicate, current_position);
//printf("VirtualNode::attach_virtual_module 2\n");
304,199 → 254,212
{
if(plugin->on)
{
// working data is now in output
if(plugin->out) data_in_input = 0;
 
VirtualNode *virtual_plugin = create_plugin(plugin);
vplugins.append(virtual_plugin);
subnodes.append(virtual_plugin);
virtual_plugin->expand(duplicate, current_position);
}
return 0;
}
 
int VirtualNode::sort(ArrayList<VirtualNode*>*render_list)
VirtualNode* VirtualNode::get_previous_plugin(VirtualNode *current_node)
{
int result = 0, total_result = 0;
 
//sleep(1);
//printf("VirtualNode::sort %p %p\n", real_module, real_plugin);
if(real_module)
for(int i = 0; i < subnodes.total; i++)
{
sort_as_module(render_list, result, total_result);
}
else
if(real_plugin)
{
sort_as_plugin(render_list, result, total_result);
}
 
if(!result && total_result) result = total_result;
// if a plugin that wasn't patched out couldn't be rendered, try again
 
return result;
}
 
int VirtualNode::sort_as_module(ArrayList<VirtualNode*>*render_list, int &result, int &total_result)
{
 
// Render plugins first.
for(int i = 0; i < vplugins.total && !result; i++)
{
// stop when rendering can't continue without another higher level module
result = vplugins.values[i]->sort(render_list);
 
if(result && !vplugins.values[i]->out)
// Assume plugin is on
if(subnodes.values[i] == current_node)
{
total_result = 1;
result = 0;
// couldn't render the last plugin but it wasn't patched out so continue to next plugin
}
}
//printf("VirtualNode::sort_as_module 3\n");
 
// All plugins rendered.
// Render this module.
if(render_count == 0 && !result)
{
render_list->append(this);
render_count++;
result = 0;
}
//printf("VirtualNode::sort_as_module 4\n");
return 0;
}
 
int VirtualNode::sort_as_plugin(ArrayList<VirtualNode*>*render_list,
int &result,
int &total_result)
{
// Plugin server does not exist at this point.
// need to know if plugin requires all inputs to be armed before rendering
//printf("VirtualNode::sort_as_plugin 1\n");
int multichannel = 0, singlechannel = 0;
//sleep(1);
 
 
// Referenced plugin is off
if(!attachment) return 0;
 
//printf("VirtualNode::sort_as_plugin 2 %p\n", attachment);
if(plugin_type == PLUGIN_STANDALONE || plugin_type == PLUGIN_SHAREDPLUGIN)
{
multichannel = attachment->multichannel_shared(1);
singlechannel = attachment->singlechannel();
}
 
//printf("VirtualNode::sort_as_plugin 3\n");
if(plugin_type == PLUGIN_STANDALONE && !multichannel)
{
// unshared single channel plugin
// render now
//printf("VirtualNode::sort_as_plugin 4\n");
if(!render_count)
{
render_list->append(this);
render_count++;
result = 0;
}
//printf("VirtualNode::sort_as_plugin 5\n");
}
else
if(plugin_type == PLUGIN_SHAREDPLUGIN || multichannel)
{
 
// Shared plugin
//printf("VirtualNode::sort_as_plugin 6\n");
if(!render_count)
{
if(singlechannel)
{
// shared single channel plugin
// render now
//printf("VirtualNode::sort_as_plugin 7\n");
render_list->append(this);
//printf("VirtualNode::sort_as_plugin 8\n");
render_count++;
result = 0;
}
if(i > 0)
return subnodes.values[i - 1];
else
{
// shared multichannel plugin
// all buffers must be armed before rendering at the same time
if(!waiting_real_plugin)
{
//printf("VirtualNode::sort_as_plugin 9 %p\n", attachment);
waiting_real_plugin = 1;
if(real_plugin)
result = attachment->sort(this);
//printf("VirtualNode::sort_as_plugin 10\n");
 
render_list->append(this);
//printf("VirtualNode::sort_as_plugin 11\n");
render_count++;
}
else
{
// Assume it was rendered later in the first pass
result = 0;
}
}
return 0;
}
}
//printf("VirtualNode::sort_as_plugin 12\n");
return 0;
}
 
int VirtualNode::get_plugin_input(int &ring_buffer_in, int64_t &fragment_position_in,
int &ring_buffer_out, int64_t &fragment_position_out,
int ring_buffer, int64_t fragment_position)
{
if(input_is_master)
{
ring_buffer_in = ring_buffer;
fragment_position_in = fragment_position;
}
else
{
ring_buffer_in = 0;
fragment_position_in = 0;
}
// int VirtualNode::sort(ArrayList<VirtualNode*>*render_list)
// {
// int result = 0, total_result = 0;
//
// //sleep(1);
// //printf("VirtualNode::sort %p %p\n", real_module, real_plugin);
// if(real_module)
// {
// sort_as_module(render_list, result, total_result);
// }
// else
// if(real_plugin)
// {
// sort_as_plugin(render_list, result, total_result);
// }
//
// if(!result && total_result) result = total_result;
// // if a plugin that wasn't patched out couldn't be rendered, try again
//
// return result;
// }
 
if(output_is_master)
{
ring_buffer_out = ring_buffer;
fragment_position_out = fragment_position;
}
else
{
ring_buffer_out = 0;
fragment_position_out = 0;
}
}
// int VirtualNode::sort_as_module(ArrayList<VirtualNode*>*render_list, int &result, int &total_result)
// {
//
// // Render plugins first.
// for(int i = 0; i < subnodes.total && !result; i++)
// {
// // stop when rendering can't continue without another higher level module
// result = subnodes.values[i]->sort(render_list);
//
// if(result && !subnodes.values[i]->out)
// {
// total_result = 1;
// result = 0;
// // couldn't render the last plugin but it wasn't patched out so continue to next plugin
// }
// }
// //printf("VirtualNode::sort_as_module 3\n");
//
// // All plugins rendered.
// // Render this module.
// if(render_count == 0 && !result)
// {
// render_list->append(this);
// render_count++;
// result = 0;
// }
// //printf("VirtualNode::sort_as_module 4\n");
// return 0;
// }
 
int VirtualNode::render_as_plugin(int64_t source_len,
int64_t source_position,
int ring_buffer,
int64_t fragment_position,
int64_t fragment_len)
{
// need numbers for actual buffers
int direction = renderengine->command->get_direction();
int ring_buffer_in, ring_buffer_out;
int64_t fragment_position_in, fragment_position_out;
int multichannel = 0;
//printf("VirtualNode::render_as_plugin 1 %p\n", attachment);
// int VirtualNode::sort_as_plugin(ArrayList<VirtualNode*>*render_list,
// int &result,
// int &total_result)
// {
// // Plugin server does not exist at this point.
// // need to know if plugin requires all inputs to be armed before rendering
// //printf("VirtualNode::sort_as_plugin 1\n");
// int multichannel = 0, singlechannel = 0;
// //sleep(1);
//
//
// // Referenced plugin is off
// if(!attachment) return 0;
//
// //printf("VirtualNode::sort_as_plugin 2 %p\n", attachment);
// if(plugin_type == PLUGIN_STANDALONE || plugin_type == PLUGIN_SHAREDPLUGIN)
// {
// multichannel = attachment->multichannel_shared(1);
// singlechannel = attachment->singlechannel();
// }
//
// //printf("VirtualNode::sort_as_plugin 3\n");
// if(plugin_type == PLUGIN_STANDALONE && !multichannel)
// {
// // unshared single channel plugin
// // render now
// //printf("VirtualNode::sort_as_plugin 4\n");
// if(!render_count)
// {
// render_list->append(this);
// render_count++;
// result = 0;
// }
// //printf("VirtualNode::sort_as_plugin 5\n");
// }
// else
// if(plugin_type == PLUGIN_SHAREDPLUGIN || multichannel)
// {
//
// // Shared plugin
// //printf("VirtualNode::sort_as_plugin 6\n");
// if(!render_count)
// {
// if(singlechannel)
// {
// // shared single channel plugin
// // render now
// //printf("VirtualNode::sort_as_plugin 7\n");
// render_list->append(this);
// //printf("VirtualNode::sort_as_plugin 8\n");
// render_count++;
// result = 0;
// }
// else
// {
// // shared multichannel plugin
// // all buffers must be armed before rendering at the same time
// if(!waiting_real_plugin)
// {
// //printf("VirtualNode::sort_as_plugin 9 %p\n", attachment);
// waiting_real_plugin = 1;
// if(real_plugin)
// result = attachment->sort(this);
// //printf("VirtualNode::sort_as_plugin 10\n");
//
// render_list->append(this);
// //printf("VirtualNode::sort_as_plugin 11\n");
// render_count++;
// }
// else
// {
// // Assume it was rendered later in the first pass
// result = 0;
// }
// }
// }
// }
// //printf("VirtualNode::sort_as_plugin 12\n");
// return 0;
// }
 
// Abort if no plugin
if(!attachment ||
!real_plugin ||
!real_plugin->on) return 0;
// int VirtualNode::get_plugin_input(int &ring_buffer_in, int64_t &fragment_position_in,
// int &ring_buffer_out, int64_t &fragment_position_out,
// int ring_buffer, int64_t fragment_position)
// {
// if(input_is_master)
// {
// ring_buffer_in = ring_buffer;
// fragment_position_in = fragment_position;
// }
// else
// {
// ring_buffer_in = 0;
// fragment_position_in = 0;
// }
//
// if(output_is_master)
// {
// ring_buffer_out = ring_buffer;
// fragment_position_out = fragment_position;
// }
// else
// {
// ring_buffer_out = 0;
// fragment_position_out = 0;
// }
// }
 
//printf("VirtualNode::render_as_plugin 2\n");
}
// int VirtualNode::render_as_plugin(int64_t source_len,
// int64_t source_position,
// int ring_buffer,
// int64_t fragment_position,
// int64_t fragment_len)
// {
// // need numbers for actual buffers
// int direction = renderengine->command->get_direction();
// int ring_buffer_in, ring_buffer_out;
// int64_t fragment_position_in, fragment_position_out;
// int multichannel = 0;
// //printf("VirtualNode::render_as_plugin 1 %p\n", attachment);
//
// // Abort if no plugin
// if(!attachment ||
// !real_plugin ||
// !real_plugin->on) return 0;
//
// //printf("VirtualNode::render_as_plugin 2\n");
// }
//
 
 
 
void VirtualNode::get_mute_fragment(int64_t input_position,
int &mute_constant,
int64_t &fragment_len,
548,77 → 511,75
 
 
 
void VirtualNode::get_fade_automation(double &slope,
double &intercept,
int64_t input_position,
int64_t &slope_len,
Autos *autos)
{
int direction = renderengine->command->get_direction();
((FloatAutos*)autos)->get_fade_automation(slope,
intercept,
input_position,
slope_len,
direction);
}
// void VirtualNode::get_fade_automation(double &slope,
// double &intercept,
// int64_t input_position,
// int64_t &slope_len,
// Autos *autos)
// {
// int direction = renderengine->command->get_direction();
// ((FloatAutos*)autos)->get_fade_automation(slope,
// intercept,
// input_position,
// slope_len,
// direction);
// }
 
 
int VirtualNode::init_automation(int &automate,
double &constant,
int64_t input_position,
int64_t buffer_len,
Autos *autos,
Auto **before,
Auto **after)
{
// int VirtualNode::init_automation(int &automate,
// double &constant,
// int64_t input_position,
// int64_t buffer_len,
// Autos *autos,
// Auto **before,
// Auto **after)
// {
// return autos->init_automation(buffer_position,
// input_start,
// input_end,
// automate,
// constant,
// input_position,
// buffer_len,
// before,
// after,
// reverse);
// }
 
return autos->init_automation(buffer_position,
input_start,
input_end,
automate,
constant,
input_position,
buffer_len,
before,
after,
reverse);
}
// int VirtualNode::init_slope(Autos *autos, Auto **before, Auto **after)
// {
// return autos->init_slope(&current_auto,
// slope_start,
// slope_value,
// slope_position,
// input_start,
// input_end,
// before,
// after,
// reverse);
// }
 
int VirtualNode::init_slope(Autos *autos, Auto **before, Auto **after)
{
return autos->init_slope(&current_auto,
slope_start,
slope_value,
slope_position,
input_start,
input_end,
before,
after,
reverse);
}
// int VirtualNode::get_slope(Autos *autos, int64_t buffer_len, int64_t buffer_position)
// {
// return autos->get_slope(&current_auto,
// slope_start,
// slope_end,
// slope_value,
// slope,
// buffer_len,
// buffer_position,
// reverse);
// }
//
// int VirtualNode::advance_slope(Autos *autos)
// {
// return autos->advance_slope(&current_auto,
// slope_start,
// slope_value,
// slope_position,
// reverse);
// }
 
int VirtualNode::get_slope(Autos *autos, int64_t buffer_len, int64_t buffer_position)
{
return autos->get_slope(&current_auto,
slope_start,
slope_end,
slope_value,
slope,
buffer_len,
buffer_position,
reverse);
}
 
int VirtualNode::advance_slope(Autos *autos)
{
return autos->advance_slope(&current_auto,
slope_start,
slope_value,
slope_position,
reverse);
}
 
 
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/mwindow.inc
2,8 → 2,9
#define MWINDOW_INC
 
#define PROGRAM_NAME "Cinelerra"
#define VERSION "1.1.8"
#define CINELERRA_VERSION "1.1.9"
#define DEFAULT_THEME "Blond"
#define CONFIG_FILE "Cinelerra_rc"
 
// What to call silence in the EDL
#define SILENCE "SILENCE"
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/arender.C
41,7 → 41,6
{
for(int i = 0; i < MAXCHANNELS; i++)
{
//printf("ARender::~ARender %p %p\n", audio_out[i], level_history[i]);
if(audio_out[i]) delete [] audio_out[i];
if(level_history[i]) delete [] level_history[i];
}
50,13 → 49,9
 
void ARender::arm_command()
{
//printf("ARender::arm_command 1\n");
CommonRender::arm_command();
//printf("ARender::arm_command 1\n");
asynchronous = 1;
//printf("ARender::arm_command 1\n");
init_meters();
//printf("ARender::arm_command 2\n");
}
 
 
67,21 → 62,20
 
Module* ARender::new_module(Track *track)
{
//printf("VirtualAConsole::new_module %p\n", track);
return new AModule(renderengine, this, 0, track);
}
 
int ARender::history_size()
{
if(total_peaks > 0)
if(total_peaks > 0)
return total_peaks;
else
{
meter_render_fragment = renderengine->edl->session->audio_module_fragment;
meter_render_fragment = renderengine->fragment_len;
while(meter_render_fragment > renderengine->edl->session->sample_rate / 10)
meter_render_fragment /= 2;
total_peaks = 2 *
renderengine->edl->session->audio_read_length /
total_peaks = 16 *
renderengine->fragment_len /
meter_render_fragment;
return total_peaks;
}
90,7 → 84,6
int ARender::init_meters()
{
// not providing enough peaks results in peaks that are ahead of the sound
//printf("ARender::init_meters 1\n");
if(level_samples) delete [] level_samples;
level_samples = new int64_t[history_size()];
for(int i = 0; i < MAXCHANNELS;i++)
99,7 → 92,6
if(audio_out[i] && !level_history[i]) level_history[i] = new double[total_peaks];
}
 
//printf("ARender::init_meters 2\n");
for(int i = 0; i < history_size(); i++)
{
level_samples[i] = -1;
116,7 → 108,6
 
void ARender::init_output_buffers()
{
//printf("ARender::init_output_buffers %d\n", renderengine->adjusted_fragment_len);
if(renderengine->command->realtime)
{
for(int i = 0; i < MAXCHANNELS; i++)
128,7 → 119,6
audio_out[i] = 0;
}
 
//printf("ARender::init_output_buffers %d %d\n", i, renderengine->config->aconfig->do_channel[i]);
if(renderengine->config->aconfig->do_channel[i])
{
audio_out[i] = new double[renderengine->adjusted_fragment_len];
223,20 → 213,20
return result;
}
 
int ARender::restart_playback()
{
// Use for rebuilding the virtual console during playback.
// Send last buffer to old thread.
if(vconsole)
{
send_reconfigure_buffer();
vconsole->wait_for_completion();
}
// int ARender::restart_playback()
// {
// // Use for rebuilding the virtual console during playback.
// // Send last buffer to old thread.
// if(vconsole)
// {
// send_reconfigure_buffer();
// vconsole->wait_for_completion();
// }
//
// CommonRender::restart_playback();
// return 0;
// }
 
CommonRender::restart_playback();
return 0;
}
 
int ARender::get_history_number(int64_t *table, int64_t position)
{
// Get the entry closest to position
257,6 → 247,10
return result;
}
 
void ARender::send_last_buffer()
{
renderengine->audio->set_last_buffer();
}
 
int ARender::wait_device_completion()
{
270,25 → 264,26
int64_t current_input_length;
int reconfigure = 0;
 
first_buffer = 1;
 
start_lock->unlock();
 
while(!done && !interrupt && !last_playback)
{
current_input_length = renderengine->edl->session->audio_read_length;
current_input_length = renderengine->fragment_len;
 
//printf("ARender::run 1 %p\n", renderengine->edl);
get_boundaries(current_input_length);
 
//printf("ARender::run 10 %lld %lld\n", current_position, current_input_length);
if(current_input_length)
{
reconfigure = vconsole->test_reconfigure(current_position,
current_input_length,
last_playback);
 
 
 
 
 
if(reconfigure) restart_playback();
}
//printf("ARender::run 20 %lld %lld\n", current_position, current_input_length);
 
 
// Update tracking if no video is playing.
312,15 → 307,22
 
 
 
//printf("ARender::run 30 %lld\n", current_input_length);
 
 
 
process_buffer(current_input_length, current_position);
//printf("ARender::run 40\n");
 
 
advance_position(get_render_length(current_input_length));
//printf("ARender::run 50\n");
 
 
if(vconsole->interrupt) interrupt = 1;
}
 
if(!interrupt) send_last_buffer();
if(renderengine->command->realtime) wait_device_completion();
vconsole->stop_rendering(0);
}
377,23 → 379,23
return 0;
}
 
int ARender::send_reconfigure_buffer()
{
if(renderengine->command->realtime)
{
vconsole->output_lock[vconsole->current_input_buffer]->lock("ARender::send_reconfigure_buffer");
// int ARender::send_reconfigure_buffer()
// {
// if(renderengine->command->realtime)
// {
// vconsole->output_lock[vconsole->current_input_buffer]->lock("ARender::send_reconfigure_buffer");
//
// vconsole->input_len[vconsole->current_input_buffer] = 0;
// vconsole->input_position[vconsole->current_input_buffer] = 0;
// vconsole->last_playback[vconsole->current_input_buffer] = 0;
// vconsole->last_reconfigure[vconsole->current_input_buffer] = 1;
//
// vconsole->input_lock[vconsole->current_input_buffer]->unlock();
// vconsole->swap_input_buffer();
// }
// return 0;
// }
 
vconsole->input_len[vconsole->current_input_buffer] = 0;
vconsole->input_position[vconsole->current_input_buffer] = 0;
vconsole->last_playback[vconsole->current_input_buffer] = 0;
vconsole->last_reconfigure[vconsole->current_input_buffer] = 1;
 
vconsole->input_lock[vconsole->current_input_buffer]->unlock();
vconsole->swap_input_buffer();
}
return 0;
}
 
int ARender::reverse_buffer(double *buffer, int64_t len)
{
register int64_t start, end;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/main.C
1,4 → 1,6
#include "arraylist.h"
#include "batchrender.h"
#include "bcsignals.h"
#include "builddate.h"
#include "filexml.h"
#include "filesystem.h"
23,7 → 25,8
DO_DEAMON,
DO_DEAMON_FG,
DO_BRENDER,
DO_USAGE
DO_USAGE,
DO_BATCHRENDER
};
 
#include "thread.h"
34,16 → 37,21
srand(time(0));
ArrayList<char*> filenames;
FileSystem fs;
 
int operation = DO_GUI;
int deamon_port = DEAMON_PORT;
char deamon_path[BCTEXTLEN];
char config_path[BCTEXTLEN];
char batch_path[BCTEXTLEN];
int nice_value = 20;
config_path[0] = 0;
batch_path[0] = 0;
deamon_path[0] = 0;
 
// Numeric translation not finished.
// setlocale (LC_ALL, "");
// bindtextdomain (PACKAGE, LOCALEDIR);
// textdomain (PACKAGE);
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
setlocale (LC_MESSAGES, "");
setlocale (LC_CTYPE, "");
 
for(int i = 1; i < argc; i++)
{
52,6 → 60,32
operation = DO_USAGE;
}
else
if(!strcmp(argv[i], "-r"))
{
operation = DO_BATCHRENDER;
if(argc > i + 1)
{
if(argv[i + 1][0] != '-')
{
strcpy(batch_path, argv[i + 1]);
i++;
}
}
}
else
if(!strcmp(argv[i], "-c"))
{
if(argc > i + 1)
{
strcpy(config_path, argv[i + 1]);
i++;
}
else
{
fprintf(stderr, "%s: -c needs a filename.\n", argv[0]);
}
}
else
if(!strcmp(argv[i], "-d") || !strcmp(argv[i], "-f"))
{
if(!strcmp(argv[i], "-d"))
70,7 → 104,13
if(!strcmp(argv[i], "-b"))
{
operation = DO_BRENDER;
strcpy(deamon_path, argv[i + 1]);
if(i > argc - 2)
{
fprintf(stderr, "-b may not be used by the user.\n");
exit(1);
}
else
strcpy(deamon_path, argv[i + 1]);
}
else
if(!strcmp(argv[i], "-n"))
98,10 → 138,11
if(operation == DO_GUI ||
operation == DO_DEAMON ||
operation == DO_DEAMON_FG ||
operation == DO_USAGE)
operation == DO_USAGE ||
operation == DO_BATCHRENDER)
fprintf(stderr,
PROGRAM_NAME " "
VERSION " "
CINELERRA_VERSION " "
BUILDDATE
" (C)2003 Heroine Virtual Ltd.\n\n"
 
117,11 → 158,17
{
case DO_USAGE:
printf(_("\nUsage:\n"));
printf(_("%s [-df] [-n nice] [port]\n\n"), argv[0]);
printf(_("-d = Run in the background as renderfarm client.\n"));
printf(_("-f = Run in the foreground as renderfarm client.\n"));
printf(_("-n = Nice value if running as renderfarm client.\n"));
printf(_("port = Port for client to listen on. (400)\n\n\n"));
printf(_("%s [-f] [-c configuration] [-d port] [-n nice] [-r batch file] [filenames]\n\n"), argv[0]);
printf(_("-d = Run in the background as renderfarm client. The port (400) is optional.\n"));
printf(_("-f = Run in the foreground as renderfarm client. Substitute for -d.\n"));
printf(_("-n = Nice value if running as renderfarm client. (20)\n"));
printf(_("-c = Configuration file to use instead of %s%s.\n"),
BCASTDIR,
CONFIG_FILE);
printf(_("-r = batch render the contents of the batch file (%s%s) with no GUI. batch file is optional.\n"),
BCASTDIR,
BATCH_PATH);
printf(_("filenames = files to load\n\n\n"));
exit(0);
break;
 
139,7 → 186,10
}
}
 
RenderFarmClient client(deamon_port, 0, nice_value);
RenderFarmClient client(deamon_port,
0,
nice_value,
config_path);
client.main_loop();
break;
}
147,30 → 197,43
// Same thing without detachment
case DO_BRENDER:
{
RenderFarmClient client(0, deamon_path, 20);
RenderFarmClient client(0,
deamon_path,
20,
config_path);
client.main_loop();
break;
}
 
case DO_BATCHRENDER:
{
BatchRenderThread *thread = new BatchRenderThread;
thread->start_rendering(config_path,
batch_path);
break;
}
 
case DO_GUI:
{
MWindow mwindow;
mwindow.create_objects(1, !filenames.total);
mwindow.create_objects(1,
!filenames.total,
config_path);
 
// load the initial files on seperate tracks
if(filenames.total)
{
mwindow.gui->lock_window();
mwindow.load_filenames(&filenames, LOAD_REPLACE);
if(filenames.total == 1)
if(filenames.total == 1)
mwindow.gui->mainmenu->add_load(filenames.values[0]);
mwindow.gui->unlock_window();
}
 
// run the program
mwindow.start();
// mwindow.gui->run_window();
mwindow.save_defaults();
DISABLE_BUFFER
break;
}
}
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/vattachmentpoint.C
1,31 → 1,58
#include "bcsignals.h"
#include "clip.h"
#include "edl.h"
#include "edlsession.h"
#include "plugin.h"
#include "pluginserver.h"
#include "renderengine.h"
#include "transportque.h"
#include "vattachmentpoint.h"
#include "vframe.h"
 
 
VAttachmentPoint::VAttachmentPoint(RenderEngine *renderengine, Plugin *plugin)
: AttachmentPoint(renderengine, plugin)
{
buffer_in = 0;
buffer_out = 0;
buffer_vector = 0;
}
 
VAttachmentPoint::~VAttachmentPoint()
{
delete_buffer_vector();
}
 
void VAttachmentPoint::delete_buffer_vectors()
void VAttachmentPoint::delete_buffer_vector()
{
if(buffer_in) delete [] buffer_in;
if(buffer_out) delete [] buffer_out;
buffer_in = 0;
buffer_out = 0;
if(buffer_vector)
{
for(int i = 0; i < virtual_plugins.total; i++)
delete buffer_vector[i];
delete [] buffer_vector;
}
buffer_vector = 0;
}
 
void VAttachmentPoint::new_buffer_vectors()
void VAttachmentPoint::new_buffer_vector(int width, int height, int colormodel)
{
buffer_in = new VFrame*[total_input_buffers];
buffer_out = new VFrame*[total_input_buffers];
if(buffer_vector &&
(width != buffer_vector[0]->get_w() ||
height != buffer_vector[0]->get_h() ||
colormodel != buffer_vector[0]->get_color_model()))
{
delete_buffer_vector();
}
 
if(!buffer_vector)
{
buffer_vector = new VFrame*[virtual_plugins.total];
for(int i = 0; i < virtual_plugins.total; i++)
{
buffer_vector[i] = new VFrame(0,
width,
height,
colormodel,
-1);
}
}
}
 
int VAttachmentPoint::get_buffer_size()
33,43 → 60,70
return 1;
}
 
void VAttachmentPoint::render(VFrame *video_in,
VFrame *video_out,
long current_position)
void VAttachmentPoint::render(VFrame *output,
int buffer_number,
long start_position,
double frame_rate)
{
//printf("VAttachmentPoint::render 1\n");
// Arm buffer vectors
buffer_in[current_buffer] = video_in;
buffer_out[current_buffer] = video_out;
if(!plugin_server || !plugin->on) return;
 
if(plugin_server->multichannel)
{
// Test against previous parameters for reuse of previous data
if(is_processed &&
this->start_position == start_position &&
EQUIV(this->frame_rate, frame_rate))
{
output->copy_from(buffer_vector[buffer_number]);
return;
}
 
is_processed = 1;
this->start_position = start_position;
this->frame_rate = frame_rate;
 
//printf("VAttachmentPoint::render 2\n");
// Run base class
AttachmentPoint::render(current_position, 1);
//printf("VAttachmentPoint::render 3\n");
}
// Allocate buffer vector
new_buffer_vector(output->get_w(),
output->get_h(),
output->get_color_model());
 
void VAttachmentPoint::dispatch_plugin_server(int buffer_number,
long current_position,
long fragment_size)
{
// Current position must be relative to plugin position since the keyframes
// are relative.
// Create temporary vector with output argument substituted in
VFrame **output_temp = new VFrame*[virtual_plugins.total];
for(int i = 0; i < virtual_plugins.total; i++)
{
if(i == buffer_number)
output_temp[i] = output;
else
output_temp[i] = buffer_vector[i];
}
 
//printf("VAttachmentPoint::dispatch_plugin_server 1 %d %d\n", current_position, plugin->startproject);
if(plugin_server->multichannel)
plugin_servers.values[0]->process_realtime(
buffer_in,
buffer_out,
current_position /* - plugin->startproject */,
plugin->length);
// Process plugin
plugin_servers.values[0]->process_buffer(output_temp,
start_position,
frame_rate,
(int64_t)Units::round(plugin->length *
frame_rate /
renderengine->edl->session->frame_rate),
renderengine->command->get_direction());
 
delete [] output_temp;
}
else
plugin_servers.values[buffer_number]->process_realtime(
&buffer_in[buffer_number],
&buffer_out[buffer_number],
current_position /* - plugin->startproject */,
plugin->length);
//printf("VAttachmentPoint::dispatch_plugin_server 2\n");
// process single track
{
//printf("VAttachmentPoint::render 1\n");
VFrame *output_temp[1];
output_temp[0] = output;
//printf("VAttachmentPoint::render 1 %s\n", plugin_server->title);
plugin_servers.values[buffer_number]->process_buffer(output_temp,
start_position,
frame_rate,
(int64_t)Units::round(plugin->length *
frame_rate /
renderengine->edl->session->frame_rate),
renderengine->command->get_direction());
//printf("VAttachmentPoint::render 100\n");
}
}
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/commonrender.h
50,10 → 50,11
int last_playback;
// if this media type is being rendered asynchronously by threads
int asynchronous;
// Module for every track to dispatch plugins in
// Module for every track to dispatch plugins in whether the track is
// playable or not.
// Maintain module structures here instead of reusing the EDL so
// plugins persist if the EDL is replaced.
// Modules persist after vconsole is restarted
// Modules can persist after vconsole is restarted.
int total_modules;
Module **modules;
int data_type;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/apluginarray.C
47,35 → 47,31
}
}
 
void APluginArray::load_module(int module, int64_t input_position, int64_t len)
{
if(module == 0) realtime_buffers = file->get_audio_buffer();
//printf("APluginArray::load_module 1 %d %d %p %p\n", module, len, realtime_buffers, realtime_buffers[module]);
((AModule*)modules[module])->render(realtime_buffers[module],
len,
input_position,
PLAY_FORWARD,
0);
}
// void APluginArray::load_module(int module, int64_t input_position, int64_t len)
// {
// if(module == 0) realtime_buffers = file->get_audio_buffer();
// ((AModule*)modules[module])->render(realtime_buffers[module],
// len,
// input_position,
// PLAY_FORWARD,
// 0);
// }
 
void APluginArray::process_realtime(int module, int64_t input_position, int64_t len)
{
//printf("APluginArray::process_realtime 1 %d %p %p\n", len, realtime_buffers, realtime_buffers[0]);
values[module]->process_realtime(realtime_buffers + module,
realtime_buffers + module,
values[module]->process_buffer(realtime_buffers + module,
input_position,
len,
0);
edl->session->sample_rate,
0,
PLAY_FORWARD);
}
 
int APluginArray::process_loop(int module, int64_t &write_length)
{
//printf("APluginArray::process_loop 1\n");
if(!realtime_buffers) realtime_buffers = file->get_audio_buffer();
//printf("APluginArray::process_loop 2\n");
int result = values[module]->process_loop(&realtime_buffers[module],
write_length);
//printf("APluginArray::process_loop 3\n");
return result;
}
 
93,13 → 89,13
 
int64_t APluginArray::get_bufsize()
{
return mwindow->edl->session->sample_rate;
return edl->session->sample_rate;
}
 
 
void APluginArray::get_recordable_tracks()
{
tracks = new RecordableATracks(mwindow->edl->tracks);
tracks = new RecordableATracks(edl->tracks);
}
 
int APluginArray::total_tracks()
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/virtualnode.h
27,32 → 27,24
Module *real_module,
Plugin *real_plugin,
Track *track,
VirtualNode *parent_module,
int input_is_master,
int output_is_master,
int in,
int out);
VirtualNode *parent_node);
 
friend class VirtualConsole;
 
virtual ~VirtualNode();
void dump(int indent);
 
// derived node creates buffers here
virtual void new_output_buffer() { };
virtual void new_input_buffer() { };
 
 
// expand plugins
int expand(int persistant_plugins, int64_t current_position);
// create buffers and convenience pointers
int expand_buffers();
int expand(int persistent_plugins, int64_t current_position);
// create convenience pointers to shared memory depending on the data type
virtual int create_buffer_ptrs() {};
// create a node for a module
// create a node for a module and expand it
int attach_virtual_module(Plugin *plugin,
int plugin_number,
int duplicate,
int64_t current_position);
// create a node for a plugin
// create a node for a plugin and expand it
int attach_virtual_plugin(Plugin *plugin,
int plugin_number,
int duplicate,
62,28 → 54,37
Track *track) { return 0; };
virtual VirtualNode* create_plugin(Plugin *real_plugin) { return 0; };
 
int render_as_plugin(int64_t source_len,
int64_t source_position,
int ring_buffer,
int64_t fragment_position,
int64_t fragment_len);
/*
* int render_as_plugin(int64_t source_len,
* int64_t source_position,
* int ring_buffer,
* int64_t fragment_position,
* int64_t fragment_len);
*/
 
int get_plugin_input(int &double_buffer_in, int64_t &fragment_position_in,
int &double_buffer_out, int64_t &fragment_position_out,
int double_buffer, int64_t fragment_position);
// Called by read_data to get the previous plugin in a parent node's subnode
// table.
VirtualNode* get_previous_plugin(VirtualNode *current_plugin);
 
/*
* int get_plugin_input(int &double_buffer_in, int64_t &fragment_position_in,
* int &double_buffer_out, int64_t &fragment_position_out,
* int double_buffer, int64_t fragment_position);
*/
 
// Get the order to render modules and plugins attached to this.
// Return 1 if not completed after this pass.
int sort(ArrayList<VirtualNode*>*render_list);
// int sort(ArrayList<VirtualNode*>*render_list);
 
// virtual plugins this module owns
ArrayList<VirtualNode*> vplugins;
// subnodes this node owns
// was vplugins
ArrayList<VirtualNode*> subnodes;
// Attachment point in Module if this is a virtual plugin
AttachmentPoint *attachment;
 
VirtualConsole *vconsole;
// module which created this node.
VirtualNode *parent_module;
// node which created this node.
VirtualNode *parent_node;
// use these to determine if this node is a plugin or module
// Top level virtual node of module
Module *real_module;
104,15 → 105,8
int plugin_type; // type of plugin in case user changes it
int render_count; // times this plugin has been added to the render list
int waiting_real_plugin; // real plugin tests this to see if virtual plugin is waiting on it when sorting
// for deleting need to know if buffers are owned by someone else
int shared_input;
int shared_output;
// where this node should get its input and output from
int in;
int out;
// module needs to know where the input data for the next process is
int data_in_input;
// plugin needs to know what buffer number each fragment position corresponds to
// attachment point needs to know what buffer to put data into from
// a multichannel plugin
int plugin_buffer_number;
 
// Mute automation.
126,24 → 120,26
int use_nudge);
 
// convenience routines for fade automation
void get_fade_automation(double &slope,
double &intercept,
int64_t input_position,
int64_t &slope_len,
Autos *autos);
/*
* void get_fade_automation(double &slope,
* double &intercept,
* int64_t input_position,
* int64_t &slope_len,
* Autos *autos);
*
* int init_automation(int &automate,
* double &constant,
* int64_t input_position,
* int64_t buffer_len,
* Autos *autos,
* Auto **before,
* Auto **after);
*
* int init_slope(Autos *autos, Auto **before, Auto **after);
* int get_slope(Autos *autos, int64_t buffer_len, int64_t buffer_position);
* int advance_slope(Autos *autos);
*/
 
int init_automation(int &automate,
double &constant,
int64_t input_position,
int64_t buffer_len,
Autos *autos,
Auto **before,
Auto **after);
 
int init_slope(Autos *autos, Auto **before, Auto **after);
int get_slope(Autos *autos, int64_t buffer_len, int64_t buffer_position);
int advance_slope(Autos *autos);
 
protected:
 
// ======================= plugin automation
159,15 → 155,13
double slope;
double value;
 
int reverse; // Temporary set for each render
int64_t input_start, input_end;
int64_t buffer_position; // position in both input and output buffer
 
private:
int sort_as_module(ArrayList<VirtualNode*>*render_list, int &result, int &total_result);
int sort_as_plugin(ArrayList<VirtualNode*>*render_list, int &result, int &total_result);
int expand_as_module(int duplicate, int64_t current_position);
int expand_as_plugin(int duplicate);
int is_exit;
};
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/playbackengine.C
70,7 → 70,7
// Set the first change to maximum
que->command.change_type = CHANGE_ALL;
 
*preferences = *mwindow->preferences;
preferences->copy_from(mwindow->preferences);
 
done = 0;
Thread::start();
92,7 → 92,7
 
//printf("PlaybackEngine::create_render_engines %d\n", command->get_edl()->session->playback_config[playback_strategy].total);
for(int i = 0;
i < command->get_edl()->session->playback_config[playback_strategy].total;
i < command->get_edl()->session->get_playback_heads(playback_strategy);
i++)
{
RenderEngine *engine = new RenderEngine(this,
164,7 → 164,6
 
void PlaybackEngine::perform_change()
{
//printf("PlaybackEngine::perform_change 1 %x\n", command->change_type);
switch(command->change_type)
{
case CHANGE_ALL:
172,16 → 171,13
case CHANGE_EDL:
audio_cache->set_edl(command->get_edl());
video_cache->set_edl(command->get_edl());
//printf("PlaybackEngine::perform_change 1\n");
create_render_engines();
case CHANGE_PARAMS:
//printf("PlaybackEngine::perform_change 1\n");
if(command->change_type != CHANGE_EDL &&
command->change_type != CHANGE_ALL)
for(int i = 0; i < render_engines.total; i++)
render_engines.values[i]->edl->synchronize_params(command->get_edl());
case CHANGE_NONE:
//printf("PlaybackEngine::perform_change 2\n");
break;
}
}
479,29 → 475,29
return 0;
}
 
int PlaybackEngine::init_parameters()
{
// is_playing_back = 1;
update_button = 1;
correction_factor = 0;
// int PlaybackEngine::init_parameters()
// {
// // is_playing_back = 1;
// update_button = 1;
// correction_factor = 0;
//
// // correct playback buffer sizes
// input_length =
// playback_buffer =
// output_length =
// audio_module_fragment =
// command->get_edl()->session->audio_module_fragment;
//
// // get maximum actual buffer size written to device plus padding
// if(speed != 1) output_length = (long)(output_length / speed) + 16;
// if(output_length < playback_buffer) output_length = playback_buffer;
//
// // samples to read at a time is a multiple of the playback buffer greater than read_length
// while(input_length < command->get_edl()->session->audio_module_fragment)
// input_length += playback_buffer;
// return 0;
// }
 
// correct playback buffer sizes
input_length =
playback_buffer =
output_length =
audio_module_fragment =
command->get_edl()->session->audio_module_fragment;
 
// get maximum actual buffer size written to device plus padding
if(speed != 1) output_length = (long)(output_length / speed) + 16;
if(output_length < playback_buffer) output_length = playback_buffer;
 
// samples to read at a time is a multiple of the playback buffer greater than read_length
while(input_length < command->get_edl()->session->audio_read_length)
input_length += playback_buffer;
return 0;
}
 
int PlaybackEngine::init_audio_device()
{
return 0;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/cwindowgui.C
81,7 → 81,7
{
set_icon(mwindow->theme->cwindow_icon);
 
mwindow->theme->get_cwindow_sizes(this);
mwindow->theme->get_cwindow_sizes(this, mwindow->session->cwindow_controls);
mwindow->theme->draw_cwindow_bg(this);
flash();
 
175,7 → 175,7
mwindow->session->cwindow_h = h;
 
//printf("CWindowGUI::resize_event 1\n");
mwindow->theme->get_cwindow_sizes(this);
mwindow->theme->get_cwindow_sizes(this, mwindow->session->cwindow_controls);
mwindow->theme->draw_cwindow_bg(this);
flash();
 
238,17 → 238,13
// refresh it anyway.
void CWindowGUI::set_operation(int value)
{
//printf("CWindowGUI::set_operation 1 %d\n", value);
mwindow->edl->session->cwindow_operation = value;
//printf("CWindowGUI::set_operation 1 %d\n", value);
 
composite_panel->set_operation(value);
//printf("CWindowGUI::set_operation 1 %d\n", value);
edit_panel->update();
 
tool_panel->start_tool(value);
canvas->draw_refresh();
//printf("CWindowGUI::set_operation 2 %d\n", value);
}
 
void CWindowGUI::update_tool()
459,9 → 455,8
 
int CWindowMeters::change_status_event()
{
//printf("CWindowMeters::change_status_event 1 %d\n", gui->meters->use_meters);
mwindow->edl->session->cwindow_meter = use_meters;
mwindow->theme->get_cwindow_sizes(gui);
mwindow->theme->get_cwindow_sizes(gui, mwindow->session->cwindow_controls);
gui->resize_event(gui->get_w(), gui->get_h());
return 1;
}
501,19 → 496,25
mwindow->edl->session->cwindow_scrollbars = 1;
}
 
//printf("CWindowZoom::handle_event 1 %d %d\n", gui->canvas->get_xscroll(), gui->canvas->get_yscroll());
gui->canvas->update_zoom(gui->canvas->get_xscroll(),
gui->canvas->get_yscroll(),
get_value());
//printf("CWindowZoom::handle_event 2 %d %d\n", gui->canvas->get_xscroll(), gui->canvas->get_yscroll());
float old_zoom = mwindow->edl->session->cwindow_zoom;
float new_zoom = get_value();
float x = gui->canvas->w / 2;
float y = gui->canvas->h / 2;
gui->canvas->canvas_to_output(mwindow->edl,
0,
x,
y);
x -= gui->canvas->w_visible / 2 * old_zoom / new_zoom;
y -= gui->canvas->h_visible / 2 * old_zoom / new_zoom;
gui->canvas->update_zoom((int)x,
(int)y,
new_zoom);
gui->canvas->reposition_window(mwindow->edl,
mwindow->theme->ccanvas_x,
mwindow->theme->ccanvas_y,
mwindow->theme->ccanvas_w,
mwindow->theme->ccanvas_h);
//printf("CWindowZoom::handle_event 3 %d %d\n", gui->canvas->get_xscroll(), gui->canvas->get_yscroll());
gui->canvas->draw_refresh();
//printf("CWindowZoom::handle_event 4 %d %d\n", gui->canvas->get_xscroll(), gui->canvas->get_yscroll());
return 1;
}
 
714,8 → 715,9
out_h);
 
 
// printf("CWindowCanvas::draw_refresh %d %d %d %d -> %d %d %d %d\n", in_x, in_y, in_w, in_h, out_x, out_y, out_w, out_h);
// canvas->clear_box(0, 0, canvas->get_w(), canvas->get_h());
// printf("CWindowCanvas::draw_refresh %d %d %d %d -> %d %d %d %d\n",
// in_x, in_y, in_w, in_h, out_x, out_y, out_w, out_h);
//canvas->clear_box(0, 0, canvas->get_w(), canvas->get_h());
 
 
//printf("CWindowCanvas::draw_refresh 5\n");
1130,7 → 1132,6
 
if(button_press && !result)
{
//printf("CWindowCanvas::do_mask 5\n");
gui->affected_track = gui->cwindow->calculate_affected_track();
// Get current keyframe
if(gui->affected_track)
1140,7 → 1141,6
MaskAuto *keyframe = (MaskAuto*)gui->affected_auto;
SubMask *mask = keyframe->get_submask(mwindow->edl->session->cwindow_mask);
 
//printf("CWindowCanvas::do_mask 6 %d %d\n", gui->alt_down(), mask->points.total);
 
// Translate entire keyframe
if(gui->alt_down() && mask->points.total)
1186,6 → 1186,9
 
 
 
// printf("CWindowGUI::do_mask 40\n");
// mwindow->edl->dump();
// printf("CWindowGUI::do_mask 50\n");
 
 
 
1221,15 → 1224,21
current; )
{
SubMask *submask = current->get_submask(mwindow->edl->session->cwindow_mask);
MaskPoint *new_point = new MaskPoint;
submask->points.append(0);
for(int i = submask->points.total - 1;
i > shortest_point2;
i--)
submask->points.values[i] = submask->points.values[i - 1];
submask->points.values[shortest_point2] = new_point;
// In case the keyframe point count isn't synchronized with the rest of the keyframes,
// avoid a crash.
if(submask->points.total >= shortest_point2)
{
MaskPoint *new_point = new MaskPoint;
submask->points.append(0);
for(int i = submask->points.total - 1;
i > shortest_point2;
i--)
submask->points.values[i] = submask->points.values[i - 1];
submask->points.values[shortest_point2] = new_point;
 
*new_point = *point;
*new_point = *point;
}
 
if(current == (MaskAuto*)mask_autos->default_auto)
current = (MaskAuto*)mask_autos->first;
else
1240,9 → 1249,11
gui->affected_point = shortest_point2;
result = 1;
}
//printf("CWindowCanvas::do_mask 3 %d\n", mask->points.total);
 
 
// printf("CWindowGUI::do_mask 20\n");
// mwindow->edl->dump();
// printf("CWindowGUI::do_mask 30\n");
 
 
 
1287,18 → 1298,19
 
 
 
//printf("CWindowCanvas::do_mask 2 %d %d %f %f\n", get_cursor_x(), get_cursor_y(), gui->affected_point->x, gui->affected_point->y);
gui->current_operation = mwindow->edl->session->cwindow_operation;
// Delete the template
delete point;
//printf("CWindowGUI::do_mask 1\n");
mwindow->undo->update_undo_after();
//printf("CWindowCanvas::do_mask 4\n");
//printf("CWindowGUI::do_mask 10\n");
 
}
 
result = 1;
rerender = 1;
redraw = 1;
}
//printf("CWindowCanvas::do_mask 7\n");
 
if(button_press && result)
{
1557,6 → 1569,7
output_to_canvas(mwindow->edl, 0, canvas_x1, canvas_y1);
output_to_canvas(mwindow->edl, 0, canvas_x2, canvas_y2);
 
 
if(gui->current_operation == CWINDOW_CROP)
{
handle_selected = gui->crop_handle;
1702,6 → 1715,36
!EQUIV(mwindow->edl->session->crop_y1, y1) ||
!EQUIV(mwindow->edl->session->crop_y2, y2))
{
if (x1 > x2)
{
float tmp = x1;
x1 = x2;
x2 = tmp;
switch (gui->crop_handle)
{
case 0: gui->crop_handle = 1; break;
case 1: gui->crop_handle = 0; break;
case 2: gui->crop_handle = 3; break;
case 3: gui->crop_handle = 2; break;
default: break;
}
 
}
if (y1 > y2)
{
float tmp = y1;
y1 = y2;
y2 = tmp;
switch (gui->crop_handle)
{
case 0: gui->crop_handle = 2; break;
case 1: gui->crop_handle = 3; break;
case 2: gui->crop_handle = 0; break;
case 3: gui->crop_handle = 1; break;
default: break;
}
}
 
mwindow->edl->session->crop_x1 = (int)x1;
mwindow->edl->session->crop_y1 = (int)y1;
mwindow->edl->session->crop_x2 = (int)x2;
1912,15 → 1955,18
 
if(draw)
{
// Drop shadow
canvas->set_color(BLACK);
DRAW_THING(1);
 
canvas->set_inverse();
if(current->position > position)
canvas->set_color(GREEN);
else
canvas->set_color(RED);
 
DRAW_THING(0);
canvas->set_opaque();
// printf("CWindowCanvas::do_bezier_center 2 %f,%f %f,%f\n",
// control_in_x,
// control_in_y,
2029,15 → 2075,18
output_to_canvas(mwindow->edl, 0, x1, y1);
output_to_canvas(mwindow->edl, 0, x2, y2);
 
canvas->set_color(BLACK);
canvas->draw_line((int)x1 + 1, (int)y1 + 1, (int)x2 + 1, (int)y2 + 1);
// Drop shadow
// canvas->set_color(BLACK);
// canvas->draw_line((int)x1 + 1, (int)y1 + 1, (int)x2 + 1, (int)y2 + 1);
 
if(frame >= position)
canvas->set_color(GREEN);
else
canvas->set_color(RED);
 
canvas->set_inverse();
canvas->draw_line((int)x1, (int)y1, (int)x2, (int)y2);
canvas->set_opaque();
old_x = new_x;
old_y = new_y;
}
2572,7 → 2621,6
int x = (int)(gui->x_origin - cursor_x + gui->x_offset);
int y = (int)(gui->y_origin - cursor_y + gui->y_offset);
 
 
update_zoom(x,
y,
zoom);
2714,6 → 2762,17
draw_refresh();
gui->update_tool();
}
 
if(rerender) /* rerendering can also be caused by press event */
{
mwindow->restart_brender();
mwindow->sync_parameters(CHANGE_PARAMS);
gui->cwindow->playback_engine->que->send_command(CURRENT_FRAME,
CHANGE_NONE,
mwindow->edl,
1);
if(!redraw) gui->update_tool();
}
return result;
}
 
2749,3 → 2808,17
gui->resize_window(new_w, new_h);
gui->resize_event(new_w, new_h);
}
 
void CWindowCanvas::toggle_controls()
{
mwindow->session->cwindow_controls = !mwindow->session->cwindow_controls;
gui->resize_event(gui->get_w(), gui->get_h());
}
 
int CWindowCanvas::get_cwindow_controls()
{
return mwindow->session->cwindow_controls;
}
 
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/arender.h
47,6 → 47,8
int total_peaks;
// Next level to store value in
int current_level[MAXCHANNELS];
// Make VirtualAConsole block before the first buffer until video is ready
int first_buffer;
 
 
 
54,14 → 56,12
 
 
 
 
 
// get the data type for certain commonrender routines
int get_datatype();
 
// handle playback autos and transitions
int restart_playback();
int send_reconfigure_buffer();
// int restart_playback();
// int send_reconfigure_buffer();
 
// process a buffer
// renders into buffer_out argument when no audio device
70,6 → 70,7
// renders to a device when there's a device
int process_buffer(int64_t input_len, int64_t input_position);
 
void send_last_buffer();
int wait_device_completion();
 
// reverse the data in a buffer
84,6 → 85,7
 
int64_t source_length; // Total number of frames to render for transitions
 
 
private:
// initialize buffer_out
int init_meters();
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/vattachmentpoint.h
11,15 → 11,18
VAttachmentPoint(RenderEngine *renderengine, Plugin *plugin);
~VAttachmentPoint();
void delete_buffer_vectors();
void new_buffer_vectors();
void render(VFrame *video_in, VFrame *video_out, long current_position);
void delete_buffer_vector();
void new_buffer_vector(int width, int height, int colormodel);
void render(VFrame *output,
int buffer_number,
long start_position,
double frame_rate);
void dispatch_plugin_server(int buffer_number,
long current_position,
long fragment_size);
int64_t current_position,
int64_t fragment_size);
int get_buffer_size();
 
VFrame **buffer_in, **buffer_out;
VFrame **buffer_vector;
};
 
#endif
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/apluginarray.h
17,7 → 17,7
int64_t get_bufsize();
void create_buffers();
void create_modules();
void load_module(int module, int64_t input_position, int64_t len);
// void load_module(int module, int64_t input_position, int64_t len);
void process_realtime(int module, int64_t input_position, int64_t len);
int process_loop(int module, int64_t &write_length);
int write_buffers(int64_t len);
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/edl.C
102,9 → 102,8
 
EDL& EDL::operator=(EDL &edl)
{
//printf("EDL::operator= 1\n");
printf("EDL::operator= 1\n");
copy_all(&edl);
//printf("EDL::operator= 2\n");
return *this;
}
 
340,8 → 339,8
copy_session(edl);
copy_assets(edl);
copy_clips(edl);
*this->tracks = *edl->tracks;
*this->labels = *edl->labels;
tracks->copy_from(edl->tracks);
labels->copy_from(edl->labels);
return 0;
}
 
365,7 → 364,9
void EDL::copy_assets(EDL *edl)
{
if(!parent_edl)
*this->assets = *edl->assets;
{
assets->copy_from(edl->assets);
}
}
 
void EDL::copy_session(EDL *edl)
644,11 → 645,8
double EDL::equivalent_output(EDL *edl)
{
double result = -1;
//printf("EDL::equivalent_output 1 %f\n", result);
session->equivalent_output(edl->session, &result);
//printf("EDL::equivalent_output 2 %f\n", result);
tracks->equivalent_output(edl->tracks, &result);
//printf("EDL::equivalent_output 3 %f\n", result);
return result;
}
 
969,16 → 967,16
// Insert asset into asset table
Asset *new_asset = assets->update(asset);
 
 
// Paste video
int vtrack = 0;
Track *current = first_track ? first_track : tracks->first;
 
//printf("EDL::insert_asset 1\n");
 
// Fix length of single frame
double length;
 
 
if(new_asset->video_length < 0)
length = 1.0 / session->frame_rate;
else
987,7 → 985,6
else
length = 1.0 / session->frame_rate;
 
//printf("EDL::insert_asset 2 %f\n", length);
for( ;
current && vtrack < new_asset->layers;
current = NEXT)
996,13 → 993,11
current->data_type != TRACK_VIDEO)
continue;
 
//printf("EDL::insert_asset 3\n");
current->insert_asset(new_asset,
length,
position,
vtrack);
 
//printf("EDL::insert_asset 4\n");
vtrack++;
}
 
1015,14 → 1010,12
current->data_type != TRACK_AUDIO)
continue;
 
//printf("EDL::insert_asset 5\n");
current->insert_asset(new_asset,
(double)new_asset->audio_length /
new_asset->sample_rate,
position,
atrack);
 
//printf("EDL::insert_asset 6\n");
 
atrack++;
}
1031,12 → 1024,9
{
for(RecordLabel *label = labels->first; label; label = label->next)
{
//printf("EDL::insert_asset 1 %f\n", label->position);
this->labels->toggle_label(label->position, label->position);
}
}
 
// optimize();
}
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/playbackengine.h
147,9 → 147,9
long audio_module_fragment;
 
// ================================== audio config
long input_length; // number of samples to read from disk at a time
// multiple of playback_buffer greater than read_buffer
long output_length; // # of samples to write to device adjusted for speed
// long input_length; // number of samples to read from disk at a time
// // multiple of playback_buffer greater than read_buffer
// long output_length; // # of samples to write to device adjusted for speed
int shared_audio; // for duplex audio recording
 
// ================================== video config
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/cwindowgui.h
236,6 → 236,8
void draw_bezier(int do_camera);
void draw_crop();
void calculate_origin();
void toggle_controls();
int get_cwindow_controls();
 
MWindow *mwindow;
CWindowGUI *gui;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/cache.C
19,7 → 19,7
{
this->edl = new EDL;
this->edl->create_objects();
*this->edl = *edl;
this->edl->copy_all(edl);
this->plugindb = plugindb;
this->preferences = preferences;
check_in_lock = new Mutex("CICache::check_in_lock");
38,7 → 38,7
 
void CICache::set_edl(EDL *edl)
{
*this->edl = *edl;
this->edl->copy_all(edl);
}
 
void CICache::update(File* &file)
105,6 → 105,8
}
}
 
 
//printf("CICache::check_out %s\n", asset->path);
check_out_lock->unlock();
 
return result;
242,15 → 244,16
lock_all();
CICacheItem *current;
 
printf("CICache::dump total size %lld\n", get_memory_usage());
for(current = first; current; current = NEXT)
{
printf("cache item %x\n", current);
printf(" asset %x\n", current->asset);
printf(" %s\n", current->asset->path);
printf(" counter %lld\n", current->counter);
printf("cache item %x asset %x %s counter %lld\n",
current,
current->asset,
current->asset->path,
current->counter);
}
printf("total size %lld\n", get_memory_usage());
unlock_all();
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/aboutprefs.C
20,65 → 20,34
 
int AboutPrefs::create_objects()
{
int x = 5, y = 5;
int x = 5, y = 20;
 
 
 
 
 
 
BC_Pixmap *temp_pixmap = new BC_Pixmap(this,
mwindow->theme->about_bg,
PIXMAP_ALPHA);
draw_pixmap(temp_pixmap,
x,
y);
 
delete temp_pixmap;
 
 
x += mwindow->theme->about_bg->get_w() + 10;
y += get_text_height(LARGEFONT) * 2;
 
char license1[BCTEXTLEN];
sprintf (license1, _("Cinelerra "), VERSION);
sprintf(license1, "%s %s", _("Cinelerra "), CINELERRA_VERSION);
 
set_font(LARGEFONT);
set_color(BLACK);
draw_text(x, y, license1);
y += get_text_height(LARGEFONT);
 
char license2[BCTEXTLEN];
sprintf(license2, "%s%s%s",
_("(c) 2003 Heroine Virtual Ltd.\n\n"),
_("Build date: "),
BUILDDATE);
y += get_text_height(LARGEFONT) * 2;
set_font(MEDIUMFONT);
draw_text(x, y, license2);
 
 
 
y += get_text_height(MEDIUMFONT) * 3;
 
char license3[BCTEXTLEN];
sprintf(license3, _(
"This program is free software; you can\n"
"redistribute it and/or modify it under the terms\n"
"of the GNU General Public License as published\n"
"by the Free Software Foundation; either version\n"
"2 of the License, or (at your option) any later\n"
"version.\n"
"\n"
"This program is distributed in the hope that it\n"
"will be useful, but WITHOUT ANY WARRANTY;\n"
"without even the implied warranty of\n"
"MERCHANTABILITY or FITNESS FOR A PARTICULAR\n"
"PURPOSE. See the GNU General Public License for\n"
"more details.\n"
"\n"));
y += 100;
draw_text(x, y, license3);
 
 
char versions[BCTEXTLEN];
sprintf(versions,
_("Quicktime version %d.%d.%d\n"
89,11 → 58,62
mpeg3_major(),
mpeg3_minor(),
mpeg3_release());
y += 250;
draw_text(10, y, versions);
draw_text(x, y, versions);
 
 
 
y += get_text_height(MEDIUMFONT) * 3;
set_font(LARGEFONT);
draw_text(x, y, "Credits:");
y += get_text_height(LARGEFONT);
set_font(MEDIUMFONT);
 
char credits[BCTEXTLEN];
sprintf(credits,
"Richard Baverstock\n"
"Alex Ferrer\n"
"Eric Seigne\n"
"Andraz Tori\n"
"\"ga\"\n"
);
draw_text(x, y, credits);
 
y = 450;
 
set_font(LARGEFONT);
draw_text(x, y, "License:");
y += get_text_height(LARGEFONT);
 
set_font(MEDIUMFONT);
 
char license3[BCTEXTLEN];
sprintf(license3, _(
"This program is free software; you can redistribute it and/or modify it under the terms\n"
"of the GNU General Public License as published by the Free Software Foundation; either version\n"
"2 of the License, or (at your option) any later version.\n"
"\n"
"This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n"
"without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n"
"PURPOSE. See the GNU General Public License for more details.\n"
"\n"));
draw_text(x, y, license3);
 
x = get_w() - mwindow->theme->about_bg->get_w() - 10;
y = 5;
BC_Pixmap *temp_pixmap = new BC_Pixmap(this,
mwindow->theme->about_bg,
PIXMAP_ALPHA);
draw_pixmap(temp_pixmap,
x,
y);
 
delete temp_pixmap;
 
 
x += mwindow->theme->about_bg->get_w() + 10;
y += get_text_height(LARGEFONT) * 2;
 
 
flash();
flush();
return 0;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/recordmonitor.C
1,5 → 1,6
#include "asset.h"
#include "channelpicker.h"
#include "condition.h"
#include "cursors.h"
#include "libdv.h"
#include "edl.h"
38,48 → 39,38
 
RecordMonitor::~RecordMonitor()
{
//printf("RecordMonitor::~RecordMonitor 1\n");
if(thread)
{
thread->stop_playback();
delete thread;
}
//printf("RecordMonitor::~RecordMonitor 1\n");
window->set_done(0);
//printf("RecordMonitor::~RecordMonitor 1\n");
Thread::join();
//printf("RecordMonitor::~RecordMonitor 1\n");
if(device)
{
device->close_all();
delete device;
}
//printf("RecordMonitor::~RecordMonitor 1\n");
delete window;
//printf("RecordMonitor::~RecordMonitor 2\n");
}
 
int RecordMonitor::create_objects()
{
//printf("RecordMonitor::create_objects 1\n");
window = new RecordMonitorGUI(mwindow,
record,
this);
//printf("RecordMonitor::create_objects 2\n");
window->create_objects();
//printf("RecordMonitor::create_objects 3\n");
 
if(record->default_asset->video_data)
{
// Configure the output for record monitoring
VideoOutConfig config(PLAYBACK_LOCALHOST, 0);
device = new VideoDevice;
//printf("RecordMonitor::create_objects 4\n");
 
 
 
// Override default device for X11 drivers
if(mwindow->edl->session->playback_config[PLAYBACK_LOCALHOST].values[0]->vconfig->driver ==
if(mwindow->edl->session->get_playback_config(PLAYBACK_LOCALHOST, 0)->vconfig->driver ==
PLAYBACK_X11_XV) config.driver = PLAYBACK_X11_XV;
config.x11_use_fields = 0;
 
644,6 → 635,8
this->record_monitor = record_monitor;
this->record = record;
reset_parameters();
output_lock = new Condition(1, "RecordMonitor::output_lock");
input_lock = new Condition(1, "RecordMonitor::input_lock");
}
 
 
660,6 → 653,8
RecordMonitorThread::~RecordMonitorThread()
{
if(input_frame && !shared_data) delete input_frame;
delete output_lock;
delete input_lock;
}
 
void RecordMonitorThread::init_output_format()
697,7 → 692,7
{
ready = 1;
done = 0;
output_lock.lock();
output_lock->lock("RecordMonitorThread::start_playback");
Thread::start();
return 0;
}
705,7 → 700,7
int RecordMonitorThread::stop_playback()
{
done = 1;
output_lock.unlock();
output_lock->unlock();
Thread::join();
//printf("RecordMonitorThread::stop_playback 1\n");
 
757,10 → 752,10
}
else
{
input_lock.lock();
input_lock->lock("RecordMonitorThread::write_frame");
input_frame = new_frame;
}
output_lock.unlock();
output_lock->unlock();
}
return 0;
}
802,7 → 797,7
 
void RecordMonitorThread::unlock_input()
{
if(shared_data) input_lock.unlock();
if(shared_data) input_lock->unlock();
}
 
int RecordMonitorThread::render_frame()
839,7 → 834,7
while(!done)
{
// Wait for next frame
output_lock.lock();
output_lock->lock("RecordMonitorThread::run");
if(done)
{
unlock_input();
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/overlayframe.C
598,12 → 598,14
scaletranslate_engine->input = translation_input;
scaletranslate_engine->in_x1 = (int)in_x1;
scaletranslate_engine->in_y1 = (int)in_y1;
scaletranslate_engine->in_x2 = (int)in_x2;
scaletranslate_engine->in_y2 = (int)in_y2;
// we need to do this mumbo-jumbo in order to get numerical stability
// other option would be to round all the coordinates
scaletranslate_engine->in_x2 = (int)in_x1 + (int)(in_x2 - in_x1);
scaletranslate_engine->in_y2 = (int)in_y1 + (int)(in_y2 - in_y1);
scaletranslate_engine->out_x1 = (int)out_x1;
scaletranslate_engine->out_y1 = (int)out_y1;
scaletranslate_engine->out_x2 = (int)out_x2;
scaletranslate_engine->out_y2 = (int)out_y2;
scaletranslate_engine->out_x2 = (int)out_x1 + (int)(out_x2 - out_x1);
scaletranslate_engine->out_y2 = (int)out_y1 + (int)(out_y2 - out_y1);
scaletranslate_engine->alpha = alpha;
scaletranslate_engine->mode = mode;
 
2254,7 → 2256,6
{ \
temp_type opacity = (temp_type)(alpha * max + 0.5); \
temp_type transparency = max - opacity; \
int out_w = out_x2 - out_x1; \
\
for(int i = pkg->out_row1; i < pkg->out_row2; i++) \
{ \
2373,6 → 2374,7
int out_y2 = scale_translate->out_y2;
float alpha = scale_translate->alpha;
int mode = scale_translate->mode;
int out_w = out_x2 - out_x1;
 
int *x_table;
int *y_table;
2382,7 → 2384,7
// Timer a;
// a.update();
//printf("ScaleTranslateUnit::process_package 1 %d\n", mode);
if(out_x2 - out_x1 != in_x2 - in_x1)
if(out_w != in_x2 - in_x1)
{
scale_array(x_table,
out_x1,
2399,6 → 2401,21
0);
 
 
if (mode == TRANSFER_REPLACE && (out_w == in_x2 - in_x1))
{
// if we have transfer replace and x direction is not scaled, PARTY!
char bytes_per_pixel = input->calculate_bytes_per_pixel(input->get_color_model());
int line_len = out_w * bytes_per_pixel;
int in_start_byte = in_x1 * bytes_per_pixel;
int out_start_byte = out_x1 * bytes_per_pixel;
for(int i = pkg->out_row1; i < pkg->out_row2; i++)
{
memcpy (out_rows[i] + out_start_byte,
in_rows[y_table[i - out_y1]] + in_start_byte ,
line_len);
}
 
} else
switch(input->get_color_model())
{
case BC_RGB888:
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/theme.C
562,7 → 562,7
{
}
 
void Theme::get_cwindow_sizes(CWindowGUI *gui)
void Theme::get_cwindow_sizes(CWindowGUI *gui, int cwindow_controls)
{
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/mwindow.C
23,6 → 23,7
#include "filesystem.h"
#include "filexml.h"
#include "indexfile.h"
#include "language.h"
#include "levelwindowgui.h"
#include "levelwindow.h"
#include "loadfile.inc"
69,10 → 70,6
 
#include <string.h>
 
#include <libintl.h>
#define _(String) gettext(String)
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
 
 
extern "C"
136,61 → 133,57
 
TRACE("MWindow::~MWindow 1\n");
clean_indexes();
TRACE("MWindow::~MWindow 2\n");
 
save_defaults();
TRACE("MWindow::~MWindow 3\n");
// Give up and go to a movie
exit(0);
 
TRACE("MWindow::~MWindow 2\n");
TRACE("MWindow::~MWindow 4\n");
delete mainprogress;
TRACE("MWindow::~MWindow 3\n");
delete audio_cache; // delete the cache after the assets
TRACE("MWindow::~MWindow 4\n");
delete video_cache; // delete the cache after the assets
TRACE("MWindow::~MWindow 5\n");
if(gui) delete gui;
TRACE("MWindow::~MWindow 6\n");
delete undo;
TRACE("MWindow::~MWindow 7\n");
delete preferences;
TRACE("MWindow::~MWindow 8\n");
delete defaults;
TRACE("MWindow::~MWindow 9\n");
delete render;
TRACE("MWindow::~MWindow 10\n");
// delete renderlist;
TRACE("MWindow::~MWindow 11\n");
delete awindow;
TRACE("MWindow::~MWindow 12\n");
delete vwindow;
TRACE("MWindow::~MWindow 13\n");
delete cwindow;
delete lwindow;
TRACE("MWindow::~MWindow 14\n");
plugin_guis->remove_all_objects();
TRACE("MWindow::~MWindow 15\n");
delete plugin_guis;
TRACE("MWindow::~MWindow 16\n");
delete plugin_gui_lock;
TRACE("MWindow::~MWindow 17\n");
}
 
void MWindow::init_defaults(Defaults* &defaults)
void MWindow::init_defaults(Defaults* &defaults, char *config_path)
{
// set the .bcast directory
char directory[BCTEXTLEN];
FileSystem fs;
 
sprintf(directory, "%s", BCASTDIR);
fs.complete_path(directory);
if(fs.is_dir(directory))
char path[BCTEXTLEN];
// Use user supplied path
if(config_path[0])
{
fs.create_dir(directory);
strcpy(path, config_path);
}
else
{
// set the .bcast path
FileSystem fs;
 
sprintf(path, "%s", BCASTDIR);
fs.complete_path(path);
if(fs.is_dir(path))
{
fs.create_dir(path);
}
 
// load the defaults
strcat(directory, "Cinelerra_rc");
strcat(path, "Cinelerra_rc");
}
 
defaults = new Defaults(directory);
defaults = new Defaults(path);
defaults->load();
}
 
271,6 → 264,8
{
plugindb = new ArrayList<PluginServer*>;
 
 
 
FileSystem cinelerra_fs;
ArrayList<FileSystem*> lad_fs;
int result = 0;
638,6 → 633,7
{
sighandler = new SigHandler;
sighandler->initialize();
ENABLE_BUFFER
}
 
void MWindow::init_render()
865,8 → 861,6
if(load_mode != LOAD_RESOURCESONLY)
{
asset_to_edl(new_edl, new_asset);
//printf("MWindow::load_filenames 1 %d %d\n", new_asset->video_length, new_asset->audio_length);
//new_edl->dump();
new_edls.append(new_edl);
delete new_asset;
}
999,7 → 993,9
return 0;
}
 
void MWindow::create_objects(int want_gui, int want_new)
void MWindow::create_objects(int want_gui,
int want_new,
char *config_path)
{
char string[BCTEXTLEN];
FileSystem fs;
1013,16 → 1009,16
// For some reason, init_signals must come after show_splash or the signals won't
// get trapped.
init_signals();
//printf("MWindow::create_objects 1\n");
 
 
init_menus();
TRACE("MWindow::create_objects 1");
init_defaults(defaults);
init_defaults(defaults, config_path);
TRACE("MWindow::create_objects 1");
init_preferences();
TRACE("MWindow::create_objects 1");
init_plugins(preferences, plugindb, splash_window);
if(splash_window) splash_window->operation->update("Initializing GUI");
if(splash_window) splash_window->operation->update(_("Initializing GUI"));
TRACE("MWindow::create_objects 1");
init_theme();
// Default project created here
1250,12 → 1246,10
}
else
{
//printf("MWindow::sync_parameters 1\n");
cwindow->playback_engine->que->send_command(CURRENT_FRAME,
change_type,
edl,
1);
//printf("MWindow::sync_parameters 2\n");
}
}
 
1331,10 → 1325,8
 
void MWindow::update_plugin_guis()
{
 
plugin_gui_lock->lock();
 
 
for(int i = 0; i < plugin_guis->total; i++)
{
plugin_guis->values[i]->update_gui();
1499,20 → 1491,20
void MWindow::update_project(int load_mode)
{
restart_brender();
TRACE("MWindow::update_project 1");
//TRACE("MWindow::update_project 1");
edl->tracks->update_y_pixels(theme);
 
// Draw timeline
TRACE("MWindow::update_project 1");
//TRACE("MWindow::update_project 2");
update_caches();
 
TRACE("MWindow::update_project 1");
TRACE("MWindow::update_project 3");
gui->update(1, 1, 1, 1, 1, 1, 1);
 
TRACE("MWindow::update_project 1");
TRACE("MWindow::update_project 4");
cwindow->update(0, 0, 1, 1, 1);
 
TRACE("MWindow::update_project 1");
TRACE("MWindow::update_project 5");
 
if(load_mode == LOAD_REPLACE ||
load_mode == LOAD_REPLACE_CONCATENATE)
1524,14 → 1516,18
vwindow->update(1);
}
 
TRACE("MWindow::update_project 6");
 
cwindow->gui->slider->set_position();
TRACE("MWindow::update_project 6.1");
cwindow->gui->timebar->update(1, 1);
TRACE("MWindow::update_project 6.2");
cwindow->playback_engine->que->send_command(CURRENT_FRAME,
CHANGE_ALL,
edl,
1);
 
TRACE("MWindow::update_project 7");
awindow->gui->lock_window("MWindow::update_project");
awindow->gui->update_assets();
awindow->gui->flush();
1715,19 → 1711,14
 
int MWindow::save_defaults()
{
//printf("MWindow::save_defaults 1\n");
gui->save_defaults(defaults);
edl->save_defaults(defaults);
//printf("MWindow::save_defaults 1\n");
session->save_defaults(defaults);
preferences->save_defaults(defaults);
//printf("MWindow::save_defaults 1\n");
 
save_tuner(channeldb_v4l, "channels_v4l");
save_tuner(channeldb_buz, "channels_buz");
//printf("MWindow::save_defaults 1\n");
defaults->save();
//printf("MWindow::save_defaults 2\n");
return 0;
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/module.C
96,27 → 96,27
else
new_attachments = 0;
 
// Create plugin servers later when nodes attach
// Create plugin servers in virtual console expansion
}
}
 
void Module::swap_attachments()
{
// None of this is used in a pluginarray
for(int new_attachment = 0, old_attachment = 0;
new_attachment < new_total_attachments &&
old_attachment < total_attachments;
new_attachment++, old_attachment++)
for(int i = 0;
i < new_total_attachments &&
i < total_attachments;
i++)
{
// Copy any old attachment which is identical to a new one
if(new_attachments[new_attachment] &&
attachments[old_attachment] &&
new_attachments[new_attachment]->plugin ==
attachments[old_attachment]->plugin)
// Delete new attachment which is identical to the old one and copy
// old attachment.
if(new_attachments[i] &&
attachments[i] &&
new_attachments[i]->identical(attachments[i]))
{
delete new_attachments[new_attachment];
new_attachments[new_attachment] = attachments[old_attachment];
attachments[old_attachment] = 0;
delete new_attachments[i];
new_attachments[i] = attachments[i];
attachments[i] = 0;
}
}
 
130,7 → 130,7
{
delete [] attachments;
}
 
attachments = new_attachments;
total_attachments = new_total_attachments;
}
158,6 → 158,16
return 0;
}
 
void Module::reset_attachments()
{
//printf("Module::reset_attachments 1 %d\n", total_attachments);
for(int i = 0; i < total_attachments; i++)
{
//printf("Module::reset_attachments 2 %p\n", attachments[i]);
AttachmentPoint *attachment = attachments[i];
if(attachment) attachment->reset_status();
}
}
 
// Test plugins for reconfiguration.
// Used in playback
192,7 → 202,8
return 0;
}
 
void Module::update_transition(int64_t current_position, int direction)
void Module::update_transition(int64_t current_position,
int direction)
{
Plugin *transition = track->get_current_transition(current_position,
direction,
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/recordmonitor.h
2,6 → 2,7
#define RECORDMONITOR_H
 
#include "canvas.h"
#include "condition.inc"
#include "guicast.h"
#include "channelpicker.inc"
#include "libmjpeg.h"
141,13 → 142,13
// Best color model given by device
int output_colormodel;
// Block until new input data
Mutex output_lock;
Condition *output_lock;
Condition *input_lock;
Record *record;
RecordMonitor *record_monitor;
MWindow *mwindow;
// If the input frame is the same data that the file handle uses
int shared_data;
Mutex input_lock;
 
 
private:
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/theme.h
45,7 → 45,7
int w,
int h);
virtual void get_vwindow_sizes(VWindowGUI *gui);
virtual void get_cwindow_sizes(CWindowGUI *gui);
virtual void get_cwindow_sizes(CWindowGUI *gui, int cwindow_controls);
virtual void get_awindow_sizes(AWindowGUI *gui);
virtual void get_rmonitor_sizes(int do_audio,
int do_video,
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/playbackconfig.C
3,11 → 3,15
#include "videodevice.inc"
#include <string.h>
 
AudioOutConfig::AudioOutConfig(int playback_strategy, int engine_number, int duplex)
AudioOutConfig::AudioOutConfig(int playback_strategy,
int engine_number,
int duplex)
{
this->duplex = duplex;
this->playback_strategy = playback_strategy;
this->engine_number = engine_number;
 
fragment_size = 16384;
driver = AUDIO_OSS;
 
oss_out_bits = 16;
54,7 → 58,8
int AudioOutConfig::operator==(AudioOutConfig &that)
{
return
(driver == that.driver) &&
(fragment_size == that.fragment_size &&
driver == that.driver) &&
!strcmp(oss_out_device[0], that.oss_out_device[0]) &&
(oss_out_channels[0] == that.oss_out_channels[0]) &&
(oss_out_bits == that.oss_out_bits) &&
81,6 → 86,7
 
AudioOutConfig& AudioOutConfig::operator=(AudioOutConfig &that)
{
fragment_size = that.fragment_size;
driver = that.driver;
strcpy(esound_out_server, that.esound_out_server);
esound_out_port = that.esound_out_port;
121,6 → 127,7
{
char string[BCTEXTLEN];
 
fragment_size = defaults->get("FRAGMENT_SIZE", fragment_size);
sprintf(string, "AUDIO_OUT_DRIVER_%d_%d_%d", playback_strategy, engine_number, duplex);
driver = defaults->get(string, driver);
// sprintf(string, "OSS_OUT_DEVICE_%d_%d_%d", playback_strategy, engine_number, duplex);
180,6 → 187,7
{
char string[BCTEXTLEN];
 
defaults->update("FRAGMENT_SIZE", fragment_size);
sprintf(string, "AUDIO_OUT_DRIVER_%d_%d_%d", playback_strategy, engine_number, duplex);
defaults->update(string, driver);
// sprintf(string, "OSS_OUT_DEVICE_%d_%d_%d", playback_strategy, engine_number, duplex);
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/virtualvnode.C
21,6 → 21,7
#include "virtualvconsole.h"
#include "virtualvnode.h"
#include "vmodule.h"
#include "vrender.h"
#include "vtrack.h"
 
#include <string.h>
31,38 → 32,21
Module *real_module,
Plugin *real_plugin,
Track *track,
VirtualNode *parent_module,
VFrame *buffer_in,
VFrame *buffer_out,
int input_is_master,
int output_is_master,
int in,
int out)
VirtualNode *parent_node)
: VirtualNode(renderengine,
vconsole,
real_module,
real_plugin,
track,
parent_module,
input_is_master,
output_is_master,
in,
out)
parent_node)
{
this->buffer_in = buffer_in;
this->buffer_out = buffer_out;
//printf("VirtualVNode::VirtualVNode 1\n");
overlayer = new OverlayFrame(renderengine->preferences->processors);
VRender *vrender = ((VirtualVConsole*)vconsole)->vrender;
fader = new FadeEngine(renderengine->preferences->processors);
masker = new MaskEngine(renderengine->preferences->processors);
}
 
VirtualVNode::~VirtualVNode()
{
//printf("VirtualVNode::~VirtualVNode 1\n");
if(!shared_output) delete buffer_out;
if(!shared_input) delete buffer_in;
delete overlayer;
delete fader;
delete masker;
}
76,13 → 60,7
real_module,
0,
track,
this,
data_in_input ? buffer_in : buffer_out,
buffer_out,
data_in_input ? input_is_master : output_is_master,
output_is_master,
real_plugin->in,
real_plugin->out);
this);
}
 
 
93,126 → 71,154
0,
real_plugin,
track,
this,
data_in_input ? buffer_in : buffer_out,
buffer_out,
data_in_input ? input_is_master : output_is_master,
output_is_master,
real_plugin->in,
real_plugin->out);
this);
}
 
 
void VirtualVNode::new_output_buffer()
int VirtualVNode::read_data(VFrame *output_temp,
int64_t start_position,
double frame_rate)
{
printf("VirtualVNode::new_input_buffer 1 %p\n", track);
buffer_out = new VFrame(0,
track->track_w,
track->track_h,
renderengine->edl->session->color_model,
-1);
}
VirtualNode *previous_plugin = 0;
 
void VirtualVNode::new_input_buffer()
{
printf("VirtualVNode::new_input_buffer 1 %p\n", track);
buffer_in = new VFrame(0,
track->track_w,
track->track_h,
renderengine->edl->session->color_model,
-1);
}
 
VFrame* VirtualVNode::get_module_input()
{
VFrame* result;
if(data_in_input)
if(!output_temp) printf("VirtualVNode::read_data output_temp=%p\n", output_temp);
//printf("VirtualVNode::read_data 1\n");
// This is a plugin on parent module with a preceeding effect.
// Get data from preceeding effect on parent module.
if(parent_node && (previous_plugin = parent_node->get_previous_plugin(this)))
{
result = buffer_in;
//printf("VirtualVNode::read_data 2\n");
((VirtualVNode*)previous_plugin)->render(output_temp,
start_position,
frame_rate);
//printf("VirtualVNode::read_data 3\n");
}
else
// First plugin on parent module.
// Read data from parent module
if(parent_node)
{
result = buffer_out;
((VirtualVNode*)parent_node)->read_data(output_temp,
start_position,
frame_rate);
}
return result;
}
else
{
// This is the first node in the tree
//printf("VirtualVNode::read_data 8\n");
((VModule*)real_module)->render(output_temp,
start_position,
renderengine->command->get_direction(),
frame_rate,
0);
//printf("VirtualVNode::read_data 9\n");
}
 
VFrame* VirtualVNode::get_module_output()
{
VFrame* result;
result = buffer_out;
return result;
//printf("VirtualVNode::read_data 10\n");
return 0;
}
 
int VirtualVNode::render(VFrame **video_out, int64_t input_position)
 
int VirtualVNode::render(VFrame *output_temp,
int64_t start_position,
double frame_rate)
{
VRender *vrender = ((VirtualVConsole*)vconsole)->vrender;
if(real_module)
{
render_as_module(video_out, input_position);
//printf("VirtualVNode::render 1\n");
render_as_module(vrender->video_out,
output_temp,
start_position,
frame_rate);
//printf("VirtualVNode::render 10\n");
}
else
if(real_plugin)
{
render_as_plugin(input_position);
//printf("VirtualVNode::render 20\n");
render_as_plugin(output_temp,
start_position,
frame_rate);
//printf("VirtualVNode::render 30\n");
}
return 0;
}
 
void VirtualVNode::render_as_plugin(int64_t input_position)
void VirtualVNode::render_as_plugin(VFrame *output_temp,
int64_t start_position,
double frame_rate)
{
//printf("VirtualVNode::render_as_plugin 1\n");
if(!attachment ||
!real_plugin ||
!real_plugin->on) return;
input_position += track->nudge;
 
((VAttachmentPoint*)attachment)->render(buffer_in,
buffer_out,
input_position);
//printf("VirtualVNode::render_as_plugin 2 %p\n", output_temp);
((VAttachmentPoint*)attachment)->render(
output_temp,
plugin_buffer_number,
start_position,
frame_rate);
//printf("VirtualVNode::render_as_plugin 100\n");
}
 
 
int VirtualVNode::render_as_module(VFrame **video_out, int64_t input_position)
int VirtualVNode::render_as_module(VFrame **video_out,
VFrame *output_temp,
int64_t start_position,
double frame_rate)
{
this->reverse = reverse;
VFrame *buffer_in = get_module_input();
VFrame *buffer_out = get_module_output();
//printf("VirtualVNode::render_as_module 1\n");
int direction = renderengine->command->get_direction();
double edl_rate = renderengine->edl->session->frame_rate;
 
input_position += track->nudge;
// Process last subnode. This propogates up the chain of subnodes and finishes
// the chain.
if(subnodes.total)
{
//printf("VirtualVNode::render_as_module 2\n");
VirtualVNode *node = (VirtualVNode*)subnodes.values[subnodes.total - 1];
node->render(output_temp,
start_position,
frame_rate);
//printf("VirtualVNode::render_as_module 3\n");
}
else
// Read data from previous entity
{
//printf("VirtualVNode::render_as_module 5\n");
read_data(output_temp,
start_position,
frame_rate);
//printf("VirtualVNode::render_as_module 6\n");
}
 
 
render_fade(buffer_in,
buffer_out,
input_position,
//printf("VirtualVNode::render_as_module 10\n");
render_fade(output_temp,
start_position,
frame_rate,
track->automation->fade_autos,
direction);
 
 
// video is definitely in output buffer now
 
// Render mask
masker->do_mask(buffer_out,
// Apply mask to output
masker->do_mask(output_temp,
start_position,
frame_rate,
edl_rate,
track->automation->mask_autos,
input_position,
renderengine->command->get_direction());
direction);
 
 
 
 
 
 
 
 
 
// overlay on the final output
// Get mute status
int mute_constant;
int64_t mute_fragment = 1;
int64_t mute_position = 0;
 
//printf("VirtualVNode::render_as_module 3\n");
 
// Is frame muted?
get_mute_fragment(input_position,
get_mute_fragment(start_position,
mute_constant,
mute_fragment,
(Autos*)((VTrack*)track)->automation->mute_autos,
222,18 → 228,21
if(!mute_constant)
{
// Fragment is playable
render_projector(buffer_out,
render_projector(output_temp,
video_out,
input_position);
start_position,
frame_rate);
}
 
//printf("VirtualVNode::render_as_module 5\n");
//printf("VirtualVNode::render_as_module 100\n");
return 0;
}
 
int VirtualVNode::render_fade(VFrame *input, // start of input fragment
VFrame *output, // start of output fragment
int64_t input_position, // start of input fragment in project if forward / end of input fragment if reverse
int VirtualVNode::render_fade(VFrame *output,
// start of input fragment in project if forward / end of input fragment if reverse
// relative to requested frame rate
int64_t start_position,
double frame_rate,
Autos *autos,
int direction)
{
241,14 → 250,17
int64_t slope_len = 1;
FloatAuto *previous = 0;
FloatAuto *next = 0;
double edl_rate = renderengine->edl->session->frame_rate;
int64_t start_position_project = (int64_t)(start_position *
edl_rate /
frame_rate);
 
intercept = ((FloatAutos*)autos)->get_value(input_position,
intercept = ((FloatAutos*)autos)->get_value(start_position_project,
direction,
previous,
next);
 
 
//printf("VirtualVNode::render_fade %d %f\n", input_position, intercept);
CLAMP(intercept, 0, 100);
 
 
257,15 → 269,8
// color components.
if(!EQUIV(intercept / 100, 1))
{
fader->do_fade(output, input, intercept / 100);
fader->do_fade(output, output, intercept / 100);
}
else
{
if(output->get_rows()[0] != input->get_rows()[0])
{
output->copy_from(input);
}
}
 
return 0;
}
273,17 → 278,23
// Start of input fragment in project if forward. End of input fragment if reverse.
int VirtualVNode::render_projector(VFrame *input,
VFrame **output,
int64_t input_position)
int64_t start_position,
double frame_rate)
{
float in_x1, in_y1, in_x2, in_y2;
float out_x1, out_y1, out_x2, out_y2;
double edl_rate = renderengine->edl->session->frame_rate;
int64_t start_position_project = (int64_t)(start_position *
edl_rate /
frame_rate);
VRender *vrender = ((VirtualVConsole*)vconsole)->vrender;
 
for(int i = 0; i < MAX_CHANNELS; i++)
{
if(output[i])
{
((VTrack*)track)->calculate_output_transfer(i,
input_position,
start_position_project,
renderengine->command->get_direction(),
in_x1,
in_y1,
311,7 → 322,7
IntAuto *mode_keyframe = 0;
mode_keyframe =
(IntAuto*)track->automation->mode_autos->get_prev_auto(
input_position,
start_position_project,
direction,
(Auto*)mode_keyframe);
 
325,11 → 336,11
// If this is the only playable video track and the mode_keyframe is "normal"
// the mode keyframe may be overridden with "replace". Replace is faster.
if(mode == TRANSFER_NORMAL &&
vconsole->total_tracks == 1)
vconsole->total_entry_nodes == 1)
mode = TRANSFER_REPLACE;
 
 
overlayer->overlay(output[i],
vrender->overlayer->overlay(output[i],
input,
in_x1,
in_y1,
350,32 → 361,3
return 0;
}
 
int VirtualVNode::transfer_from(VFrame *frame_out,
VFrame *frame_in,
float in_x1,
float in_y1,
float in_x2,
float in_y2,
float out_x1,
float out_y1,
float out_x2,
float out_y2,
float alpha,
int mode)
{
printf("VirtualVNode::transfer_from Depreciated\n", mode, alpha);
// overlayer->overlay(frame_out,
// frame_in,
// in_x1,
// in_y1,
// in_x2,
// in_y2,
// out_x1,
// out_y1,
// out_x2,
// out_y2,
// 1,
// mode,
// renderengine->edl->session->interpolation_type);
return 0;
}
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/maskauto.C
64,6 → 64,7
void SubMask::copy_from(SubMask& ptr)
{
points.remove_all_objects();
//printf("SubMask::copy_from 1 %p %d\n", this, ptr.points.total);
for(int i = 0; i < ptr.points.total; i++)
{
MaskPoint *point = new MaskPoint;
148,6 → 149,7
file->tag.set_title("POINT");
file->append_tag();
char string[BCTEXTLEN];
//printf("SubMask::copy 1 %p %d %p\n", this, i, points.values[i]);
sprintf(string, "%.6e, %.6e, %.6e, %.6e, %.6e, %.6e",
points.values[i]->x,
points.values[i]->y,
155,6 → 157,7
points.values[i]->control_y1,
points.values[i]->control_x2,
points.values[i]->control_y2);
//printf("SubMask::copy 2\n");
file->append_text(string);
file->tag.set_title("/POINT");
file->append_tag();
301,7 → 304,9
 
for(int i = 0; i < masks.total; i++)
{
//printf("MaskAuto::copy 1 %p %d %p\n", this, i, masks.values[i]);
masks.values[i]->copy(file);
//printf("MaskAuto::copy 10\n");
}
 
file->append_newline();
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/mwindow.h
64,7 → 64,9
~MWindow();
 
// ======================================== initialization commands
void create_objects(int want_gui, int want_new);
void create_objects(int want_gui,
int want_new,
char *config_path);
void show_splash();
void hide_splash();
void start();
172,7 → 174,8
void show_plugin(Plugin *plugin);
void hide_plugin(Plugin *plugin, int lock);
void hide_plugins();
// Update plugins with configuration changes
// Update plugins with configuration changes.
// Called by TrackCanvas::cursor_motion_event.
void update_plugin_guis();
void update_plugin_states();
void update_plugin_titles();
413,7 → 416,8
int brender_available(int position);
void set_brender_start();
 
static void init_defaults(Defaults* &defaults);
static void init_defaults(Defaults* &defaults,
char *config_path);
void init_edl();
void init_awindow();
// Used by MWindow and RenderFarmClient
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/module.h
31,13 → 31,20
 
virtual void create_objects();
void create_new_attachments();
// Swaps in changed plugin servers for old plugins servers during playback.
// Allows data in unchanged plugins to continue. Prepares pointers in
// plugin server to be added in expansion.
void swap_attachments();
// Reset processing status of attachments before every buffer is processed.
void reset_attachments();
virtual AttachmentPoint* new_attachment(Plugin *plugin) { return 0; };
virtual int get_buffer_size() { return 0; };
int test_plugins();
AttachmentPoint* attachment_of(Plugin *plugin);
void dump();
int render_init();
// Current_position is relative to the EDL rate.
// If direction is REVERSE, the object before current_position is tested.
void update_transition(int64_t current_position, int direction);
EDL* get_edl();
 
45,8 → 52,11
CICache *cache;
// EDL used during effect
EDL *edl;
// Not available in menu effects
CommonRender *commonrender;
// Not available in menu effects
RenderEngine *renderengine;
// Not available in realtime playback
PluginArray *plugin_array;
Track *track;
// TRACK_AUDIO or TRACK_VIDEO
56,6 → 66,7
Plugin *transition;
// PluginServer for transition
PluginServer *transition_server;
 
// Currently active plugins.
// Use one AttachmentPoint for every pluginset to allow shared plugins to create
// extra plugin servers.
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/file.inc
1,12 → 1,8
#ifndef FILE_INC
#define FILE_INC
 
#include <libintl.h>
#define _(String) gettext(String)
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
#include "language.h"
 
 
// Return values for open_file
#define FILE_OK 0
#define FILE_NOT_FOUND 1
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/playbackconfig.h
25,6 → 25,8
// Total channels device can handle
int total_output_channels();
 
int fragment_size;
 
// Change default titles for duplex
int duplex;
int playback_strategy;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/amodule.C
35,6 → 35,7
{
data_type = TRACK_AUDIO;
transition_temp = 0;
transition_temp_alloc = 0;
level_history = 0;
current_level = 0;
}
78,13 → 79,12
 
int AModule::get_buffer_size()
{
//printf("AModule::get_buffer_size 1 %p\n", get_edl());
return get_edl()->session->audio_module_fragment;
return renderengine->fragment_len;
}
 
void AModule::reverse_buffer(double *buffer, int64_t len)
{
register int64_t start, end;
int start, end;
double temp;
 
for(start = 0, end = len - 1; end > start; start++, end--)
98,19 → 98,25
 
CICache* AModule::get_cache()
{
if(renderengine)
if(renderengine)
return renderengine->get_acache();
else
return cache;
}
 
int AModule::render(double *buffer,
int64_t input_len,
int64_t input_position,
int input_len,
int direction,
int sample_rate,
int use_nudge)
{
if(use_nudge) input_position += track->nudge;
//printf("AModule::render 1 %p\n", buffer);
int64_t edl_rate = get_edl()->session->sample_rate;
if(use_nudge)
input_position += track->nudge *
sample_rate /
edl_rate;
 
AEdit *playable_edit;
int64_t start_project = input_position;
119,7 → 125,6
int result = 0;
 
 
 
// Flip range around so start_project < end_project
if(direction == PLAY_REVERSE)
{
127,16 → 132,26
end_project -= input_len;
}
 
//printf("AModule::render 1 %p\n", buffer);
 
// Clear buffer
bzero(buffer, input_len * sizeof(double));
 
//printf("AModule::render 1\n");
 
// Get first edit containing range
// The EDL is normalized to the requested sample rate because the requested rate may
// be the project sample rate and a sample rate
// might as well be directly from the source rate to the requested rate.
// Get first edit containing the range
for(playable_edit = (AEdit*)track->edits->first;
playable_edit;
playable_edit = (AEdit*)playable_edit->next)
{
double edit_start = playable_edit->startproject;
double edit_end = playable_edit->startproject + playable_edit->length;
int64_t edit_start = playable_edit->startproject;
int64_t edit_end = playable_edit->startproject + playable_edit->length;
// Normalize to requested rate
edit_start = edit_start * sample_rate / edl_rate;
edit_end = edit_end * sample_rate / edl_rate;
 
if(start_project < edit_end && start_project + input_len > edit_start)
{
147,6 → 162,7
 
 
 
//printf("AModule::render 50\n");
 
 
 
155,26 → 171,42
{
int64_t fragment_len = input_len;
 
//printf("AModule::render 51 %lld\n", fragment_len);
 
if(fragment_len + start_project > end_project)
fragment_len = end_project - start_project;
//printf("AModule::render 54 %lld\n", fragment_len);
 
update_transition(start_project, PLAY_FORWARD);
// Normalize position here since update_transition is a boolean operation.
update_transition(start_project *
edl_rate /
sample_rate,
PLAY_FORWARD);
 
 
if(playable_edit)
{
// Normalize EDL positions to requested rate
int64_t edit_startproject = playable_edit->startproject;
int64_t edit_endproject = playable_edit->startproject + playable_edit->length;
int64_t edit_startsource = playable_edit->startsource;
//printf("AModule::render 52 %lld\n", fragment_len);
 
edit_startproject = edit_startproject * sample_rate / edl_rate;
edit_endproject = edit_endproject * sample_rate / edl_rate;
edit_startsource = edit_startsource * sample_rate / edl_rate;
//printf("AModule::render 53 %lld\n", fragment_len);
 
 
 
// Trim fragment_len
if(fragment_len + start_project >
playable_edit->startproject + playable_edit->length)
fragment_len = playable_edit->startproject +
playable_edit->length - start_project;
if(fragment_len + start_project > edit_endproject)
fragment_len = edit_endproject - start_project;
//printf("AModule::render 56 %lld\n", fragment_len);
 
 
if(playable_edit->asset)
{
File *source;
get_cache()->age();
 
 
 
190,20 → 222,20
 
 
result = source->set_audio_position(start_project -
playable_edit->startproject +
playable_edit->startsource,
get_edl()->session->sample_rate);
edit_startproject +
edit_startsource,
sample_rate);
 
if(result) printf("AModule::render start_project=%d playable_edit->startproject=%d playable_edit->startsource=%d\n"
"source=%p playable_edit=%p edl=%p edlsession=%p sample_rate=%d\n",
start_project, playable_edit->startproject, playable_edit->startsource,
source, playable_edit, get_edl(), get_edl()->session, get_edl()->session->sample_rate);
// if(result) printf("AModule::render start_project=%d playable_edit->startproject=%d playable_edit->startsource=%d\n"
// "source=%p playable_edit=%p edl=%p edlsession=%p sample_rate=%d\n",
// start_project, playable_edit->startproject, playable_edit->startsource,
// source, playable_edit, get_edl(), get_edl()->session, get_edl()->session->sample_rate);
 
source->set_channel(playable_edit->channel);
 
source->read_samples(buffer + buffer_offset,
fragment_len,
get_edl()->session->sample_rate);
sample_rate);
 
get_cache()->check_in(playable_edit->asset);
}
212,35 → 244,52
 
 
 
//printf("AModule::render 70\n");
 
 
// Read transition into temp and render
AEdit *previous_edit = (AEdit*)playable_edit->previous;
if(transition && previous_edit)
{
int64_t transition_len = transition->length *
sample_rate /
edl_rate;
int64_t previous_startproject = previous_edit->startproject *
sample_rate /
edl_rate;
int64_t previous_startsource = previous_edit->startsource *
sample_rate /
edl_rate;
 
// Read into temp buffers
// Temp + master or temp + temp ? temp + master
if(transition_temp && transition_temp_alloc < fragment_len)
{
delete [] transition_temp;
transition_temp = 0;
}
 
if(!transition_temp)
{
transition_temp = new double[get_edl()->session->audio_read_length];
transition_temp = new double[fragment_len];
transition_temp_alloc = fragment_len;
}
 
 
 
// Trim transition_len
int transition_len = fragment_len;
int transition_fragment_len = fragment_len;
if(fragment_len + start_project >
playable_edit->startproject + transition->length)
fragment_len = playable_edit->startproject +
playable_edit->transition->length -
start_project;
edit_startproject + transition_len)
fragment_len = edit_startproject + transition_len - start_project;
//printf("AModule::render 54 %lld\n", fragment_len);
 
if(transition_len > 0)
if(transition_fragment_len > 0)
{
if(previous_edit->asset)
{
File *source;
get_cache()->age();
if(!(source = get_cache()->check_out(previous_edit->asset)))
{
// couldn't open source file / skip the edit
252,58 → 301,61
int result = 0;
 
result = source->set_audio_position(start_project -
previous_edit->startproject +
previous_edit->startsource,
previous_startproject +
previous_startsource,
get_edl()->session->sample_rate);
 
if(result) printf("AModule::render start_project=%d playable_edit->startproject=%d playable_edit->startsource=%d\n"
"source=%p playable_edit=%p edl=%p edlsession=%p sample_rate=%d\n",
start_project,
previous_edit->startproject,
previous_edit->startsource,
source,
playable_edit,
get_edl(),
get_edl()->session,
get_edl()->session->sample_rate);
// if(result) printf("AModule::render start_project=%d playable_edit->startproject=%d playable_edit->startsource=%d\n"
// "source=%p playable_edit=%p edl=%p edlsession=%p sample_rate=%d\n",
// start_project,
// previous_edit->startproject,
// previous_edit->startsource,
// source,
// playable_edit,
// get_edl(),
// get_edl()->session,
// get_edl()->session->sample_rate);
 
source->set_channel(previous_edit->channel);
 
source->read_samples(transition_temp,
transition_len,
get_edl()->session->sample_rate);
transition_fragment_len,
sample_rate);
 
get_cache()->check_in(previous_edit->asset);
}
}
else
{
bzero(transition_temp, transition_len * sizeof(double));
bzero(transition_temp, transition_fragment_len * sizeof(double));
}
 
double *output = buffer + buffer_offset;
transition_server->process_realtime(
&transition_temp,
&output,
start_project - playable_edit->startproject,
transition_len,
transition_server->process_transition(
transition_temp,
output,
start_project - edit_startproject,
transition_fragment_len,
transition->length);
}
}
 
if(playable_edit && start_project + fragment_len >= edit_endproject)
playable_edit = (AEdit*)playable_edit->next;
}
 
//printf("AModule::render 90\n");
buffer_offset += fragment_len;
start_project += fragment_len;
if(playable_edit &&
start_project >= playable_edit->startproject + playable_edit->length)
playable_edit = (AEdit*)playable_edit->next;
}
 
 
// Reverse buffer here so plugins always render forward.
if(direction == PLAY_REVERSE)
if(direction == PLAY_REVERSE)
reverse_buffer(buffer, input_len);
 
//printf("AModule::render 100 %p\n", buffer);
 
return result;
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/virtualvnode.h
4,7 → 4,6
#include "bezierauto.inc"
#include "fadeengine.inc"
#include "maskengine.inc"
#include "overlayframe.inc"
#include "plugin.inc"
#include "renderengine.inc"
#include "vframe.inc"
20,65 → 19,50
Module *real_module,
Plugin *real_plugin,
Track *track,
VirtualNode *parent_module,
VFrame *input,
VFrame *output,
int input_is_master,
int output_is_master,
int in,
int out);
VirtualNode *parent_module);
 
~VirtualVNode();
 
// expansions
void new_output_buffer();
void new_input_buffer();
VirtualNode* create_module(Plugin *real_plugin,
Module *real_module,
Track *track);
VirtualNode* create_plugin(Plugin *real_plugin);
void arm_attachmentpoint();
 
int render(VFrame **video_out, int64_t input_position);
// Called by VirtualVConsole::process_buffer to process exit nodes.
// start_position - end of frame if reverse. start of frame if forward.
// frame_rate - rate start_position is relative to
int render(VFrame *output_temp,
int64_t start_position,
double frame_rate);
 
// Read data from what comes before this node.
int read_data(VFrame *output_temp,
int64_t start_position,
double frame_rate);
 
// Pointers to data, whether drive read buffers or temp buffers
VFrame *buffer_in;
VFrame *buffer_out;
 
 
private:
int render_as_module(VFrame **video_out, int64_t input_position);
void render_as_plugin(int64_t input_position);
int render_as_module(VFrame **video_out,
VFrame *output_temp,
int64_t start_position,
double frame_rate);
void render_as_plugin(VFrame *output_temp,
int64_t start_position,
double frame_rate);
 
int render_projector(VFrame *input,
VFrame **output,
int64_t real_position); // Start of input fragment in project if forward. End of input fragment if reverse.
int64_t start_position,
double frame_rate); // Start of input fragment in project if forward. End of input fragment if reverse.
 
int render_fade(VFrame *input, // start of input fragment
VFrame *output, // start of output fragment
int64_t input_position, // start of input fragment in project if forward / end of input fragment if reverse
int render_fade(VFrame *output, // start of output fragment
int64_t start_position, // start of input fragment in project if forward / end of input fragment if reverse
double frame_rate,
Autos *autos,
int direction);
 
// overlay on the frame with scaling
// Alpha values are from 0 to VMAX
int transfer_from(VFrame *frame_out,
VFrame *frame_in,
float in_x1,
float in_y1,
float in_x2,
float in_y2,
float out_x1,
float out_y1,
float out_x2,
float out_y2,
float alpha,
int mode);
 
VFrame* get_module_input();
VFrame* get_module_output();
OverlayFrame *overlayer;
FadeEngine *fader;
MaskEngine *masker;
};
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/data/about.png
1,180 → 1,53
‰PNG

-IHDRëO˜—cgAMA± üabKGDÿ3'|ó pHYs  d_‘tIMEÒ$méR` IDATxÚí}{lUËzßïœs»oîÓ«8Qâ6½nb%×Jâ(•ÓŠQUu•:Šÿp®h%T*•¶D-•‚D¨ÜÐ
-Àu÷$Bޒ>³Àmñ»Éœžû¬¸ÿˆ›B‡^ÁWbÑ¥§m†Ÿ„Ax!£ð‚ù£0à:]A-xþÝ~Íç¦@‰mn
-z”O
-9d¿ À˜8CòH§uâ}ْ,cž ¨ ¦ñì/ØFãàÐ3d%RešïOm0I[”È-ì#í,Ô³f¶³knUøûuÈÇíàYWQ‚°¾j„Iß#Òß­8/½w^”*Ö1¢(>¿ƒCO€Îûþ#êXÀïI
-Ÿdï-8§ùLS*±#«CÏ`T:£Fa%@â=G{ñ³iKÏ5®HXGV‡žÂq´[…ãÄ-À+ìÿ¶#Š6ˆë~åÈêàоè¿0øܤ#¼^($eýsdupðTÙV’‡IäEÃë¾A§ûècÀß݃sÝ8ôÈÍrÅðó‡Ñî[]‘ˆ¦›,>Ëڊ9O¿tduè #ØOjK­¦¸âÓâ½Qñÿ„gúp‚ŸŸk{ߑա—q—IÄVÈkIH_]ìjpžKgíVã£!Ÿ“k×à[…å¤GV‡žùE‰3aÀ„€£B"V¥³ã-˜÷¤Ù-®³
-π4/bÂãwÀ·<?f›Ë€#«C/BgЙt^ªÜaö·»Ðޓ¦
-ž±ÉÁ¡ç°^,p+#³%ýû$¼êDÜ»
-n²:㑃ƒ¨Ùò€Ág+ދϿ2¼¿#k—âS7Öñ£âçOj|f^äQÀ÷ø5?ì†Òãkn¬ƒÃV¨³QøÀOøqñÿGðŒSa^Â~éý»BM•} OÞΩÁ)báþMŠú¯¢ÿ¤å{Ï;²:8èc¼Á¬É£íäàÐó¸ƒöʄY“õ|_ë üÎwÔËÁ¡ç1öBÝ[àõ§Éš¬£hڗ[r¸J=.½Zì½Õže_Y)Îø†›ªòÁ¹nìá‰øYð-ñïCâçΞçø!¿à§Å{oàBzýðÒÎøùtÀ‚ô^_ŽÏXêx À6¡;Éê$k×`ÀoøfÈïÀwàg-5áÅñ~€kâ=Šû57JÎ
-5?Ï$«ƒC)p ‹B¶4_K¾„¼(ˆøÍ¥¾,È÷~ÎÔ_ê¦>ꖃCUÕ#Ñ^ õuU¨«\eÝ'~§k1åd¥8Ç
-ðý)@c‘•¾ëøÛrÃ8üÜΖ"yšð"‹L°(}öƒ¸gÞd 6‘[áåؒ5ø,:ë¸eã5&ÙB\…WP{Äg¶Üó5Ú-­ëàÇýæªÀOgf"+Ïá—8åØÁ!u ³…gR·ÉÔY¬÷<ÄÞûù5ƒ†_i‚$f ¥Á+UJcwÆ-%‡´AçÏ톟?s_d]}„½GM¤Æ3ƒíhw%éâ û¼ë:çê"MRmžÈjRC‰V½—Þ¯!›*øÃð+M¬Á«ãdŠÍ칗á¦Î»eæ`äRIªý{ÄðódÐṬ}lá§zxIë¯{Á®«³n¹9˜‚jmHx É
-xVá€ì½
-Ú]H nø
-C?¼âÝtÍW°-u~RÂfñОÅóá]:0{©h¤¯Ox2Þï“û*¼bÜ£šß÷Ú4l»]ž0u: s
-ãàІØKýJb`’¥^5‚øðü¾r*[So í~áÛâ½UIªM¦0žÄõ*üí4\•E?ó¥¥ë5`æº BÀuñ|7cˆ=
-7-^óœPYmᚅo¿¸Fž+ÉÁá{î&ìY#G‘nröv.Ý
-F´ï*iTèÞ(¼„r.uߕøLöÙՆtí-X7Èþ>ü€t.E'àe4%ò]Ó¸öÚ-´e“¶6Œjƒð²Èè÷^èŠØ\i|ådx‡.†IŠYIS~få$[x-Á³ñšFPž€*£jŠÛl#¼.^¼,Îz1®kl|¦ÜRînP¹PìŠË]‚g•ìƒß´©/½ÌfA³qxÁõ<ç3 cÅǽ‚Tõñ¬s÷½
-½xàCð]P]
-p:Kî
-ø åoc$º-ýݼàø×Lek³Ÿx©D-1‰cSíÛ&ža>@}WyÑg.ÁsIžï–H4¤¡úF¹ÏÂZNR†Ô´[ÒÝ­SZXfÑYÁ€¬;Ø秥…ÿTZ̔_º
-ªÛ´Ž©ðºáx¥BùFe«ÉUE:g7$ÂVÈJí8¶ŠÏñÏDٶ¹qºT_è!üօa’ ¹VH<@{iàį¡½œ 
-y!`¯°úÏ£âXAóê: lñV$F+°ÂÛ;ñ·ÇKúý§¥ó1ù†åÀûí$n
-è¨ë(Õ3Ø+„Š0\©HxËX–÷ÛáÃÎaäè¯ÅLÚdß¼Šü‹bS‘qn™G{÷½-ˆök€ïŽ¢Îê/bî;žá‘„ÎÞ·…²•B· .¤šmŽ0|Ô#Y/÷å Ò?)À؏!,à·ᛡœetSÌAÆ-²ZS,0xd•us~ЋCÊhFìì„ש탟NFVê鳞›bÝáLɪRqáñµ¶°€Îîvl£a’P.òöíá”t<¹&´• 1Ÿçp8ŞyÈQ*¥2Îݲ‡MÆxˆªÛ
-¾¯¡@VÚmU
-„í×P¾qF~õª oM
-ž›füà9«G~µr$+?RmpÔ²‹Ãb`k|¦ŸQZŒì´P¸%³†è¬$à]Ã?
-}Ï/àG/…©šC9“̆ñéõ
-ê9´NêEv£ Ú)]ÿ@Êßa3Û(jð­«:d}”Ñx ïhO¤¦]ôÞ-¦Ù¨ÌWÞd¥yqgØå#¢²¡jLe²I~ZX7,˜­â947úŽÏ JÖÁˆ1áªmC|ÿ9ISÙ&$ó"ÚSyNðÚÓýÂã© lš1ÜëP<ÿ{!Àk ígùõ%:c_mª)u¶Ÿ"8ÁúµÂy†gÃ,!85bdµUþ¤*6 Áƒ÷̘ô$Äf°&æø<×ŏ "1²> YkÒх'n‰¿±U†çSá]7¶ètÎ^<“¢
-âHγL®i<¯ ôFÀ}ϋçæY7C¤+Ix::„‘u^`NzmL¨ߒ$v ž í°…±9×¢ò{Øm¨rÃKdæ5Ip3`²9L,¯ãâIs¸¤ ¹nhn.:xÎ6¹ ÉðÆ-»€ŸÌÏSËv„lœ¬Õ²F©·¶Î¬“Òº¨ZX£˜„íYô‰±‘à£hwɌ^‡û §T©f‚óaüð=
-´¨ )CåH§¡«ª²¨7I*ã´[Ÿ â}NÄ
-lÁmBè»'µ–¿—Ư ¿dÔFÖyŹ°MÖõbìwX¸U]|Þ+dMڎA‡Ð^GèhŒÄ8'ÎmKl±ë’õ8ü"ßr½Þd0¾óç‰ïÇ
-È©×ÙË A´+ö)n\½ +Æäö7{
-ðÂÖªÒdl˜P’Ê—®ÛÇ®w?ƒqáU¨8ö±‚ÍE%­E¨ˆ:d]LAk ʋ¥®z´¡kPA{Á·íh7dߪÝ@Ö>D·ú›¿»n¨¾m–H;*Ýû,û]Ü9ö ôŠ–%ÁˆàUñú ŽÕáÏށÎæÆY€
-wÏDŒ¿jRÆuC[BÜٛÛ(ÞHãÇ7ôYƒëó
-ï?)Îl\MçD~“ãØðh+’Ž\¯°É°÷ûʺˆê)K¯i°ˆöì,ëçÈ¥QÃ^UqžÜŒd‘T[´³k)žUUÎÕ|óœ†_ýâvo
-U;«ˆ±­ÒIJ֑kD‰‹Oq6Å{Ä®vIjZ֘QM7ÂϾ‘UÊ7Bê¥Ìß°xvçþG7Å÷lJß3èõ>e²&5vRˆêxÈ9y¢ld­¥l¼Ù£b!8ɸèêïQt–C%µòvJ÷$¤ª›eü‚äò&C?y¡²ytÆgÓg¨ øöÿÕÉúÂÒº +v¶6i•#†My>ÈÎóT‡ÅÿçÐY(­è‚_P¼&‘÷< pÅÒÂkŜyûўœTô\~–añþ<ڃ=VÙæ0 m®—,¡LÖK–ÈJÂB®FîœÒØDÈА–
-7±°xzÔ¡-˜²¶¢_ˆû
-æ%_©î;ÛËÚ
-e´áüÿ*@ãù^œm+¥±²MVÀ+À»h _ œÊº¼Lñ+!g®úFU`¸ ³XÑ¢aü²¯¦/ÆØâíƒï‚0VÒJv8ðæ¡_ž6 uéŒj»Åd5äz¶Œv©b-e©Jñ6âÞ*jîNdW!"ml„gåæªò
-Ô,®cÒb£DëìZû5Ï¿ä^‘^q¾×!x5»HûÙm‰¬óÒÚ¹cù¨”3KÁ@‹ºhȏõ$Å{ÐNvS:³ÞP}Ãp‘IØt¸¿³¿j_Øb–%â¢æAÝnJçÞzQW ðêsE%!胅ýôÿ –Ǜίr›˜Z‘µ·´-À§™šDųֱ3lœÚq!@Úìí" 6^aê1_î±÷Ö+u.•Dç8*Ðrق
-‚Rk:÷K®f’Ò¶7%iڂ_k©®°Xš:“”>ޅ„E{Õ;Ò|ñÅÌó~ƒŒ#{ÐîžI²É-H„#ÐÁ„„mHÀ4ŽhTHn{Àý ']I=NÑAääAÆ&•^&ó‹ë²]&ôIçPR[鹎½äâi‡sðÝsk
-DTÙþSåŽ ¾9SYƒÆ5Ôі¡IG³3ÒZÊ£!ö•+yOø[¤gí¢E3ò¾.‘(À\ÃÐOÈ.^Jߏ·¢bǂ]†dm†uNc\É®“ؽ‚7ÈÖ*+ú¢cºiÅó8U4¬"MôaÃgՙô0ïýZ»á{oDÚ£Ž8qdmŐUuñÒ&²!d­lZw½E»+¯ µºQ¶0ˆv/Å£¼7þ#/žD…h"܍’$7•»*T1˞g_‰ˆx
-~vKÐë|wÕRŒ*ÛJ Y…+«å IDAT•,Òª„&;CÓKî*øeÌÜOf<ÙZ%5|,¯±µú±&¥ ø^ªD°'C²Ê*q‘'2c mjs¯«o6n‡Cޏª¸¿¡"^†ï»UéL0‰ö4Ç&¼üÞy…ãY»³.ì6̈́Î`€“(Øfþá—1„x˜@ªÒ˜2üü <.-”ƒÈ§%cÐFòíEï5vð
-²n™Ïé÷Ÿ¤dÉSýdãôN5óÐC’ª¶â€)î÷H„
-š4 º õ°D]õ˜§ˆQ‡µq‹jò¨¸/RM ÒM\Žçb€ÖEÖm!¤\CxA4R‰+ç‡ ;yÖô]dc¥Çnu§°%¥¤ôr‰\AçS—­hOÿ¢qZ€_üZçÕ@gá´»)<·Jõ„Ý´ YkF)Šõ>fñ»½F1|åÏ٘eVA‚Ô[ð5ħ@58E³dí+=+©Êº¯¼ª€×n$ÕiÅñ•KËƑu5äQxjY–+Eä7Y’uÍ¢ª2‹ö4·0CEÒÝh½œŸ”¬AF¦Ûð»ÖÉVá(²ÖBH¢2¤Ø¨nT0O4`1’éӘEÿux–µ¤»Ã|sý)FLd!üg îõ_Y#ñ;âg»ç¾)þý_|¦¸Q‡­#•h7ҀÞ!Y…@²Žÿ¹uKŒaêX=kYÿ¨Qp˜¥wÙѨƭCô"
-ÿGÁ¸Ä‹“¬WB֐
-Îk”k»` ªœ
-ƒíÚÅ©¨£_!<ÛâqYא¼²ù2º³raVd¥ßí•þ?¥ ËX4œ
-¢¦3í¢¥øÄçÛ֝š¬MV(u}YÉh¸ÕðY)‚î¹#k'ö^”bZOh|¦‚ö˜ÚÍ Ÿ]¥NlÑYýrIÉڄŸ?›ÄAyϓ%s
-¡ýhó¢+
-ZÔ܏ÿ€‘ö‰ôlYT‡˜ƒ—ßQÛkŸêîê¶v¬Àϒx"ýn@R{j9“µ
-jIyP“t& öa¿GK¨‡u6F[ M»(d¥ÀŽYö YVájÚ¥ƒ&Rp7Ñ Ü4 ë@ĂYNqUûÇö%TǓNX^Æ¥m!’³ó¹;d=‘òw¡c y²êŸK÷۞ðóڈªÈQ¨F?õnç,~þݐ߆bdý“±ëÃÏ?Ò¹, ѳ†OßÁ$Eîo¥ø}þ3€?ÿþñó73Ëk·áçÿ_ZFe9tªÆ5Cvjã%É
-èÅB˚·LŽ”€¬ô]åM÷¤Âp묊d݂ìýÑ* õ6q ñ%„LµÏÄ$ÐñeQõ.u†a7ËÆY·i¨3aj/ùÇ
-NÖ0QñƲzY›ètCÔs +µ|”ñ±Â¤]%UM%/×D"Ê!Z'‘~{“ZǪ]îGŒAҖY‘õ‹€s{ñé‚+d]‰ wÖ¸“ñ}“ôÖIÓ§mPy%}"ëÁoúa’MDÇÊÊcäc#ÿÛbÉº06#Š‹­,d¥9ʪ*yö|ö=R¬‡\՜
-€
-茵kO1-¤ŽbýË~ÖjB²N…Hæ¼Égc°%1}ó1ÖCQv„?ÉËx·2<“̈&Ô5¨¶P\ôÒ&´[Q¦91†d­CÍ%F֝!sZ²‚­¹á”ïCÑs5?WGÊ}|TªÞs\G{¹Ò"’uÀÍ{¨j{à§ÒYêfAȪºy–•¬Cl³Lù^g¡ïŽÙ™¶£VŽTDEWóþ9Yu^sÐÐoƒPç“kd¨eô:Y¿ØÛõ îµ
-jITÞè Õ|jðP߀×^áS!•>×BãÏ â^?Ïæ8A¿.TP)K_õlC¾bÓntßð-”ß@¹ñ£âgÚȟøGPkAxÖø&€ŸÎr0ÖÁ³ü^dҖW„XÎX²bÿV)ÊF†0³$¹¢6”dÁR·s
-½¥aÜh•\²f)]ß+¡â뽌œëz
-}|~®–øÚXƒoûõˆ¦Ô#™¸
-9 ¨¸ÁJŒJ|"Cn(¡šáîñŠ-B:À«4½šƒ~Å)”§+·ü êQ>a±á‡œîXÔ
-Y‡AîQܸlWú,%YI*¼UøE¢ì5P»—
-Š]=Ës+õ–Ž8NõYe5l½Æ¹õ¾!YÉñþ¤À  ÉzIe$ë;¤âòÁ6"æh¢×ÉJn•ÂhTnäj!™à‹Ö¤9,« ½Xe²~Jd½@ÖZÉú<Ç̈́,Ò_ü.«ÎJdmäDV®‚¨~Ö´Ä(u#˜.Ðâl¢3mԐPòî”Wt²"gÉ1äþ;Q¤Šl-¦ò—Þ«!õ’Ö&-¢ÁÓ!GÓ3Ò2:»Ë•¬T茜Wy5Ñ^¬þ9ìúF©åHdë'‘µ
-æþ!¼Ò¯3²~Sú›%߇â@€çFù Lí\ðo?ÿo¤ïô™´f>²±ýçb­é _¬›ÿ à/÷šd8«¨V,H%~‰ü‚&æB$èi$+ô%YI
-^»s\™„´ÝödL¬í%øY7dH:½¶M p|d•£F6+.Ð$ YÆ!„ÇÕv3YU^ϑ~¬øüXõZÆãþ(à;¿ï‡%üS`O‘µ†à&Kª-Z– IÙU˜….Y›ð+<†‘5¨KÁ63âEA\
-²6àû“uȆ ±6’1gfÕ63utÅÄQö]ïŒß)GVà°â"mB¿žŽ*n³‰:SB²^cªšìŽ›†YO_Y">F{Šåuân€o‰O»)–-Pt]•ÙXV‘sèaQÈJQ$q-6)’•ž£ðfQE&+iA¯Z +a¼$ÿ†tîkÀw‹í‚_ł^ Ðë˔7ö°g¯#åzÂe"+1®~RžEª‹NV~ö“"Yäz#Àpó® æj
-ÑíßGùK™¤½þ
-€Ìø¾£ðü›ŸH¯ouÁ˜¾ð7œÜŠqjãqÅFO*Y‡‘Ì—| áåL»É;( H’µ;Ná€ù5šèá9ÿc!¡L“°—…D“?ÿ Šm…udµˆ€o[¸Îo¢=LÆ3?ßsû8bcú Àß1¼.EdýAÀïž:JõYÿ;€?cá:óû_Œù=ù·–|n7ŠŸßNáÚïüHÀû¥zƒ¬T¾r åû<H)ƒ‚»ÿJÏ{RR=Fp"ÀŸ:JõYGüœÉà^×ág`t;~%à½%xÙ!¦ø9ñsÄQ¨7ÉJi\5ƒ{ýmñsG—Ïï*€_
-ùÝ7-\ÿ8
-Fø­ŽJ½G֏Þëá9ԇ{pÞvÓÆÈ0øÜQªwȚ%~UüüÇn$ÆFé§C5ËÈ¡ï
->ó\’¶_vÁ<S!l^<í½£³ÂƯ¹{Z²íà&ç+ÉJm!+»Eº¶àu5“5‡Ó×ØrFm!¿>´9“õ-’DZèôª|f‘ý
-ІÏâTÞÓi0Lý‚®ŒÛ·Ì{“¬{-H´èGÖ¬ Ó݂×·ìx0&VbÒ6¸z.ä°gɺNL~’ööó†d•%OÑAýAd=¿+œ*¨ƒwsmï¹àˆ$+I´c“uC€„8;E$+YÍuË¿V6°<«³C’õ^B‰fBVZt-x'þÞ|5ÈÅR‡~•ŠJ;+i%M·ÔÓC‘MîáÓfüý^‹Ÿ<„nÀ•|®+d<îøaÍk-ÂoSHósYÌא£UïIV’h¦¥B§ ÃðŒ.ÜL1°ã%Ÿ‡ ñ ÎUÍk­“Ž*ªåº”¬+HŸ«k<‰ûõ.$+į^ï‘$qU¸GÉ:—pòm>ۅò;ÿÃÆòˆá8ßEg¹—¼"y=FVšü›†Ÿ­ÁµK
-·ì{¬j•‰jµÞ‚Áãµ$MP^#JÔs'ñ“n“6µ%tG ‰#«öž]‰¬Ij)íGg(] ÀÑ.#ëa˜[Ïûlaª/e·¹¥ß{d¼Bº~Wž%’„\$)ȹVÒ³kYɀöÐÒ½Lµ!‡. +-6Ý°¿Cìܛ/Å5&áLµÝ(3Y!ÆÖVՇkèŽ@GքÒU·Óö d퇟ÚϤíú."ë!Ëçñ&\êž%+]«½
-úÏ-©d$Q_”tZ–þF+pnœž&+Åü®ä@VÀÏÝÑÅd}dé~”ûzÆQ 7É
-xIé:Ùg°k"ÿí¶.$ë
-íƑ=
--åE6—ð9&a×çDÖÁœç°Hçx‡€‰þ²d]‰ +à'œ÷Y"l#§10©<xÐ"YÏ:Uؑ5m²R,°Ö†SHÖ6É\,ç<cp-"Y’uXáo–J.š°™d‚
-ü9Ž¬Puð«þÍtIçbV<ÿ®œŸã”S…YÃçgåDŒ è¯C?¸ HhŨûY€¬ó[=Šƒ1)×
-°@UR¾šˆ¯;‡òU6ä˜/ˆTkÁ‹çv(F °0t+7ÈJP™ã\‹ÐÆvm,‡„8Y²>·LVøÉ:³ç€÷9?Õ{ÚçhR T p>jÁ«¨¯ºˆU"ŒúÅu¿,鼬YØD/ˆkŒ&¸Fù»’>"_c •-U5dìא˜6SȲÕôMšs[O¨Êžƒ³
-êlt"çs‘Îb 3öaï·³„óB0·^‡Þ~~ؑµ˜-ÀD¨XwƒxDCm6­Ü÷ù'؊÷Ý!®óÆà³d¬»êè’/–o JRwUõµ!öÐÊy3£V ƒ®µ-„m¢¼ýƒºJ¾”³ä0Ù,î":·UFÍpѓTy–ÓøP³éK×# ûDós÷*œ/Ž"ßö¤‚›´m s«jþ&kn܋
-Œ?ÊqC}bñz— o!>îȚ/nä8TÇ·špë$[?Mð}O帱=ÝÀ^cZ“¬®òaèO`p°§Hlo
-§ÓÙ.H•Î#šçr
-â%ù¦á=OhH#Û6†Ë)]_¥üèGÖlqÙ[5y™=–¯}ÀPâ\C²ÒT:f$ÃqL‰¥º4Å¿ƒ`³ ›C ÈÁŸ•¸~•¼zʁ‰ZôÜÞB¶)lGÄ=·¦t}Š~ó]k @ ÞYtN›D{…ûþ”ÕzKéń’âbÆZ
-Y£¥x«âaM­›ÈÏÝ×SHš*¥*M©¹QÙ$~ß7ü^$I.%ø®I²YLð4å9¤ª†aq×k9Ù;z
-ƒüÂ#Ž6ù€œæܹ'ÅûQY™"Zûm!nPpË=ÍÏ-)’uZ\?(Ji®¥cî sk~ǹÒk©A©z´9l+ÐXì×TóÀ¬aOjØ ¢>(ˆä’£M>¨IƃYï^Àö¶p–
-HXS¿d„}¤¹)o¶pï*œ±)7„¹-ö±óì*ìùH‡¥û-LšG9Jh‡žÑ© ;–*/{ÈQ'{ôG,Îxå`¨7NUœ;m¨Þ”TP) „Í;¥P‡¡ž Q‡½±¯Å}§}òYœ*ªW“IÛ¹÷{€Nßv]ƃʕL–`îH%^DtGÀ–5†"»áºž¬ª ½öŽÉ‚&Uøl€ªVkl|·ÖºÌßq6ÇBþ†,lUw¸Wq?ÔàÕ÷ÕÁVI=ÖÍul¢³£I‰©‚¶òT•]K¨Ç2*°_¥?íþ¾–ÈJ8ÈHûꤖH)Štü2ª·J4—U„ûJ“DA…‘uÙѧ<d%µö|­J¹’A÷C9"Þ¿V±y\"u˜æ‚Tx9õ%ì%’_÷ØâèS.²ÊgQUW̐øÛ§Òû|¾½ ê0©úeÂ*1ÌFW¿¢VÿpdÕÀ:ø±Æ} Ÿ©(‹"›6–l^פsåY‹çÌf 70GÖL yZUµø¼ cÔ‹¿LföÛu£[fuÊOVÀO‰KBX
-{,BÓ¬Z^ØÆ#¬­Š¤=íqÔé²^.fÒ~+-AÚ" …NwSYд¨“_wÐQ§{È
-À‘µ‹É
-øy¬&¡„SÈ¿§jÐY|­Äs¾æá‡tØê¨Ód¥T¼åÏX$'<¹§VK<ïTÈÛ$Õ-(˜Å¡KÈ
-ø­"L&™jØ)0a‹x¦“%ž{
-nRµ¸<Õ%Z˜J"ŪS‰íâS3Þ.{ÉΆP‰UÔzʙ=ë¦?Ö#¼»µC:ê0Ëï-9y‹È)M×f™ž5ƒ’_Uxæù 7D©‚ Ne©HÁµ€÷T@½u\N bn`¯#BµiJ~*~ï
-TØCEâ¨Djs«{p…ÕRŵÉ;‡àfGú*±ªeµ(˜ ÑÈæ^Açrêä"Fà9õ!“Uêó97TZ @ƒ2_ž„¬°×²X๮Zð,Ê=…Or¼÷€ÿÞ
-à'|fp¸¬*‚ë4ý¾æ}ü\Açñ·„Jy^Œé·S¼×GÿBGÆsßÕϧ>ðÛðêPÉðSþ€¯Iëã€sd-àuÊþVÌ߅ý¾‰ðè˜ð—J<Vï‘^lí‚…¡ÅH-[zÿ:;®ø€ àß+>Ãÿ À¿vŠU÷ã¼\Ñ(Õë¼.iôºýºBYâ+ñÜsVÉi¼ššªn ^M-‡.”¬åBÀ?ZK¢\Æ2ËøÿùŽÜ!0IEND®B`‚
\ No newline at end of file
+IHDRq¥ (ƝbKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÔ6d~ÛÀIDATxÚíÝ;nOz‡á1v4€´ö,Nœ‘ðDΤ`’ÉÔK€Ù€¸„£x"qgPÁ8G"œ82 vbˆK Šêr.}©î®ËóŠDö©êzëWÕÕU?q4˧nânÒïw3]ø^y¿ŽˆM’Ï"rXPâSÓ7‘À
+Ó`Ã)u…€ŸH?'~ÿ´_ã€"%>t¹–‡ž•ÄÓËZ
+Ú ñUÔ3×ХŔIä‰W-3"@℩ ‰bZr¼V¥Ò8@âéXZª}^%?¯ZÆ9¥qP¸ÄÇl|5¿„Ú\'}X¨—š@☓û·-çIã]¼Zè;˜·RÏXËÈaûA ˉéª÷ëòÛ6´êóZ>I¼çð½?|ׇK1þoÝJÈ@ëŸsçÂ\‡ç}:ËIäÛʦ‹g אC@†I¼­‡ƒCÅlU€Ì%ÞV
+åK|›€ÇpÍ©~÷+ø/µF@¯»§Ì9ÏÑñx! ñªR}î"Pf`"qé±ú‘€†’øP‘ï–×i󲛫SÔa$¾€ÀnVüÛiåIš‰7™ MÏ ñØ¿‡ÊEVÉVªЄÄ¤èßÿãï¯ö|Î[2@âŠüWû«øÝ?ÿ.þü¿›ŠßÕܹ ñl¥õìïžÅßÿÃßÇ®þùᅩߜ{vßÎöócEnôdËñŠû<¾Ýö[a¤~@¹‰×¿þ›_oþåŸþ%þô_Šÿü÷ÿò÷®ãû}H¾Ûy²C›¯ùÙ@i~Œµ_Ÿr½‡~ֈ¥ÒUE&ñÔòÛÿ·Þo~³‰?þÛã¯ÿóס¿»o‹Ý«nŒ“AìâÕª7qê”þð™Ò?}_”ßþëoãn—6ñzëߦÃ]RIßÎ2-¬!Õoÿ¦„d–Äæn¿ƒ6Å ®Å¡ëã?‡v­I|r’;ôû)D>ö3†}·ó
+ÂtËD2F(}§9öm1PB
+)/‰|]ePþå'kbz
+ÛßyݧÍoŸîœžcîµÆ³9ɜÄ3)÷'Y5 7âØ»9ðó?
+]Ûð”Êq >¶½r=ô5ì^‰Îõز©¯¼?þ^ºç…‡^S)'
+&q7~ªTUÆÐÔ=|Ò¾ù¹Æ\òœÏ?LâV§ _jìܺxÿõ{Žü„«¤+H–~xmå‹$.‰+¿=d÷Jôìɱ•cô–h#s<%qGùly¦•ù|‡‚—8*Ëð\MÏ­±’8‘§ØV6§õåí°Îv$NâÕ˼ä2Íws­qK@ë×øª÷y8‘×(ô\æI|v¬NA½§Ɍݓe‰• ×vëf”Ä%qHä¥'óÇkœgÚ%ǃ½ÏF6$¾@ƒ«±|Ǽ4”Ï)9ý–®}ͼJ$Nä­¥ó<Î-í—Öµƒ˜G=Ü7øë¤Ó¥|ïҁ(í¥,‡'ù‹ÉáÅN¡9}Ý=Iâ@áB›ë84©|ýN‰Ä*EÞmùŸ§RùÊ©Ü( zºnX‰c½òo¡ì‡ÓFS$W…‹|®Ý ­H!qº(0•ç6¨ sâh‹^Õ?üý/fHïm–§$.Î:|…DžB°cË¢Æãõ$qìÀöžù:eÐGœc–!Jà$^!—núEފ̷/ÅwÎy2~BÁÕ4|ÅØz鿙”ŸÛËaï"âÍ,)H<³Fò%"žºÁ X+õ²Ô(Ä=NâM47z¾â²C"“8a¸é«×EtñVy¸—I¼-aL9åü2ºx¥3W­‚J%t'qCƒ(DZu¾PÂ1q$ ê$aÙ¸7Iœ8F裋÷
+8 ‚zÒc$nœ²Åp]¼Up…w®oTù£"u'p&nuˆ„˜_Wgq¥á7$n@oTä]—´Õ'HœÀ±º´o£‹g£ÿžz‰8NÚ}ë£Ï5¨[8cFyO-ÿC×£~‘6 œ¼9.n(HÓCà‡Êô$">'ËÛ]¼W¨ qHße¤íeÊù¾£HœÀ•aR–+çw*$NàÊo:kmÑ{¦"Aâ®ìòOÜ»ø/U*æ†@¼.çT¦–‚Ä \Yä2ºxUì÷$r87%ïÒÊNÇÌ<Q¾H¥Iß:6@'ïùËfø»5—¡4Ž±:e~oßéN¹´CGÊsa:eþþ¬‰2YBRDøD‰ { ¯Öaò&Î~÷t±ÞFÄyy\ç„07W¬Mà›øϓL-ìï$ßü„R7¬Úwÿ˜‡$žUæªMàw~],—.Þöº¿àÁfê^ƒÀ7ñ%"žêÌI¼5.‹î¤縧ü¼Wêž"þrçÏ5¤FRJ™ÄKLž9îYÒïšÊœ7/ŽÄ˜NÑ!M}¬³wÉ&‰<‰§”YÞâN³ºDjœ^n–‚ijlœåî¤Wª¸7qWUg²‰O+`G•Ò¾gùmÚM«ÏÝÀ ñ6Dò´÷<Óö½ÈÓ,ȕó˜cƒ08vJ3·óÓ
+<×)‰.žU™È»øè•%¤Â:ñ~䓚6ñ¡ ÷½¾Ú$ï¡'$ñê™~ønÛX-G¥\ôܓ$ï4.¡[1R§½îþõ÷·M”JM’ßÄk·9H¼Vº¸é•\ûü\ii¼ïã±'H¼aÉ·;7lÊ$ŽB¸lò[{x x%2{¥*HãûO92ª‰7™ŒkoüÒ8@â3p£¤ñ¾Ç• _†“Ìÿ;i¼
+^jZ ñ6ySý7¬çuüS·+H|}ÎA†” òCëù=à‰OAŸ©’§
+*Ã48=’,HS¹U«¥ñ·|#
+8šù¡‡œ_Hțë=ÿ—ÿ3‹ýoož¨^x}\*‚ï$øâ@/ynü³
+‰×'-û§ I³÷"7­
+&ïibÄ%OeÒØÁÊ qE@â@9”šÆ"@âÍàå£R§UŒ"@∰r¥h‘$Þ<©H'P—ÆAâ²ëxt: ñŠÐ ¥q¸"¨Rî¯ÂO\%ri$Þ4$þ³­Ø‰£ž+‚éVÂE¡+4'ò}²ÞÄ]/Üô½Î4ÓE'(‘8
+—?‰§¹ç}‹ Ê9֓yÃéœÄÉ:[2'q@‡Iä3Êܼ9‰œîö½Ž|¡€²¹WÈsJç•ËœÄóçjÏMýVñ¬¤“±u†e:Ò}2¯Lè$ —ÈáÙ¦U–IåæÍI¼¹4‚åʟÈózuDâ9Cêc:×ëQ©|_JüÊÒ\Š†8W*vD]’VgkÔÏYŒ{F±ÜA/$^©Ä ¼æ´}úõ”y”0*ʼ½™NÒ á‡ðÙÞEÔÓ£ü3®+‰NÇÚI¯’DØL]eVn
+GI"'ú|ê,“²Vá9JœÀ‰<-çÑÅG³·Î^ÇØC>Vn“„@âhCäÛ¸Œ.^©¬¤u·x™Bn'p /Üké;â™ÊTE‘8¤tB/Xæ¤@âXÿþúÏ«û^µÝ¯)ež°lH!'‰z»ŒÄqŸ|ˆˆ—DOæ$žŸÄ¥p¬;ÔÏMæ÷Áæ,"Þüð?×Ñŋ*Ê~bÛ>Ö
+€Ê“ìøýCrâóŸ~gé óíßûöZö]Ç ®t'‰÷ßID|n¦sËÉ)®W𠒛Ÿ‚]©Ó5¥¢M܍½.é.—$.…£¦6Q«u˜(KâƤöšN6z›¯N L$nè,#úÞ^}h‹µ;°”ÔßG8d:Ñ÷]mBâÐCôk®œ¹z÷õÚæü;'cN|2TÚ+÷6¦úlS)Àôö™¶“™s‹Q; JâJOï»ÞöL¿'̈́¥€=µç;‰¨Uî/fIðs‰|ätƒ’´›à¿ý7Lä_fAxA8íÈKê=úéׇ­SÚÿ——M⇠úlÅ
+À²íî퀶7uµÌS_†yv[«s°~ˆJ8
+'ñ;)(CäL‰’8¨H
+9‰¯Áýþ»¸T@H<wïîõ_)@'ñF†R$qÀØ@7ô¥ŸýÓ©$žoUØÏЗ~’î—NâÓîA$Ðç¹]‰ïx¿!’‘@;t;¶‹]qÄn+ÚÌ*$ñ¥>f劓|€ÒÓxVí”Ä%p’xƒ—ÂO4 ɧü8sâ˞¢ý¹”!€2h[âc§OàLÒùAàV¸$¾`%8Ъ¼¿D¢ãÔHœ¼”ž¼»8JõÙG*aa['Ô獩ïŒLhûÇ*A0Á)^úÛÄëèâý˜K~Ra%|H’¾çø©–4,ðíŒÞžö¨ùJX#uï¾Îëèâ…Öà±ÎØõ÷F~ÞqӕэÂÌÄs-
+ÈÔS‚Þ&ÞEě9¾Âq3°VêP®?ƧíOK…²ãj Ÿ¼¤½/û™ÕI||!ÝFÏܹ&8çz¶t]ýÃñò¾ˆ.Þº$ ;ç/qÓ&j&«ò”¸WäwaŸº‡¼ ñŒ"gôÓúÏmoD>œÓèâf¯±žÄÉ@É"ÏÄAËI<UGÞR‹ü{WD|wîÍZ){]‰§žo"oËHý&"_i/#ñ”ïlÒËIÜ>Þ P‰o¾›G"îÇr™m3$ž’Ïä=!}›÷°ªÄ‡,×Iv岧QºþáS'nGCIŸüæÜ£÷þó?DÄËÊê!·Ã)4™Äç¢î‚· §$~WƒÒx««6́ÈNâ-K™¼T!ñ|E~HDâÓ¦ >‰ß‹ü$Æ,;“mÍ+ ñ…¿Âä<ºø¨Ú W6q2éÍO€YùÑýJuæO IEND®B`‚
\ No newline at end of file
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/data/about_png.h
3,1138 → 3,491
 
static unsigned char about_png[] =
{
0x00, 0x00, 0x46, 0xa7,
0x00, 0x00, 0x1e, 0x33,
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x01, 0x90, 0x08, 0x06, 0x00, 0x00, 0x00, 0x4f, 0x98, 0x97,
0x63, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61,
0x05, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33,
0x27, 0x7c, 0xf3, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x11, 0x00,
0x00, 0x0b, 0x11, 0x01, 0x7f, 0x64, 0x5f, 0x91, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45,
0x07, 0xd2, 0x03, 0x13, 0x0e, 0x1f, 0x24, 0x6d, 0xe9, 0x52, 0x60, 0x00, 0x00, 0x20, 0x00, 0x49,
0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x7d, 0x7b, 0x6c, 0x55, 0xcb, 0x7a, 0xdf, 0xef, 0x9c, 0x73,
0xbb, 0x6f, 0xee, 0x8d, 0xd3, 0xab, 0x38, 0x51, 0xe2, 0x36, 0xbd, 0x6e, 0x62, 0x25, 0xd7, 0x4a,
0xe2, 0x28, 0x95, 0xd3, 0x8a, 0x7f, 0x1c, 0x51, 0x55, 0x75, 0x95, 0x3a, 0x8a, 0xff, 0x70, 0x1f,
0xae, 0x68, 0x25, 0x54, 0x2a, 0x05, 0x95, 0xb6, 0x44, 0x2d, 0x15, 0x15, 0x15, 0x95, 0x82, 0x44,
0xa8, 0xdc, 0xd0, 0x0a, 0x89, 0x8a, 0x86, 0xd6, 0x25, 0x42, 0x88, 0x88, 0x06, 0x91, 0x52, 0x44,
0x8b, 0x38, 0x09, 0xc8, 0x45, 0x14, 0x42, 0x38, 0x05, 0xc4, 0xb9, 0x1c, 0x08, 0x84, 0x57, 0x28,
0x2f, 0x1b, 0x0c, 0x18, 0x63, 0x7b, 0x6f, 0xf6, 0xa3, 0x7f, 0xac, 0xf9, 0xee, 0xfa, 0xf6, 0xec,
0xf5, 0x98, 0x99, 0x35, 0xeb, 0xb5, 0xf7, 0xfc, 0xa4, 0x2d, 0xc3, 0xb6, 0xf7, 0x5a, 0x6b, 0xcf,
0xcc, 0x6f, 0xbe, 0x6f, 0xbe, 0x27, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xd0, 0x2b,
0x78, 0x00, 0x60, 0x19, 0xc0, 0x6b, 0x37, 0x14, 0x0e, 0x0e, 0xc5, 0xc0, 0x16, 0x00, 0x8f, 0x01,
0x34, 0x00, 0x34, 0x01, 0xb4, 0xc4, 0xcf, 0x55, 0x00, 0x6b, 0xe2, 0xd5, 0x12, 0xaf, 0x3a, 0x80,
0x19, 0x00, 0x43, 0x6e, 0xd8, 0x1c, 0x1c, 0xb2, 0xc3, 0x17, 0x8c, 0x84, 0x0d, 0x00, 0x4f, 0x04,
0x71, 0xa3, 0xb0, 0xc0, 0x3e, 0xb3, 0xa6, 0xf0, 0xf7, 0x0e, 0x0e, 0x0e, 0x86, 0xe8, 0x07, 0xb0,
0xc4, 0x08, 0xb7, 0x00, 0x60, 0xbd, 0xc1, 0x75, 0x0e, 0x32, 0x29, 0xdc, 0x72, 0xaa, 0xb2, 0x83,
0x83, 0x3d, 0x4c, 0x01, 0x58, 0x61, 0x2a, 0xee, 0x2c, 0x80, 0x41, 0x0b, 0xd7, 0x1d, 0x02, 0xf0,
0x39, 0x23, 0xed, 0x21, 0x37, 0xd4, 0x0e, 0x0e, 0x66, 0xd8, 0xcc, 0xce, 0x9c, 0x2b, 0x00, 0x46,
0x53, 0xba, 0xcf, 0x30, 0x80, 0xaa, 0xb8, 0xcf, 0x80, 0x1b, 0x76, 0x07, 0x07, 0x3d, 0x5c, 0x65,
0x12, 0x6f, 0x63, 0x06, 0xf7, 0x5b, 0xc7, 0x24, 0xb7, 0x83, 0x83, 0x43, 0x0c, 0x06, 0xe1, 0x19,
0x8b, 0x5a, 0x4c, 0x9a, 0x56, 0x32, 0xbe, 0x7f, 0x0b, 0xc0, 0x1b, 0x37, 0x15, 0x0e, 0x0e, 0xde,
0x39, 0xf1, 0xb2, 0x44, 0x4a, 0x92, 0x68, 0x4b, 0x12, 0x51, 0xf3, 0xc0, 0x25, 0x71, 0xff, 0x71,
0x37, 0x55, 0x0e, 0xbd, 0x8c, 0x87, 0x12, 0x41, 0xaf, 0x02, 0x98, 0x13, 0xaf, 0xa6, 0xf4, 0xbb,
0x45, 0xf1, 0x1a, 0xcd, 0xf8, 0x19, 0x07, 0xc4, 0xfd, 0xdf, 0xba, 0xe9, 0x72, 0xe8, 0x65, 0x10,
0x11, 0x3f, 0x0f, 0xf8, 0xdd, 0x7d, 0xf1, 0xbb, 0xb3, 0xf0, 0x8c, 0x3d, 0x75, 0x89, 0xbc, 0x2d,
0x00, 0xdb, 0x33, 0x7a, 0xce, 0xfd, 0xe2, 0x7e, 0x3b, 0xdd, 0x94, 0x39, 0xf4, 0x22, 0xc6, 0x05,
0x01, 0xde, 0x85, 0xfc, 0xfe, 0x14, 0x23, 0x25, 0xb7, 0xc8, 0x36, 0x98, 0xa4, 0x5d, 0x97, 0xe1,
0xf3, 0x92, 0xab, 0xc8, 0xc1, 0xa1, 0xe7, 0x70, 0x43, 0x2c, 0xfe, 0xbe, 0x88, 0xbf, 0x59, 0x0f,
0x3f, 0x22, 0x49, 0x7e, 0xef, 0x4c, 0x4e, 0x9a, 0xc0, 0x8a, 0x9b, 0x3a, 0x87, 0x5e, 0xc3, 0x4d,
0xa8, 0xb9, 0x45, 0xa6, 0x99, 0x84, 0xbd, 0x22, 0xc8, 0x4d, 0xe1, 0x81, 0x59, 0x63, 0xab, 0xb8,
0xf7, 0x2e, 0x37, 0x7d, 0x0e, 0xbd, 0x28, 0x59, 0xb7, 0x08, 0xd2, 0xd2, 0x6b, 0x1e, 0x5e, 0x70,
0x3d, 0xc7, 0x10, 0xbc, 0x8c, 0x19, 0x7e, 0x5e, 0x5d, 0xce, 0xe9, 0xb9, 0x1b, 0x00, 0x9e, 0xba,
0xe9, 0x73, 0xe8, 0x25, 0x1c, 0x14, 0xa4, 0x9b, 0x06, 0x70, 0x0d, 0xc0, 0x75, 0x00, 0xf7, 0x24,
0x42, 0xde, 0x92, 0x3e, 0xb3, 0x19, 0xc0, 0x6d, 0xf1, 0xbb, 0xc9, 0x9c, 0x9e, 0xfb, 0xac, 0xb8,
0xff, 0x88, 0x9b, 0x42, 0x87, 0x5e, 0xc1, 0x57, 0x62, 0xd1, 0x07, 0xa5, 0xa7, 0x6d, 0x86, 0x9f,
0x11, 0x13, 0x84, 0x41, 0x78, 0x21, 0x81, 0xa3, 0xf0, 0x82, 0xf9, 0xa3, 0x30, 0x00, 0xe0, 0x0e,
0x3a, 0x5d, 0x41, 0x2d, 0x78, 0xfe, 0xdd, 0x7e, 0xcd, 0xe7, 0xa6, 0x40, 0x89, 0x6d, 0x6e, 0x0a,
0x1d, 0x7a, 0x05, 0x94, 0x4f, 0x0a, 0x00, 0x17, 0x05, 0x99, 0xde, 0x02, 0x38, 0x81, 0x78, 0x5f,
0xea, 0x1b, 0xb4, 0x07, 0x4f, 0x34, 0x05, 0xf1, 0x36, 0x48, 0x7f, 0x37, 0xce, 0xfe, 0xe6, 0xa5,
0x20, 0x38, 0xe1, 0x05, 0xfb, 0xdd, 0x7e, 0xe8, 0x45, 0x46, 0xd5, 0x01, 0xbc, 0x72, 0x53, 0xe8,
0xd0, 0x4b, 0x64, 0x3d, 0xc5, 0xfe, 0x2d, 0x4b, 0xbe, 0x3a, 0xc2, 0x0d, 0x39, 0x14, 0x64, 0xbf,
0x09, 0xc0, 0x98, 0x38, 0x43, 0xf2, 0x48, 0xa7, 0x75, 0xe2, 0x7d, 0xd9, 0x92, 0x2c, 0x63, 0x18,
0x9e, 0x0b, 0xa8, 0x05, 0xa0, 0xa6, 0xf1, 0xec, 0x2f, 0xd8, 0x46, 0xe3, 0xe0, 0xd0, 0x33, 0x64,
0x25, 0x52, 0x9d, 0x65, 0x04, 0x9a, 0x81, 0xef, 0x4f, 0x6d, 0x30, 0x49, 0x5b, 0x11, 0x12, 0x94,
0xc8, 0x2d, 0x13, 0xec, 0x00, 0x23, 0xed, 0x2c, 0xd4, 0xb3, 0x66, 0xb6, 0xb3, 0x6b, 0x6e, 0x55,
0xf8, 0xfb, 0x75, 0xc8, 0xc7, 0x1a, 0xed, 0xe0, 0x90, 0x1b, 0x59, 0x57, 0x18, 0x51, 0x82, 0xb0,
0x05, 0xbe, 0x11, 0x6a, 0x84, 0x49, 0xdf, 0x23, 0xd2, 0xdf, 0xad, 0x02, 0x38, 0x2f, 0xbd, 0x77,
0x01, 0x5e, 0x14, 0x94, 0x2a, 0xd6, 0x31, 0xa2, 0x8f, 0x28, 0x3e, 0xbf, 0x83, 0x43, 0x4f, 0x80,
0xce, 0x9d, 0xfb, 0x14, 0x16, 0xfe, 0x00, 0x23, 0xea, 0x58, 0xc0, 0xef, 0x49, 0x0a, 0x9f, 0x64,
0xef, 0x2d, 0x03, 0x38, 0xa7, 0xf9, 0x4c, 0x53, 0x1a, 0x2a, 0xb1, 0x23, 0xab, 0x43, 0xcf, 0x60,
0x54, 0x3a, 0xa3, 0x46, 0x61, 0x25, 0x40, 0xe2, 0x3d, 0x47, 0x7b, 0xf1, 0xb3, 0x69, 0x4b, 0xcf,
0x35, 0xae, 0x48, 0x58, 0x47, 0x56, 0x87, 0x9e, 0xc2, 0x71, 0xb4, 0x5b, 0x85, 0xe3, 0x08, 0xc4,
0x2d, 0xc0, 0x2b, 0xec, 0xff, 0xb6, 0x23, 0x8a, 0x36, 0x88, 0xeb, 0x7e, 0xe5, 0xc8, 0xea, 0xe0,
0xd0, 0xbe, 0xe8, 0xbf, 0x30, 0xf8, 0xdc, 0x15, 0xa4, 0x13, 0x23, 0xbc, 0x03, 0x5e, 0x28, 0x24,
0x65, 0xfd, 0x1c, 0x73, 0x64, 0x75, 0x70, 0xf0, 0x54, 0xd9, 0x56, 0x02, 0x92, 0x87, 0x49, 0xe4,
0x45, 0xc3, 0xeb, 0xbe, 0x41, 0xa7, 0xfb, 0xe8, 0x63, 0xc0, 0xdf, 0xdd, 0x83, 0x73, 0xdd, 0x38,
0xf4, 0x10, 0xc8, 0xcd, 0x72, 0xc5, 0xf0, 0xf3, 0x87, 0xd1, 0xee, 0x5b, 0x5d, 0x91, 0x88, 0xa6,
0x9b, 0x2c, 0x3e, 0xcb, 0x08, 0xda, 0x8a, 0x39, 0x4f, 0xbf, 0x74, 0x64, 0x75, 0xe8, 0x15, 0x0c,
0x23, 0xd8, 0x4f, 0x6a, 0x4b, 0xad, 0xa6, 0xb8, 0xe2, 0xd3, 0xe2, 0xbd, 0x51, 0xf1, 0xff, 0x15,
0x84, 0x67, 0xfa, 0x70, 0x82, 0x9f, 0x81, 0x9f, 0x6b, 0x7b, 0xdf, 0x91, 0xd5, 0xa1, 0x97, 0x71,
0x97, 0x49, 0xc4, 0x56, 0xc8, 0x6b, 0x49, 0x48, 0x5f, 0x5d, 0xec, 0x15, 0x6a, 0x70, 0x13, 0x9e,
0x4b, 0x67, 0x05, 0xed, 0x56, 0xe3, 0xa3, 0x21, 0x9f, 0x93, 0x6b, 0x04, 0xd7, 0xe0, 0x5b, 0x85,
0xe5, 0xa4, 0x02, 0x47, 0x56, 0x87, 0x9e, 0x01, 0xf9, 0x45, 0x1f, 0x89, 0x33, 0x61, 0x13, 0xc0,
0x84, 0x90, 0x80, 0xa3, 0x42, 0x22, 0x56, 0xa5, 0xb3, 0xe3, 0x2d, 0x98, 0xf7, 0xa4, 0xd9, 0x2d,
0xae, 0xb3, 0x0a, 0xcf, 0x80, 0x34, 0x02, 0x2f, 0x08, 0x62, 0x07, 0xc2, 0xe3, 0x90, 0x77, 0xc0,
0xb7, 0x3c, 0x3f, 0x66, 0x9b, 0xcb, 0x80, 0x23, 0xab, 0x43, 0x2f, 0x81, 0x42, 0x06, 0x67, 0xd0,
0x1e, 0x99, 0x74, 0x1b, 0x5e, 0xaa, 0xdc, 0x61, 0xf6, 0xb7, 0xbb, 0xd0, 0xde, 0x93, 0xa6, 0x0a,
0xb5, 0x90, 0x40, 0x19, 0x57, 0xd9, 0x7d, 0xea, 0x6c, 0xc3, 0xb8, 0x1e, 0xf1, 0x99, 0x5b, 0xe2,
0x6f, 0xe6, 0x19, 0xe1, 0x9b, 0xf0, 0xda, 0x6b, 0x38, 0xb2, 0x3a, 0xf4, 0x0c, 0x3e, 0xa0, 0x3d,
0x26, 0x98, 0xaa, 0x3f, 0x90, 0xfa, 0x5a, 0x0d, 0x51, 0x8f, 0x79, 0xc0, 0xff, 0x79, 0x8d, 0xfb,
0xed, 0x10, 0xd7, 0xd5, 0xad, 0xb0, 0x4f, 0xd9, 0x39, 0x5c, 0x42, 0xb7, 0x1c, 0x59, 0x1d, 0x7a,
0x0d, 0xe4, 0x2a, 0x19, 0x16, 0x67, 0x54, 0xee, 0x26, 0xa9, 0xc0, 0x0b, 0x86, 0x18, 0x87, 0x17,
0x92, 0x38, 0x23, 0x54, 0x56, 0x7a, 0xff, 0x2d, 0x23, 0xef, 0x16, 0xc4, 0xe7, 0xa5, 0xd2, 0x39,
0x79, 0x50, 0x3a, 0x97, 0xce, 0xc7, 0x7c, 0xae, 0x82, 0xf6, 0xc2, 0x6c, 0xbc, 0x17, 0x8e, 0x4b,
0x40, 0x77, 0xe8, 0x29, 0x90, 0x94, 0xda, 0x8b, 0xce, 0xd6, 0x18, 0xeb, 0xd1, 0x59, 0xfc, 0x9b,
0xb7, 0x66, 0xec, 0x67, 0x12, 0x9a, 0x92, 0xc9, 0x27, 0x63, 0xc8, 0xda, 0x82, 0xd7, 0x58, 0x19,
0xf0, 0x92, 0xdc, 0x5b, 0xe2, 0x4c, 0xda, 0x0f, 0xcf, 0xc8, 0x74, 0x50, 0xe1, 0x99, 0xa9, 0xc4,
0xcc, 0x3b, 0x37, 0x7d, 0x0e, 0xbd, 0x04, 0xf2, 0x6f, 0x3e, 0x81, 0x5f, 0x83, 0x89, 0x40, 0xc1,
0x0d, 0x03, 0xf0, 0x02, 0xf8, 0xe7, 0x24, 0x35, 0x98, 0x24, 0xde, 0x14, 0xbc, 0x04, 0xf6, 0xa8,
0xfa, 0x4c, 0x4d, 0xb4, 0xfb, 0x50, 0xa7, 0xc4, 0xfb, 0x37, 0x02, 0x54, 0x6d, 0x95, 0x96, 0x8f,
0xfb, 0x84, 0x36, 0xe0, 0xe0, 0xd0, 0x53, 0x38, 0xc4, 0x48, 0xd6, 0x62, 0x2a, 0x6d, 0x13, 0x9d,
0xa1, 0x88, 0x15, 0xf6, 0xf7, 0xd5, 0x90, 0xeb, 0xf0, 0xf3, 0xed, 0x76, 0x26, 0xc1, 0x8f, 0x08,
0xc9, 0x2b, 0x07, 0x4d, 0xf4, 0xc3, 0x4b, 0x04, 0xd8, 0x20, 0xa4, 0x33, 0xdf, 0x10, 0x4e, 0x8a,
0xf7, 0x87, 0xa5, 0x7b, 0x6d, 0x74, 0x64, 0x75, 0xe8, 0x55, 0xf0, 0xc4, 0x71, 0x32, 0x1c, 0x1d,
0x31, 0x54, 0xab, 0x5b, 0xf0, 0x0b, 0xb2, 0x91, 0xcf, 0x96, 0xe7, 0xc1, 0x9e, 0x0f, 0x38, 0xbf,
0xca, 0xd8, 0x24, 0x24, 0x2c, 0x27, 0xfe, 0xa8, 0x74, 0xde, 0x75, 0x64, 0x75, 0xe8, 0x59, 0xec,
0x16, 0xa4, 0x98, 0x4b, 0x70, 0x0d, 0xaa, 0x33, 0x4c, 0xe5, 0x5c, 0xce, 0x30, 0xc2, 0x1d, 0x91,
0x48, 0xbd, 0x98, 0xe0, 0x3e, 0x55, 0x78, 0x01, 0xff, 0x0e, 0x0e, 0x3d, 0x8b, 0xd5, 0x84, 0x64,
0x85, 0x38, 0xcb, 0xf2, 0xb2, 0x30, 0x93, 0xf0, 0x8c, 0x52, 0xdc, 0x6d, 0x33, 0x07, 0xf3, 0x24,
0x82, 0xa3, 0x70, 0x59, 0x37, 0x0e, 0x3d, 0x0e, 0xea, 0xd8, 0x76, 0xdc, 0xc2, 0xb5, 0x2a, 0x68,
0xb7, 0x00, 0xd7, 0x85, 0x94, 0x3d, 0x03, 0xcf, 0x65, 0x74, 0xc6, 0x90, 0x70, 0x33, 0x50, 0x4b,
0x98, 0x77, 0x70, 0xe8, 0x6a, 0x2c, 0xa7, 0x44, 0x82, 0x03, 0xe8, 0x74, 0x01, 0xd1, 0x6b, 0x87,
0xe6, 0xb5, 0x36, 0xc3, 0x05, 0x45, 0x38, 0xf4, 0x38, 0xfa, 0x05, 0x09, 0x4e, 0x67, 0x78, 0xcf,
0x26, 0x80, 0x67, 0x06, 0x9f, 0x7b, 0xe3, 0xc8, 0xea, 0xd0, 0xeb, 0x67, 0xd5, 0xb8, 0xae, 0x72,
0xb6, 0x71, 0x0f, 0xe6, 0x16, 0x5d, 0xa7, 0x06, 0x3b, 0xf4, 0x24, 0x36, 0x8a, 0xc5, 0x7f, 0x22,
0xa7, 0xfb, 0x4e, 0x18, 0x92, 0x75, 0xc6, 0x4d, 0x9d, 0x43, 0xaf, 0xa1, 0x99, 0x83, 0x54, 0x25,
0x50, 0xbe, 0xea, 0xb0, 0xe6, 0xe7, 0xaa, 0x50, 0x6b, 0x59, 0xe9, 0xe0, 0xd0, 0x35, 0x20, 0x83,
0xcd, 0xb3, 0x9c, 0xc8, 0x4a, 0x52, 0x92, 0x62, 0x86, 0x55, 0x49, 0x4b, 0xa5, 0x54, 0xd7, 0xb9,
0x29, 0x74, 0xe8, 0x25, 0x9c, 0x46, 0x7b, 0x8f, 0xd6, 0xac, 0xba, 0x9a, 0xef, 0x85, 0xdf, 0x90,
0x8a, 0x47, 0x2a, 0x1d, 0x54, 0xfc, 0x7c, 0x0d, 0x9e, 0xb1, 0xc9, 0xc1, 0xa1, 0xe7, 0xb0, 0x01,
0x5e, 0x2c, 0x70, 0x2b, 0x23, 0x15, 0xb3, 0x25, 0xfd, 0xfb, 0x24, 0xbc, 0xea, 0x15, 0x44, 0xdc,
0xbb, 0x0a, 0x9b, 0x8c, 0x33, 0x34, 0x39, 0xf4, 0x34, 0xa8, 0x61, 0xf1, 0xeb, 0x14, 0xef, 0x51,
0x95, 0x88, 0xc6, 0x2b, 0xf1, 0xef, 0x85, 0x67, 0x29, 0xe6, 0x01, 0xfd, 0x1f, 0xe0, 0xf9, 0x6b,
0xc7, 0x03, 0x08, 0xbf, 0xcb, 0x4d, 0x99, 0x43, 0x2f, 0xa3, 0x8e, 0x64, 0xb1, 0xbb, 0x2a, 0x12,
0xf1, 0xb0, 0xf4, 0xfe, 0x34, 0xfc, 0x34, 0xba, 0x15, 0x21, 0x69, 0x07, 0xc5, 0x59, 0x76, 0x95,
0x11, 0xb7, 0x01, 0xbf, 0x5a, 0x7f, 0x92, 0x72, 0xaa, 0x0e, 0x0e, 0x5d, 0x43, 0xd6, 0x34, 0x02,
0x0f, 0xb8, 0x04, 0x0d, 0x6b, 0xa0, 0xbc, 0x89, 0x91, 0xb3, 0x09, 0xaf, 0x18, 0x39, 0x61, 0xbb,
0x50, 0x95, 0xb9, 0xd4, 0x75, 0x01, 0x12, 0x0e, 0x3d, 0x8d, 0x4d, 0x29, 0x9d, 0x07, 0x29, 0xa1,
0x7d, 0xa3, 0xc6, 0xdf, 0x72, 0xa9, 0xda, 0x02, 0x70, 0x09, 0x9e, 0x8f, 0xf5, 0xa1, 0xf8, 0xff,
0x6e, 0x37, 0x5d, 0x0e, 0xbd, 0x8c, 0xf1, 0x10, 0x55, 0x35, 0x09, 0x78, 0x49, 0x52, 0x1d, 0x62,
0xdf, 0x82, 0x5f, 0xe9, 0x30, 0xe8, 0xb5, 0xc9, 0x4d, 0x57, 0xb9, 0xf0, 0x89, 0x1b, 0x02, 0xeb,
0xb8, 0x0f, 0xe0, 0x27, 0x00, 0x7c, 0x6a, 0xe9, 0x7a, 0x24, 0xa9, 0x7f, 0x19, 0xc0, 0xff, 0x52,
0x24, 0xeb, 0x0f, 0x02, 0xf8, 0x3d, 0xe9, 0xfd, 0x7f, 0xe7, 0xce, 0xa9, 0x0e, 0x0e, 0xed, 0xa0,
0xae, 0xe8, 0x63, 0x09, 0xaf, 0x33, 0x05, 0xdf, 0x70, 0xa4, 0x53, 0x28, 0xdc, 0xb4, 0xc1, 0x95,
0x83, 0x43, 0x4f, 0xa2, 0x05, 0x2f, 0xca, 0xc9, 0x14, 0x54, 0x48, 0x6d, 0x0d, 0x9d, 0x6e, 0x17,
0x15, 0xb2, 0x3a, 0xe3, 0x91, 0x83, 0x83, 0x02, 0xa8, 0xd9, 0xf2, 0x80, 0xc1, 0x67, 0x2b, 0x00,
0xde, 0x8b, 0xcf, 0xbf, 0x32, 0xbc, 0xbf, 0x23, 0x6b, 0x97, 0xe2, 0x53, 0x37, 0x04, 0xd6, 0xf1,
0xa3, 0xe2, 0xe7, 0x4f, 0x6a, 0x7c, 0x66, 0x18, 0x5e, 0xe4, 0x51, 0x15, 0xc0, 0xf7, 0x03, 0xf8,
0x35, 0x00, 0x3f, 0xec, 0x86, 0xd2, 0x81, 0xe3, 0x6b, 0x6e, 0x08, 0xac, 0x83, 0x12, 0xc3, 0x7f,
0x56, 0xa8, 0xb3, 0x51, 0xf8, 0x1c, 0xc0, 0x4f, 0x01, 0xf8, 0x71, 0xf1, 0xff, 0x47, 0xf0, 0x8c,
0x53, 0x0e, 0x0e, 0x0e, 0x19, 0x61, 0x15, 0x5e, 0x00, 0xc2, 0x7e, 0xe9, 0xfd, 0xbb, 0x42, 0x4d,
0x95, 0x7d, 0xa0, 0x4f, 0x11, 0xde, 0x19, 0xce, 0xa9, 0xc1, 0x0e, 0x0e, 0x29, 0x62, 0x08, 0xe1,
0xfe, 0x4d, 0x8a, 0x1e, 0xfa, 0x08, 0xaf, 0xa2, 0xff, 0xa4, 0xe5, 0x7b, 0xcf, 0x3b, 0xb2, 0x3a,
0x38, 0xe8, 0x63, 0x1f, 0xbc, 0x10, 0xc1, 0xac, 0xc9, 0xa3, 0x1a, 0xed, 0xe4, 0xe0, 0xd0, 0xf3,
0xb8, 0x83, 0xf6, 0xca, 0x84, 0x59, 0x93, 0xf5, 0x15, 0x7c, 0x5f, 0xeb, 0x20, 0xfc, 0xce, 0x77,
0xd4, 0x08, 0xcb, 0xc1, 0xa1, 0xe7, 0x31, 0x81, 0xf6, 0x42, 0xdd, 0x5b, 0xe0, 0xf5, 0xa7, 0xc9,
0x9a, 0xac, 0xa3, 0x68, 0x0f, 0xda, 0x97, 0x5b, 0x72, 0xb8, 0x4a, 0x11, 0x0e, 0x3d, 0x0f, 0x2e,
0xbd, 0x5a, 0xec, 0xbd, 0xd5, 0x1c, 0x9e, 0x65, 0x5f, 0x00, 0x59, 0x29, 0xce, 0xf8, 0x86, 0x9b,
0xaa, 0xf2, 0xc1, 0xb9, 0x6e, 0xec, 0xe1, 0x89, 0xf8, 0x59, 0x03, 0xf0, 0x2d, 0xf1, 0xef, 0x43,
0xe2, 0xe7, 0xce, 0x1c, 0x9e, 0xe7, 0x7f, 0x02, 0xf8, 0x21, 0x00, 0xbf, 0x00, 0xe0, 0xa7, 0xc5,
0x7b, 0x6f, 0xe0, 0x42, 0x11, 0x1d, 0x7a, 0x14, 0xfd, 0xf0, 0xd2, 0xce, 0xf8, 0xf9, 0x74, 0x14,
0xc0, 0x82, 0xf4, 0x5e, 0x5f, 0x8e, 0xcf, 0x58, 0x11, 0xea, 0x78, 0x0b, 0xc0, 0x36, 0xa1, 0x1e,
0x3b, 0xc9, 0xea, 0x24, 0x6b, 0xd7, 0x60, 0x10, 0xc0, 0x6f, 0x00, 0xf8, 0x66, 0xc8, 0xef, 0x7f,
0x16, 0xc0, 0x77, 0xe0, 0x67, 0x2d, 0x35, 0xe1, 0xc5, 0xf1, 0x7e, 0x1f, 0x80, 0x6b, 0xe2, 0x3d,
0x8a, 0x0e, 0xfb, 0x35, 0x04, 0x37, 0x4a, 0xce, 0x0a, 0x35, 0x00, 0x3f, 0xcf, 0x24, 0xab, 0x83,
0x43, 0x29, 0x70, 0x06, 0x9d, 0x01, 0x09, 0x8b, 0x42, 0x12, 0xb6, 0x34, 0x5f, 0x4b, 0x00, 0xbe,
0x84, 0x1f, 0x03, 0xbc, 0x28, 0x88, 0x01, 0xf8, 0xcd, 0xa5, 0xbe, 0x2c, 0xc8, 0xf7, 0x7e, 0xce,
0xd4, 0x5f, 0xea, 0xa6, 0x3e, 0xea, 0x96, 0x83, 0x43, 0x11, 0x55, 0xd5, 0x23, 0x12, 0xd1, 0x5e,
0x0b, 0xf5, 0x75, 0x55, 0xa8, 0xab, 0x5c, 0x65, 0xdd, 0x27, 0x7e, 0xa7, 0x6b, 0x31, 0xe5, 0x64,
0xa5, 0x1e, 0x38, 0xc7, 0x0a, 0xf0, 0xfd, 0x29, 0x40, 0x63, 0x81, 0x91, 0x95, 0xbe, 0xeb, 0x1b,
0xf8, 0x1d, 0xdb, 0x1d, 0x1c, 0x72, 0xc3, 0x38, 0xfc, 0xdc, 0xce, 0x96, 0x22, 0x79, 0x9a, 0xf0,
0x22, 0x8b, 0x4c, 0xb0, 0x28, 0x7d, 0xf6, 0x83, 0xb8, 0x67, 0xde, 0x64, 0xa0, 0x36, 0x91, 0x5b,
0xe1, 0xe5, 0xd8, 0x92, 0x35, 0xf8, 0x2c, 0x3a, 0xeb, 0x0e, 0x0f, 0xb8, 0x65, 0xe3, 0x90, 0x35,
0x26, 0xd9, 0x42, 0x5c, 0x85, 0x57, 0x01, 0x50, 0x05, 0x7b, 0xc4, 0x67, 0xb6, 0x18, 0xdc, 0xf3,
0x35, 0xda, 0x2d, 0xad, 0xeb, 0xe0, 0xc7, 0xfd, 0xe6, 0x05, 0xaa, 0xc0, 0x4f, 0x67, 0x66, 0x22,
0x2b, 0x1f, 0x8f, 0xcf, 0xe1, 0x97, 0x38, 0xe5, 0x12, 0xd8, 0xc1, 0x21, 0x75, 0x0c, 0xb3, 0x85,
0x67, 0x52, 0x1b, 0xb7, 0xc9, 0xd4, 0x59, 0x1d, 0xac, 0x17, 0xf7, 0x3c, 0xc4, 0xde, 0xfb, 0x12,
0xf9, 0x35, 0x83, 0x1a, 0x86, 0x5f, 0x69, 0x82, 0x24, 0x66, 0x1f, 0xc2, 0x0b, 0xa5, 0x8d, 0xc1,
0x2b, 0x55, 0x4a, 0x63, 0x77, 0xc6, 0x2d, 0x25, 0x87, 0xb4, 0x41, 0xe7, 0xcf, 0xed, 0x86, 0x9f,
0x3f, 0x00, 0x73, 0x5f, 0x64, 0x5d, 0x90, 0x7d, 0x84, 0xbd, 0x47, 0x4d, 0xa4, 0xc6, 0x33, 0x1c,
0x83, 0xed, 0x68, 0x77, 0x25, 0xe9, 0xe2, 0x09, 0xfb, 0xbc, 0xeb, 0x3a, 0xe7, 0x90, 0xea, 0x22,
0x4d, 0x52, 0x6d, 0x9e, 0xc8, 0x6a, 0x52, 0x43, 0x89, 0x1a, 0x56, 0xbd, 0x97, 0xde, 0xaf, 0x21,
0x9b, 0x2a, 0xf8, 0xc3, 0xf0, 0x2b, 0x4d, 0xac, 0xc1, 0xab, 0xe3, 0x64, 0x8a, 0xcd, 0xec, 0xb9,
0x97, 0xe1, 0x1b, 0xa6, 0xce, 0xbb, 0x65, 0xe6, 0x60, 0x03, 0xe4, 0x52, 0x49, 0x02, 0xaa, 0xfd,
0x7b, 0xc4, 0xf0, 0xf3, 0x64, 0xd0, 0xe1, 0xb9, 0xac, 0x7d, 0x6c, 0xe1, 0xa7, 0x15, 0x7a, 0x78,
0x81, 0x49, 0xc3, 0xab, 0x16, 0xaf, 0x7b, 0x19, 0xc1, 0xae, 0xab, 0xb3, 0x6e, 0xb9, 0x39, 0x98,
0x82, 0x6a, 0x1f, 0x6d, 0x48, 0x78, 0x9d, 0x8d, 0x09, 0xc9, 0x0a, 0x78, 0x56, 0xe1, 0x16, 0x80,
0x1d, 0xec, 0xbd, 0x0a, 0xda, 0x5d, 0x48, 0x0f, 0xa0, 0x6e, 0xf8, 0x0a, 0x43, 0x3f, 0xbc, 0xe2,
0xdd, 0x74, 0xcd, 0x57, 0xb0, 0x1b, 0x2d, 0x75, 0x0f, 0x7e, 0x52, 0xc2, 0x66, 0xf1, 0x1d, 0x06,
0xd0, 0x9e, 0xc5, 0xf3, 0x16, 0xe1, 0x5d, 0x02, 0x1c, 0x1c, 0x3a, 0x30, 0x08, 0x7b, 0xa9, 0x68,
0xa4, 0x06, 0xaf, 0x4f, 0x78, 0x1d, 0x32, 0xee, 0x9c, 0x93, 0xde, 0xef, 0x93, 0x16, 0xfb, 0x2a,
0xbc, 0x62, 0xdc, 0xa3, 0x9a, 0xdf, 0xf7, 0x1e, 0xda, 0x03, 0x34, 0x6c, 0xbb, 0x5d, 0x9e, 0x30,
0x75, 0x3a, 0x0c, 0x73, 0x0a, 0x7f, 0xe3, 0xe0, 0xd0, 0x86, 0x15, 0xd8, 0x4b, 0xfd, 0x4a, 0x62,
0x60, 0x92, 0xa5, 0x5e, 0x35, 0x82, 0xf8, 0x03, 0xf0, 0xfc, 0xbe, 0x72, 0x2a, 0x5b, 0x53, 0x90,
0x6f, 0x09, 0xed, 0x7e, 0xe1, 0xdb, 0xe2, 0xbd, 0x55, 0x49, 0xaa, 0x4d, 0xa6, 0x30, 0x9e, 0x0f,
0xc4, 0xf5, 0x8f, 0x2a, 0xfc, 0xed, 0x34, 0x5c, 0x95, 0x7f, 0x07, 0x45, 0x90, 0x3f, 0xf3, 0xa5,
0xa5, 0xeb, 0x35, 0x60, 0xe6, 0xba, 0x09, 0x42, 0x05, 0xc0, 0x75, 0xf1, 0x7c, 0x37, 0x63, 0x88,
0x3d, 0x0a, 0x2f, 0xd0, 0xbe, 0x2a, 0x5e, 0xf5, 0x80, 0x73, 0x62, 0x4d, 0xfc, 0xee, 0x84, 0x90,
0xae, 0x69, 0xe0, 0x8a, 0xb8, 0xd7, 0xac, 0xc6, 0x67, 0x06, 0xe0, 0x07, 0x81, 0x3c, 0x72, 0x4b,
0xd2, 0x21, 0x0c, 0x55, 0xd8, 0x4d, 0xfb, 0x6a, 0xc0, 0x6b, 0xde, 0x64, 0x13, 0x27, 0xc5, 0x33,
0xde, 0x29, 0xc1, 0x78, 0xb6, 0xe0, 0x57, 0x68, 0xd4, 0xc5, 0xb2, 0xf8, 0xfc, 0xbc, 0x5b, 0x96,
0x0e, 0x32, 0x28, 0xf5, 0xeb, 0x90, 0xe5, 0xc5, 0x7a, 0x3a, 0x85, 0x67, 0xa5, 0xea, 0x0d, 0x37,
0x2d, 0x5e, 0xf3, 0x9c, 0x50, 0x59, 0x6d, 0xe1, 0x9a, 0x85, 0x8d, 0x6f, 0xbf, 0xb8, 0x46, 0x15,
0x9e, 0x2b, 0xc9, 0xc1, 0xe1, 0x7b, 0xee, 0x90, 0x26, 0xec, 0x59, 0x23, 0x47, 0x91, 0x6e, 0x72,
0xf6, 0x11, 0x76, 0x2e, 0xdd, 0x0a, 0xfd, 0x16, 0x1b, 0xa3, 0x82, 0x0c, 0x5c, 0x45, 0xb6, 0x55,
0x32, 0xa6, 0xdf, 0xe2, 0x71, 0x82, 0x57, 0xa9, 0x18, 0x71, 0x4b, 0xd5, 0xe1, 0x14, 0xec, 0xb8,
0x6a, 0x38, 0x28, 0x02, 0x29, 0x6d, 0x70, 0x4b, 0x6e, 0x13, 0x9e, 0x2f, 0x33, 0x6a, 0x51, 0xdf,
0x09, 0x38, 0xbf, 0x36, 0xe1, 0x57, 0xa7, 0xb0, 0x81, 0x1b, 0xb0, 0x63, 0x05, 0x97, 0x8f, 0x14,
0x59, 0x47, 0x6f, 0x39, 0x14, 0x10, 0x69, 0x10, 0xab, 0x25, 0x88, 0x94, 0xe5, 0x86, 0x53, 0x85,
0x7a, 0x0e, 0xed, 0xfd, 0x94, 0x54, 0xf4, 0x3e, 0xf8, 0xb9, 0xbd, 0x36, 0x31, 0xc0, 0x08, 0xeb,
0x24, 0x6c, 0x0f, 0x23, 0x89, 0x21, 0x84, 0x63, 0x84, 0x9d, 0xb3, 0xc2, 0x8a, 0x71, 0x1f, 0x4c,
0x79, 0xb1, 0x8d, 0x0b, 0x0d, 0xe1, 0xa3, 0xb8, 0x67, 0x5d, 0xa8, 0xf8, 0xc7, 0xc5, 0xfb, 0x53,
0x29, 0x8f, 0x25, 0x25, 0x21, 0xa4, 0x61, 0x61, 0xee, 0x67, 0x84, 0x75, 0xe8, 0x41, 0xbc, 0x48,
0x38, 0xf9, 0x7d, 0x21, 0x12, 0x6d, 0x51, 0x7a, 0x35, 0x03, 0xc8, 0x3b, 0x87, 0x7c, 0x6b, 0x2a,
0xa5, 0xa5, 0xa5, 0xa4, 0x59, 0x7a, 0x66, 0x06, 0xf6, 0xc3, 0x20, 0x1d, 0x4a, 0x80, 0xcd, 0x09,
0x0c, 0x21, 0x93, 0xf0, 0x63, 0x74, 0x89, 0x7c, 0x97, 0xe1, 0xf9, 0x37, 0xa3, 0x3e, 0x73, 0x59,
0xbc, 0xb8, 0x61, 0xa7, 0x86, 0xe4, 0xe1, 0x82, 0x45, 0xc0, 0x4e, 0xf8, 0xc9, 0xe9, 0x69, 0x62,
0xde, 0x49, 0xd7, 0xde, 0x42, 0x85, 0x49, 0x44, 0x5d, 0xb7, 0xc0, 0x0d, 0x46, 0xb4, 0x8f, 0x08,
0x0e, 0xef, 0x1b, 0x13, 0x2a, 0x69, 0x54, 0xe8, 0xde, 0x28, 0xbc, 0x84, 0x72, 0x2e, 0x75, 0xdf,
0x95, 0xf8, 0x4c, 0xf6, 0x02, 0xd9, 0x18, 0xd5, 0x86, 0x9d, 0x74, 0xed, 0x2d, 0x90, 0x05, 0x58,
0x37, 0xc8, 0xfe, 0x3e, 0xfc, 0x80, 0x74, 0x2e, 0x45, 0x27, 0xe0, 0x65, 0x8f, 0x34, 0x25, 0xf2,
0x5d, 0xd3, 0xb8, 0xf6, 0x12, 0xda, 0x2d, 0xb4, 0x65, 0x93, 0xb6, 0x36, 0x8c, 0x6a, 0x83, 0xf0,
0xb2, 0x8d, 0xc8, 0xe8, 0xf7, 0x11, 0x5e, 0x08, 0xe8, 0x8a, 0xd8, 0x5c, 0x69, 0x7c, 0xe5, 0x64,
0x78, 0x87, 0x2e, 0x86, 0x49, 0x8a, 0x59, 0x8d, 0x49, 0x53, 0x7e, 0x66, 0xe5, 0x24, 0x5b, 0x81,
0x17, 0x16, 0x78, 0x2d, 0xc1, 0xb3, 0xf1, 0x9a, 0x46, 0x1f, 0x50, 0x9e, 0x80, 0x00, 0x2a, 0xa3,
0x6a, 0x8a, 0xdb, 0x6c, 0x23, 0xbc, 0x2e, 0x5e, 0xbc, 0x2c, 0xce, 0x7a, 0x31, 0xae, 0x6b, 0x6c,
0x7c, 0xa6, 0xdc, 0x52, 0xee, 0x6e, 0x50, 0xb9, 0x50, 0x9d, 0xec, 0x14, 0x8a, 0xcb, 0x5d, 0x82,
0x67, 0x95, 0xec, 0x83, 0xdf, 0xb4, 0xa9, 0x05, 0x2f, 0xbd, 0xcc, 0x66, 0x41, 0xb3, 0x71, 0x78,
0xc1, 0xf5, 0x3c, 0xe7, 0x33, 0x0b, 0x63, 0x14, 0xc5, 0x16, 0xc7, 0xbd, 0x82, 0x54, 0xf5, 0x11,
0xf1, 0xac, 0x73, 0x06, 0xf7, 0xbd, 0x0a, 0xbd, 0x78, 0xe0, 0x43, 0xf0, 0x5d, 0x50, 0x0e, 0x5d,
0x0c, 0x0a, 0x70, 0x8f, 0x3a, 0x4b, 0xee, 0x0a, 0xf8, 0x0c, 0x05, 0xe5, 0x6f, 0x63, 0x24, 0xba,
0x2d, 0xfd, 0xdd, 0x10, 0xbc, 0xe0, 0xf8, 0xd7, 0x4c, 0x65, 0x6b, 0xc2, 0xb3, 0x08, 0x9f, 0x08,
0x78, 0xa9, 0x44, 0x1e, 0x2d, 0x31, 0x89, 0x63, 0x53, 0xed, 0xdb, 0x26, 0x9e, 0x61, 0x3e, 0x40,
0x7d, 0x57, 0x79, 0xd1, 0x67, 0x2e, 0xc1, 0x73, 0x49, 0x01, 0x9e, 0xef, 0x96, 0x48, 0x34, 0xa4,
0xa1, 0xfa, 0x46, 0xb9, 0xcf, 0xc2, 0x5a, 0x4e, 0x52, 0x86, 0xd4, 0xb4, 0x5b, 0xd2, 0xdd, 0xad,
0x02, 0x53, 0x5a, 0x58, 0x10, 0x66, 0xd1, 0x59, 0xc1, 0x80, 0xac, 0x8f, 0x3b, 0xd8, 0xe7, 0xa7,
0xa5, 0x85, 0xff, 0x54, 0x5a, 0xcc, 0x94, 0x5f, 0xba, 0x0a, 0xb5, 0x42, 0xdf, 0x51, 0x71, 0xc9,
0xdc, 0xa8, 0x95, 0x24, 0x26, 0xf8, 0x78, 0x08, 0x29, 0xef, 0x89, 0x67, 0xbd, 0x05, 0x60, 0xaf,
0xc2, 0x75, 0x66, 0xc4, 0xdf, 0x36, 0x25, 0xf2, 0x1e, 0x07, 0x70, 0x91, 0x6d, 0x2e, 0x2a, 0xd8,
0xc9, 0xc6, 0x77, 0x18, 0xc0, 0x17, 0x01, 0xa4, 0x8c, 0x52, 0xbd, 0x5d, 0xc3, 0xe7, 0x2e, 0x06,
0x5f, 0x60, 0x71, 0xe4, 0xa8, 0xc3, 0x4f, 0x9e, 0xbe, 0xcb, 0x88, 0xb5, 0x9e, 0x9d, 0x59, 0x79,
0x08, 0xdf, 0x63, 0xe8, 0x95, 0x1f, 0xdd, 0x0d, 0xcf, 0x2f, 0x29, 0xf7, 0x60, 0x0d, 0xaa, 0xdb,
0xb4, 0x8e, 0xa9, 0xf0, 0xba, 0xe1, 0x81, 0x15, 0x78, 0xa5, 0x42, 0xf9, 0x46, 0x65, 0xab, 0xc9,
0x55, 0x45, 0x3a, 0x67, 0x37, 0x24, 0xc2, 0x56, 0x14, 0xc8, 0x4a, 0xed, 0x38, 0xb6, 0x8a, 0xcf,
0xf1, 0xcf, 0x44, 0xd9, 0x16, 0xb6, 0xc2, 0xb9, 0x71, 0xba, 0x16, 0x54, 0x5f, 0xe8, 0x21, 0xfc,
0xd6, 0x85, 0x61, 0x18, 0x92, 0x16, 0x20, 0xb9, 0x56, 0x48, 0x02, 0x3c, 0x40, 0x7b, 0x69, 0x15,
0x1b, 0xe0, 0xc4, 0xaf, 0xa1, 0xbd, 0x9c, 0x0b, 0x81, 0x0a, 0x8e, 0xbf, 0x56, 0xbc, 0xe6, 0x16,
0xf6, 0xfc, 0x49, 0x7b, 0xd4, 0x8c, 0xc0, 0xb3, 0xa0, 0x1f, 0x46, 0x70, 0xb2, 0xfa, 0x59, 0x36,
0x5e, 0x43, 0x50, 0x4b, 0x10, 0xd8, 0x89, 0xf6, 0x7a, 0x57, 0x72, 0xa3, 0x66, 0x3e, 0xee, 0x41,
0xa8, 0x43, 0x2d, 0x67, 0x76, 0x97, 0x78, 0xf6, 0xa0, 0xd7, 0x36, 0x47, 0x8d, 0x62, 0xaa, 0xc0,
0x74, 0xf6, 0x6c, 0x08, 0x29, 0x1b, 0x75, 0x0e, 0x9c, 0x90, 0xd4, 0x45, 0x32, 0xc2, 0x34, 0x61,
0x2f, 0x4c, 0x31, 0x4c, 0x5d, 0x6d, 0x85, 0x9c, 0xad, 0xf7, 0xc5, 0xa8, 0xf1, 0x1c, 0x7b, 0xd9,
0xb3, 0x5f, 0xb1, 0xf0, 0x5c, 0x13, 0x92, 0x66, 0xf2, 0x30, 0xc0, 0xd8, 0x74, 0x94, 0x11, 0x96,
0x12, 0xfa, 0xaf, 0x2a, 0xaa, 0xc1, 0x44, 0x3e, 0xae, 0x42, 0x3f, 0x12, 0xbf, 0xff, 0x2a, 0x42,
0x53, 0xa2, 0xa3, 0xc1, 0xb8, 0x78, 0xa6, 0xc7, 0xd0, 0xef, 0x39, 0x54, 0x73, 0xa4, 0x2d, 0x1e,
0x59, 0x4f, 0x31, 0x29, 0x41, 0x13, 0x15, 0x75, 0x5e, 0x9c, 0x97, 0x88, 0x53, 0xa6, 0x52, 0x9a,
0xf4, 0xfd, 0x82, 0xca, 0xd4, 0x5c, 0x85, 0xef, 0xc3, 0x0c, 0x5b, 0xc0, 0x55, 0x04, 0x27, 0x80,
0xf7, 0x31, 0x55, 0xb7, 0x25, 0x0c, 0x55, 0x41, 0x9b, 0xcd, 0x22, 0x33, 0x60, 0x85, 0x81, 0xba,
0x1e, 0x50, 0xe9, 0x17, 0x8a, 0xaf, 0xe6, 0x19, 0x36, 0xd3, 0x08, 0xce, 0xb8, 0x19, 0x0d, 0x79,
0xee, 0x86, 0xb0, 0x21, 0x1c, 0x60, 0xaf, 0xb0, 0xfa, 0xcf, 0xa3, 0xe2, 0x58, 0x41, 0xf3, 0xea,
0x3a, 0x09, 0x14, 0x6c, 0xf1, 0x56, 0x24, 0x03, 0x46, 0x2b, 0xc2, 0xb0, 0xc2, 0x17, 0xdb, 0x3b,
0xf1, 0xb7, 0xc7, 0x4b, 0xfa, 0xfd, 0xa7, 0xa5, 0xf3, 0x31, 0xf9, 0x86, 0xe5, 0xc0, 0xfb, 0xed,
0x01, 0x24, 0x6e, 0x0a, 0x29, 0x27, 0x87, 0x13, 0x86, 0x59, 0xab, 0x49, 0x25, 0xa6, 0xaa, 0x89,
0xfd, 0x11, 0x6a, 0x3a, 0x05, 0x39, 0xf4, 0x31, 0xad, 0x47, 0xe5, 0x2c, 0x3a, 0xc6, 0x54, 0x6d,
0x1b, 0x11, 0x4d, 0x3b, 0xd9, 0xf7, 0x5d, 0xef, 0xe8, 0x52, 0x0c, 0xb2, 0x56, 0xa5, 0xb3, 0x29,
0x85, 0x1e, 0x06, 0x35, 0x9c, 0xda, 0xce, 0x16, 0x4e, 0x91, 0xc2, 0xdc, 0xf6, 0x1a, 0xa8, 0xb6,
0xa3, 0x42, 0x4d, 0x3c, 0xa9, 0xf1, 0x99, 0x29, 0xf1, 0x19, 0x1e, 0xcf, 0x2c, 0x1b, 0xb8, 0x4e,
0x22, 0xd8, 0x02, 0xdc, 0x64, 0xe3, 0xfd, 0x14, 0x5e, 0xe6, 0xcf, 0x18, 0x3c, 0x97, 0x57, 0x95,
0x6d, 0x02, 0x72, 0xc3, 0x2f, 0x22, 0x4d, 0x5c, 0xb3, 0xe6, 0x85, 0x94, 0x0c, 0x4c, 0xf4, 0x5d,
0x0f, 0x3a, 0xca, 0xe4, 0x7f, 0x66, 0x0d, 0x3a, 0x0f, 0xde, 0x93, 0xce, 0xb4, 0x61, 0x9f, 0x2b,
0x4a, 0xd4, 0xcc, 0x7d, 0x64, 0x6f, 0x09, 0xdd, 0xcd, 0xc8, 0x25, 0x1b, 0x8e, 0xd6, 0x07, 0xbc,
0x4f, 0xe5, 0x72, 0x96, 0xd0, 0xe9, 0xcb, 0xad, 0xc1, 0x6b, 0xe0, 0x45, 0x5a, 0xce, 0x03, 0x89,
0x20, 0x87, 0x14, 0x54, 0x52, 0x1b, 0xc5, 0xd8, 0x83, 0x30, 0xc0, 0x08, 0x7b, 0xc1, 0xd1, 0x26,
0x7b, 0xec, 0x82, 0x1f, 0x0f, 0x7c, 0x9f, 0x11, 0xb6, 0x2f, 0x60, 0xc1, 0xc9, 0x09, 0xd4, 0x69,
0x57, 0xc1, 0x37, 0xc1, 0x51, 0xe4, 0xe7, 0xb6, 0x18, 0x66, 0x52, 0x71, 0x86, 0x8d, 0xe1, 0x40,
0x80, 0x4a, 0xcc, 0xad, 0xe6, 0xfd, 0xe2, 0xfd, 0xbe, 0x98, 0x0d, 0xe8, 0xa8, 0x18, 0xeb, 0x28,
0x17, 0xd5, 0x33, 0xd8, 0x2b, 0x1b, 0x1b, 0x84, 0x8a, 0x30, 0x5c, 0xa9, 0x48, 0x78, 0x07, 0xcb,
0x58, 0x96, 0x16, 0xf7, 0x1c, 0xdb, 0xe1, 0xc3, 0xce, 0x61, 0xe4, 0xe8, 0xaf, 0xc5, 0x4c, 0xda,
0x19, 0x64, 0xdf, 0x01, 0xbc, 0x8a, 0xfc, 0x8b, 0x62, 0x53, 0x91, 0x71, 0x6e, 0x99, 0x1e, 0x47,
0x7b, 0xf7, 0xbd, 0x2d, 0x88, 0xf6, 0x6b, 0x1f, 0x80, 0xef, 0x8e, 0xa2, 0xce, 0xea, 0x2f, 0x62,
0xee, 0x3b, 0x9e, 0xe1, 0x91, 0x84, 0xce, 0xde, 0xb7, 0x1c, 0x85, 0xb2, 0x95, 0x42, 0xb7, 0x03,
0x0c, 0x2e, 0xa4, 0x9a, 0x6d, 0x8e, 0x30, 0x7c, 0xd4, 0x23, 0x16, 0x1c, 0x59, 0x2f, 0xf7, 0xe5,
0xa0, 0xd2, 0x3f, 0x29, 0xc0, 0xd8, 0x1e, 0x8f, 0x21, 0x2c, 0xe0, 0xb7, 0x01, 0xe1, 0x9b, 0xa1,
0x9c, 0x65, 0x74, 0x53, 0xcc, 0x41, 0x03, 0x9d, 0xc6, 0x2d, 0xb2, 0x5a, 0x53, 0x2c, 0x30, 0x05,
0x78, 0x64, 0x95, 0x75, 0x73, 0x1e, 0x7e, 0xd0, 0x8b, 0x43, 0xca, 0x68, 0x46, 0xec, 0xec, 0x15,
0x84, 0xd7, 0xa9, 0xed, 0x83, 0x9f, 0x4e, 0x17, 0x46, 0x56, 0xea, 0xc3, 0x1a, 0x17, 0xa9, 0xb3,
0x01, 0x9e, 0x9b, 0x62, 0x1e, 0x9d, 0xdd, 0xe1, 0x4c, 0xc9, 0xaa, 0x52, 0x8d, 0x71, 0x00, 0xe1,
0xf1, 0xb5, 0xb6, 0xb0, 0x80, 0xce, 0xee, 0x76, 0x03, 0x6c, 0xa3, 0x1b, 0x61, 0x92, 0x50, 0x2e,
0xf2, 0xf6, 0x10, 0xed, 0xe1, 0x94, 0x74, 0x3c, 0xb9, 0x26, 0xb4, 0x95, 0xa0, 0x12, 0x31, 0x9f,
0xe7, 0x70, 0x04, 0x38, 0xc5, 0x9e, 0x79, 0xc8, 0x51, 0x2a, 0x1d, 0x90, 0xa5, 0x32, 0xce, 0xdd,
0xb2, 0x87, 0x4d, 0xc6, 0x78, 0x88, 0xaa, 0xdb, 0x0a, 0x20, 0xb3, 0xaa, 0x3a, 0xc6, 0x17, 0xe3,
0xbb, 0x84, 0xdf, 0x69, 0x93, 0xc6, 0x62, 0xdd, 0x9f, 0xd1, 0xc2, 0x5e, 0x0b, 0xb8, 0x0f, 0xd9,
0x09, 0x6e, 0x4a, 0x04, 0xa5, 0x20, 0x07, 0x6e, 0x70, 0x5a, 0x90, 0xbe, 0xd7, 0x20, 0xbc, 0x38,
0xe1, 0xeb, 0xd2, 0xeb, 0x78, 0x4e, 0x64, 0xa5, 0x67, 0xe2, 0x1d, 0xe0, 0x1d, 0x52, 0x90, 0xaa,
0x75, 0x45, 0x29, 0xb4, 0x0d, 0xbe, 0x8f, 0xaf, 0xa1, 0x40, 0x56, 0xda, 0x6d, 0x55, 0x0a, 0x84,
0xed, 0x13, 0xd7, 0x50, 0x8d, 0x1d, 0xbe, 0x1e, 0x71, 0x46, 0x7e, 0x0e, 0xf5, 0xaa, 0x0c, 0x6f,
0x90, 0x4d, 0x05, 0x07, 0x0a, 0x6e, 0x90, 0x13, 0xfa, 0x1b, 0x6c, 0x81, 0xb7, 0x24, 0x4d, 0x67,
0x0d, 0x9e, 0x9b, 0x66, 0x1d, 0xfc, 0xe0, 0x13, 0x39, 0xab, 0x47, 0x7e, 0xb5, 0x72, 0x24, 0x2b,
0x3f, 0x52, 0x6d, 0x70, 0xd4, 0xb2, 0x8b, 0xc3, 0x62, 0x60, 0x0f, 0x6b, 0x7c, 0xa6, 0x9f, 0x9d,
0x51, 0x5a, 0x8c, 0xec, 0xb4, 0x50, 0xb8, 0x25, 0xb3, 0x86, 0xe8, 0xac, 0x90, 0x24, 0xe0, 0x5d,
0xc3, 0x3f, 0x0a, 0x92, 0xd3, 0xbd, 0x17, 0xa1, 0x9e, 0x6d, 0xd2, 0xc8, 0xf0, 0x6c, 0x5b, 0x0d,
0x90, 0x3a, 0xdc, 0x42, 0x4c, 0xd1, 0x62, 0x0d, 0x78, 0xb5, 0xaf, 0xa8, 0xb4, 0x0d, 0x7d, 0xcf,
0x2f, 0xe0, 0x47, 0x2f, 0x85, 0xa9, 0x9a, 0x43, 0x39, 0x93, 0x15, 0xcc, 0x86, 0xf1, 0x11, 0xe9,
0xf5, 0x0a, 0xea, 0x39, 0xb4, 0x12, 0x4e, 0xea, 0x45, 0x76, 0x1e, 0xa3, 0x09, 0xda, 0x29, 0x5d,
0xff, 0x40, 0xca, 0xdf, 0x61, 0x33, 0xdb, 0x28, 0x6a, 0xf0, 0xad, 0xab, 0x3a, 0x64, 0x7d, 0x94,
0xd1, 0x78, 0x1f, 0x0b, 0x19, 0xef, 0x17, 0x68, 0x4f, 0x1d, 0xa4, 0xa6, 0x5d, 0xf4, 0xde, 0x2d,
0xa6, 0xd9, 0xa8, 0xcc, 0x57, 0xde, 0x64, 0xa5, 0x79, 0x71, 0x67, 0xd8, 0x10, 0x1c, 0x17, 0x12,
0xe5, 0x23, 0xa2, 0x03, 0xb2, 0x17, 0x05, 0xa1, 0x6a, 0x4c, 0x65, 0xb2, 0x49, 0x7e, 0x5a, 0x58,
0x37, 0x12, 0x2c, 0x98, 0xad, 0xe2, 0x39, 0x07, 0x34, 0x37, 0x0e, 0xfa, 0x8e, 0xcf, 0x0b, 0x4a,
0xd6, 0xc1, 0x88, 0x31, 0xe1, 0xaa, 0x6d, 0x43, 0x7c, 0xff, 0x39, 0x49, 0x53, 0xd9, 0x26, 0x24,
0xf3, 0x22, 0xda, 0x53, 0x06, 0x79, 0x4e, 0xf0, 0x08, 0xda, 0xd3, 0xfd, 0xc2, 0x12, 0xe3, 0xa9,
0x0c, 0x6c, 0x9a, 0x31, 0xdc, 0xeb, 0x50, 0x3c, 0xff, 0x7b, 0x21, 0xc0, 0x6b, 0x20, 0xed, 0x11,
0x67, 0x06, 0xf9, 0xf5, 0x25, 0x3a, 0x63, 0x5f, 0x6d, 0xaa, 0x29, 0x75, 0xb6, 0x18, 0x9f, 0x22,
0x38, 0xc1, 0xfa, 0xb5, 0xc2, 0x79, 0x86, 0x67, 0xc3, 0x2c, 0x21, 0x38, 0x7f, 0x35, 0x08, 0x13,
0x62, 0x1c, 0x1a, 0x1a, 0x64, 0xb5, 0x55, 0xfe, 0xa4, 0x2a, 0x36, 0x0c, 0x15, 0x1b, 0xc1, 0x83,
0x90, 0xf7, 0x1b, 0xcc, 0x98, 0xf4, 0x24, 0xc4, 0x66, 0xb0, 0x26, 0xe6, 0xf8, 0x00, 0x3c, 0xd7,
0x1a, 0xc5, 0x14, 0x8f, 0x0b, 0x22, 0x8f, 0x31, 0xb2, 0x3e, 0x0c, 0x59, 0x07, 0x6b, 0xd2, 0xd1,
0x85, 0x1f, 0x27, 0x6e, 0x89, 0xbf, 0xb1, 0x55, 0x86, 0xe7, 0x18, 0x53, 0xe1, 0x5d, 0x01, 0x37,
0xb6, 0xe8, 0x74, 0xce, 0x5e, 0x3c, 0x93, 0xa2, 0x0a, 0x7b, 0x4d, 0xa7, 0xc8, 0xc5, 0x13, 0x44,
0x56, 0x52, 0xe3, 0x76, 0x2b, 0x5e, 0xeb, 0xac, 0x24, 0x0d, 0xe2, 0x48, 0xce, 0xb3, 0x4c, 0xae,
0x69, 0x3c, 0xaf, 0x8d, 0xa0, 0xf4, 0x46, 0xc0, 0x7d, 0xcf, 0x8b, 0xe7, 0xe6, 0x59, 0x37, 0x1f,
0x43, 0xa4, 0x2b, 0x49, 0x78, 0x3a, 0x3a, 0x84, 0x91, 0x75, 0x5e, 0x10, 0x60, 0x4e, 0x7a, 0x6d,
0x4c, 0xa8, 0x06, 0xdf, 0x92, 0x24, 0x76, 0x0b, 0x9e, 0x0b, 0xed, 0xb0, 0x85, 0xb1, 0x39, 0x03,
0xd7, 0xa2, 0xf2, 0x7b, 0xd8, 0x6d, 0xa8, 0x72, 0x0e, 0xc3, 0x4b, 0x64, 0xe6, 0x11, 0x35, 0x49,
0x70, 0x33, 0x60, 0xb2, 0x39, 0x4c, 0x2c, 0xaf, 0xe3, 0xe2, 0x19, 0x49, 0x73, 0xb8, 0xa4, 0x20,
0xb9, 0x6e, 0x68, 0x6e, 0x2e, 0x3a, 0x78, 0xce, 0x36, 0xb9, 0x09, 0xc9, 0xf0, 0xc6, 0x2d, 0xbb,
0x80, 0x9f, 0xcc, 0xcf, 0x53, 0xcb, 0x76, 0x84, 0x6c, 0x10, 0x9c, 0xac, 0xd5, 0x08, 0xb2, 0x46,
0xa9, 0xb7, 0xb6, 0xce, 0xac, 0x93, 0xd2, 0xba, 0xa8, 0x5a, 0x58, 0xa3, 0x17, 0x98, 0x84, 0xed,
0x59, 0xf4, 0x89, 0x1d, 0xb1, 0x91, 0xe0, 0x1a, 0xa3, 0x68, 0x77, 0xc9, 0x8c, 0x19, 0x5e, 0x87,
0xfb, 0x09, 0xa7, 0x02, 0x54, 0xa9, 0x66, 0x82, 0xf3, 0x61, 0x1f, 0xfc, 0xf0, 0x3d, 0x0a, 0xb4,
0xa8, 0x09, 0x29, 0x43, 0xe5, 0x48, 0xa7, 0xa1, 0x1f, 0xab, 0xaa, 0xb2, 0xa8, 0x37, 0x49, 0x2a,
0xe3, 0x07, 0xb4, 0x5b, 0x9f, 0x09, 0x03, 0xe2, 0x7d, 0x4e, 0xc4, 0x0a, 0x33, 0xc2, 0xcd, 0xb3,
0x73, 0xeb, 0x7c, 0xc0, 0x11, 0xe2, 0x3e, 0xfc, 0x32, 0x36, 0xf5, 0x90, 0xa3, 0xce, 0x92, 0xb8,
0x47, 0x3f, 0xfb, 0xce, 0xe3, 0x68, 0xaf, 0x79, 0x65, 0xcb, 0xc0, 0xd4, 0x2f, 0xee, 0x65, 0xab,
0x3b, 0xdd, 0x39, 0xf1, 0x5c, 0x17, 0x7b, 0x95, 0xa8, 0x74, 0x4e, 0xb4, 0xe1, 0x22, 0xe1, 0x3b,
0xf7, 0xac, 0x01, 0xe1, 0x49, 0x85, 0x6b, 0x85, 0x3c, 0xab, 0x6c, 0x2d, 0x36, 0xc1, 0x84, 0xd8,
0x9c, 0xde, 0x4a, 0x86, 0x15, 0x4e, 0xa6, 0x6d, 0x96, 0xc8, 0xba, 0x1e, 0x7e, 0x68, 0x5f, 0x1d,
0xc9, 0x22, 0x9d, 0xf6, 0x30, 0xa9, 0xfb, 0x28, 0x62, 0x73, 0x5d, 0x46, 0xb8, 0x95, 0xbe, 0x2e,
0x19, 0xa2, 0xe6, 0x85, 0x8a, 0x29, 0xa7, 0xf4, 0x15, 0xc1, 0x1a, 0x1c, 0xa7, 0x12, 0xf7, 0x5c,
0x7b, 0x4a, 0x9a, 0xbc, 0xa3, 0x96, 0xaf, 0x5b, 0x35, 0x30, 0xbc, 0xd0, 0x24, 0xbc, 0x8b, 0x21,
0xab, 0x2d, 0x6c, 0x40, 0x7b, 0x3a, 0xdf, 0x75, 0x98, 0x05, 0x37, 0xc8, 0x35, 0x8d, 0xe4, 0x05,
0xdf, 0x44, 0x70, 0x1e, 0xaf, 0x09, 0x66, 0xd8, 0x7c, 0x85, 0xa9, 0x96, 0xdb, 0x15, 0xc8, 0x2a,
0x17, 0x4d, 0x6f, 0x86, 0xfc, 0x5d, 0x51, 0x05, 0x4c, 0x03, 0xd9, 0x04, 0xa2, 0x14, 0x06, 0xd4,
0xdd, 0x3b, 0x2d, 0xd3, 0xfb, 0x09, 0xf8, 0x51, 0x34, 0x2a, 0x96, 0x41, 0x52, 0x4d, 0xd7, 0x18,
0x81, 0x26, 0x2c, 0x92, 0x75, 0x04, 0x5e, 0x94, 0x53, 0x55, 0x92, 0xa6, 0x07, 0x90, 0x2c, 0x0d,
0x6c, 0x01, 0xc1, 0x6d, 0x42, 0xe8, 0xbb, 0x27, 0xb5, 0x96, 0xbf, 0x97, 0xc6, 0xaf, 0x09, 0xbf,
0x12, 0x64, 0xd4, 0x06, 0x12, 0x46, 0xd6, 0x79, 0xc5, 0xb9, 0xb0, 0x4d, 0xd6, 0xf5, 0x62, 0xec,
0x77, 0x58, 0xb8, 0x16, 0x55, 0x5d, 0x7c, 0xde, 0x2b, 0x64, 0x4d, 0xda, 0x8e, 0x41, 0x05, 0x87,
0xd0, 0x5e, 0x47, 0xe8, 0x68, 0x8c, 0xc4, 0x38, 0x27, 0xce, 0x6d, 0x4b, 0x6c, 0xb1, 0xeb, 0x92,
0xf5, 0x38, 0xfc, 0x22, 0xdf, 0x72, 0x18, 0x1d, 0xbd, 0xde, 0x64, 0x30, 0xbe, 0xf3, 0x16, 0xe7,
0x89, 0x7f, 0xef, 0xc7, 0x0a, 0x92, 0x8f, 0x36, 0xa2, 0xb0, 0x31, 0x38, 0x11, 0xb3, 0x81, 0xa6,
0xa1, 0x06, 0xf3, 0x54, 0xbe, 0xb3, 0x08, 0xae, 0xde, 0xa8, 0x03, 0x32, 0x46, 0xde, 0xec, 0x05,
0xb2, 0x46, 0xb5, 0x0f, 0x1c, 0x60, 0x6a, 0x52, 0xd2, 0xaa, 0x7d, 0xc7, 0xd1, 0x99, 0xf1, 0x31,
0xad, 0xb0, 0x93, 0x3f, 0x97, 0xde, 0x93, 0xc9, 0xfa, 0x04, 0xed, 0x21, 0x83, 0x61, 0xce, 0xfb,
0x06, 0x7b, 0x3d, 0x49, 0xf0, 0xda, 0x9b, 0xd3, 0x3c, 0xed, 0x0f, 0x90, 0x22, 0x61, 0x92, 0xef,
0xa2, 0x34, 0x26, 0x2f, 0xe1, 0x17, 0x17, 0xa7, 0xd7, 0xeb, 0x98, 0xb9, 0x48, 0xf3, 0xcc, 0x3a,
0x85, 0xf6, 0xf4, 0xbc, 0xa5, 0x84, 0x9a, 0xc7, 0x2a, 0x92, 0x19, 0x46, 0x4b, 0x45, 0xd6, 0xb0,
0x8a, 0x74, 0x54, 0x58, 0x9a, 0x07, 0x40, 0xac, 0xc1, 0xcb, 0xe4, 0x18, 0x80, 0xbe, 0x73, 0x7a,
0x2f, 0x3a, 0xf3, 0x56, 0x6f, 0xb2, 0x7b, 0x85, 0x95, 0xf7, 0x68, 0xc1, 0x6b, 0x19, 0x41, 0x7f,
0xd7, 0x90, 0x9e, 0xa9, 0x21, 0xa4, 0xe4, 0x0c, 0x7b, 0x71, 0x03, 0xd4, 0x03, 0x89, 0xac, 0x49,
0x5e, 0x61, 0x1b, 0xc2, 0x9a, 0x78, 0xdd, 0x41, 0x7a, 0xfd, 0x72, 0x28, 0xb3, 0x89, 0x0c, 0x54,
0x54, 0xf1, 0xa1, 0x22, 0xe6, 0xa4, 0x8e, 0xf6, 0xfc, 0x55, 0x15, 0x3f, 0xf4, 0xac, 0xf4, 0xbd,
0x5e, 0x31, 0x69, 0x7b, 0x36, 0xe5, 0x33, 0x6b, 0x3f, 0xfc, 0x42, 0x6f, 0x3c, 0x95, 0x6f, 0x00,
0x7a, 0xc1, 0x14, 0x93, 0xdd, 0x2e, 0x5d, 0x77, 0xb0, 0x9d, 0x59, 0x35, 0x8c, 0xeb, 0x1a, 0xda,
0xad, 0x8c, 0x34, 0xc0, 0x3a, 0x05, 0xaf, 0xb8, 0x7b, 0x88, 0x42, 0xfb, 0x3e, 0xc2, 0xb7, 0xc8,
0x86, 0x6d, 0x28, 0x94, 0x14, 0xcd, 0xd5, 0xb8, 0xc9, 0x82, 0x8c, 0xe5, 0x2b, 0x31, 0x2e, 0x72,
0xf3, 0xe6, 0x23, 0xb0, 0x9f, 0x35, 0xd2, 0x40, 0x7b, 0x02, 0x3a, 0x6d, 0x70, 0x7c, 0x4e, 0x4c,
0x93, 0xb7, 0xe7, 0xd0, 0xde, 0x4d, 0xe0, 0x69, 0x86, 0x06, 0x9c, 0x0b, 0x21, 0x6b, 0x4b, 0x55,
0x55, 0xa6, 0xb8, 0xe8, 0xc1, 0x6e, 0x24, 0x2a, 0x0d, 0xc8, 0xa9, 0x04, 0xd7, 0xd9, 0xcb, 0x0c,
0x41, 0xb4, 0x2b, 0xf6, 0x29, 0x6e, 0x12, 0x5c, 0xbd, 0x0b, 0x2b, 0x0e, 0xc6, 0x17, 0xe4, 0x15,
0xf6, 0x37, 0x7b, 0x0a, 0x3e, 0xbe, 0xcf, 0x02, 0x16, 0xdd, 0x43, 0xd8, 0x09, 0xbd, 0x3b, 0x08,
0xbf, 0xd8, 0xdc, 0x96, 0x00, 0x09, 0x6f, 0x43, 0x4d, 0xdf, 0x86, 0xf6, 0x04, 0x80, 0xc3, 0x19,
0x8f, 0xdf, 0xa0, 0x30, 0x9e, 0xf1, 0x8d, 0x39, 0x6e, 0xd3, 0xa3, 0x72, 0xa9, 0x07, 0xba, 0x89,
0xa8, 0x5b, 0xd9, 0x20, 0xd8, 0xf2, 0x51, 0x6d, 0x44, 0xbb, 0xaf, 0x52, 0xb7, 0x82, 0xfe, 0x30,
0x7c, 0xeb, 0x6c, 0x3d, 0xe4, 0xac, 0x56, 0x46, 0x4c, 0x88, 0xc5, 0xb3, 0x22, 0x11, 0x77, 0x73,
0xc2, 0xeb, 0xae, 0xb0, 0x4d, 0x4c, 0x7e, 0xc9, 0xe1, 0x9e, 0xbb, 0xc4, 0xdf, 0xd7, 0x24, 0x95,
0xfd, 0x85, 0xc2, 0x7d, 0xb6, 0xa0, 0xdd, 0x6a, 0xfe, 0xc0, 0xe2, 0xd8, 0x1c, 0x13, 0xcf, 0x55,
0x0f, 0xf8, 0x0e, 0xdc, 0xd7, 0x3f, 0xcd, 0x9e, 0x3d, 0xce, 0x10, 0x5a, 0x47, 0x97, 0x35, 0xd0,
0x22, 0x73, 0x3f, 0xb5, 0x63, 0x58, 0x8f, 0xf6, 0x8a, 0xea, 0xf2, 0x6b, 0xb7, 0xe6, 0xf5, 0x79,
0xd7, 0x72, 0x5d, 0x15, 0x70, 0x90, 0x4d, 0x18, 0x39, 0xe8, 0xdf, 0xa0, 0x7b, 0x9a, 0x22, 0x5d,
0x41, 0x67, 0x45, 0xfb, 0x2b, 0xd0, 0xaf, 0x2b, 0x45, 0xe9, 0x62, 0xfc, 0x3a, 0xa4, 0x22, 0x37,
0xd1, 0xd9, 0x01, 0x60, 0x45, 0xa8, 0x99, 0x07, 0x02, 0x88, 0x71, 0x4c, 0xbc, 0x1f, 0x97, 0xac,
0xff, 0x15, 0x92, 0xb7, 0xc0, 0xd8, 0xcd, 0xe6, 0x93, 0x3f, 0x9b, 0x4a, 0xa1, 0x00, 0x9e, 0xfe,
0x17, 0x67, 0x13, 0x99, 0xec, 0x86, 0xc5, 0x42, 0x3d, 0x65, 0xe6, 0xc5, 0x21, 0x3e, 0xca, 0x60,
0x22, 0xbf, 0x74, 0x7c, 0x59, 0x1b, 0xd9, 0x8e, 0xf9, 0x05, 0xf4, 0xf2, 0x10, 0x79, 0x9f, 0x97,
0x25, 0xd8, 0x8b, 0xaa, 0x2a, 0x1a, 0x0e, 0x49, 0xc6, 0x20, 0x5e, 0xd8, 0x3b, 0xce, 0x07, 0xf9,
0x04, 0xbe, 0x7f, 0xfc, 0x5d, 0xc8, 0xf8, 0xdf, 0x85, 0x6f, 0x49, 0x6f, 0x49, 0x12, 0x52, 0x8e,
0xd4, 0xd2, 0x89, 0xdb, 0xdd, 0xcf, 0xd6, 0x4d, 0x5d, 0x71, 0x33, 0xef, 0x87, 0x67, 0x91, 0xe6,
0x4d, 0xb1, 0x4d, 0x40, 0x45, 0x0e, 0x1e, 0xc6, 0x9c, 0xe9, 0xbb, 0x62, 0xbd, 0x6c, 0x84, 0xdf,
0x8d, 0x9c, 0x76, 0xde, 0x2f, 0x23, 0xd4, 0x32, 0x9a, 0x94, 0xf7, 0x6c, 0xa0, 0x97, 0x35, 0x76,
0x2e, 0xde, 0x55, 0x5c, 0x37, 0x71, 0x98, 0x2f, 0xa4, 0x3d, 0xe8, 0x6e, 0x6c, 0x12, 0xe4, 0x7b,
0x82, 0x60, 0x5f, 0xb0, 0x1c, 0x63, 0x3d, 0xc0, 0x7e, 0xbf, 0x29, 0x44, 0xb3, 0x21, 0xa9, 0x49,
0x1d, 0xdc, 0x2a, 0x96, 0x9f, 0x79, 0x17, 0x5b, 0x1f, 0x51, 0xea, 0xf1, 0x02, 0x7b, 0x9e, 0xe3,
0x21, 0xe7, 0xe3, 0x65, 0xf6, 0xba, 0xad, 0x70, 0x04, 0x88, 0xca, 0x70, 0xfa, 0xb2, 0x5b, 0x34,
0x31, 0x22, 0xeb, 0xb0, 0x50, 0x65, 0xa2, 0x82, 0x02, 0x28, 0xcd, 0x69, 0x91, 0xed, 0x8e, 0x6b,
0xe8, 0x74, 0x99, 0x9c, 0x41, 0x7b, 0x84, 0x91, 0x0c, 0xd3, 0xb0, 0xb0, 0x5e, 0x22, 0x2b, 0x02,
0xc8, 0x38, 0x00, 0x2f, 0xf6, 0xb7, 0xc9, 0x24, 0xe1, 0x03, 0xb1, 0xb1, 0xd2, 0x19, 0x4e, 0x36,
0x58, 0x51, 0x69, 0xd2, 0x59, 0x05, 0x72, 0x2e, 0x22, 0x79, 0x76, 0x14, 0x98, 0xf4, 0x5e, 0x91,
0x6c, 0x20, 0x33, 0xd2, 0x59, 0xb7, 0x0f, 0x9e, 0x8b, 0xf0, 0x40, 0x80, 0x94, 0xaf, 0xc3, 0x77,
0x7d, 0x05, 0xf9, 0xc8, 0xef, 0xc3, 0x4f, 0xb2, 0xa8, 0x40, 0x2d, 0x18, 0xe4, 0x68, 0xd9, 0x17,
0xc1, 0x04, 0x53, 0x69, 0x17, 0xe1, 0xf9, 0x04, 0x83, 0x40, 0x15, 0xf3, 0x57, 0x63, 0x54, 0x31,
0xd9, 0x70, 0x72, 0x0b, 0xc1, 0xd6, 0xe0, 0x71, 0x44, 0x57, 0x34, 0x0c, 0xc2, 0xab, 0x1e, 0x26,
0xab, 0x8c, 0xed, 0x92, 0x4a, 0x1b, 0x96, 0x73, 0xbc, 0x02, 0x75, 0x37, 0x9c, 0xdc, 0x75, 0x3e,
0x09, 0xb6, 0x06, 0xd8, 0x29, 0xf8, 0x7c, 0x6f, 0x0e, 0x20, 0xe7, 0x35, 0xc4, 0x7b, 0x0e, 0x76,
0xa2, 0xd3, 0x1d, 0x46, 0xe3, 0x11, 0xd5, 0xd2, 0xc3, 0xb6, 0x31, 0x2c, 0x37, 0xdc, 0x47, 0x7c,
0x3e, 0x20, 0xa9, 0x2e, 0x2a, 0x06, 0xa2, 0x0d, 0xf0, 0xc2, 0xd6, 0xaa, 0xd2, 0x64, 0x6c, 0x08,
0x98, 0x50, 0x92, 0xca, 0x97, 0x15, 0xae, 0xdb, 0xc7, 0xae, 0x77, 0x3f, 0x83, 0x71, 0xe1, 0x55,
0x0e, 0xa8, 0x38, 0xf6, 0xb1, 0x82, 0xcd, 0x1d, 0x45, 0x25, 0xad, 0x45, 0xa8, 0x88, 0x3a, 0x64,
0x5d, 0x4c, 0x41, 0x6b, 0x0b, 0xca, 0x8b, 0xa5, 0xae, 0x7a, 0x14, 0xb4, 0xa1, 0x6b, 0x50, 0x1b,
0x41, 0x7b, 0xc1, 0xb7, 0xed, 0x68, 0x37, 0x64, 0x06, 0x1d, 0xdf, 0xaa, 0xdd, 0x40, 0xd6, 0x3e,
0x44, 0xb7, 0xfa, 0x9b, 0x12, 0xbf, 0xbb, 0x6e, 0xa8, 0xbe, 0x6d, 0x96, 0x48, 0x3b, 0x2a, 0xdd,
0xfb, 0x2c, 0xfb, 0x5d, 0xdc, 0x39, 0xf6, 0x0c, 0xf4, 0x8a, 0x96, 0x25, 0xc1, 0x88, 0x90, 0xe0,
0x55, 0xf1, 0xfa, 0x18, 0xa0, 0x8e, 0xd5, 0xe1, 0x15, 0xcf, 0xde, 0x81, 0xce, 0xe6, 0xc6, 0x59,
0x80, 0x0a, 0x77, 0xcf, 0x44, 0x8c, 0xbf, 0x6a, 0x52, 0xc6, 0x75, 0x43, 0x5b, 0x42, 0xdc, 0xd9,
0x9b, 0xdb, 0x28, 0xde, 0x48, 0xe3, 0xc7, 0x37, 0xf4, 0x59, 0x83, 0xeb, 0xf3, 0x0a, 0x1e, 0x93,
0xf0, 0xbb, 0xe0, 0xc9, 0x12, 0xf6, 0x60, 0xc8, 0x79, 0xbe, 0x94, 0xa0, 0x8a, 0x10, 0x0b, 0x11,
0x46, 0xa5, 0xa4, 0xe0, 0xf5, 0x8f, 0xe4, 0x9d, 0x94, 0x57, 0xac, 0x1b, 0x8c, 0x51, 0xff, 0x8a,
0xa0, 0x06, 0xef, 0x11, 0x6a, 0xa8, 0x5c, 0x73, 0xf7, 0xa3, 0x58, 0xf4, 0xd7, 0x90, 0x5d, 0x9f,
0xd1, 0x28, 0xb2, 0x02, 0xbe, 0x51, 0x2f, 0x0e, 0x69, 0xf9, 0x24, 0x49, 0x25, 0x7e, 0x2f, 0xae,
0xff, 0x55, 0x04, 0xe1, 0xae, 0x19, 0x5c, 0x7f, 0x12, 0xed, 0xd5, 0x43, 0x68, 0x8d, 0xbc, 0x0d,
0x18, 0xa7, 0x2f, 0xbb, 0xe5, 0x1c, 0x34, 0x13, 0x40, 0xd8, 0xbd, 0x09, 0xa4, 0x6a, 0x10, 0x76,
0x30, 0xf2, 0xcb, 0xa4, 0xdc, 0xaf, 0x70, 0xaf, 0x13, 0x29, 0xec, 0xfe, 0x36, 0x30, 0x04, 0xcf,
0x0f, 0x1c, 0x54, 0x2c, 0xec, 0xad, 0xe1, 0x22, 0xb4, 0x45, 0xd6, 0x46, 0xc0, 0xc2, 0x0d, 0xfb,
0xbb, 0x99, 0x94, 0x9e, 0x91, 0x24, 0xec, 0x72, 0x84, 0x4d, 0xe4, 0x15, 0xcc, 0x2b, 0x16, 0xde,
0x93, 0x36, 0xa4, 0xd7, 0x01, 0xc7, 0xab, 0x45, 0x74, 0x59, 0xae, 0xeb, 0x12, 0x23, 0xec, 0xfa,
0x94, 0x54, 0xce, 0x7e, 0xb4, 0x97, 0xb7, 0xe4, 0x98, 0x8f, 0x31, 0x74, 0x2c, 0xa1, 0x1c, 0x66,
0xf8, 0x3e, 0x61, 0x48, 0x79, 0x85, 0xf6, 0x48, 0xa1, 0x65, 0x24, 0x8f, 0x56, 0xd2, 0x25, 0xeb,
0x1a, 0xd4, 0xf2, 0x72, 0xd7, 0x90, 0x6e, 0x95, 0xc0, 0x3e, 0x71, 0x8f, 0xa8, 0x14, 0x41, 0x3a,
0x87, 0x5e, 0x31, 0x1c, 0x87, 0x0f, 0x01, 0x76, 0x96, 0xe3, 0x92, 0x30, 0xb8, 0xda, 0x4d, 0x84,
0xbd, 0x2d, 0x49, 0x86, 0xb4, 0xf4, 0xfc, 0xb0, 0xb6, 0xf4, 0x24, 0x79, 0x83, 0xac, 0xc4, 0x4d,
0x64, 0xd7, 0xef, 0xa4, 0x5f, 0xec, 0xcc, 0xf4, 0x4a, 0x1a, 0x63, 0x7b, 0x4d, 0x92, 0xba, 0x8f,
0x91, 0xbc, 0x14, 0x8d, 0xaa, 0x64, 0x5d, 0x43, 0x7c, 0x6b, 0xcc, 0xb8, 0xe0, 0x02, 0x5b, 0x58,
0x46, 0x74, 0xb3, 0x66, 0xb2, 0x72, 0xeb, 0x26, 0xfe, 0x9f, 0x44, 0x67, 0xb4, 0x12, 0x1d, 0x01,
0x28, 0xba, 0xea, 0x03, 0xba, 0x2c, 0xfc, 0x10, 0xf0, 0xc3, 0xd0, 0x5e, 0xa4, 0x78, 0x8f, 0x16,
0x82, 0x03, 0x24, 0x48, 0xf2, 0x36, 0x42, 0x24, 0x72, 0x56, 0xe7, 0x8e, 0x49, 0x44, 0x47, 0x70,
0x51, 0xc1, 0x6c, 0xdd, 0x0e, 0xdd, 0xbb, 0xd0, 0x6e, 0xc9, 0x34, 0x95, 0x24, 0x5c, 0x5a, 0x44,
0x6d, 0xa8, 0xc7, 0x23, 0xec, 0x11, 0xf2, 0x66, 0x92, 0x55, 0x0e, 0x68, 0x35, 0x66, 0xd3, 0x6d,
0x19, 0x3c, 0x4b, 0x85, 0xd9, 0x3d, 0x20, 0xa9, 0xbf, 0x54, 0xa3, 0x6b, 0x0b, 0xba, 0x27, 0x54,
0xb5, 0x83, 0x48, 0x69, 0xa9, 0x45, 0x6f, 0xd9, 0xee, 0x19, 0x44, 0xd8, 0x7d, 0xe2, 0xbd, 0x2d,
0x01, 0x86, 0x88, 0xac, 0xfa, 0xb1, 0x56, 0xd0, 0x1e, 0xdc, 0x31, 0x01, 0xbf, 0x98, 0xf5, 0x76,
0x71, 0xb6, 0xaa, 0x07, 0x18, 0x98, 0xce, 0x42, 0x3d, 0x06, 0x7a, 0x1a, 0xed, 0xfe, 0xe3, 0xf3,
0x9a, 0xcf, 0xb7, 0xac, 0xb0, 0xf8, 0xc8, 0x16, 0x11, 0x97, 0xe1, 0xb3, 0x27, 0x43, 0xa9, 0xd3,
0x2f, 0x08, 0xbb, 0x84, 0xe0, 0x60, 0x8d, 0xd3, 0x86, 0xb6, 0x89, 0xdd, 0x21, 0x42, 0xe6, 0x2d,
0x23, 0x6c, 0x56, 0xae, 0xbf, 0x4c, 0x40, 0xbe, 0xbb, 0xb4, 0x52, 0x8b, 0x28, 0x9e, 0x73, 0x4e,
0x92, 0x0e, 0x2d, 0xb4, 0x87, 0xd1, 0xdd, 0x93, 0xce, 0xb4, 0xa3, 0x05, 0xdf, 0x15, 0x8f, 0xa0,
0xb3, 0x19, 0xf1, 0x4b, 0x0d, 0xa3, 0x0d, 0xa9, 0xff, 0x35, 0xa8, 0xd5, 0x23, 0x9a, 0x51, 0x24,
0xf8, 0x7e, 0xa8, 0x95, 0xe9, 0xc9, 0x23, 0x43, 0x85, 0x5c, 0x37, 0x8f, 0x42, 0x04, 0xc6, 0xab,
0x04, 0x76, 0x97, 0x2d, 0x01, 0x47, 0x28, 0x1e, 0x80, 0x51, 0x7a, 0x6c, 0x80, 0xbd, 0xe2, 0xcb,
0x71, 0x8b, 0x92, 0xef, 0xf4, 0xb3, 0x88, 0x77, 0xca, 0x17, 0x9d, 0xac, 0x1c, 0xdb, 0xd0, 0x1e,
0x93, 0xab, 0xaa, 0xbe, 0xf3, 0x2a, 0x0d, 0x71, 0xc1, 0xe7, 0x54, 0x48, 0x0e, 0x96, 0xc8, 0x7a,
0x08, 0xe6, 0x75, 0x9d, 0x93, 0x60, 0x35, 0xe4, 0xbc, 0x5c, 0x37, 0x24, 0x6b, 0x98, 0x1a, 0x3d,
0x15, 0xa2, 0x26, 0x97, 0x16, 0x97, 0x61, 0xaf, 0xed, 0x43, 0x94, 0x9a, 0x72, 0x29, 0x64, 0xa1,
0x86, 0xa5, 0x33, 0xf1, 0x2e, 0xe8, 0x65, 0xdc, 0x00, 0x79, 0x02, 0xc3, 0xb4, 0xc2, 0xf1, 0xe2,
0x20, 0x5b, 0x58, 0x53, 0x21, 0x52, 0xbc, 0xa5, 0x60, 0x34, 0x22, 0x55, 0x9b, 0x12, 0x00, 0xc6,
0x91, 0xac, 0x62, 0x63, 0x5a, 0xa0, 0xde, 0xab, 0x7c, 0x53, 0x79, 0x9c, 0x60, 0xbe, 0x29, 0x9c,
0xf5, 0xae, 0xf4, 0xfe, 0xc5, 0x08, 0x49, 0x5e, 0x2a, 0x90, 0x01, 0x67, 0x29, 0xc5, 0x7b, 0xc4,
0x05, 0x5c, 0xcb, 0xaa, 0xd8, 0x59, 0xb4, 0x07, 0xae, 0x97, 0x19, 0xdb, 0xd1, 0x9e, 0xf4, 0x10,
0xd7, 0x65, 0x8f, 0x47, 0xff, 0x3c, 0x0d, 0x51, 0xe9, 0x54, 0xb1, 0x43, 0xba, 0x37, 0x15, 0x8c,
0x3b, 0x23, 0x5e, 0x5b, 0x0b, 0x64, 0x2b, 0x99, 0x93, 0xbe, 0xbf, 0xe9, 0xe6, 0x72, 0x3f, 0x44,
0x1d, 0x7e, 0x20, 0xde, 0xdf, 0x51, 0xe6, 0xc5, 0x44, 0x8d, 0x8c, 0x0f, 0xa7, 0x3c, 0x19, 0x51,
0x71, 0xc0, 0x5b, 0x98, 0xf4, 0xa9, 0xb1, 0x85, 0x55, 0xfa, 0x8c, 0x09, 0x86, 0x7d, 0x6c, 0xd3,
0x7a, 0xad, 0xf0, 0xf7, 0xbc, 0x4c, 0xce, 0x09, 0xf8, 0x01, 0x00, 0x27, 0x0d, 0xef, 0x3f, 0x29,
0xce, 0x6c, 0x5c, 0x4d, 0xe7, 0x44, 0x7e, 0x93, 0xe3, 0xd8, 0xf0, 0x68, 0x2b, 0x92, 0x8e, 0x17,
0x12, 0x5c, 0xaf, 0x19, 0xb0, 0xc9, 0x8f, 0xb0, 0xf7, 0xfb, 0xca, 0xba, 0x88, 0xea, 0x29, 0x4b,
0xaf, 0x05, 0x05, 0x69, 0xb0, 0x88, 0xf6, 0x04, 0xec, 0x2c, 0xeb, 0xe7, 0xc8, 0xa5, 0x51, 0xc3,
0x5e, 0x55, 0x71, 0x9e, 0xdc, 0x8c, 0x64, 0x91, 0x54, 0x5b, 0x14, 0x8f, 0x1b, 0x15, 0xb4, 0x17,
0xb3, 0x6b, 0x29, 0x9e, 0x55, 0x55, 0xce, 0xd5, 0x7c, 0xf3, 0x9c, 0x86, 0x5f, 0xfd, 0x81, 0xe2,
0x76, 0x6f, 0x0a, 0x55, 0x3b, 0xab, 0x88, 0xb1, 0xad, 0xd2, 0x1a, 0x49, 0x4a, 0xd6, 0x91, 0x90,
0x6b, 0x1c, 0x44, 0x89, 0x8b, 0x18, 0x90, 0x4f, 0x71, 0x36, 0xc5, 0x7b, 0xc4, 0x19, 0xae, 0x76,
0x49, 0x6a, 0x5a, 0xd6, 0x98, 0x8d, 0x51, 0x4d, 0x37, 0xc2, 0xcf, 0xbe, 0x91, 0x55, 0xca, 0x37,
0x42, 0xea, 0xa5, 0x1d, 0xcc, 0xdf, 0xb0, 0x78, 0x76, 0xe7, 0xfe, 0x47, 0x19, 0x37, 0xc5, 0xf7,
0x6c, 0x4a, 0xdf, 0x33, 0xe8, 0xf5, 0x3e, 0x65, 0xb2, 0x26, 0x35, 0x76, 0x52, 0x88, 0xea, 0x78,
0xc8, 0x39, 0x79, 0xa2, 0x6c, 0x64, 0xad, 0xa5, 0x6c, 0xbc, 0xd9, 0x14, 0xa3, 0x62, 0x0f, 0x21,
0x38, 0xc9, 0xb8, 0xe8, 0xea, 0xef, 0x51, 0x74, 0x96, 0x43, 0x25, 0xb5, 0xf2, 0x76, 0x4a, 0xf7,
0x24, 0x1f, 0xa4, 0xaa, 0x9b, 0x65, 0x1d, 0xfc, 0x82, 0xe4, 0xf2, 0x26, 0x43, 0x3f, 0x79, 0xa1,
0xb2, 0x79, 0x74, 0xc6, 0x67, 0xd3, 0x67, 0xa8, 0x20, 0xf8, 0x03, 0xf6, 0xff, 0xd5, 0x14, 0xc9,
0xfa, 0xc2, 0xd2, 0xba, 0x0c, 0x2b, 0x76, 0x90, 0xb6, 0x36, 0x69, 0x1d, 0x95, 0x10, 0x23, 0x86,
0x4d, 0x90, 0x79, 0x3e, 0xc8, 0x01, 0xce, 0xf3, 0x54, 0x87, 0xc5, 0xff, 0xe7, 0xd0, 0x59, 0x28,
0xad, 0xe8, 0x18, 0x82, 0x5f, 0x50, 0xbc, 0x26, 0x91, 0xf7, 0x02, 0x3c, 0x0b, 0x70, 0xc5, 0xd2,
0xc2, 0x6b, 0xc5, 0x9c, 0x79, 0xfb, 0xd1, 0x9e, 0x9c, 0x1e, 0x54, 0xf4, 0x5c, 0x7e, 0x96, 0x61,
0xf1, 0xfe, 0x3c, 0xda, 0x83, 0x3d, 0x56, 0xd9, 0xe6, 0x30, 0x20, 0x6d, 0xae, 0x97, 0x2c, 0x8f,
0xa1, 0x4c, 0xd6, 0x4b, 0x96, 0xc8, 0x4a, 0xc2, 0x42, 0xae, 0x1b, 0x46, 0xee, 0x9c, 0xd2, 0xd8,
0x44, 0xc8, 0xd0, 0x90, 0x96, 0x0a, 0x37, 0x1d, 0xb1, 0xb0, 0x78, 0x7a, 0xd4, 0xa1, 0x10, 0x03,
0x01, 0x2d, 0x98, 0xb2, 0xb6, 0xa2, 0x5f, 0x90, 0x88, 0xfb, 0x0a, 0xe6, 0x25, 0x5f, 0xa9, 0x16,
0xee, 0x1c, 0x3b, 0xdb, 0xcb, 0xda, 0x0a, 0x0f, 0x65, 0xb4, 0xe1, 0xfc, 0xff, 0x2a, 0x40, 0xe3,
0xf9, 0x1c, 0x5e, 0x9c, 0x6d, 0x2b, 0xa5, 0xb1, 0xb2, 0x4d, 0x56, 0xc0, 0x2b, 0x1c, 0xc0, 0xbb,
0x17, 0x10, 0x68, 0x1c, 0x0b, 0x5f, 0x0c, 0x9c, 0xca, 0xba, 0xbc, 0x4c, 0xf1, 0x1e, 0x2b, 0x21,
0x67, 0x06, 0xae, 0xfa, 0x46, 0x55, 0x60, 0xb8, 0x09, 0xb3, 0x58, 0xd1, 0xa2, 0x61, 0x03, 0xfc,
0xb2, 0xaf, 0xa6, 0x15, 0x2f, 0xc6, 0xd8, 0xe2, 0xed, 0x83, 0xef, 0x82, 0x81, 0x30, 0x56, 0x11,
0x81, 0xd2, 0x4a, 0x76, 0x38, 0x11, 0xf0, 0x1d, 0xe6, 0xa1, 0x5f, 0x9e, 0x36, 0x0c, 0x75, 0xe9,
0x8c, 0x6a, 0xbb, 0xc5, 0x64, 0x35, 0xe4, 0x7a, 0xb6, 0x8c, 0x76, 0xa9, 0x62, 0x2d, 0x65, 0xa9,
0x4a, 0x03, 0xf1, 0x36, 0xe2, 0xde, 0x2a, 0x6a, 0xee, 0x4e, 0x64, 0x57, 0x21, 0x22, 0x6d, 0x6c,
0x84, 0x67, 0xe5, 0xe6, 0xaa, 0xf2, 0x0a, 0xd4, 0x2c, 0xae, 0x63, 0xd2, 0x62, 0xa3, 0x44, 0xeb,
0x07, 0xec, 0x5a, 0xfb, 0x35, 0xcf, 0xbf, 0x10, 0xe4, 0x5e, 0x91, 0x5e, 0x71, 0xbe, 0xd7, 0x21,
0x78, 0x35, 0xbb, 0x48, 0xfb, 0xd9, 0x6d, 0x89, 0xac, 0xf3, 0xd2, 0xda, 0xb9, 0x63, 0xf9, 0xa8,
0x12, 0x94, 0x33, 0x4b, 0xc1, 0x40, 0x07, 0x8b, 0xba, 0x68, 0xc8, 0x8f, 0xf5, 0x24, 0xc5, 0x7b,
0xd0, 0x4e, 0x76, 0x53, 0x3a, 0xb3, 0xde, 0x8d, 0x50, 0x7d, 0xc3, 0x70, 0x91, 0x49, 0xd8, 0x01,
0x74, 0x0f, 0xb8, 0xbf, 0xb3, 0x06, 0xbf, 0x6a, 0x5f, 0xd8, 0x62, 0x96, 0x25, 0xc3, 0xa2, 0xa2,
0xe6, 0x41, 0xdd, 0x00, 0x6e, 0x4a, 0xe7, 0xde, 0x7a, 0x00, 0x51, 0x57, 0x18, 0x09, 0x1b, 0xf0,
0xea, 0x73, 0x45, 0x25, 0x02, 0x90, 0x21, 0xe8, 0x83, 0x85, 0x8d, 0xfd, 0x81, 0xf4, 0xff, 0x0b,
0x96, 0xc7, 0x9b, 0xce, 0xaf, 0x72, 0x9b, 0x98, 0x5a, 0x91, 0xb5, 0xb7, 0xb4, 0x2d, 0xc0, 0xa7,
0x99, 0x9a, 0x44, 0xc5, 0xb3, 0xd6, 0xb1, 0x33, 0x6c, 0x9c, 0xda, 0x71, 0x21, 0x40, 0xda, 0xec,
0xed, 0x22, 0x09, 0x1b, 0x36, 0x5e, 0x61, 0xea, 0x31, 0x19, 0x5f, 0xee, 0xb1, 0xf7, 0xd6, 0x2b,
0x10, 0x75, 0x14, 0x9d, 0x2e, 0x18, 0x95, 0x1e, 0x44, 0x10, 0xe7, 0x38, 0x1e, 0x2a, 0x19, 0x15,
0xd0, 0x72, 0xd9, 0x82, 0x0a, 0xde, 0x0a, 0x90, 0x82, 0x17, 0x52, 0x18, 0x6b, 0x3a, 0x1b, 0xf7,
0x4b, 0x1a, 0x8f, 0xae, 0x66, 0x92, 0x19, 0xd2, 0xb6, 0x00, 0x37, 0x25, 0x69, 0xda, 0x82, 0x5f,
0x6b, 0xa9, 0xae, 0xb0, 0x58, 0xc2, 0x9a, 0x3a, 0x93, 0x94, 0x3e, 0xde, 0x85, 0x84, 0x1d, 0x45,
0x7b, 0x1f, 0xd5, 0x3b, 0xd2, 0x7c, 0xf1, 0xc5, 0xcc, 0xf3, 0x7e, 0x83, 0x8c, 0x23, 0x7b, 0xd0,
0xee, 0x9e, 0x49, 0xb2, 0xc9, 0x2d, 0x48, 0x84, 0x0f, 0x23, 0xd0, 0xc1, 0x84, 0x84, 0x6d, 0x05,
0x48, 0xc0, 0x34, 0x8e, 0x68, 0x54, 0x48, 0x6e, 0x7b, 0xc0, 0xfd, 0x0b, 0x27, 0x5d, 0x49, 0x3d,
0x1d, 0x4e, 0xd1, 0x10, 0x41, 0xe4, 0xe4, 0x03, 0x41, 0xc6, 0x26, 0x95, 0x5e, 0x26, 0xf3, 0x11,
0x8b, 0xeb, 0xb2, 0x81, 0x1a, 0x5d, 0x26, 0xf4, 0x49, 0xe7, 0x50, 0x52, 0x5b, 0xe9, 0x1c, 0xb9,
0x8e, 0xbd, 0x1f, 0xe4, 0x0e, 0xe2, 0x69, 0x87, 0x73, 0xf0, 0xdd, 0x73, 0x6b, 0x0a, 0x64, 0x09,
0x4a, 0xa4, 0x58, 0x12, 0x73, 0xd9, 0x8f, 0x76, 0xeb, 0xf6, 0x95, 0x00, 0xf5, 0x98, 0x48, 0xf6,
0x26, 0x21, 0x59, 0xf7, 0xa5, 0xac, 0xf9, 0x55, 0xc5, 0x06, 0xc4, 0x8f, 0x54, 0x94, 0x68, 0xb2,
0xbe, 0x28, 0x0b, 0x61, 0x92, 0xa9, 0xa7, 0x69, 0x4a, 0x6d, 0xf9, 0x10, 0x4f, 0x6d, 0x25, 0x6f,
0x28, 0x5e, 0x23, 0x8a, 0xac, 0x7d, 0x6c, 0xa7, 0x1f, 0x45, 0x77, 0xa3, 0x26, 0x1d, 0x1b, 0xa2,
0x54, 0xdf, 0x8d, 0x6c, 0x5c, 0x16, 0x24, 0x22, 0xc7, 0x91, 0x95, 0x22, 0x7a, 0x06, 0x42, 0xe6,
0x73, 0xb3, 0x24, 0xd5, 0x97, 0x98, 0xb4, 0x96, 0x83, 0xe2, 0xdf, 0x1b, 0x4a, 0xa8, 0x96, 0x74,
0x3e, 0x4f, 0xd3, 0x42, 0x3b, 0x81, 0xe0, 0x8a, 0x9a, 0x2a, 0x55, 0x35, 0x32, 0xc3, 0xad, 0x94,
0x17, 0x39, 0x19, 0x41, 0x64, 0x57, 0x4d, 0x43, 0x73, 0x02, 0xe7, 0x63, 0xd4, 0xb6, 0x61, 0x94,
0x37, 0x6d, 0x4e, 0x17, 0x77, 0xe0, 0x97, 0x6f, 0xa1, 0xb3, 0xad, 0xac, 0xfa, 0x3e, 0x82, 0x1f,
0x9e, 0x37, 0x1b, 0x42, 0x84, 0x28, 0xb2, 0x5e, 0x45, 0x78, 0x34, 0x8f, 0x4c, 0x56, 0xbe, 0xe0,
0xe9, 0x4c, 0x2b, 0x37, 0x74, 0x9e, 0xb3, 0x40, 0xd6, 0x57, 0x29, 0x8f, 0xeb, 0x06, 0x74, 0x96,
0xd5, 0x59, 0x2b, 0xd2, 0x9a, 0x52, 0xcd, 0xf6, 0x30, 0xc1, 0x93, 0x10, 0xf5, 0xba, 0x6a, 0xb0,
0x41, 0xc4, 0x91, 0x95, 0x8c, 0x10, 0x24, 0x49, 0x36, 0x76, 0x31, 0x59, 0x29, 0xca, 0xeb, 0x20,
0xfc, 0xcc, 0x24, 0x3a, 0x02, 0x8c, 0x48, 0x06, 0xa0, 0x4a, 0xc4, 0xbc, 0xc7, 0x91, 0xb5, 0x16,
0x61, 0x3f, 0x88, 0x4a, 0x55, 0xdb, 0xc9, 0xe6, 0x81, 0x4a, 0xcd, 0x4c, 0x69, 0x7e, 0xc7, 0x45,
0xe9, 0xfe, 0x69, 0xdb, 0x54, 0x08, 0x2f, 0x24, 0x63, 0xd3, 0xc9, 0xa2, 0x90, 0x95, 0x2c, 0x8a,
0xbb, 0x52, 0xbc, 0xb6, 0x3c, 0xe1, 0xf4, 0xe5, 0x75, 0x1b, 0x2a, 0xab, 0x90, 0x15, 0x62, 0x71,
0xf6, 0x82, 0x4a, 0xcc, 0x0d, 0x44, 0x54, 0xd9, 0xfe, 0x00, 0x53, 0xe5, 0x8e, 0x20, 0xbe, 0x39,
0x53, 0x1c, 0x59, 0x83, 0x12, 0x19, 0xc6, 0x35, 0xd4, 0xd1, 0x96, 0xa1, 0x1a, 0x49, 0x47, 0xb3,
0x33, 0xd2, 0x5a, 0xca, 0x02, 0xa3, 0x21, 0xf6, 0x95, 0x2b, 0x79, 0x4f, 0xf8, 0x5b, 0xa4, 0x67,
0xed, 0xa2, 0x45, 0x33, 0x1c, 0xf2, 0xbe, 0x2e, 0x91, 0x28, 0xc0, 0x5c, 0x05, 0xc3, 0xd0, 0x4f,
0xc8, 0x2e, 0x1b, 0x5e, 0x4a, 0xdf, 0x8f, 0xb7, 0xa2, 0x18, 0x62, 0xc7, 0x82, 0x5d, 0x86, 0x64,
0x6d, 0x86, 0x90, 0x75, 0x4e, 0x63, 0x5c, 0xc9, 0x7f, 0xae, 0x93, 0xd8, 0xbd, 0x0e, 0x9d, 0x1e,
0x82, 0x37, 0xc8, 0xd6, 0x2a, 0x2b, 0x07, 0xfa, 0x17, 0xa2, 0x63, 0xba, 0x69, 0xc5, 0xf3, 0x38,
0x55, 0x34, 0xac, 0x1a, 0x22, 0x4d, 0xf4, 0x61, 0xc3, 0x67, 0xd5, 0x99, 0xf4, 0x03, 0x30, 0xef,
0xfd, 0x5a, 0x06, 0x90, 0xbb, 0xe1, 0x1c, 0x7b, 0x6f, 0x44, 0xda, 0x04, 0xa3, 0x8e, 0x38, 0x71,
0x64, 0x6d, 0xc5, 0x90, 0x55, 0x75, 0xf1, 0xd2, 0x26, 0xb2, 0x21, 0x64, 0xad, 0x6c, 0x11, 0x5a,
0x16, 0x77, 0x05, 0xbd, 0x45, 0xbb, 0x2b, 0xaf, 0x09, 0xb5, 0xba, 0x51, 0xb6, 0x30, 0x88, 0x76,
0x2f, 0xc5, 0xa3, 0xbc, 0x37, 0xfe, 0x23, 0x08, 0x2f, 0x9e, 0x9d, 0x44, 0x85, 0x68, 0x22, 0xdc,
0x8d, 0x92, 0x24, 0x37, 0x95, 0xbb, 0x2a, 0x54, 0x31, 0xcb, 0x9e, 0x67, 0x5f, 0x89, 0x88, 0x78,
0x0a, 0x7e, 0x76, 0x4b, 0xd0, 0xeb, 0x1d, 0x7c, 0x77, 0xd5, 0x52, 0x8c, 0x2a, 0xdb, 0x4a, 0x20,
0x59, 0x0f, 0x85, 0x2b, 0x1f, 0xab, 0xe5, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x90,
0x95, 0x2c, 0xd2, 0xaa, 0x1e, 0x84, 0x26, 0x3b, 0x43, 0xd3, 0x4b, 0xee, 0x2a, 0xf8, 0x65, 0xcc,
0xdc, 0x4f, 0x66, 0x3c, 0x07, 0x1f, 0xd9, 0x5a, 0x25, 0x35, 0x7c, 0x2c, 0xaf, 0x05, 0xb1, 0x04,
0xb5, 0xfa, 0xb1, 0x26, 0x06, 0xa5, 0xa0, 0xf8, 0x5e, 0xaa, 0x44, 0xb0, 0x27, 0x43, 0xb2, 0xca,
0x2a, 0x71, 0x91, 0x03, 0x27, 0x0e, 0x32, 0x63, 0x0c, 0x6d, 0x6a, 0x73, 0x01, 0xaf, 0xab, 0x08,
0x6f, 0x9d, 0x18, 0x36, 0x6e, 0x87, 0x43, 0xde, 0x8f, 0xaa, 0xb8, 0xbf, 0x12, 0xa1, 0x22, 0x5e,
0x86, 0xef, 0xbb, 0x55, 0xe9, 0x4c, 0x30, 0x89, 0xf6, 0x34, 0xc7, 0x26, 0xbc, 0xfc, 0xde, 0x79,
0x85, 0xe3, 0x10, 0x59, 0xbb, 0xb3, 0x2e, 0xec, 0x36, 0xcd, 0x84, 0xce, 0x60, 0x80, 0x16, 0x93,
0x19, 0x28, 0x0e, 0xd8, 0x66, 0xfe, 0xe1, 0x97, 0x31, 0x84, 0x78, 0x98, 0x40, 0xaa, 0xd2, 0xc2,
0x98, 0x32, 0xfc, 0xfc, 0x20, 0x3c, 0x7f, 0x2e, 0x2d, 0x94, 0x83, 0xc8, 0xa7, 0x25, 0x63, 0xd0,
0x46, 0xf2, 0x18, 0xed, 0x11, 0x45, 0xef, 0x35, 0x76, 0xf0, 0x8d, 0x0a, 0x64, 0x7d, 0x1e, 0xa2,
0xb2, 0xc6, 0xa5, 0x81, 0xad, 0x44, 0x48, 0xc9, 0x39, 0xf1, 0x6f, 0xda, 0x5c, 0xd2, 0x6c, 0x9d,
0x78, 0x0b, 0xf9, 0x25, 0x84, 0xf3, 0xe8, 0xab, 0x66, 0x5e, 0xcf, 0x71, 0x06, 0xea, 0xcd, 0x90,
0x55, 0x40, 0x49, 0xbb, 0xb5, 0x88, 0x45, 0x69, 0x62, 0x01, 0x26, 0x9c, 0xb3, 0x74, 0x66, 0x18,
0x43, 0x7b, 0x76, 0xcb, 0x02, 0xf2, 0x29, 0xc5, 0x39, 0x84, 0xf6, 0x3c, 0xd3, 0xba, 0xd8, 0xc9,
0x4d, 0xbe, 0x4f, 0xdc, 0x51, 0x86, 0xa2, 0x95, 0x26, 0x34, 0xc8, 0xda, 0x87, 0xe0, 0xf2, 0x29,
0x63, 0x01, 0xf3, 0x40, 0x69, 0x78, 0xd7, 0x52, 0x24, 0xcc, 0xab, 0x9c, 0xc8, 0x4a, 0xbd, 0x82,
0x47, 0xe0, 0x59, 0x83, 0x9b, 0x79, 0xed, 0x18, 0x36, 0x8b, 0x43, 0xc5, 0x39, 0x8e, 0x69, 0x42,
0x4d, 0x5d, 0x44, 0x2b, 0x96, 0x07, 0x6a, 0x2b, 0xfc, 0xc0, 0x02, 0x8a, 0xfe, 0xf9, 0x2a, 0xa3,
0xb1, 0xe7, 0x61, 0x83, 0xaa, 0xd5, 0xf6, 0x11, 0xb3, 0x09, 0xde, 0x50, 0x20, 0xeb, 0x7d, 0x0d,
0xb2, 0x6e, 0x0e, 0x99, 0xcf, 0xe9, 0x90, 0xf7, 0x9f, 0xa4, 0x64, 0x17, 0x18, 0xc9, 0x53, 0xfd,
0x64, 0xe3, 0xf4, 0x4e, 0x90, 0x35, 0xf3, 0xd0, 0x43, 0x92, 0xaa, 0xb6, 0xe2, 0x80, 0x29, 0xee,
0xf7, 0x48, 0x84, 0x0a, 0x9a, 0x34, 0x20, 0xba, 0x09, 0xf5, 0xb0, 0x44, 0x5d, 0xf5, 0x98, 0xa7,
0x88, 0x51, 0x87, 0xb5, 0x71, 0x8b, 0x6a, 0xf2, 0xa8, 0xb8, 0x1e, 0x2f, 0x8d, 0x52, 0x4d, 0xa0,
0xd2, 0x07, 0x8d, 0x4d, 0x5c, 0x8e, 0xe7, 0x62, 0x80, 0xd6, 0x13, 0x45, 0xd6, 0x6d, 0x21, 0xa4,
0x5c, 0x43, 0x78, 0x41, 0x34, 0x52, 0x89, 0x2b, 0x16, 0xe7, 0x87, 0x0c, 0x3b, 0x79, 0xd6, 0xf4,
0x5d, 0x64, 0x63, 0xa5, 0x1a, 0xc7, 0x6e, 0x75, 0xa7, 0xb0, 0x25, 0xa5, 0x06, 0x14, 0xa4, 0xf4,
0x72, 0xc2, 0x1d, 0x89, 0x5c, 0x41, 0xe7, 0x53, 0x1e, 0x97, 0xad, 0x68, 0x4f, 0xff, 0xa2, 0x71,
0x5a, 0x80, 0x5f, 0xfc, 0x5a, 0xe7, 0xd5, 0x40, 0x67, 0xe1, 0xb4, 0xbb, 0x29, 0x3c, 0xb7, 0x4a,
0xf5, 0x84, 0xdd, 0x01, 0x1b, 0xb4, 0x09, 0x59, 0x6b, 0x11, 0x46, 0x29, 0x8a, 0xf5, 0x3e, 0x66,
0xf1, 0xbb, 0xbd, 0x46, 0x31, 0x7c, 0xe5, 0xcf, 0xd9, 0x98, 0x65, 0x56, 0x41, 0x82, 0xd4, 0x1b,
0x5b, 0x19, 0xf0, 0x35, 0xc4, 0xa7, 0x40, 0x35, 0x12, 0x0e, 0x38, 0x45, 0xb3, 0x64, 0xed, 0x2b,
0x3d, 0x2b, 0xa9, 0xca, 0xba, 0xaf, 0x1a, 0xbc, 0xaa, 0x80, 0xd7, 0x90, 0x6e, 0x24, 0xd5, 0x69,
0xc5, 0xf1, 0x95, 0x4b, 0xcb, 0xc6, 0x91, 0x75, 0x35, 0xe4, 0x1a, 0x51, 0x78, 0x6a, 0x59, 0x1d,
0x96, 0x2b, 0x45, 0xe4, 0x8d, 0x37, 0x59, 0x92, 0x75, 0xcd, 0xa2, 0xaa, 0x32, 0x8b, 0xf6, 0x34,
0xb7, 0x30, 0x43, 0x45, 0xd2, 0xdd, 0x68, 0x1a, 0xbd, 0x11, 0x9c, 0x9f, 0x94, 0xac, 0x41, 0x46,
0xa6, 0xdb, 0xf0, 0xbb, 0xd6, 0xc9, 0x56, 0xe1, 0x28, 0xb2, 0xd6, 0x42, 0x48, 0xa2, 0x32, 0x0f,
0xa4, 0x9d, 0xd8, 0xa8, 0x6e, 0x1f, 0x54, 0x81, 0x30, 0x4f, 0x34, 0x60, 0x31, 0x92, 0xe9, 0xd3,
0x98, 0x45, 0xff, 0x75, 0x78, 0x96, 0xb5, 0xa4, 0xbb, 0xc3, 0x08, 0x7c, 0x73, 0xfd, 0x29, 0x46,
0x4c, 0x19, 0x64, 0x21, 0xfc, 0x67, 0x09, 0xee, 0xf5, 0x5f, 0x1c, 0x59, 0x23, 0xf1, 0x3b, 0xe2,
0x67, 0x90, 0xbb, 0xe7, 0x1b, 0x00, 0xbe, 0x29, 0xfe, 0xfd, 0x5f, 0x01, 0x7c, 0xa6, 0xb8, 0x51,
0x87, 0xad, 0x23, 0x95, 0x68, 0x37, 0xd2, 0x80, 0xde, 0x21, 0x59, 0x85, 0x40, 0xb2, 0x8e, 0xff,
0xb9, 0x02, 0x8d, 0x75, 0x4b, 0x8c, 0x61, 0xea, 0x58, 0x81, 0x3d, 0x6b, 0x16, 0x59, 0xff, 0xa8,
0x51, 0x70, 0x98, 0xa5, 0x77, 0xd9, 0x02, 0xd1, 0xa8, 0xc6, 0xad, 0x43, 0xf4, 0x22, 0x0a, 0x1a,
0xff, 0x47, 0x12, 0xc1, 0xb8, 0xc4, 0x8b, 0x93, 0xac, 0x57, 0x42, 0xd6, 0x90, 0x0a, 0xc8, 0xc5,
0x93, 0xc4, 0xa8, 0xf8, 0xae, 0x80, 0x9b, 0xf4, 0x36, 0xa4, 0x97, 0xf8, 0xd2, 0x31, 0xa1, 0x36,
0x16, 0xfd, 0xd5, 0x00, 0xd5, 0x36, 0xa8, 0x0f, 0x8d, 0x6a, 0x35, 0x02, 0x15, 0x15, 0x78, 0x97,
0xe3, 0xa3, 0x31, 0x59, 0x1b, 0x12, 0x09, 0xdf, 0x29, 0x90, 0xb5, 0x15, 0x72, 0xa4, 0xd1, 0x71,
0xf7, 0x8d, 0x26, 0x9c, 0xff, 0xb4, 0xfb, 0x02, 0x27, 0x19, 0xeb, 0xc5, 0x34, 0x6f, 0x30, 0x65,
0xe9, 0xe0, 0x4f, 0x89, 0xea, 0xf5, 0x80, 0x9d, 0x58, 0xde, 0x45, 0x29, 0x90, 0x3e, 0x89, 0x31,
0xeb, 0x15, 0xba, 0xa8, 0xd9, 0x6d, 0x0e, 0x64, 0x9d, 0x91, 0x88, 0x77, 0x82, 0xfd, 0x5f, 0x97,
0xac, 0xaf, 0x0d, 0xce, 0x6b, 0x94, 0x6b, 0xbb, 0x60, 0xa0, 0x12, 0x17, 0xaa, 0x9c, 0x0a, 0x83,
0xed, 0xda, 0xc5, 0xa9, 0xa8, 0xa3, 0x5f, 0x21, 0x3c, 0xdb, 0xe2, 0x71, 0x00, 0x59, 0xd7, 0x90,
0xbc, 0xb2, 0xf9, 0x32, 0xba, 0xb3, 0x72, 0x61, 0x56, 0x64, 0xa5, 0xdf, 0xed, 0x95, 0xfe, 0x3f,
0xa5, 0xa0, 0x06, 0xcb, 0x58, 0x34, 0x9c, 0x0b, 0x0a, 0x26, 0x50, 0x8d, 0x23, 0x2e, 0x3a, 0x59,
0xc9, 0x80, 0x76, 0x38, 0xcd, 0xc9, 0x4c, 0x52, 0x1c, 0x99, 0x06, 0x7c, 0x05, 0xc1, 0x35, 0x79,
0x4e, 0x04, 0x6c, 0x06, 0x2d, 0x74, 0x36, 0x34, 0x32, 0x79, 0xee, 0x8b, 0x8e, 0x8b, 0x91, 0x38,
0x12, 0x43, 0xd6, 0x9a, 0xa4, 0xbe, 0x36, 0x98, 0x86, 0x14, 0x44, 0xd6, 0x63, 0x21, 0xaa, 0xab,
0x29, 0x59, 0x01, 0x3f, 0x47, 0x55, 0x55, 0x4b, 0x9a, 0x2b, 0x30, 0x59, 0x37, 0x21, 0x45, 0x7f,
0x2b, 0x9d, 0x1d, 0x4c, 0x23, 0x96, 0x6e, 0x42, 0x2d, 0xdb, 0xbf, 0x25, 0x2d, 0x90, 0xa6, 0xa5,
0x4d, 0x66, 0x93, 0xe3, 0x63, 0x24, 0xe2, 0xfc, 0xac, 0x67, 0xa4, 0xdf, 0xf3, 0x4a, 0x87, 0x41,
0x64, 0x7d, 0x17, 0x21, 0x59, 0x93, 0x44, 0x91, 0x9d, 0x41, 0x77, 0xd4, 0x78, 0x9e, 0x66, 0xe3,
0x67, 0x3d, 0x65, 0x8e, 0xac, 0x6a, 0x26, 0x7e, 0x2f, 0x52, 0x65, 0xcf, 0x2a, 0x12, 0xeb, 0x21,
0xfb, 0x77, 0xd2, 0x7a, 0x39, 0x93, 0x8e, 0xac, 0x56, 0xc8, 0x5a, 0x91, 0x7e, 0xbf, 0x4e, 0x81,
0xac, 0xaf, 0x43, 0xc8, 0xba, 0x07, 0xc9, 0x2c, 0xbc, 0xb4, 0x9e, 0xd6, 0x95, 0x7c, 0xcc, 0x69,
0xfc, 0x36, 0xa6, 0x71, 0x61, 0x93, 0x22, 0xcb, 0x74, 0xce, 0x55, 0x0d, 0xa2, 0xa6, 0x33, 0xed,
0xa2, 0xa5, 0x03, 0xf8, 0x05, 0xc4, 0xe7, 0xdb, 0xd6, 0x9d, 0x9a, 0xac, 0x4d, 0x56, 0x28, 0x90,
0x75, 0x7d, 0x08, 0x59, 0xc9, 0x68, 0xb8, 0xd5, 0xf0, 0x59, 0x29, 0x82, 0xee, 0xb9, 0x23, 0x6b,
0x27, 0xf6, 0x1a, 0x5e, 0x94, 0x62, 0x5a, 0x4f, 0x68, 0x7c, 0xa6, 0x82, 0xf6, 0x98, 0xda, 0xcd,
0x09, 0x9f, 0x5d, 0xa5, 0x4e, 0x6c, 0x13, 0xd1, 0x15, 0x06, 0x1c, 0x59, 0xfd, 0x02, 0x72, 0x49,
0xc9, 0xda, 0x84, 0x9f, 0x3f, 0x9b, 0xc4, 0x16, 0x41, 0x79, 0xcf, 0x93, 0x25, 0x1e, 0x73, 0x0a,
0xa1, 0xfd, 0x68, 0xf3, 0xa2, 0x2b, 0x0a, 0x52, 0x6e, 0x48, 0x92, 0x9e, 0x64, 0x7c, 0x38, 0x63,
0x70, 0x3f, 0x6a, 0xaa, 0x74, 0xcf, 0xd2, 0xee, 0x75, 0xc9, 0x91, 0x35, 0x16, 0x2a, 0x0d, 0x94,
0x64, 0xff, 0xe8, 0x9d, 0x08, 0xb2, 0x86, 0x19, 0x76, 0x28, 0xff, 0x79, 0x19, 0xc9, 0x8b, 0x97,
0x75, 0x43, 0xcb, 0x4e, 0x13, 0x57, 0x56, 0x1b, 0xe4, 0x30, 0xb1, 0xaf, 0xc3, 0x77, 0x82, 0x87,
0xe1, 0x97, 0x00, 0xfc, 0x35, 0x31, 0xe9, 0x5b, 0x00, 0xfc, 0x8c, 0xd8, 0x31, 0xfe, 0xa6, 0xc1,
0xfd, 0xff, 0xb7, 0xf8, 0xf9, 0x27, 0x19, 0x0d, 0xd8, 0x1a, 0x80, 0x9f, 0xed, 0x71, 0xb2, 0x7e,
0x4d, 0x61, 0xc3, 0xfa, 0x3a, 0xbc, 0xce, 0x6f, 0x84, 0xef, 0x24, 0xb8, 0xdf, 0x6f, 0x89, 0x75,
0x96, 0x24, 0xd9, 0xfc, 0xef, 0x8b, 0x6b, 0xdc, 0x28, 0xf1, 0xb8, 0x2f, 0xc0, 0x72, 0xe8, 0xa1,
0x8a, 0xcb, 0xa6, 0x82, 0xf6, 0xaa, 0x05, 0xb4, 0xeb, 0xd5, 0xc5, 0x39, 0x54, 0x27, 0xdb, 0x85,
0xd4, 0xe7, 0xa4, 0x2a, 0x70, 0x45, 0x51, 0xb2, 0x9e, 0x80, 0x8b, 0x1b, 0x56, 0xc9, 0xf5, 0x6d,
0xa2, 0x3d, 0xf9, 0x9c, 0xe6, 0x79, 0x3a, 0x64, 0xcd, 0x8c, 0x85, 0xbc, 0x3f, 0xc5, 0xce, 0xaf,
0x0d, 0x0b, 0x8b, 0x3d, 0xf3, 0xfc, 0x50, 0x8b, 0xa8, 0xd8, 0x5e, 0x7b, 0xba, 0x17, 0x1b, 0x12,
0x87, 0xff, 0x17, 0xf0, 0xa2, 0x87, 0x74, 0x4c, 0xed, 0x94, 0x33, 0x69, 0xa3, 0x04, 0x07, 0x59,
0x82, 0xe3, 0xc2, 0x0c, 0xa9, 0x59, 0x51, 0xaf, 0x5a, 0x8c, 0xa9, 0x73, 0x5c, 0x1c, 0x59, 0x1b,
0x21, 0x64, 0x5d, 0x0b, 0x51, 0xab, 0x65, 0xcf, 0xc1, 0x84, 0x64, 0x3f, 0xa0, 0xb9, 0x4e, 0xd2,
0xc9, 0x81, 0xe2, 0x87, 0x0f, 0x94, 0x78, 0xfc, 0x5b, 0x45, 0xba, 0x18, 0x95, 0x8b, 0x54, 0x31,
0x50, 0xd9, 0x2c, 0xaa, 0xbd, 0x51, 0xe3, 0x5a, 0x49, 0x2a, 0x26, 0x96, 0x1d, 0xb4, 0xe0, 0xe3,
0xa2, 0x69, 0x2e, 0x33, 0xb2, 0x0e, 0xc2, 0xcf, 0x43, 0x5e, 0x53, 0x38, 0xdf, 0x42, 0x68, 0x38,
0xad, 0x90, 0xcd, 0xf9, 0x6c, 0x82, 0xe7, 0x3f, 0x81, 0xce, 0xda, 0x50, 0x3d, 0x49, 0xd6, 0x25,
0x0b, 0x17, 0xdb, 0x0e, 0xb5, 0x72, 0x97, 0x54, 0x0b, 0xe8, 0x5c, 0x4e, 0x64, 0x3d, 0xdc, 0xe3,
0x64, 0x8d, 0xc3, 0x29, 0x46, 0xd6, 0x7d, 0x11, 0x92, 0x35, 0xac, 0x19, 0x55, 0xd8, 0x46, 0xfc,
0x8e, 0x5d, 0xcb, 0x24, 0xc1, 0xbe, 0x52, 0xf2, 0xf1, 0xb7, 0xd6, 0x2f, 0x76, 0xd6, 0x12, 0x81,
0xf6, 0x20, 0x3e, 0x82, 0xe9, 0xb1, 0x65, 0x95, 0x40, 0x87, 0xac, 0x55, 0xf4, 0x6e, 0xb0, 0xff,
0x41, 0x85, 0x71, 0xa2, 0xb3, 0x15, 0x75, 0x29, 0xdf, 0x1f, 0x41, 0xd6, 0x1b, 0x21, 0x63, 0x19,
0xb5, 0x61, 0xf3, 0x5a, 0xc7, 0x13, 0x3d, 0x36, 0xfe, 0x56, 0x33, 0x70, 0x6c, 0xa5, 0x19, 0x3d,
0x8b, 0x21, 0xac, 0x6d, 0x53, 0xbc, 0x0e, 0x59, 0x67, 0x0c, 0x37, 0x8a, 0x15, 0x94, 0xdf, 0xed,
0x53, 0x43, 0xbc, 0x2f, 0xfa, 0x28, 0x3a, 0xc3, 0x0d, 0x49, 0x52, 0x3e, 0xb4, 0x40, 0x56, 0x99,
0xb0, 0x49, 0xa2, 0x93, 0x4e, 0x22, 0x9b, 0x4e, 0x71, 0x36, 0xc7, 0xdf, 0x1a, 0x59, 0x49, 0xba,
0x9e, 0xd6, 0xfc, 0xdc, 0x90, 0xa4, 0xd6, 0x54, 0xe0, 0x37, 0x42, 0x9a, 0x0f, 0x31, 0x72, 0x1c,
0xc9, 0x89, 0xac, 0xa6, 0x67, 0x87, 0xf7, 0x5d, 0x20, 0x91, 0x6b, 0x88, 0x6e, 0x9f, 0x41, 0x15,
0xf9, 0x96, 0xa4, 0x4d, 0x8a, 0x9c, 0xfa, 0x83, 0x01, 0x64, 0xad, 0x85, 0x8c, 0x6f, 0x3d, 0x46,
0x7a, 0x73, 0xc2, 0xc6, 0x05, 0x3c, 0x4c, 0x22, 0xbc, 0xa3, 0x7a, 0xda, 0x39, 0xac, 0x36, 0xe3,
0x93, 0xad, 0x92, 0x95, 0xce, 0x1b, 0xba, 0x8b, 0x92, 0x2c, 0xc1, 0x72, 0xa5, 0xba, 0xbb, 0x4c,
0x8a, 0x52, 0x9e, 0xea, 0x31, 0xd8, 0x2f, 0x17, 0x99, 0x05, 0x59, 0x77, 0xa1, 0xfc, 0x6e, 0x1f,
0xaa, 0x69, 0x1b, 0x86, 0xb7, 0x01, 0xdf, 0xb1, 0x11, 0x43, 0xd6, 0xd3, 0x21, 0xf7, 0xb9, 0xa0,
0xf0, 0x3c, 0xbc, 0xc0, 0xdc, 0x1c, 0xfc, 0xe4, 0x91, 0x29, 0xf8, 0xed, 0x3f, 0x78, 0x49, 0xd6,
0xba, 0x74, 0xe6, 0xcb, 0x82, 0xac, 0x14, 0x88, 0x7f, 0xd7, 0x12, 0x59, 0xad, 0x36, 0xcc, 0xba,
0x0d, 0xfd, 0xbc, 0xd2, 0x4d, 0xf0, 0x2d, 0xc1, 0x72, 0x1c, 0xe7, 0x4e, 0x36, 0xd9, 0xef, 0xe0,
0x97, 0x78, 0x41, 0xce, 0x64, 0xbd, 0xa0, 0x79, 0x0f, 0x2a, 0x47, 0x33, 0x55, 0x72, 0xb2, 0x86,
0xf9, 0x29, 0x29, 0x0e, 0xf7, 0x4a, 0x86, 0x64, 0x05, 0x7c, 0x2b, 0x71, 0x4b, 0xac, 0x0d, 0x5a,
0xd4, 0xdc, 0x8f, 0xff, 0x80, 0x91, 0xf6, 0x89, 0xf4, 0x6c, 0x59, 0x54, 0x87, 0x98, 0x83, 0x1d,
0x97, 0xdf, 0x51, 0xdb, 0x6b, 0x9f, 0xea, 0xee, 0xea, 0xb6, 0x76, 0xac, 0xc0, 0xcf, 0x92, 0x78,
0x22, 0xfd, 0x6e, 0x40, 0x52, 0x7b, 0x6a, 0x39, 0x93, 0xb5, 0x0a, 0xb3, 0x64, 0x05, 0x5b, 0xa1,
0x91, 0x79, 0x60, 0x20, 0x62, 0x8c, 0x2a, 0x6c, 0xb3, 0x95, 0x13, 0x21, 0x56, 0xe1, 0xb7, 0x30,
0x94, 0xc9, 0xba, 0x16, 0x40, 0xd6, 0x75, 0x06, 0x9b, 0xe1, 0x5e, 0x74, 0x96, 0x66, 0xa5, 0x62,
0xe4, 0x53, 0xec, 0xf8, 0x44, 0x84, 0xa5, 0x20, 0x8c, 0xac, 0x4a, 0x7d, 0x56, 0xc4, 0xbd, 0x93,
0xda, 0x59, 0x54, 0xe3, 0x01, 0xb4, 0xf0, 0x1c, 0x66, 0xc1, 0xd3, 0xe7, 0xd9, 0x60, 0xbf, 0x42,
0x67, 0xcc, 0x28, 0x0d, 0xf6, 0xed, 0x9c, 0xc9, 0x6a, 0x1a, 0xaf, 0x4a, 0xad, 0x2c, 0x06, 0x4a,
0x48, 0xd6, 0x97, 0x11, 0x63, 0x74, 0x32, 0xe2, 0x68, 0xb2, 0xc2, 0xd4, 0xd5, 0xbe, 0x80, 0xcd,
0xeb, 0x74, 0x88, 0x84, 0xbe, 0x60, 0xf8, 0x8c, 0x71, 0xfd, 0x8d, 0xb8, 0x55, 0xda, 0x7a, 0x54,
0x50, 0x04, 0x76, 0x5a, 0x52, 0x87, 0x53, 0xe9, 0x8a, 0x6e, 0x92, 0x63, 0x4a, 0x0d, 0xa1, 0xae,
0x31, 0xd2, 0xbe, 0x60, 0xaf, 0x56, 0x4a, 0xaa, 0xa4, 0x2e, 0x59, 0x4d, 0x6b, 0x0b, 0x93, 0xd6,
0x71, 0xab, 0xa4, 0x64, 0xad, 0x47, 0xcc, 0x75, 0x58, 0x71, 0xbc, 0x46, 0x84, 0x1d, 0xc3, 0x36,
0x59, 0x55, 0x37, 0xda, 0xa6, 0xf4, 0x0c, 0x3b, 0x33, 0x1a, 0xc3, 0x7b, 0x16, 0x36, 0x87, 0x54,
0xc8, 0x3a, 0x0f, 0xfd, 0x24, 0x74, 0xde, 0xbd, 0x6d, 0x16, 0x7e, 0xbb, 0xf6, 0xba, 0x64, 0x28,
0xb0, 0x0d, 0x6a, 0x49, 0x79, 0x50, 0x93, 0x74, 0x26, 0x09, 0xf6, 0x0f, 0x61, 0xbf, 0x47, 0x4b,
0x16, 0xa8, 0x87, 0x90, 0x75, 0x36, 0x46, 0x5b, 0xa0, 0x4d, 0xbb, 0x28, 0x64, 0xa5, 0xc0, 0x8e,
0x59, 0xf6, 0x0c, 0x59, 0x56, 0xe1, 0x0f, 0x6a, 0xda, 0xa5, 0x83, 0x26, 0x52, 0x70, 0x37, 0xd1,
0xa0, 0xdc, 0x34, 0x20, 0xeb, 0x40, 0xc4, 0x82, 0x59, 0x4e, 0x71, 0x10, 0x55, 0xfb, 0xc7, 0xf6,
0x25, 0x54, 0xc7, 0x93, 0x4e, 0x58, 0x5e, 0xc6, 0xa5, 0x6d, 0x21, 0x92, 0xb3, 0x16, 0xf3, 0xb9,
0x3b, 0x06, 0x64, 0x3d, 0x91, 0xf2, 0x77, 0xa1, 0x63, 0x0c, 0x79, 0x1c, 0xb2, 0xea, 0x9f, 0x4b,
0xf7, 0xdb, 0x9e, 0xf0, 0xf3, 0xda, 0x88, 0xaa, 0xc8, 0x7f, 0x51, 0xa8, 0x46, 0x3f, 0x07, 0xf5,
0x6e, 0xe7, 0x7f, 0x2c, 0x7e, 0xfe, 0xdd, 0x90, 0xdf, 0x7f, 0x86, 0x62, 0x64, 0xfd, 0x93, 0xb1,
0xeb, 0x13, 0xc3, 0xcf, 0x3f, 0x10, 0xd2, 0xb9, 0x2c, 0x09, 0xd1, 0xb3, 0x11, 0x86, 0x9d, 0x4f,
0x11, 0xdf, 0x01, 0xc1, 0x24, 0x45, 0xee, 0x6f, 0xa5, 0xf8, 0x7d, 0xfe, 0x33, 0x80, 0x3f, 0x10,
0xff, 0xfe, 0x15, 0xf1, 0xf3, 0x37, 0x33, 0x1a, 0xcb, 0xef, 0x88, 0x8d, 0x6b, 0xb7, 0xe1, 0xe7,
0xff, 0x5f, 0x5a, 0x0f, 0x46, 0x65, 0x39, 0x74, 0xaa, 0xc6, 0x35, 0x43, 0x76, 0x6a, 0xe3, 0x1d,
0x25, 0x05, 0xc9, 0x0a, 0xe8, 0xc5, 0x42, 0xcb, 0x9a, 0x02, 0xb7, 0x4c, 0x8e, 0x94, 0x80, 0xac,
0xf4, 0x5d, 0xe5, 0x4d, 0xf7, 0xa4, 0xc2, 0x18, 0x70, 0xeb, 0xac, 0x8a, 0x64, 0xdd, 0x82, 0xec,
0xfd, 0xd1, 0x2a, 0x09, 0xf5, 0x36, 0x71, 0x0b, 0xf1, 0x25, 0x84, 0x4c, 0xb5, 0xcf, 0xc4, 0x24,
0xd0, 0xf1, 0x65, 0x51, 0xf5, 0x07, 0x2e, 0x75, 0x86, 0x61, 0x37, 0xcb, 0xc6, 0x06, 0x59, 0xb7,
0x69, 0xa8, 0x33, 0x61, 0x6a, 0x2f, 0xf9, 0x03, 0xc7, 0x0a, 0x4e, 0xd6, 0x30, 0x03, 0x51, 0x13,
0xf1, 0xc6, 0xb2, 0x7a, 0x04, 0x59, 0x9b, 0xe8, 0x74, 0x43, 0xd4, 0x73, 0x20, 0x2b, 0xb5, 0x8f,
0x7c, 0x94, 0xf1, 0xb1, 0xc2, 0xa4, 0x5d, 0x25, 0x55, 0x0f, 0x4d, 0x25, 0x2f, 0xd7, 0x44, 0x22,
0xca, 0x21, 0x5a, 0x27, 0x91, 0x7e, 0x7b, 0x03, 0x93, 0x5a, 0xc7, 0xaa, 0x5d, 0x07, 0xee, 0x47,
0x8c, 0x41, 0xd2, 0x96, 0x1f, 0x59, 0x91, 0xf5, 0x8b, 0x80, 0x73, 0x7b, 0x13, 0xf1, 0xe9, 0x82,
0x2b, 0x11, 0x64, 0x5d, 0x89, 0x20, 0x77, 0xd6, 0xb8, 0x93, 0xf1, 0x7d, 0x93, 0xf4, 0xd6, 0x49,
0xd3, 0x00, 0xa7, 0x6d, 0x50, 0x79, 0x25, 0x7d, 0x11, 0x22, 0xeb, 0xc1, 0x14, 0x07, 0x6f, 0x01,
0xfa, 0x61, 0x92, 0x4d, 0x44, 0xc7, 0xca, 0xca, 0x63, 0x10, 0xe4, 0x63, 0x23, 0xff, 0xdb, 0x62,
0x81, 0xc9, 0xba, 0x1a, 0x30, 0x36, 0x23, 0x8a, 0x8b, 0xad, 0x2c, 0x64, 0xa5, 0x39, 0xca, 0xaa,
0x1f, 0x2a, 0x79, 0x14, 0xf6, 0x1b, 0x7c, 0xf6, 0x3d, 0x52, 0xac, 0x87, 0x5c, 0xd5, 0x9c, 0x00,
0x0a, 0x08, 0x3f, 0x20, 0x91, 0x35, 0xcd, 0xa4, 0xef, 0x0b, 0x06, 0x8b, 0xe4, 0xb1, 0xc6, 0x59,
0x27, 0xea, 0x5c, 0x44, 0x2a, 0xf5, 0x5b, 0x14, 0xb3, 0xc6, 0xed, 0xe7, 0x01, 0x63, 0x33, 0xa6,
0xb8, 0xb9, 0xad, 0x20, 0x3c, 0x98, 0x3d, 0x8c, 0xac, 0x2b, 0x39, 0x7d, 0xcf, 0xcb, 0x30, 0x8b,
0xbe, 0x4b, 0x7a, 0x56, 0xd6, 0x3d, 0xbb, 0x3e, 0x4d, 0x73, 0x43, 0xdb, 0x11, 0xb3, 0x8b, 0xf4,
0xc5, 0x2c, 0x6e, 0x22, 0xeb, 0xd1, 0x0c, 0xc8, 0xaa, 0xe3, 0x3b, 0xbd, 0xa9, 0x31, 0x68, 0x5b,
0x11, 0x5d, 0x2f, 0x6a, 0x27, 0x33, 0xc6, 0x14, 0xad, 0x8b, 0x1d, 0xe5, 0xb1, 0xf2, 0x1a, 0x4a,
0x8b, 0x62, 0x87, 0x57, 0x25, 0xeb, 0x51, 0x0d, 0xb2, 0x2e, 0xe4, 0xf8, 0x5d, 0x8f, 0x67, 0xb0,
0xd6, 0x08, 0x13, 0xe2, 0x5e, 0x9f, 0x6b, 0x7e, 0x6e, 0x2c, 0x4d, 0xb2, 0x52, 0x5c, 0xa9, 0x8e,
0xc5, 0xed, 0x0c, 0x33, 0xbe, 0x90, 0x5a, 0xbc, 0x35, 0xc5, 0x81, 0xa3, 0x40, 0xfb, 0x0d, 0x06,
0x1a, 0x80, 0x0a, 0xe8, 0x8c, 0x17, 0xb5, 0x6b, 0x4f, 0x31, 0x2d, 0xa4, 0x8e, 0x62, 0x05, 0xfd,
0xcb, 0x7e, 0xd6, 0x6a, 0x42, 0xb2, 0x4e, 0x85, 0x48, 0xe6, 0xbc, 0xc9, 0x1a, 0x67, 0x63, 0xb0,
0x8d, 0x25, 0x31, 0x0e, 0x7d, 0x06, 0xf3, 0x31, 0x9d, 0xd6, 0x43, 0x51, 0x76, 0x84, 0x1c, 0x3f,
0x1a, 0x16, 0xc9, 0xc3, 0x8b, 0x78, 0xb7, 0x32, 0x1a, 0x3c, 0x93, 0xcc, 0x88, 0x26, 0xd4, 0x03,
0x35, 0xa8, 0xb6, 0x50, 0x5c, 0xf4, 0xd2, 0x26, 0xb4, 0x5b, 0x51, 0x8f, 0xa6, 0x39, 0x31, 0x86,
0x64, 0xad, 0x43, 0xcd, 0x25, 0x17, 0x46, 0xd6, 0x9d, 0x21, 0x73, 0x5a, 0x04, 0xb2, 0x82, 0xad,
0xb9, 0xe1, 0x94, 0xef, 0x43, 0xd1, 0x73, 0x0f, 0x35, 0x3f, 0x57, 0x47, 0xca, 0x7d, 0x7c, 0x54,
0xaa, 0xde, 0x73, 0x5c, 0x47, 0x7b, 0xb9, 0xd2, 0x22, 0x92, 0x75, 0x15, 0xc0, 0x07, 0xcd, 0x7b,
0xa8, 0x6a, 0x08, 0x7b, 0xe0, 0xa7, 0x04, 0xd2, 0x59, 0xea, 0x66, 0x41, 0xc8, 0xaa, 0xba, 0x79,
0x96, 0x95, 0xac, 0x43, 0x6c, 0xb3, 0x1c, 0x4c, 0xf9, 0x5e, 0x67, 0xa1, 0xef, 0x8e, 0xd9, 0x99,
0xb6, 0x00, 0xa3, 0x56, 0x8e, 0x54, 0x1e, 0x44, 0x45, 0x57, 0x7f, 0x03, 0xf3, 0xfe, 0x39, 0x59,
0x90, 0x75, 0x5e, 0x73, 0xd0, 0x1a, 0xd0, 0x6f, 0x83, 0x50, 0x81, 0xe7, 0x93, 0x6b, 0x64, 0xa8,
0x65, 0xf4, 0x3a, 0x59, 0x01, 0xbf, 0xd8, 0xdb, 0xf5, 0x0c, 0xee, 0xb5, 0x0a, 0xbd, 0x20, 0x19,
0x92, 0xc8, 0xeb, 0xd2, 0x7e, 0x28, 0x2a, 0x3a, 0x46, 0x3b, 0xd7, 0x2d, 0x84, 0x07, 0x27, 0x93,
0x13, 0xf8, 0xcb, 0x0c, 0xc9, 0x3a, 0x28, 0xd4, 0x75, 0x95, 0x73, 0xc4, 0x80, 0x26, 0x79, 0x28,
0xf6, 0x75, 0xd4, 0xf0, 0x19, 0x47, 0x10, 0xdf, 0xf5, 0xc0, 0x91, 0xd5, 0x1e, 0x5e, 0x66, 0xb4,
0x39, 0x92, 0xfd, 0x63, 0x0d, 0x6a, 0x49, 0x1e, 0x54, 0xde, 0xe8, 0x0b, 0xd5, 0x1b, 0x7c, 0x6a,
0xf0, 0x50, 0xdf, 0x80, 0xd7, 0x5e, 0xe1, 0x53, 0x21, 0x95, 0x3e, 0x81, 0xd7, 0x42, 0xe3, 0xcf,
0x0b, 0xe2, 0x5e, 0x13, 0x3f, 0xcf, 0xe6, 0x38, 0x41, 0xbf, 0x2e, 0x54, 0x50, 0x15, 0x29, 0x4b,
0x12, 0x5f, 0xf5, 0x6c, 0x43, 0xbe, 0x62, 0xd3, 0x6e, 0x74, 0xdf, 0x05, 0xf0, 0x2d, 0x94, 0x07,
0xdf, 0x40, 0xb9, 0xf1, 0xa3, 0xe2, 0x67, 0xda, 0x1b, 0xc8, 0x9f, 0x02, 0xf8, 0x47, 0x50, 0x6b,
0x41, 0x03, 0x78, 0xd6, 0xf8, 0x26, 0x80, 0x9f, 0xce, 0x72, 0x30, 0xd6, 0xc1, 0xb3, 0xfc, 0x5e,
0x64, 0xd2, 0x96, 0x57, 0x84, 0x58, 0xce, 0x58, 0xb2, 0x1e, 0x62, 0xff, 0x56, 0x29, 0xca, 0x46,
0x86, 0x30, 0x9d, 0xb3, 0x24, 0xb9, 0xa2, 0x36, 0x94, 0x64, 0xc1, 0x52, 0xb7, 0x73, 0x0a, 0x01,
0xbd, 0xa5, 0x61, 0xdc, 0x68, 0x95, 0x5c, 0xb2, 0x66, 0x29, 0x5d, 0x01, 0xdf, 0x2b, 0xa1, 0xe2,
0xeb, 0xbd, 0x8c, 0x9c, 0xeb, 0x7a, 0x0d, 0x0a, 0x7d, 0x7c, 0x1c, 0x7e, 0x01, 0xae, 0x96, 0xf8,
0x7f, 0xda, 0x58, 0x83, 0x6f, 0x00, 0xfb, 0x00, 0xf5, 0x88, 0xa6, 0x06, 0xd4, 0x23, 0x99, 0xb8,
0x0a, 0xf3, 0xa1, 0x24, 0x64, 0x95, 0xc7, 0xe2, 0x99, 0x06, 0x59, 0xe9, 0x9c, 0x3d, 0x1b, 0x40,
0xd6, 0x97, 0x21, 0xe4, 0x2e, 0x5a, 0x79, 0xd0, 0x11, 0x83, 0x0d, 0x39, 0x09, 0xa8, 0xb8, 0xc1,
0x4a, 0x8c, 0x4a, 0x7c, 0x22, 0x43, 0x6e, 0x28, 0xa1, 0x9a, 0xe1, 0xee, 0xf1, 0x8a, 0x2d, 0x42,
0x3a, 0xc0, 0xab, 0x34, 0xbd, 0x9a, 0x83, 0x7e, 0x16, 0xc5, 0x29, 0x94, 0xa7, 0x2b, 0xb7, 0x1c,
0x1b, 0xfc, 0x0c, 0xea, 0x51, 0x3e, 0x61, 0xb1, 0xe1, 0x87, 0x10, 0x9c, 0xee, 0x58, 0xd4, 0x0a,
0x90, 0x59, 0x87, 0x41, 0xee, 0x51, 0xdc, 0xb8, 0x6c, 0x57, 0xfa, 0x2c, 0x25, 0x59, 0x49, 0x2a,
0xbc, 0x55, 0xf8, 0x1c, 0x45, 0xa2, 0xec, 0x35, 0x50, 0xbb, 0x97, 0x0a, 0x4e, 0xd4, 0x31, 0xe9,
0x78, 0x40, 0x64, 0x55, 0x8d, 0xb2, 0xda, 0x8c, 0xe0, 0x7a, 0x5c, 0xb5, 0x92, 0x91, 0x95, 0xea,
0x83, 0x65, 0x99, 0xd2, 0x78, 0x55, 0x41, 0x25, 0x6e, 0x85, 0x68, 0x28, 0x5d, 0x4f, 0xd6, 0x79,
0x49, 0xdd, 0xab, 0x41, 0xdd, 0xf2, 0x6a, 0xa2, 0x26, 0x51, 0x94, 0xd6, 0x50, 0x81, 0xc9, 0xba,
0x16, 0x70, 0x1c, 0x58, 0x82, 0x5e, 0x48, 0x64, 0x50, 0xb3, 0xec, 0x7a, 0x00, 0x59, 0x87, 0x0b,
0x4c, 0x56, 0xb2, 0xfa, 0x67, 0xdd, 0x32, 0x92, 0x36, 0xbb, 0x93, 0x11, 0x6b, 0xb6, 0xd1, 0x8b,
0x64, 0x1d, 0x97, 0xee, 0x75, 0x5e, 0xe3, 0xde, 0xaf, 0x0c, 0x07, 0xad, 0x85, 0x62, 0x57, 0xea,
0x0f, 0x8a, 0xae, 0xd1, 0x8d, 0x5f, 0x0e, 0x3a, 0xff, 0x07, 0x91, 0xf5, 0x0d, 0x8a, 0x5d, 0x08,
0x3d, 0xcb, 0x73, 0x2b, 0x07, 0xf5, 0x96, 0x1d, 0x8e, 0x38, 0x4e, 0xf5, 0x1c, 0x59, 0x65, 0x35,
0x6c, 0xbd, 0xc6, 0xb9, 0xf5, 0xbe, 0x21, 0x59, 0xc9, 0xf1, 0xfe, 0xa4, 0xc0, 0x0b, 0x14, 0x09,
0xc9, 0x7a, 0x11, 0x9d, 0x49, 0x12, 0x65, 0x24, 0xeb, 0x3b, 0xa4, 0x1c, 0xe2, 0x17, 0x02, 0xf2,
0xc1, 0x36, 0x22, 0xe6, 0x68, 0xa2, 0xd7, 0xc9, 0x4a, 0x6e, 0x19, 0x95, 0xc2, 0x68, 0x54, 0x6e,
0xc3, 0xa4, 0x6a, 0x21, 0x99, 0xe0, 0x8b, 0xd6, 0xa4, 0x39, 0x2c, 0x15, 0xab, 0x09, 0xbd, 0x58,
0x65, 0xb2, 0x7e, 0x0f, 0x4a, 0x64, 0xbd, 0x1c, 0x40, 0xd6, 0x5a, 0x81, 0xc9, 0xfa, 0x3c, 0xc7,
0xcd, 0x84, 0x2c, 0xd2, 0x5f, 0x05, 0xfc, 0x2e, 0xab, 0xce, 0x02, 0x4a, 0x64, 0x6d, 0xe4, 0x44,
0x56, 0xae, 0x82, 0xa8, 0x7e, 0xd6, 0xb4, 0xc4, 0x28, 0x75, 0x23, 0x98, 0x2e, 0xd0, 0xe2, 0x6c,
0xa2, 0x33, 0x8d, 0x6d, 0xd4, 0x90, 0x50, 0xf2, 0xee, 0x1f, 0x94, 0x1e, 0x57, 0x74, 0xb2, 0x22,
0x67, 0xc9, 0x7f, 0x31, 0xe4, 0xfe, 0x3b, 0x51, 0x10, 0x8d, 0xa4, 0x8a, 0x6c, 0x2d, 0xa6, 0xf2,
0x97, 0xde, 0xab, 0x21, 0xf5, 0x92, 0xd6, 0x03, 0x26, 0x2d, 0xa2, 0x08, 0xc1, 0x12, 0xd3, 0x21,
0x47, 0x00, 0xd3, 0x33, 0xd2, 0x32, 0x3a, 0xbb, 0xcb, 0x95, 0x8d, 0xac, 0x54, 0xe8, 0x8c, 0x17,
0x9c, 0x57, 0x79, 0x35, 0xd1, 0x5e, 0xac, 0xfe, 0x39, 0xec, 0xfa, 0x46, 0xa9, 0xe5, 0x48, 0x64,
0x08, 0xeb, 0x27, 0x19, 0x91, 0xb5, 0x0a, 0xe0, 0xcf, 0x66, 0x48, 0xd6, 0x4f, 0x02, 0xde, 0xfb,
0x53, 0x00, 0x7f, 0x51, 0xe1, 0xb3, 0x7f, 0x02, 0xe0, 0xa7, 0x0c, 0xef, 0xdd, 0x07, 0xe0, 0xb5,
0x20, 0xfc, 0xdf, 0x03, 0xf0, 0xdf, 0x72, 0x5c, 0x98, 0x73, 0xe2, 0xcc, 0xfe, 0x8b, 0x68, 0x0f,
0x8d, 0x3c, 0x0d, 0xe0, 0x97, 0x0d, 0xe6, 0xfe, 0x21, 0xbc, 0x90, 0xd2, 0xaf, 0x33, 0xb2, 0x7e,
0x53, 0xfa, 0x9b, 0x25, 0x00, 0xdf, 0x87, 0xe2, 0x15, 0x40, 0x1f, 0x80, 0xe7, 0x46, 0xf9, 0x0b,
0x4c, 0xed, 0x5c, 0x01, 0xf0, 0x6f, 0x15, 0x3f, 0xff, 0x6f, 0xa4, 0xef, 0xf4, 0x99, 0xb4, 0x66,
0x3e, 0xb2, 0xb1, 0xfd, 0xe7, 0x62, 0xad, 0xe9, 0xa0, 0x5f, 0xac, 0x9b, 0xff, 0x0b, 0xe0, 0x2f,
0xf7, 0x9a, 0x64, 0x1d, 0x0e, 0x38, 0xab, 0xa8, 0x18, 0x16, 0x56, 0x2c, 0x9d, 0x1d, 0x48, 0x25,
0x7e, 0x89, 0xfc, 0x82, 0x26, 0xe6, 0x42, 0x24, 0xe8, 0x69, 0x24, 0x2b, 0xf4, 0x15, 0x25, 0x59,
0x49, 0x0a, 0x9d, 0x90, 0x5e, 0xbb, 0x73, 0x5c, 0x7f, 0x17, 0x99, 0x84, 0xb4, 0xdd, 0xf6, 0x64,
0x4c, 0xac, 0xed, 0x25, 0xf8, 0x59, 0x37, 0x64, 0x48, 0x3a, 0x01, 0xbd, 0xb6, 0x1e, 0x4d, 0x14,
0xa0, 0x70, 0x7c, 0x1e, 0x64, 0x95, 0xa3, 0x46, 0x36, 0x2b, 0x2e, 0xd0, 0x24, 0x0b, 0x59, 0xc6,
0x21, 0x84, 0xc7, 0xd5, 0x76, 0x33, 0x59, 0x55, 0x5e, 0xcf, 0x91, 0x7e, 0xac, 0xf8, 0x10, 0xfc,
0x58, 0xf5, 0x5a, 0xc6, 0xe3, 0xfe, 0x28, 0xe0, 0x3b, 0xbf, 0x17, 0xef, 0x87, 0x25, 0xfc, 0x53,
0x60, 0x7f, 0x4f, 0x91, 0xb5, 0x86, 0xe0, 0x26, 0x4b, 0xaa, 0x2d, 0x1d, 0x5a, 0x96, 0x17, 0x0c,
0x49, 0xd9, 0x55, 0x98, 0x15, 0x85, 0x2e, 0x12, 0x59, 0x9b, 0xf0, 0x2b, 0x3c, 0x86, 0x91, 0x35,
0xa8, 0x4b, 0xc1, 0x36, 0x00, 0x33, 0xe2, 0x45, 0x41, 0x00, 0x5c, 0x0a, 0x2d, 0xc3, 0x2b, 0x13,
0x63, 0x6b, 0x7c, 0x4e, 0xb0, 0xeb, 0xcf, 0xc0, 0xac, 0xa7, 0x91, 0x0d, 0xd0, 0xf7, 0xbe, 0x20,
0x7d, 0xe7, 0xf9, 0x80, 0xef, 0xba, 0x1d, 0xc9, 0xda, 0x72, 0x74, 0x15, 0x59, 0xab, 0x8a, 0x2a,
0x6e, 0x1a, 0x03, 0xb6, 0x95, 0x4d, 0xd4, 0x5d, 0x64, 0x53, 0x9b, 0x29, 0x0d, 0xb2, 0x36, 0xe0,
0xfb, 0x93, 0x75, 0xc8, 0x1a, 0x86, 0x09, 0xb1, 0x36, 0x1a, 0x92, 0x31, 0x67, 0x01, 0x66, 0xd5,
0x1d, 0x36, 0x33, 0x75, 0x74, 0x19, 0xc5, 0xc4, 0x51, 0xf6, 0x5d, 0xef, 0x07, 0x8c, 0xdf, 0x29,
0x47, 0x56, 0xe0, 0xb0, 0xe2, 0x22, 0x6d, 0x42, 0xbf, 0x9e, 0x8e, 0x2a, 0x6e, 0xb3, 0x89, 0x3a,
0x53, 0x42, 0xb2, 0x5e, 0x63, 0xaa, 0x9a, 0xec, 0x8e, 0x9b, 0x86, 0x59, 0x4f, 0x5f, 0x59, 0x22,
0x3e, 0x46, 0x7b, 0x8a, 0xe5, 0x75, 0x05, 0xe2, 0x6e, 0x80, 0x6f, 0x89, 0x4f, 0xbb, 0x29, 0x96,
0x2d, 0x50, 0x74, 0x5d, 0x95, 0xd9, 0x58, 0x56, 0x91, 0x73, 0xe8, 0x61, 0x51, 0xc8, 0x4a, 0x51,
0x24, 0x71, 0x2d, 0x36, 0x1a, 0x29, 0x92, 0x95, 0x9e, 0xa3, 0x81, 0xf0, 0x66, 0x51, 0x45, 0x26,
0x2b, 0x69, 0x08, 0x41, 0x05, 0xc2, 0xaf, 0x5a, 0x20, 0x2b, 0x61, 0x1d, 0xbc, 0x24, 0xff, 0x86,
0x74, 0xee, 0x6b, 0xc0, 0x77, 0x8b, 0xed, 0x82, 0x5f, 0xc5, 0x82, 0x5e, 0x0b, 0xd0, 0xeb, 0xcb,
0x94, 0x37, 0xf6, 0xb0, 0x67, 0xaf, 0x23, 0xe5, 0x7a, 0xc2, 0x65, 0x22, 0x2b, 0x11, 0x31, 0xae,
0x7e, 0x52, 0x9e, 0x45, 0xaa, 0x8b, 0x4e, 0x56, 0x7e, 0xf6, 0x7f, 0x93, 0x22, 0x59, 0xc3, 0xa4,
0x7a, 0x23, 0xc0, 0x70, 0xf3, 0xae, 0x0b, 0xe6, 0x6a, 0x00, 0x0a, 0x55, 0x40, 0x3f, 0x45, 0x6f,
0xe1, 0xb7, 0x01, 0x7c, 0x0d, 0xd1, 0x0e, 0xed, 0xdf, 0x47, 0xf9, 0x4b, 0x99, 0xa4, 0xbd, 0x19,
0xfe, 0x0a, 0x80, 0x1f, 0xcc, 0xf8, 0xbe, 0xa3, 0xf0, 0xfc, 0x9b, 0x9f, 0x48, 0xaf, 0x6f, 0x75,
0xc1, 0x98, 0xbe, 0x00, 0xf0, 0x37, 0x9c, 0x1a, 0xdc, 0x0e, 0x8a, 0x71, 0x8d, 0x6a, 0xe3, 0x71,
0x00, 0xc5, 0x0e, 0x46, 0x4f, 0x2a, 0x59, 0x87, 0x91, 0xcc, 0x97, 0x7c, 0x0b, 0xe1, 0x1d, 0xe5,
0x4c, 0xbb, 0xc9, 0x3b, 0x28, 0xa0, 0x48, 0x92, 0xb5, 0x01, 0x3b, 0x4e, 0xe1, 0x16, 0x80, 0x1f,
0x08, 0xf9, 0x1d, 0x35, 0x8f, 0x9a, 0xe8, 0xe1, 0x39, 0xff, 0x63, 0x21, 0xa1, 0x4c, 0x93, 0xb0,
0x97, 0x85, 0x44, 0x93, 0x3f, 0xff, 0x09, 0x8a, 0x6d, 0x85, 0x75, 0x64, 0xb5, 0x88, 0x16, 0x80,
0x6f, 0x5b, 0xb8, 0xce, 0x6f, 0xa2, 0x3d, 0x1c, 0x4c, 0xc6, 0x33, 0x00, 0x3f, 0xdf, 0x03, 0x73,
0xfb, 0x38, 0x62, 0x63, 0xfa, 0x0c, 0xc0, 0xdf, 0x31, 0xbc, 0x2e, 0x45, 0x64, 0xfd, 0x41, 0xc0,
0xef, 0x9e, 0x3a, 0x4a, 0xf5, 0x06, 0x59, 0xff, 0x3b, 0x80, 0x3f, 0x63, 0xe1, 0x3a, 0x7f, 0x14,
0xf3, 0xfb, 0x5f, 0x8c, 0xf9, 0x3d, 0xf9, 0x11, 0xb7, 0x96, 0x7c, 0x6e, 0x37, 0x8a, 0x9f, 0xdf,
0x4e, 0xe1, 0xda, 0xef, 0x01, 0xfc, 0x48, 0xc0, 0xfb, 0x1f, 0x1c, 0xa5, 0x7a, 0x83, 0xac, 0x54,
0xbe, 0x72, 0x20, 0xe5, 0xfb, 0x3c, 0x90, 0x48, 0x29, 0x83, 0x82, 0xbb, 0xff, 0x4a, 0x17, 0xcf,
0x7b, 0x52, 0x52, 0x3d, 0x46, 0x70, 0x22, 0xc0, 0x9f, 0x3a, 0x4a, 0xf5, 0x06, 0x59, 0x7f, 0x47,
0xfc, 0x9c, 0xc9, 0xe0, 0x5e, 0xd7, 0xe1, 0x67, 0x60, 0x74, 0x3b, 0x7e, 0x25, 0xe0, 0xbd, 0x25,
0x78, 0xd9, 0x21, 0xa6, 0xf8, 0x39, 0xf1, 0x73, 0xc4, 0x51, 0xa8, 0x37, 0xc9, 0x4a, 0x69, 0x5c,
0x7f, 0x35, 0x83, 0x7b, 0xfd, 0x6d, 0xf1, 0x73, 0x47, 0x97, 0xcf, 0xef, 0x2a, 0x80, 0x5f, 0x0a,
0xf9, 0xdd, 0x37, 0x2d, 0x5c, 0xff, 0x7f, 0x38, 0x0a, 0xf5, 0x26, 0x59, 0x49, 0xbd, 0xfa, 0x76,
0x06, 0xf7, 0x79, 0x00, 0xcf, 0xa0, 0xf5, 0xaf, 0xba, 0x7c, 0x7e, 0xc3, 0xd4, 0x5d, 0x1b, 0x69,
0x80, 0x0d, 0x46, 0xf8, 0xad, 0x8e, 0x4a, 0xbd, 0x47, 0xd6, 0x8f, 0x19, 0xde, 0xeb, 0x0f, 0xe1,
0x39, 0xd4, 0x87, 0x7b, 0x70, 0xde, 0x7f, 0x02, 0x76, 0xd3, 0xc6, 0xc8, 0x30, 0xf8, 0xdc, 0x51,
0xaa, 0x77, 0xc8, 0x9a, 0x25, 0x7e, 0x55, 0xfc, 0xfc, 0xc7, 0x6e, 0x19, 0x24, 0xc6, 0x46, 0xe9,
0xa7, 0x43, 0x0f, 0x90, 0x35, 0xcb, 0xc8, 0xa1, 0xef, 0x0a, 0x55, 0xee, 0x9f, 0x76, 0xf1, 0xfc,
0x36, 0x23, 0xe6, 0xf8, 0x33, 0x8d, 0xeb, 0xac, 0x47, 0x67, 0xfe, 0xe5, 0x2a, 0xfc, 0x0e, 0x6d,
0x3f, 0xe3, 0xa8, 0xd4, 0x1d, 0x64, 0xfd, 0x08, 0xe0, 0xfb, 0x15, 0xff, 0x76, 0x16, 0x9e, 0x4b,
0xa0, 0x2f, 0x21, 0x09, 0xe9, 0x5a, 0x71, 0xb8, 0xab, 0xb9, 0x68, 0xcb, 0x86, 0x7f, 0x88, 0xf0,
0x5a, 0x4b, 0x3a, 0x75, 0x92, 0xe6, 0xe0, 0x35, 0x83, 0xe6, 0x98, 0x91, 0xae, 0xbd, 0xe0, 0xe8,
0x54, 0x7e, 0x6c, 0xd2, 0x94, 0x98, 0x2d, 0x24, 0xf7, 0xb5, 0x36, 0xe1, 0x65, 0x81, 0xc4, 0x21,
0xac, 0xdd, 0x43, 0x13, 0x6a, 0x3d, 0x72, 0xca, 0x80, 0x96, 0x05, 0x2d, 0x66, 0x15, 0x9d, 0x35,
0xac, 0xa8, 0x7c, 0xe6, 0x14, 0xfc, 0xea, 0x07, 0x0e, 0x25, 0xc7, 0x68, 0x81, 0xc9, 0x4a, 0xf7,
0x93, 0x63, 0x92, 0x1f, 0xa0, 0xd8, 0x2d, 0x31, 0x74, 0xc9, 0x7a, 0x2a, 0x21, 0x59, 0x29, 0xb9,
0x81, 0x27, 0x81, 0xf7, 0x89, 0xf7, 0x28, 0xe5, 0xee, 0x84, 0x5b, 0xea, 0x8e, 0xac, 0x69, 0x93,
0xf5, 0x46, 0xc0, 0xf3, 0xdd, 0xed, 0x22, 0xb2, 0x46, 0xd5, 0xa4, 0xd2, 0x25, 0xfd, 0x60, 0xc0,
0x7b, 0x2d, 0x74, 0x47, 0x96, 0x92, 0x3b, 0xb3, 0x96, 0x00, 0x63, 0x5d, 0xfe, 0xfd, 0x6a, 0x48,
0x3f, 0xe7, 0xd3, 0x91, 0xd5, 0x91, 0x35, 0x53, 0x74, 0x6b, 0x1e, 0xe6, 0x3f, 0x41, 0xb0, 0x91,
0x49, 0xd7, 0xcf, 0x5a, 0x45, 0x67, 0x9f, 0x16, 0x3a, 0xd7, 0xd7, 0xdd, 0xf2, 0x71, 0x64, 0x4d,
0x82, 0x1f, 0xd1, 0x90, 0x3c, 0x40, 0x67, 0xf3, 0xaa, 0x4f, 0x50, 0xbc, 0xca, 0xf2, 0x26, 0x08,
0xb3, 0xd2, 0x7e, 0x5d, 0xf3, 0x3a, 0x54, 0x6d, 0x9f, 0xe3, 0xb1, 0xa3, 0x50, 0x77, 0x92, 0x35,
0xcb, 0xa0, 0xef, 0xa7, 0x50, 0x2f, 0x65, 0x59, 0x13, 0x0b, 0x9a, 0x07, 0xf6, 0xff, 0xba, 0xf8,
0xd9, 0xdf, 0x45, 0x73, 0x9d, 0x74, 0xfc, 0x7f, 0x04, 0xe1, 0x6e, 0xae, 0x03, 0x8e, 0x4a, 0xdd,
0x01, 0x2a, 0xa5, 0xf2, 0x85, 0xc6, 0xf9, 0x27, 0x69, 0x27, 0xf1, 0x73, 0x9a, 0xe7, 0xa8, 0x59,
0x74, 0xb6, 0xdd, 0x68, 0xa1, 0x3b, 0x02, 0xfd, 0xa9, 0x18, 0xd7, 0xc5, 0x14, 0xce, 0xa6, 0x1b,
0xc5, 0x7b, 0x63, 0x6e, 0x99, 0x77, 0x0f, 0x9a, 0x50, 0x6f, 0x97, 0xb0, 0x0c, 0xcf, 0xaf, 0x97,
0x25, 0x59, 0x87, 0xc4, 0xdf, 0x1f, 0x94, 0x24, 0xee, 0x5a, 0x97, 0x8c, 0x7f, 0x03, 0x76, 0x62,
0x81, 0xc3, 0x1a, 0x33, 0xaf, 0x77, 0x4b, 0xbc, 0x37, 0xcf, 0xac, 0x0b, 0x16, 0xcf, 0x8a, 0xaa,
0x41, 0xfa, 0x94, 0x90, 0xfe, 0x13, 0xec, 0xbd, 0xb7, 0x06, 0xe7, 0xba, 0xa2, 0xe2, 0x1c, 0xec,
0x54, 0xe1, 0x00, 0x3a, 0x1b, 0x28, 0x03, 0xc0, 0xef, 0x39, 0x2a, 0xf5, 0xa6, 0x64, 0x05, 0x92,
0xbb, 0x02, 0x28, 0x32, 0x49, 0x27, 0x75, 0x6b, 0x05, 0xed, 0x56, 0xcd, 0x21, 0x74, 0x8f, 0x4b,
0xe2, 0x73, 0x4b, 0xdf, 0x85, 0xb7, 0xcf, 0x20, 0xbc, 0x43, 0xce, 0xe5, 0x33, 0x9d, 0x64, 0xcd,
0x1f, 0xc7, 0x12, 0x7c, 0xf6, 0x8f, 0x0d, 0x3e, 0xf3, 0x5c, 0x1a, 0x0f, 0x92, 0xb6, 0x5f, 0x76,
0xc1, 0x3c, 0x53, 0x21, 0x6c, 0x5e, 0x3c, 0xed, 0xbd, 0x01, 0x81, 0x1f, 0xa3, 0xb3, 0xc2, 0xc6,
0xaf, 0xc2, 0xb9, 0x00, 0x7b, 0x5a, 0xb2, 0x06, 0xed, 0xe0, 0x26, 0xe7, 0x2b, 0x1d, 0xc9, 0x4a,
0x6d, 0x21, 0x2b, 0x12, 0x81, 0xbb, 0x45, 0xba, 0xb6, 0xe0, 0x75, 0x35, 0x93, 0x35, 0x87, 0xd3,
0x1a, 0xd7, 0xd8, 0x13, 0x72, 0x46, 0x6d, 0x21, 0xbf, 0x3e, 0xb4, 0x0e, 0x39, 0x93, 0xf5, 0x2d,
0x92, 0x1b, 0x44, 0x5a, 0xe8, 0xf4, 0x9d, 0xaa, 0x7c, 0x66, 0x91, 0xfd, 0x7f, 0x1b, 0x0a, 0xd0,
0x86, 0xcf, 0xe2, 0x1c, 0x54, 0x03, 0xde, 0xd3, 0x69, 0x30, 0x4c, 0xfd, 0x82, 0xae, 0x07, 0x8c,
0xdb, 0x13, 0xb7, 0xcc, 0x7b, 0x93, 0xac, 0x7b, 0x2d, 0x48, 0xb4, 0x05, 0xe8, 0x47, 0xd6, 0xac,
0xa0, 0xd3, 0x12, 0xdd, 0x82, 0xd7, 0x04, 0xb7, 0xec, 0x78, 0x19, 0x30, 0x1e, 0x26, 0x56, 0x62,
0xd2, 0x36, 0xb8, 0x0f, 0x7a, 0x11, 0x2e, 0xe4, 0xb0, 0x67, 0xc9, 0xba, 0x4e, 0x4c, 0x7e, 0x92,
0xf6, 0xf6, 0xf3, 0x86, 0x64, 0x95, 0x8d, 0x25, 0x4f, 0xd1, 0x1d, 0x41, 0xfd, 0x41, 0x64, 0x3d,
0x0e, 0xbf, 0x2b, 0x9c, 0x2a, 0xa8, 0x83, 0x1c, 0x77, 0x73, 0x6d, 0x10, 0xef, 0xb9, 0xe0, 0x88,
0x1e, 0x24, 0x2b, 0x49, 0xb4, 0x63, 0x19, 0x93, 0x75, 0x43, 0x80, 0x84, 0x38, 0x02, 0x3b, 0x81,
0x1a, 0x45, 0x24, 0x2b, 0x59, 0xcd, 0x75, 0xcb, 0xbf, 0x56, 0x03, 0x36, 0xb0, 0x16, 0x3c, 0xab,
0xb3, 0x43, 0x0f, 0x92, 0xf5, 0x5e, 0x42, 0x89, 0x66, 0x42, 0x56, 0x5a, 0x74, 0x2d, 0x78, 0x06,
0x27, 0xfe, 0xde, 0x7c, 0x17, 0x90, 0x35, 0xc8, 0xc5, 0x52, 0x87, 0x7e, 0x95, 0x07, 0x8a, 0x4a,
0x3b, 0x2b, 0x69, 0x25, 0x4d, 0xb7, 0xd4, 0xd3, 0x43, 0x91, 0x4d, 0xee, 0x0f, 0xe1, 0x05, 0xd3,
0x0f, 0x66, 0xfc, 0xfd, 0x5e, 0x8b, 0x9f, 0x3c, 0x84, 0x6e, 0x19, 0xc0, 0x0f, 0x95, 0x7c, 0xae,
0x7f, 0x2b, 0x64, 0x3c, 0xee, 0x01, 0xf8, 0x61, 0xcd, 0x6b, 0x2d, 0xc2, 0x6f, 0x53, 0x48, 0xf3,
0x73, 0x59, 0xcc, 0xd7, 0x90, 0xa3, 0x55, 0xef, 0x49, 0x56, 0x92, 0x68, 0xa6, 0xa5, 0x42, 0xa7,
0x0c, 0x8d, 0x1e, 0xc3, 0xf0, 0x8c, 0x2e, 0xdc, 0x02, 0x4c, 0x31, 0xb0, 0xe3, 0x25, 0x9f, 0x87,
0xa0, 0xf1, 0x20, 0x17, 0xce, 0x55, 0xcd, 0x6b, 0xad, 0x93, 0x8e, 0x2a, 0xaa, 0x9d, 0xe5, 0x1d,
0xba, 0x94, 0xac, 0x2b, 0x48, 0x16, 0x9f, 0xab, 0x6b, 0x3c, 0x89, 0xfb, 0x0e, 0xf5, 0x2e, 0x24,
0x2b, 0xc4, 0x18, 0xaf, 0x19, 0x5e, 0xef, 0x91, 0x24, 0x71, 0x9d, 0x55, 0xb8, 0x47, 0xc9, 0x3a,
0x97, 0x70, 0xf2, 0x6d, 0x16, 0x3e, 0xdb, 0x85, 0xf2, 0x3b, 0xff, 0xc3, 0xc6, 0xf2, 0x88, 0xe1,
0x38, 0xdf, 0x45, 0x67, 0xb9, 0x97, 0x16, 0xbc, 0x22, 0x79, 0x0e, 0x3d, 0x46, 0x56, 0x9a, 0xfc,
0x9b, 0x86, 0x9f, 0xad, 0xc1, 0x0f, 0xb5, 0x4b, 0x0a, 0x52, 0x17, 0x4f, 0x75, 0x21, 0x59, 0x07,
0x0d, 0xc9, 0x4a, 0x9f, 0x5b, 0xea, 0x32, 0x0d, 0xc4, 0x91, 0xd5, 0xf0, 0xb3, 0xcb, 0xe2, 0xf3,
0x95, 0x1c, 0xc8, 0x7a, 0x17, 0xed, 0xe1, 0x78, 0x41, 0x2e, 0x8b, 0x6e, 0x20, 0x2b, 0x55, 0x2a,
0xbc, 0x6e, 0x70, 0xcd, 0xb3, 0xe2, 0xb3, 0xc7, 0x25, 0x0d, 0x64, 0xc0, 0x2d, 0xfb, 0xde, 0x23,
0xeb, 0x24, 0x3a, 0x9d, 0xf0, 0xaa, 0x78, 0x97, 0x50, 0x8d, 0xbe, 0x89, 0x76, 0xff, 0x21, 0x95,
0xe4, 0x9c, 0xe9, 0x32, 0xb2, 0xd2, 0x1c, 0xdd, 0x4d, 0x30, 0xbf, 0x74, 0x44, 0x20, 0xdf, 0xed,
0x0d, 0xb7, 0xec, 0x7b, 0x8f, 0xac, 0x10, 0x6a, 0x95, 0x89, 0x6a, 0xb5, 0xde, 0x82, 0xc1, 0xe3,
0xb5, 0x24, 0x4d, 0x17, 0x50, 0x5e, 0x23, 0x4a, 0xd4, 0x73, 0x27, 0xf1, 0x93, 0x6e, 0x93, 0x36,
0xb5, 0x25, 0x74, 0x47, 0x20, 0x89, 0x23, 0xab, 0x01, 0xf6, 0x19, 0x9e, 0x5d, 0x89, 0xac, 0x49,
0x6a, 0x29, 0xed, 0x47, 0x67, 0x28, 0x5d, 0x0b, 0xc0, 0xd1, 0x2e, 0x23, 0xeb, 0x61, 0x98, 0x5b,
0xcf, 0xfb, 0x00, 0x6c, 0x61, 0xaa, 0x2f, 0x9d, 0x65, 0xb7, 0xb9, 0xa5, 0xdf, 0x7b, 0x64, 0x05,
0xbc, 0x1a, 0x42, 0xba, 0x7e, 0x57, 0x9e, 0x25, 0x92, 0x84, 0x5c, 0x24, 0x29, 0xc8, 0x17, 0xb9,
0x56, 0xd2, 0xb3, 0x6b, 0x14, 0x59, 0xc9, 0x80, 0xf6, 0xd0, 0xd2, 0xbd, 0x4c, 0xb5, 0x21, 0x87,
0x2e, 0x20, 0x2b, 0x2d, 0x36, 0xdd, 0xb0, 0xbf, 0x43, 0xec, 0xdc, 0x9b, 0x04, 0x2f, 0xc5, 0x35,
0x26, 0xe1, 0x05, 0x4c, 0x04, 0xb5, 0xdd, 0x28, 0x33, 0x59, 0x21, 0xc6, 0xd6, 0x56, 0xd5, 0x87,
0x6b, 0xe8, 0x8e, 0x40, 0x12, 0x47, 0xd6, 0x84, 0xd2, 0x55, 0xb7, 0xd3, 0xf6, 0x03, 0x0b, 0x64,
0xed, 0x87, 0x9f, 0x13, 0xda, 0xcf, 0xa4, 0xed, 0xfa, 0x2e, 0x22, 0xeb, 0x21, 0xcb, 0xe7, 0xf1,
0x26, 0x5c, 0xc3, 0xaa, 0x9e, 0x25, 0x2b, 0x5d, 0xab, 0x0e, 0xbd, 0x0a, 0xfa, 0xcf, 0x2d, 0xa9,
0x64, 0x24, 0x51, 0x5f, 0x94, 0x74, 0x1e, 0x5a, 0x96, 0xfe, 0x46, 0x15, 0x2b, 0x70, 0x6e, 0x9c,
0x9e, 0x26, 0x2b, 0xc5, 0xfc, 0xae, 0xe4, 0x40, 0x56, 0xc0, 0xcf, 0x01, 0xdd, 0xd1, 0xc5, 0x64,
0x7d, 0x64, 0xe9, 0x7e, 0x94, 0xfb, 0x7a, 0xc6, 0x51, 0xa0, 0x37, 0xc9, 0x0a, 0x78, 0x49, 0xe9,
0x3a, 0x16, 0xd9, 0x67, 0xb0, 0x6b, 0x10, 0x22, 0xff, 0xed, 0xb6, 0x2e, 0x24, 0xeb, 0x0a, 0xec,
0x1a, 0x86, 0xea, 0xb0, 0x53, 0xb3, 0xd8, 0x21, 0x23, 0xa4, 0x61, 0x19, 0xbc, 0xa9, 0xb1, 0x6b,
0x4f, 0xc4, 0x2c, 0xd4, 0x79, 0xe8, 0x27, 0xba, 0xbf, 0x85, 0x6f, 0x70, 0xea, 0x26, 0xb2, 0x52,
0xf3, 0x6b, 0x5b, 0x75, 0xa7, 0x4e, 0xc0, 0x19, 0x9a, 0x4a, 0x85, 0x93, 0x48, 0x27, 0x90, 0xe0,
0x1e, 0xd4, 0x8d, 0x3c, 0x51, 0xf7, 0x37, 0x75, 0xc5, 0x34, 0x50, 0xae, 0x9a, 0xb9, 0xaa, 0x73,
0xd0, 0x84, 0x5d, 0x4b, 0x77, 0x0b, 0xc0, 0x05, 0x47, 0x83, 0xde, 0x26, 0x2b, 0x2d, 0xac, 0x66,
0xc2, 0x85, 0x6a, 0x6a, 0x05, 0x1d, 0x17, 0x9f, 0xab, 0x75, 0x19, 0x59, 0xcf, 0x5b, 0x9e, 0xaf,
0x65, 0x38, 0x9f, 0x6b, 0x62, 0x7c, 0xda, 0x45, 0xdf, 0xa1, 0x89, 0xf8, 0xe8, 0x9b, 0x09, 0xcb,
0xf7, 0xfe, 0x7d, 0x00, 0xbf, 0x00, 0xaf, 0x35, 0x45, 0x0b, 0x9e, 0xf1, 0xab, 0x1b, 0xf0, 0x1f,
0x19, 0x69, 0x6d, 0xe0, 0x77, 0x11, 0xde, 0x81, 0xce, 0xa1, 0x87, 0x24, 0x2b, 0xe0, 0x45, 0x2a,
0xc5, 0xa5, 0x66, 0x35, 0xd1, 0x9e, 0xca, 0xc5, 0xb1, 0x33, 0xe1, 0x39, 0x6d, 0x58, 0x5c, 0xbf,
0xe8, 0x2a, 0xb1, 0xce, 0x1c, 0x2c, 0xc3, 0xae, 0x51, 0xce, 0xa4, 0x8e, 0xb3, 0x43, 0x17, 0x92,
0x15, 0xf0, 0x6b, 0x0d, 0x87, 0xa5, 0x79, 0x55, 0x23, 0xc8, 0x4a, 0x8b, 0xe9, 0x60, 0x82, 0xfb,
0x4f, 0x94, 0x40, 0x25, 0xd6, 0x99, 0x83, 0x31, 0xf1, 0xf7, 0xb6, 0x3a, 0xc2, 0xd7, 0xe0, 0x7a,
0xe2, 0x38, 0xb2, 0x32, 0x3c, 0x45, 0x78, 0xbf, 0x50, 0x15, 0xb2, 0x9e, 0x4d, 0x78, 0x7f, 0xaa,
0x4b, 0x44, 0x61, 0x91, 0x63, 0x25, 0x26, 0x2b, 0xfd, 0xfd, 0x33, 0x4b, 0xf7, 0xa6, 0x90, 0xcf,
0x0d, 0x8e, 0x0e, 0x8e, 0xac, 0x84, 0x7a, 0xc8, 0xbd, 0xe2, 0xc8, 0xfa, 0xc1, 0xd2, 0xce, 0x3f,
0x0d, 0xaf, 0x95, 0x04, 0x91, 0xf6, 0x16, 0x8a, 0x93, 0x2a, 0xa6, 0xab, 0x8a, 0x3e, 0xb1, 0x38,
0x6f, 0x94, 0xe0, 0xbe, 0xe0, 0xe8, 0xe0, 0xc8, 0x4a, 0x18, 0x45, 0x67, 0xcf, 0x1a, 0x15, 0xb2,
0xde, 0xb7, 0xac, 0xa6, 0xf5, 0xc3, 0x6b, 0xc5, 0xd1, 0x42, 0x71, 0x32, 0x74, 0x1a, 0x31, 0x63,
0x10, 0x46, 0xf0, 0xe3, 0x96, 0xee, 0x7f, 0x1b, 0xae, 0x89, 0x95, 0x23, 0xab, 0x04, 0x2a, 0x35,
0xb2, 0xde, 0x12, 0x59, 0x93, 0x24, 0x9c, 0x53, 0x02, 0x40, 0xb3, 0x00, 0x2a, 0xa0, 0x49, 0x82,
0x79, 0x5d, 0x8c, 0x8b, 0x8d, 0xf8, 0x5e, 0x92, 0xae, 0xcf, 0x1d, 0x25, 0x8a, 0x8b, 0x2a, 0xb2,
0xaf, 0xae, 0xd0, 0x42, 0x7b, 0x65, 0xc3, 0x2a, 0x80, 0x8f, 0x11, 0x7f, 0x4f, 0xd5, 0x0e, 0x2a,
0x11, 0xd7, 0x33, 0x75, 0xec, 0x0f, 0xc0, 0x2f, 0x7d, 0x52, 0xcd, 0x71, 0x1e, 0xc6, 0x0c, 0xe6,
0x81, 0x3e, 0xf3, 0x95, 0xa5, 0x67, 0xa8, 0xc1, 0x95, 0x2b, 0x2d, 0x34, 0x9a, 0x39, 0x4c, 0x50,
0x0d, 0xed, 0xc6, 0x91, 0x3d, 0x0a, 0xcf, 0x10, 0xd5, 0x5f, 0x67, 0xcd, 0x82, 0x9a, 0x7c, 0x10,
0xf9, 0x5a, 0x8c, 0xc7, 0x0c, 0xe7, 0x81, 0x42, 0x3b, 0x6d, 0x48, 0x57, 0x4a, 0xc4, 0x98, 0x75,
0xb4, 0x70, 0x64, 0x8d, 0x3b, 0xcb, 0x46, 0x61, 0x0d, 0x9d, 0x2d, 0x1f, 0xe5, 0x45, 0x36, 0x97,
0xf0, 0x39, 0x26, 0x19, 0x61, 0xd7, 0xe7, 0x44, 0xd6, 0xc1, 0x9c, 0xe7, 0xb0, 0x48, 0xe7, 0x78,
0x87, 0x80, 0x89, 0xfe, 0xb2, 0x04, 0x64, 0x5d, 0x89, 0x20, 0x2b, 0xe0, 0x27, 0x9c, 0xf7, 0x59,
0x22, 0x6c, 0x23, 0xa7, 0x31, 0x30, 0xa9, 0x3c, 0x78, 0xd0, 0x22, 0x59, 0xcf, 0x3a, 0x55, 0xd8,
0x91, 0x35, 0x6d, 0xb2, 0x52, 0x2c, 0xb0, 0x8d, 0xd6, 0x86, 0x53, 0x48, 0xd6, 0x7f, 0x36, 0xc9,
0x5c, 0x2c, 0xe7, 0x3c, 0x17, 0x63, 0x70, 0x2d, 0x22, 0x1d, 0x59, 0x13, 0x92, 0x75, 0x58, 0xe1,
0x6f, 0x96, 0x4a, 0x2e, 0x15, 0x9a, 0xb0, 0x1b, 0x99, 0x64, 0x82, 0x0a, 0xfc, 0x12, 0x39, 0x0e,
0x8e, 0xac, 0x1d, 0x50, 0x75, 0xf0, 0xab, 0xfe, 0xcd, 0x74, 0x49, 0xe7, 0x62, 0x56, 0x3c, 0xff,
0xae, 0x9c, 0x9f, 0xe3, 0x94, 0x53, 0x85, 0x1d, 0x59, 0xc3, 0x10, 0xe7, 0x67, 0xe5, 0x44, 0x8c,
0x0b, 0xe8, 0xaf, 0x43, 0x3f, 0xb8, 0xa0, 0x48, 0x68, 0xc5, 0xa8, 0xfb, 0x59, 0x80, 0xac, 0xf3,
0x5b, 0x1c, 0x3d, 0x8a, 0x83, 0x01, 0x31, 0x29, 0xd7, 0x0a, 0xb0, 0x40, 0x55, 0x52, 0xbe, 0x9a,
0x88, 0xaf, 0x9d, 0x3b, 0x87, 0xf2, 0x55, 0x36, 0xe4, 0x98, 0x2f, 0x88, 0x54, 0x6b, 0xc1, 0x8b,
0xe7, 0x76, 0x28, 0x08, 0x46, 0x0b, 0xb0, 0x30, 0x74, 0x1a, 0x2b, 0x37, 0x14, 0xc8, 0x4a, 0x1b,
0x50, 0x99, 0xe3, 0x5c, 0x8b, 0xd0, 0x8f, 0xc6, 0x76, 0x6d, 0x2c, 0x87, 0x84, 0x38, 0x59, 0x00,
0xb2, 0x3e, 0xb7, 0x4c, 0x56, 0x00, 0xf8, 0x02, 0xc9, 0x3a, 0xb3, 0xe7, 0x8d, 0x06, 0x80, 0xf7,
0x39, 0x3f, 0x03, 0xd5, 0x7b, 0xda, 0xe7, 0x68, 0x52, 0x0c, 0x54, 0x0b, 0x70, 0x3e, 0x6a, 0xc1,
0xab, 0xa8, 0xaf, 0xba, 0x88, 0x55, 0x22, 0x8c, 0xfa, 0xc5, 0x75, 0xbf, 0x2c, 0xe9, 0xbc, 0xac,
0x59, 0xd8, 0x44, 0x2f, 0x88, 0x6b, 0x8c, 0x26, 0xb8, 0x46, 0x1d, 0xf9, 0xbb, 0x92, 0x1c, 0x04,
0x3e, 0x22, 0x5f, 0x63, 0x0c, 0x95, 0x2d, 0x55, 0x35, 0x64, 0xec, 0xd7, 0x90, 0x98, 0x36, 0x53,
0xc8, 0xb2, 0x06, 0xd5, 0xf4, 0x4d, 0x9a, 0x73, 0x5b, 0x4f, 0xa8, 0xca, 0x9e, 0x83, 0xb3, 0x0a,
0x17, 0xea, 0x6c, 0x74, 0x22, 0xe7, 0x73, 0x91, 0xce, 0x62, 0xa0, 0x33, 0xf6, 0x61, 0x8d, 0xef,
0xb7, 0xb3, 0x84, 0xf3, 0x42, 0x19, 0x30, 0xb7, 0x12, 0x5e, 0x87, 0x02, 0x1c, 0xde, 0x1a, 0x7e,
0x7e, 0xd8, 0x91, 0xb5, 0x18, 0x98, 0x2d, 0xc0, 0x44, 0xa8, 0x58, 0x77, 0x83, 0x08, 0x78, 0x44,
0x43, 0x6d, 0x36, 0xad, 0xdc, 0xf7, 0x0e, 0xf9, 0x06, 0x27, 0xd8, 0x8a, 0xf7, 0xdd, 0x21, 0xae,
0xf3, 0xc6, 0xe0, 0xb3, 0x64, 0xac, 0xbb, 0xea, 0xe8, 0x92, 0x2f, 0x96, 0x90, 0x6f, 0x09, 0x4a,
0x52, 0x81, 0x77, 0x18, 0x90, 0x55, 0xf5, 0x1c, 0xb5, 0x21, 0x81, 0xf6, 0xd0, 0xca, 0x79, 0x33,
0xa3, 0x56, 0x20, 0x83, 0x16, 0xae, 0xb5, 0x2d, 0x81, 0x84, 0x6d, 0xa2, 0xbc, 0xfd, 0x83, 0xba,
0x4a, 0x05, 0xbe, 0x94, 0xb3, 0xe4, 0x30, 0xd9, 0x2c, 0xee, 0x22, 0x3a, 0xb7, 0x55, 0x46, 0xcd,
0x70, 0xd1, 0x93, 0x54, 0x79, 0x96, 0xd3, 0xf8, 0x50, 0xb3, 0xe9, 0x19, 0x4b, 0xd7, 0x23, 0x09,
0xfb, 0x44, 0xf3, 0x73, 0xf7, 0x9d, 0x2a, 0x9c, 0x2f, 0x8e, 0x22, 0xdf, 0xf6, 0x12, 0xa4, 0x82,
0x9b, 0xb4, 0x6d, 0xa0, 0x73, 0xab, 0x6a, 0xfe, 0x26, 0x19, 0x6b, 0x6e, 0x1a, 0xdc, 0x8b, 0x0a,
0x8c, 0x3f, 0xca, 0x71, 0x43, 0x7d, 0x62, 0xf1, 0x7a, 0x97, 0xa0, 0x6f, 0x21, 0x3e, 0xee, 0xc8,
0x9a, 0x2f, 0x6e, 0xe4, 0x38, 0x01, 0x54, 0xc7, 0xb7, 0x9a, 0x70, 0x11, 0xeb, 0x24, 0x5b, 0x3f,
0x4d, 0xf0, 0x7d, 0x4f, 0xe5, 0xb8, 0xb1, 0x3d, 0x81, 0xdd, 0xc0, 0x04, 0x5e, 0x15, 0x63, 0x5a,
0x93, 0xac, 0xae, 0xf2, 0x61, 0x0e, 0xe8, 0x4f, 0x60, 0x70, 0xb0, 0x81, 0xa7, 0x48, 0x1e, 0x6c,
0x6f, 0x12, 0x0a, 0xa7, 0xd3, 0xd9, 0x2e, 0x48, 0x95, 0xce, 0x23, 0x9a, 0xe7, 0x72, 0x0a, 0x9b,
0x2a, 0x6d, 0x96, 0xaa, 0x15, 0x31, 0xc6, 0x2d, 0xab, 0xe3, 0x0e, 0x1a, 0xb8, 0x82, 0xfc, 0xaa,
0xd8, 0x0d, 0x59, 0x52, 0x2b, 0x4d, 0x2a, 0xd2, 0xaf, 0x24, 0x20, 0xdc, 0x08, 0xf2, 0x8b, 0x95,
0xb5, 0x59, 0xc1, 0x90, 0x40, 0x81, 0xfa, 0x87, 0x34, 0x9e, 0xc1, 0x91, 0x35, 0xa7, 0xc9, 0xcf,
0xa3, 0x3d, 0xfd, 0x18, 0xfc, 0xce, 0x6e, 0x95, 0x84, 0xd7, 0xea, 0x33, 0x90, 0x38, 0x64, 0xb0,
0x39, 0x65, 0x78, 0x4f, 0x8a, 0x08, 0xca, 0xba, 0x51, 0xf3, 0x1a, 0xd2, 0xc9, 0x2d, 0xbd, 0x25,
0xbe, 0xcf, 0x49, 0xc5, 0x35, 0x73, 0xc2, 0x51, 0x27, 0x5b, 0x7c, 0x91, 0xe3, 0x59, 0x95, 0xaa,
0x28, 0xda, 0xaa, 0xc0, 0x60, 0x52, 0xd1, 0x70, 0x05, 0xc9, 0xdc, 0x21, 0x35, 0x64, 0x5f, 0x50,
0xed, 0x70, 0x8a, 0x73, 0x76, 0x5f, 0x71, 0x03, 0x5a, 0x85, 0x6b, 0xaf, 0x91, 0x8b, 0x54, 0x5d,
0xc9, 0xe1, 0xbe, 0x0b, 0x29, 0xa8, 0x52, 0x0d, 0x03, 0xe2, 0x90, 0x25, 0xf9, 0xa6, 0xe1, 0x3d,
0x4f, 0x68, 0x48, 0x23, 0xdb, 0x36, 0x86, 0xcb, 0x29, 0x5d, 0x5f, 0xa5, 0xfc, 0xe8, 0x13, 0x47,
0xd6, 0x6c, 0x71, 0x06, 0xd9, 0x5b, 0x35, 0x79, 0x7f, 0x99, 0x3d, 0x96, 0xaf, 0x7d, 0xc0, 0x50,
0xe2, 0x5c, 0x43, 0xb2, 0xd2, 0x9d, 0x54, 0x3a, 0x66, 0x24, 0xc3, 0x71, 0x4c, 0x12, 0x89, 0xa5,
0xba, 0x19, 0x34, 0xc5, 0xbf, 0x83, 0x60, 0xb3, 0x20, 0x9b, 0x43, 0x0c, 0xc8, 0xc1, 0x9f, 0x95,
0x05, 0xb8, 0x0f, 0x7e, 0x95, 0xbc, 0x7a, 0xca, 0x1b, 0x81, 0x89, 0x5a, 0x9d, 0xf4, 0xdc, 0xde,
0x42, 0xb6, 0x29, 0x6c, 0x47, 0xc4, 0x3d, 0xb7, 0xa6, 0x74, 0x7d, 0x8a, 0x01, 0x7e, 0x18, 0xf3,
0x9d, 0x5d, 0x6b, 0x8d, 0x0c, 0x40, 0x09, 0xde, 0x59, 0x74, 0x4e, 0x9b, 0x44, 0x7b, 0x85, 0xfb,
0xfe, 0x94, 0xd5, 0x7a, 0x13, 0x4b, 0xe9, 0xc5, 0x84, 0x92, 0xe2, 0x62, 0xc6, 0x5a, 0x0a, 0x59,
0xa3, 0x1f, 0xa5, 0x78, 0x8f, 0xab, 0xe2, 0x1e, 0x61, 0x4d, 0xad, 0x9b, 0xc8, 0xcf, 0xdd, 0xd7,
0x53, 0x48, 0x9a, 0x2a, 0xa5, 0x2a, 0x4d, 0xa9, 0xb9, 0x51, 0x03, 0xd9, 0x24, 0x7e, 0xdf, 0x37,
0xfc, 0x5e, 0x24, 0x49, 0x2e, 0x25, 0xf8, 0xae, 0x49, 0xb2, 0x59, 0x4c, 0xf0, 0x34, 0xe5, 0x39,
0xa4, 0xaa, 0x86, 0x61, 0x71, 0xd7, 0x6b, 0x39, 0xd9, 0x3b, 0x7a, 0x0a, 0xb4, 0x2b, 0xef, 0x4d,
0xe9, 0xfa, 0x13, 0xf0, 0x9d, 0xf7, 0x49, 0x8c, 0x37, 0x26, 0x38, 0x0f, 0xf3, 0xd2, 0x9d, 0xf5,
0x84, 0x2a, 0x3a, 0xb9, 0x72, 0xfa, 0x33, 0xfa, 0xae, 0x3b, 0x32, 0x38, 0x37, 0x92, 0x01, 0x2d,
0x28, 0x69, 0xff, 0xba, 0x3b, 0xb7, 0xa6, 0x8f, 0x34, 0x1b, 0x4f, 0x5d, 0x64, 0x24, 0x5d, 0x46,
0x3e, 0x25, 0x40, 0x4d, 0xcb, 0xb7, 0x50, 0x37, 0xf6, 0x2b, 0x09, 0xef, 0xbd, 0x98, 0xf1, 0x77,
0x4d, 0xdb, 0x47, 0xfe, 0x40, 0xdc, 0xe7, 0x5c, 0x88, 0xdd, 0xc3, 0x21, 0x25, 0x50, 0xc0, 0xfc,
0xe6, 0x14, 0xa4, 0xf5, 0x47, 0x71, 0xed, 0xfb, 0x19, 0x4a, 0x97, 0xb0, 0xb3, 0xd4, 0x75, 0xc3,
0xcf, 0x7e, 0x89, 0x64, 0xb5, 0x9a, 0xde, 0x65, 0xbc, 0x80, 0x2f, 0x65, 0x74, 0x3f, 0x72, 0xb5,
0xf1, 0x88, 0x2d, 0xb2, 0x1a, 0x9f, 0x76, 0xb4, 0x4a, 0x07, 0x6f, 0x53, 0x38, 0xe7, 0xbc, 0x84,
0x6f, 0xea, 0xdf, 0x58, 0x80, 0xef, 0xf8, 0x2a, 0xe1, 0x77, 0x6c, 0xc0, 0x3c, 0x03, 0x88, 0xa4,
0x5d, 0x56, 0xad, 0x26, 0x2a, 0xe2, 0x7e, 0x77, 0x32, 0xb8, 0x57, 0x50, 0x75, 0xc3, 0x3a, 0xf2,
0xaf, 0xd9, 0xd5, 0x95, 0x18, 0x86, 0xdd, 0xa2, 0x61, 0x47, 0xe0, 0x5b, 0x79, 0xaf, 0xc3, 0x4e,
0x8b, 0x41, 0x1b, 0xa0, 0x40, 0x07, 0xd3, 0xf8, 0xd9, 0x7e, 0x46, 0x58, 0x93, 0xe2, 0x62, 0xcb,
0x19, 0x4b, 0xd7, 0x95, 0x8c, 0xee, 0xb7, 0x21, 0xe0, 0x3e, 0xe4, 0x6f, 0xdd, 0xe9, 0xe8, 0x65,
0x17, 0x8b, 0xb0, 0x53, 0x69, 0x60, 0x86, 0x91, 0x74, 0x15, 0xc5, 0xf4, 0xb5, 0x35, 0x12, 0x9e,
0xe5, 0x06, 0x18, 0x61, 0x75, 0xc7, 0x6b, 0x77, 0x4a, 0x47, 0x8d, 0x30, 0x6c, 0x14, 0xf7, 0xdb,
0x9f, 0xd1, 0x19, 0xb9, 0x11, 0xf0, 0xde, 0x17, 0x8e, 0x5e, 0xf6, 0x07, 0x3a, 0x49, 0x96, 0xc8,
0x30, 0xfc, 0x68, 0x9d, 0x15, 0x14, 0xbb, 0xc2, 0xfd, 0x57, 0x96, 0xa4, 0x4d, 0xc3, 0xf0, 0x3a,
0xcd, 0x8c, 0xd5, 0xc3, 0xac, 0xba, 0xcd, 0x05, 0x95, 0xb6, 0x59, 0x84, 0x2b, 0xfe, 0x9d, 0xca,
0xb9, 0xd2, 0xb4, 0x66, 0x6c, 0x85, 0x49, 0xd3, 0xa3, 0x25, 0xf8, 0xbe, 0xbb, 0x2c, 0x91, 0x95,
0x52, 0xf8, 0x74, 0xa5, 0x34, 0xb9, 0x3c, 0x86, 0x32, 0xfa, 0xbe, 0x14, 0x80, 0x5f, 0x49, 0xf9,
0x3e, 0xcb, 0x01, 0x92, 0x75, 0x2f, 0x9c, 0x55, 0xd8, 0xfa, 0x8e, 0x68, 0x62, 0xb5, 0xeb, 0x87,
0x1f, 0x3b, 0x5b, 0xa6, 0x8a, 0xf6, 0x13, 0xd0, 0xab, 0x7a, 0x18, 0x05, 0xd2, 0x26, 0x26, 0x0c,
0xc6, 0x3c, 0xab, 0x2a, 0x80, 0xc3, 0x19, 0x6f, 0x0e, 0x41, 0xdf, 0xf5, 0xbc, 0xa3, 0x59, 0x72,
0x1c, 0x30, 0x5c, 0x6c, 0x5b, 0x19, 0x49, 0xcb, 0xd8, 0x90, 0x28, 0x49, 0xae, 0x6a, 0x90, 0x9a,
0xb9, 0x5d, 0xf3, 0x33, 0x2f, 0x32, 0x96, 0x38, 0x59, 0xab, 0xde, 0x1c, 0x37, 0x9d, 0x74, 0xb5,
0x03, 0xdd, 0x33, 0xc5, 0x10, 0xfc, 0x62, 0xdb, 0xcb, 0x28, 0x6f, 0x7f, 0x98, 0x3a, 0xb2, 0xcf,
0x35, 0x0d, 0xda, 0x30, 0xb2, 0xc2, 0x4a, 0x8e, 0x84, 0x21, 0x17, 0xd2, 0x41, 0x47, 0x37, 0x73,
0x50, 0x26, 0x8a, 0x6a, 0xc8, 0x5f, 0x3f, 0x3b, 0x9b, 0xde, 0x28, 0xd1, 0x42, 0x0d, 0xc2, 0x8d,
0x02, 0x18, 0x3e, 0x28, 0x48, 0x24, 0x0b, 0x8c, 0x67, 0x74, 0x6e, 0x8d, 0x92, 0xec, 0x35, 0x47,
0x39, 0x73, 0x6c, 0xd1, 0x20, 0xcd, 0x26, 0x46, 0xd4, 0x31, 0x4b, 0x0b, 0x35, 0x4f, 0x6c, 0x47,
0x3e, 0x65, 0x57, 0x38, 0xaa, 0xc8, 0x36, 0x49, 0x3b, 0xcf, 0x32, 0xa9, 0x33, 0x70, 0x0d, 0x97,
0x13, 0xe1, 0xbd, 0x22, 0x69, 0x28, 0x11, 0xbd, 0x0e, 0x7b, 0x69, 0x73, 0x45, 0xf0, 0xbf, 0xd5,
0x91, 0x4e, 0xbd, 0x22, 0xdd, 0x73, 0x7f, 0x56, 0x0b, 0xb8, 0x91, 0x23, 0x59, 0x69, 0xce, 0xef,
0x3a, 0xda, 0x99, 0x2f, 0xd6, 0x38, 0xb7, 0x03, 0x05, 0xdf, 0x2f, 0x59, 0x56, 0xa1, 0xea, 0x50,
0x6f, 0xdd, 0x98, 0x16, 0xde, 0xe4, 0x2c, 0xe1, 0x29, 0x75, 0x2e, 0xab, 0xbc, 0xcf, 0xb7, 0x39,
0x7f, 0xdf, 0x79, 0x38, 0x9f, 0x6b, 0x2a, 0x64, 0x1d, 0x86, 0xef, 0x9f, 0xbb, 0x9e, 0xd2, 0xbd,
0x5f, 0x16, 0x60, 0x0c, 0xf2, 0x56, 0xc7, 0x29, 0x75, 0x2e, 0x0b, 0xb7, 0xca, 0xfe, 0x9c, 0xbf,
0x2f, 0xa9, 0xc2, 0x7d, 0x8e, 0x7a, 0xf6, 0xc8, 0xca, 0x2b, 0xb1, 0x9f, 0x4d, 0xf1, 0xde, 0x45,
0x21, 0xeb, 0x17, 0x05, 0x78, 0x86, 0x2c, 0xaa, 0x72, 0x50, 0xc3, 0xa9, 0xdd, 0x39, 0x7f, 0xd7,
0xa7, 0x8e, 0x7a, 0xf6, 0xc8, 0x4a, 0x8e, 0xfe, 0xd1, 0x94, 0xef, 0x5d, 0x04, 0xb2, 0x2e, 0x14,
0x40, 0xba, 0xea, 0x74, 0xba, 0xb3, 0x71, 0xaf, 0x3c, 0xa3, 0xcc, 0x3e, 0xc0, 0x65, 0xe2, 0x58,
0x23, 0x2b, 0x49, 0xd4, 0xe3, 0x29, 0xdf, 0x3b, 0x6b, 0x4b, 0x68, 0x9c, 0xb4, 0x19, 0xcc, 0xf1,
0x19, 0x28, 0xfc, 0x70, 0x5d, 0x46, 0x64, 0xcd, 0xb3, 0x7b, 0xfd, 0x19, 0xb8, 0x00, 0x09, 0x2b,
0x64, 0xa5, 0x2e, 0x68, 0x59, 0x14, 0xf6, 0xda, 0x5e, 0x90, 0x49, 0xa3, 0x50, 0xbc, 0x33, 0x05,
0x90, 0xae, 0x59, 0x68, 0x1a, 0x77, 0x50, 0x0c, 0xff, 0xf2, 0x9c, 0xa3, 0x5f, 0x32, 0xb2, 0x9a,
0x14, 0xc2, 0x2e, 0x3b, 0x59, 0x69, 0xf1, 0x2c, 0x16, 0x60, 0x2e, 0xea, 0x3d, 0x42, 0xd6, 0x06,
0x80, 0xc7, 0xbd, 0x4c, 0xbc, 0x4f, 0x13, 0x7e, 0xbe, 0x4f, 0x5c, 0xe3, 0x8f, 0x7a, 0x70, 0xec,
0xfe, 0x10, 0xc0, 0x0f, 0x22, 0xdf, 0xd0, 0xc9, 0xdf, 0x00, 0xf0, 0x59, 0x06, 0xea, 0xf8, 0x2a,
0x80, 0x4f, 0x90, 0x6f, 0x69, 0x9d, 0x85, 0x9c, 0x8f, 0x1d, 0xa5, 0x97, 0xac, 0x94, 0xa4, 0x9c,
0x55, 0x5f, 0x4d, 0x92, 0xac, 0x63, 0x05, 0x19, 0x0b, 0x5b, 0x59, 0x38, 0xa6, 0xa0, 0xaa, 0x92,
0x9f, 0x67, 0xf4, 0x5d, 0xf3, 0x24, 0x4b, 0x9e, 0x3d, 0x94, 0xba, 0x8a, 0xac, 0x59, 0x61, 0xa0,
0x20, 0x67, 0x45, 0xc2, 0x1a, 0x8a, 0x61, 0x15, 0x6e, 0x64, 0x74, 0x9f, 0xd3, 0x3d, 0xf0, 0x3d,
0xbb, 0x56, 0x0d, 0xfe, 0x56, 0xc6, 0xcf, 0xfb, 0x42, 0xfc, 0xec, 0x2f, 0xc8, 0xf8, 0x7d, 0xa7,
0x00, 0xcf, 0xf0, 0x5d, 0x31, 0x8f, 0x69, 0x07, 0xdb, 0xaf, 0x02, 0xf8, 0xeb, 0x39, 0x7c, 0xbf,
0xd3, 0xf0, 0xd3, 0x2a, 0x7f, 0xcc, 0xc9, 0x4a, 0x73, 0xc9, 0x6a, 0xd2, 0x70, 0x38, 0x29, 0xde,
0xa2, 0x58, 0xe1, 0x67, 0x2d, 0x78, 0xe1, 0x95, 0x79, 0x61, 0x33, 0xcc, 0x72, 0x8b, 0x75, 0xb1,
0x9c, 0x83, 0x64, 0xa3, 0x68, 0xb8, 0x26, 0xf2, 0xcb, 0xfc, 0xe9, 0x1a, 0xb2, 0x26, 0x2d, 0x60,
0x6d, 0x82, 0x6b, 0x05, 0x23, 0x6b, 0x1d, 0x9e, 0xf1, 0x23, 0xef, 0x0d, 0xe3, 0x42, 0xca, 0xf7,
0xd0, 0xc9, 0xb6, 0xb2, 0x81, 0xa3, 0xc8, 0xae, 0x24, 0x6a, 0xd7, 0x93, 0xf5, 0x74, 0x4e, 0xe7,
0x35, 0xaa, 0x85, 0x54, 0x94, 0xe2, 0x6a, 0xb4, 0xfb, 0xe7, 0xa9, 0x9a, 0x2f, 0x23, 0x1b, 0x17,
0x4e, 0x16, 0xf3, 0xbd, 0x4e, 0x7c, 0x97, 0xb4, 0xe2, 0xcb, 0x7b, 0x92, 0xac, 0x6b, 0xc8, 0x2f,
0x31, 0x38, 0x0b, 0xb5, 0x4f, 0x15, 0x64, 0x91, 0x3d, 0x97, 0xe3, 0x33, 0x3c, 0xcc, 0x88, 0x48,
0x69, 0x7f, 0xcf, 0x37, 0xec, 0x7c, 0xba, 0xde, 0x51, 0xcd, 0x0e, 0x59, 0x6b, 0xe2, 0xe7, 0x33,
0x47, 0xd6, 0xef, 0x8d, 0xc9, 0xab, 0x02, 0xa8, 0xc2, 0x69, 0xab, 0x8c, 0x0d, 0x78, 0x1d, 0xca,
0x6d, 0x63, 0x12, 0x7e, 0x77, 0xf4, 0xf7, 0xf0, 0xda, 0x87, 0x3a, 0x58, 0xc0, 0xde, 0x02, 0xa8,
0x7d, 0x45, 0x23, 0x2b, 0xa5, 0xac, 0x8d, 0xe4, 0xbc, 0x61, 0x34, 0x4a, 0x48, 0x56, 0xea, 0x05,
0xd4, 0x44, 0xbe, 0x15, 0x38, 0xba, 0x12, 0xd4, 0xf2, 0xe0, 0xbc, 0x23, 0xeb, 0xf7, 0x40, 0xfe,
0xdf, 0x3c, 0x0d, 0x4d, 0xd3, 0x48, 0xdf, 0xf0, 0x56, 0xb5, 0x78, 0x8f, 0x51, 0x76, 0x36, 0x75,
0x75, 0x96, 0x52, 0x26, 0x4b, 0xdd, 0x91, 0xb5, 0x0d, 0x54, 0x0b, 0x79, 0x3c, 0xa7, 0xfb, 0x1f,
0x47, 0xfa, 0x39, 0xa7, 0x7b, 0x2c, 0x9d, 0x8d, 0x0f, 0x33, 0x69, 0xba, 0xcf, 0xd1, 0x29, 0x5d,
0x1c, 0x43, 0xbe, 0x66, 0xf5, 0xa2, 0xe6, 0x37, 0x36, 0x91, 0x5f, 0xe7, 0xee, 0x27, 0x4c, 0xe3,
0xa9, 0xa4, 0x4c, 0xd6, 0x24, 0x55, 0x1b, 0xfa, 0x19, 0x51, 0x87, 0x1d, 0x95, 0xb2, 0xc1, 0x53,
0x31, 0xe8, 0x53, 0x39, 0x2d, 0xcc, 0x22, 0x86, 0x9e, 0x51, 0x07, 0xb4, 0xbc, 0x1a, 0x6b, 0x3d,
0x82, 0x9f, 0x94, 0x9e, 0xc6, 0xbc, 0xac, 0x17, 0xd7, 0x3f, 0x91, 0x40, 0xf5, 0x6d, 0xc2, 0xd5,
0x54, 0xea, 0x5a, 0xa3, 0x46, 0x94, 0x2a, 0x5c, 0x34, 0xd0, 0xd9, 0x75, 0x3e, 0xc7, 0x67, 0xa0,
0xc4, 0x78, 0x3a, 0x0b, 0x6e, 0x4a, 0x61, 0xdc, 0x4f, 0x18, 0x8e, 0x0d, 0x11, 0x75, 0xc8, 0x51,
0x27, 0x7b, 0x4c, 0x21, 0xbf, 0x2a, 0x02, 0x45, 0xcd, 0xc0, 0xb8, 0x25, 0x9e, 0x2d, 0xcf, 0xde,
0xb2, 0x7d, 0xf0, 0xb2, 0x81, 0xa8, 0x63, 0xdd, 0x22, 0xec, 0x15, 0x1c, 0x6b, 0x18, 0x1e, 0x41,
0xc8, 0xea, 0xbb, 0xdf, 0xd1, 0x26, 0x3f, 0x50, 0x1d, 0xdb, 0xd7, 0x39, 0x90, 0x75, 0xbc, 0x80,
0xe3, 0x41, 0x8d, 0x97, 0x2f, 0x17, 0xe4, 0x79, 0xce, 0x31, 0x49, 0x7b, 0xdb, 0xd2, 0x66, 0xa4,
0xab, 0xc6, 0x4e, 0xb0, 0x67, 0xa8, 0xa3, 0x38, 0x4d, 0xb2, 0x7b, 0x12, 0x14, 0xc7, 0x99, 0x65,
0xb7, 0xea, 0x26, 0xf2, 0xad, 0x0b, 0x14, 0x85, 0xf9, 0x82, 0x49, 0xfe, 0x21, 0xf8, 0x51, 0x4e,
0xcb, 0x39, 0x90, 0x95, 0x48, 0x7a, 0x00, 0xf9, 0x7b, 0x12, 0x1c, 0xe0, 0x77, 0x41, 0x7f, 0x9e,
0xd1, 0xfd, 0x2e, 0x17, 0x58, 0x15, 0x1e, 0x2c, 0x98, 0x74, 0x25, 0x6c, 0x66, 0x64, 0x31, 0x0d,
0xe7, 0x3b, 0x0b, 0xbd, 0x44, 0xf4, 0x93, 0x68, 0x0f, 0x1f, 0x5c, 0xef, 0x08, 0x5b, 0x0c, 0x45,
0x21, 0x19, 0x8a, 0x00, 0x00, 0x06, 0x0c, 0x49, 0x44, 0x41, 0x54, 0xd4, 0x33, 0x3c, 0xc3, 0x92,
0xba, 0x79, 0xa5, 0xa0, 0x63, 0xb1, 0x82, 0xfc, 0xdc, 0x38, 0x51, 0xd8, 0xc4, 0xce, 0xb2, 0xa6,
0x0d, 0xae, 0x5a, 0xe2, 0xf8, 0xa3, 0xfa, 0xb7, 0xb2, 0x24, 0xa6, 0x82, 0x73, 0x2e, 0x50, 0xbf,
0x00, 0x64, 0xa5, 0x9d, 0x73, 0x3a, 0x03, 0x42, 0x34, 0x51, 0xcc, 0x6a, 0xed, 0x93, 0xc8, 0xcf,
0xb5, 0xa5, 0x82, 0x3b, 0xe2, 0xf9, 0x1e, 0x1b, 0xce, 0xb3, 0x4a, 0xbf, 0x9f, 0x28, 0x0d, 0x83,
0xfc, 0xc2, 0x23, 0x8e, 0x36, 0xf9, 0x80, 0x9c, 0xe6, 0xdc, 0x12, 0xb9, 0x27, 0xc5, 0xfb, 0x51,
0x59, 0x99, 0x22, 0x5a, 0x18, 0xfb, 0x90, 0x6d, 0x21, 0x6e, 0x13, 0x50, 0x70, 0xcb, 0x3d, 0xcd,
0xcf, 0x2d, 0x29, 0x92, 0x75, 0x5a, 0x5c, 0x3f, 0x28, 0x4a, 0x69, 0x18, 0xae, 0xa5, 0x63, 0xee,
0xa0, 0x73, 0x6b, 0x05, 0x7e, 0xc7, 0xb9, 0x06, 0xd2, 0x6b, 0xa9, 0x41, 0xa9, 0x7a, 0xb4, 0x39,
0x6c, 0x2b, 0xd0, 0x58, 0xec, 0xd7, 0x54, 0x19, 0xf3, 0xc0, 0xac, 0x01, 0x61, 0x4f, 0x6a, 0xd8,
0x0b, 0xa2, 0x12, 0x3e, 0x28, 0x88, 0xe4, 0x92, 0xa3, 0x4d, 0x3e, 0xa8, 0x49, 0xc6, 0x83, 0x59,
0x00, 0xef, 0x90, 0x5e, 0xc0, 0xf6, 0x13, 0xb6, 0x70, 0x96, 0x0a, 0x48, 0x58, 0x53, 0xbf, 0x64,
0x1e, 0x84, 0x7d, 0xa4, 0xb9, 0x29, 0x6f, 0xb6, 0x70, 0xef, 0x2a, 0x9c, 0xb1, 0x29, 0x37, 0x84,
0xb9, 0x2d, 0xf6, 0xb1, 0xf3, 0xec, 0x2a, 0xec, 0xf9, 0x48, 0x87, 0xa5, 0xfb, 0x2d, 0x15, 0x4c,
0x9a, 0x9d, 0x47, 0x39, 0x4a, 0x68, 0x1e, 0x87, 0x9e, 0xd1, 0xa9, 0x09, 0x3b, 0x96, 0x7f, 0x2a,
0x2f, 0x7b, 0xc8, 0x51, 0x27, 0x7b, 0xf4, 0x47, 0x2c, 0xce, 0x01, 0x78, 0xe5, 0x60, 0xa8, 0x37,
0x4e, 0x55, 0x9c, 0x3b, 0x6d, 0xa8, 0xde, 0x94, 0x54, 0x50, 0x29, 0xa0, 0x84, 0xcd, 0x3b, 0xa5,
0x50, 0x15, 0x87, 0xa1, 0x9e, 0xa0, 0x51, 0x87, 0xbd, 0x1e, 0xb1, 0xaf, 0xc5, 0x7d, 0xa7, 0x1d,
0x7d, 0xf2, 0x59, 0x9c, 0x2a, 0xaa, 0x57, 0x93, 0x49, 0xdb, 0xb9, 0x04, 0xf7, 0x7b, 0x80, 0x4e,
0xdf, 0x1f, 0x11, 0x76, 0x5d, 0x01, 0xc6, 0x83, 0xca, 0x95, 0x4c, 0x96, 0x60, 0xee, 0x48, 0x25,
0x5e, 0x44, 0x74, 0x47, 0xc0, 0x1b, 0x96, 0x35, 0x86, 0x22, 0xbb, 0xe1, 0xba, 0x9e, 0xac, 0xaa,
0x15, 0x05, 0x0e, 0xa0, 0xbd, 0xf6, 0x8e, 0xc9, 0x82, 0x26, 0x55, 0xf8, 0x6c, 0x80, 0xaa, 0x56,
0x04, 0x6b, 0x6c, 0x1f, 0x7c, 0xb7, 0xd6, 0xba, 0x12, 0xcc, 0xdf, 0x71, 0x36, 0x1f, 0xc7, 0x42,
0xfe, 0x86, 0x02, 0x2c, 0x6c, 0x55, 0x77, 0xb8, 0x03, 0x57, 0x71, 0x3f, 0x17, 0xd4, 0xe0, 0xd5,
0xf7, 0xd5, 0xc1, 0x56, 0x49, 0x3d, 0xd6, 0xcd, 0x75, 0x6c, 0xa2, 0xb3, 0xa3, 0x1a, 0x49, 0x89,
0xa9, 0x82, 0x10, 0xb6, 0x81, 0xf2, 0x54, 0x95, 0x1f, 0x10, 0x1b, 0x5d, 0x4b, 0xa8, 0xc7, 0x32,
0x2a, 0xb0, 0x5f, 0xa5, 0x3f, 0xed, 0xfe, 0xbe, 0x0e, 0x96, 0xc8, 0x4a, 0x38, 0xc8, 0x48, 0xfb,
0x10, 0xea, 0x01, 0x0f, 0xa4, 0x96, 0x8d, 0x48, 0x04, 0x29, 0x8a, 0x74, 0x05, 0xfc, 0x32, 0xaa,
0xb7, 0x4a, 0x34, 0x97, 0x55, 0x84, 0xfb, 0x4a, 0x93, 0x44, 0x41, 0x85, 0x91, 0x75, 0xd9, 0xd1,
0xa7, 0x3c, 0x64, 0x25, 0xb5, 0xf6, 0x19, 0x7c, 0x1f, 0xad, 0x4a, 0xb9, 0x92, 0x41, 0x04, 0xf7,
0x43, 0x39, 0x22, 0xde, 0xbf, 0x56, 0x90, 0xb1, 0x79, 0x5c, 0x22, 0x75, 0x98, 0xe6, 0x82, 0x54,
0x78, 0x39, 0x8f, 0xf5, 0x25, 0xec, 0x25, 0x92, 0x5f, 0x17, 0xf7, 0xd8, 0xe2, 0xe8, 0x53, 0x2e,
0xb2, 0xca, 0x67, 0x51, 0x55, 0x57, 0xcc, 0x90, 0xf8, 0xdb, 0xa7, 0xd2, 0xfb, 0x14, 0x7c, 0xbe,
0xbd, 0x20, 0xea, 0x30, 0xa9, 0xfa, 0x65, 0xc2, 0x17, 0x01, 0x2a, 0x31, 0x11, 0xcc, 0x46, 0x57,
0xbf, 0xa2, 0x56, 0xff, 0x70, 0x64, 0xd5, 0xc0, 0x3a, 0xf8, 0xb1, 0xc6, 0x7d, 0x09, 0x9f, 0xa9,
0x28, 0x8b, 0x81, 0x22, 0x9b, 0x36, 0x96, 0x6c, 0x5e, 0xd7, 0xa4, 0x73, 0xe5, 0x59, 0x8b, 0xe7,
0xcc, 0x66, 0x09, 0x37, 0x30, 0x47, 0xd6, 0x00, 0x4c, 0x20, 0x79, 0x5a, 0x15, 0x55, 0xb5, 0xf8,
0xbc, 0x20, 0x63, 0xd4, 0x14, 0x8b, 0xbf, 0x4c, 0x18, 0x66, 0xf6, 0x04, 0xdb, 0x75, 0xa3, 0x5b,
0x00, 0x66, 0x1c, 0x75, 0xca, 0x4f, 0x56, 0xc0, 0x4f, 0x89, 0x4b, 0x42, 0x58, 0x0a, 0x7b, 0x2c,
0x42, 0x19, 0xd3, 0xac, 0x5a, 0x5e, 0xd8, 0xc6, 0x10, 0x23, 0xac, 0xad, 0x8a, 0x0f, 0xa4, 0x3d,
0xed, 0x71, 0xd4, 0xe9, 0x0e, 0xb2, 0x02, 0x5e, 0x2e, 0x66, 0xd2, 0x7e, 0x2b, 0x2d, 0x41, 0xda,
0x22, 0xa0, 0x85, 0x4e, 0x77, 0x53, 0x59, 0xd0, 0xb4, 0xa8, 0x02, 0x93, 0x5f, 0x77, 0xd0, 0x51,
0xa7, 0x7b, 0xc8, 0x0a, 0xf8, 0xb1, 0xc7, 0xa6, 0xd6, 0xd4, 0xb9, 0x02, 0x49, 0x34, 0x4a, 0x29,
0x3c, 0x5f, 0xc2, 0x39, 0x1e, 0xb6, 0x28, 0x61, 0x8f, 0xc3, 0x05, 0x44, 0x74, 0x25, 0x59, 0xc9,
0xe2, 0x9b, 0xa4, 0xf8, 0x57, 0x0b, 0xc0, 0x99, 0x82, 0x8c, 0xd5, 0x5b, 0xf1, 0x3c, 0x65, 0x2c,
0x78, 0xcd, 0x55, 0xe2, 0x24, 0x15, 0x14, 0x1d, 0x59, 0xbb, 0x94, 0xac, 0x80, 0x97, 0xa1, 0x91,
0xc4, 0x21, 0x9f, 0x47, 0x17, 0xef, 0x28, 0x09, 0x55, 0x46, 0x57, 0x0e, 0x07, 0x65, 0x16, 0xd5,
0x60, 0xd6, 0x0d, 0xc0, 0x91, 0xb5, 0x8b, 0xc9, 0x0a, 0xf8, 0x79, 0xac, 0x26, 0xa1, 0x84, 0x53,
0xc8, 0xbf, 0xa7, 0x6a, 0xd0, 0x59, 0x7c, 0xad, 0xc4, 0x73, 0xbe, 0x03, 0xe6, 0xe1, 0x87, 0x74,
0x1c, 0xd8, 0xea, 0xa8, 0xd3, 0x9d, 0x64, 0xa5, 0x54, 0xbc, 0xe5, 0x04, 0xcf, 0x58, 0x24, 0x27,
0x3c, 0xb9, 0xa7, 0x56, 0x4b, 0x3c, 0xef, 0x54, 0xc8, 0xdb, 0x24, 0xd5, 0x2d, 0x28, 0x98, 0xc5,
0xa1, 0x4b, 0xc8, 0x0a, 0xf8, 0xad, 0x22, 0x4c, 0x26, 0x99, 0x6a, 0xd8, 0x16, 0x29, 0x30, 0x61,
0x8b, 0x78, 0xa6, 0x93, 0x25, 0x9e, 0x7b, 0x0a, 0x4d, 0xd4, 0x2d, 0x84, 0xe6, 0x22, 0x98, 0x72,
0x42, 0x33, 0x23, 0xb2, 0x02, 0x5e, 0x50, 0xbc, 0x69, 0x5f, 0xd4, 0x22, 0x4a, 0xb2, 0x57, 0xe2,
0xb9, 0x2a, 0x25, 0x9d, 0x7b, 0x32, 0x3a, 0x35, 0xa0, 0x67, 0x70, 0x7a, 0xe2, 0xce, 0xad, 0xf9,
0xa0, 0xa8, 0xad, 0x2d, 0x64, 0x2c, 0x16, 0x70, 0x81, 0x50, 0x73, 0xab, 0x32, 0x4b, 0x19, 0x6a,
0xb8, 0xfd, 0x42, 0xe3, 0x33, 0x63, 0x28, 0x67, 0x08, 0x66, 0xa9, 0x71, 0xb6, 0x64, 0x3b, 0x64,
0x91, 0x32, 0x72, 0xe4, 0xe7, 0x3a, 0x56, 0xe2, 0x75, 0x40, 0x25, 0x62, 0x3e, 0x6a, 0xaa, 0xd0,
0xab, 0x8e, 0x42, 0xd9, 0xa1, 0x6c, 0xd5, 0xea, 0x9e, 0x15, 0x74, 0x73, 0xa9, 0xa1, 0xfc, 0x35,
0x75, 0xc9, 0x42, 0xbc, 0x06, 0xb5, 0x36, 0x8f, 0x97, 0x9c, 0x74, 0xcd, 0x5e, 0x22, 0x1c, 0x29,
0xd1, 0xf3, 0xf6, 0x15, 0x94, 0xac, 0x3b, 0xa1, 0x57, 0x1e, 0xa7, 0xa8, 0x20, 0x43, 0x9e, 0x4a,
0xde, 0x6b, 0x05, 0xe5, 0x77, 0x61, 0x95, 0x06, 0xe4, 0xdc, 0x9e, 0x70, 0x64, 0xb5, 0x82, 0x7d,
0x5d, 0x42, 0xd8, 0x3e, 0x46, 0xd8, 0xb8, 0x48, 0x2d, 0xda, 0xa4, 0x5c, 0x69, 0xd2, 0x94, 0x51,
0x86, 0x82, 0xd6, 0x65, 0xc3, 0x5e, 0x64, 0xdb, 0x9d, 0x2f, 0x2d, 0x50, 0x66, 0x8d, 0x8a, 0xe5,
0x7e, 0x05, 0xf6, 0x2a, 0x50, 0x38, 0x04, 0x60, 0x5c, 0x4c, 0xc6, 0x01, 0x37, 0x14, 0xd6, 0x41,
0x85, 0xdf, 0x2e, 0x94, 0xfc, 0x7b, 0x90, 0xf1, 0xf1, 0xa6, 0xe2, 0x59, 0xf7, 0xb8, 0x9b, 0xfa,
0x74, 0xcf, 0x58, 0x0e, 0xe9, 0xe0, 0xa5, 0x18, 0xdf, 0xbe, 0x92, 0x7f, 0x8f, 0x8f, 0x8a, 0xeb,
0x84, 0x8c, 0x4d, 0x9f, 0xbb, 0xa9, 0xb7, 0x0f, 0xd7, 0x20, 0x37, 0x5d, 0x50, 0xf2, 0xfd, 0x4a,
0x97, 0xac, 0x95, 0x45, 0x85, 0xbf, 0xa3, 0x8a, 0x95, 0xe7, 0xdd, 0xf4, 0xdb, 0x9f, 0x80, 0x0d,
0x6e, 0x18, 0x52, 0x05, 0xb5, 0xb8, 0x3c, 0xd5, 0x25, 0x5a, 0x98, 0x4a, 0x22, 0xc5, 0xaa, 0x53,
0x89, 0xed, 0xe2, 0x8d, 0x53, 0x81, 0x33, 0x03, 0x15, 0xde, 0x2e, 0x7b, 0xc9, 0xce, 0x86, 0x50,
0x89, 0x55, 0xd4, 0x7a, 0xca, 0x99, 0x3d, 0xeb, 0xa6, 0x3f, 0x19, 0xd6, 0x23, 0xbc, 0xbb, 0xb5,
0x43, 0x3a, 0xea, 0x30, 0x05, 0xcb, 0xef, 0x2d, 0x19, 0x39, 0x79, 0x8b, 0xc8, 0x29, 0x4d, 0x15,
0xd7, 0x66, 0x19, 0x99, 0x9e, 0x03, 0x35, 0x83, 0x92, 0x5f, 0x55, 0x78, 0xe6, 0xf9, 0x09, 0x37,
0x44, 0xa9, 0x82, 0x0c, 0x4e, 0x65, 0xa9, 0x08, 0x48, 0x1a, 0xc1, 0xb5, 0x80, 0xf7, 0x54, 0x40,
0xbd, 0x75, 0x5c, 0x1a, 0x9d, 0x01, 0x4e, 0x0b, 0x62, 0x6e, 0x60, 0xaf, 0x23, 0x42, 0xb5, 0x69,
0x4a, 0x04, 0x7e, 0x2a, 0x7e, 0xef, 0x0a, 0x62, 0xd9, 0xc5, 0x07, 0xa4, 0x53, 0x16, 0x34, 0x0d,
0x54, 0xd8, 0x06, 0x43, 0x45, 0xe2, 0xa8, 0x44, 0x8f, 0x6a, 0x73, 0xab, 0x7b, 0x70, 0x85, 0xd5,
0x52, 0xc5, 0xb5, 0x00, 0xc9, 0x3b, 0x87, 0xe0, 0x66, 0x47, 0x0e, 0xfa, 0x2a, 0xb1, 0xaa, 0x65,
0xb5, 0x28, 0x98, 0x09, 0xd1, 0xc8, 0xe6, 0x02, 0x5e, 0x41, 0xe7, 0x72, 0xea, 0x81, 0xe4, 0x90,
0x22, 0x46, 0xe0, 0x39, 0xf5, 0x1b, 0x21, 0x93, 0x55, 0x17, 0xea, 0xf3, 0x39, 0x37, 0x54, 0x5a,
0xa0, 0x40, 0x83, 0x32, 0x19, 0x5f, 0x9e, 0x84, 0xac, 0x81, 0xb0, 0xd7, 0xb2, 0x58, 0x1b, 0x0f,
0xe0, 0xb9, 0xae, 0x5a, 0xf0, 0x2c, 0xca, 0x3d, 0x85, 0x4f, 0x72, 0xbc, 0xf7, 0x04, 0x80, 0x1f,
0x17, 0xff, 0xde, 0x0a, 0xe0, 0x27, 0x01, 0x7c, 0x66, 0x70, 0x9d, 0xb8, 0x14, 0xac, 0x2a, 0x82,
0xeb, 0x34, 0xfd, 0xbe, 0xe6, 0x7d, 0x06, 0x00, 0xfc, 0x5c, 0x41, 0xe7, 0xf1, 0xb7, 0x84, 0x4a,
0x79, 0x5e, 0x8c, 0xe9, 0xb7, 0x53, 0xbc, 0xd7, 0x47, 0x00, 0xff, 0x42, 0x10, 0x47, 0xc6, 0x73,
0x00, 0xdf, 0xd5, 0x18, 0xcf, 0xa7, 0x00, 0x3e, 0x05, 0xf0, 0xdb, 0xf0, 0xea, 0x50, 0xc9, 0x18,
0x07, 0xf0, 0x53, 0x00, 0xfe, 0x03, 0x80, 0xaf, 0x49, 0xeb, 0xe3, 0x19, 0x80, 0x1f, 0x73, 0x64,
0x2d, 0x07, 0x06, 0xe0, 0x75, 0xca, 0xfe, 0x56, 0xcc, 0xdf, 0x85, 0xfd, 0xbe, 0x89, 0xf0, 0xe8,
0x98, 0x1f, 0x05, 0xf0, 0x97, 0x4a, 0x3c, 0x56, 0xef, 0x91, 0x5e, 0x6c, 0xed, 0x0f, 0x08, 0x82,
0x85, 0xa1, 0xc5, 0x48, 0x2d, 0x5b, 0x7a, 0xff, 0x0f, 0x3a, 0x3b, 0x02, 0xae, 0x00, 0xf8, 0x06,
0x80, 0x7f, 0x09, 0xe0, 0xdf, 0x2b, 0x3e, 0xc3, 0x1b, 0x00, 0xff, 0x09, 0xc0, 0xbf, 0x76, 0x8a,
0x55, 0xf7, 0xe3, 0x02, 0xbc, 0x5c, 0xd1, 0x28, 0xd5, 0xeb, 0x1d, 0xbc, 0x2e, 0x69, 0xf4, 0xba,
0x02, 0xfd, 0xba, 0x42, 0x59, 0xe2, 0x2b, 0xf1, 0xdc, 0x07, 0x73, 0x56, 0xc9, 0x69, 0xbc, 0x9a,
0x9a, 0xaa, 0x6e, 0x0b, 0x5e, 0x4d, 0x2d, 0x87, 0x2e, 0x94, 0xac, 0x0e, 0xe5, 0x42, 0x05, 0xc0,
0x3f, 0x10, 0x5a, 0x4b, 0x18, 0x0e, 0xa2, 0x5c, 0xc6, 0x32, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0xcb, 0xf8, 0xff, 0xf9, 0x8e, 0xdc, 0x90, 0x90, 0x21, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x49,
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x01, 0xa5, 0x08, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x28, 0xc6,
0x9d, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0,
0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x12, 0x00,
0x00, 0x0b, 0x12, 0x01, 0xd2, 0xdd, 0x7e, 0xfc, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45,
0x07, 0xd4, 0x01, 0x1b, 0x05, 0x36, 0x11, 0x1a, 0x64, 0x7e, 0xdb, 0x00, 0x00, 0x1d, 0xc0, 0x49,
0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xdd, 0x3b, 0x6e, 0x1d, 0x4f, 0x7a, 0x87, 0xe1, 0x8f, 0x02,
0x31, 0x76, 0x34, 0x80, 0xb4, 0x04, 0x12, 0xf6, 0x02, 0x2c, 0x05, 0x4e, 0x9c, 0x91, 0xf0, 0x44,
0xce, 0xa4, 0x60, 0x92, 0xc9, 0xd4, 0x4b, 0x90, 0x80, 0xd9, 0x80, 0xb8, 0x84, 0xa3, 0x78, 0x22,
0x71, 0x12, 0x67, 0x03, 0x50, 0xc1, 0x38, 0x18, 0x47, 0x22, 0x9c, 0x38, 0x32, 0x20, 0x02, 0x76,
0x62, 0x18, 0x18, 0x88, 0x4b, 0xa0, 0x03, 0x8a, 0x7f, 0xea, 0x72, 0x2e, 0x7d, 0xa9, 0xee, 0xae,
0xcb, 0xf3, 0x02, 0x8a, 0x44, 0x1e, 0xf6, 0xa9, 0xea, 0x7a, 0xeb, 0x57, 0xd5, 0xd5, 0x55, 0x11,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
0x71, 0x34, 0xcb, 0xa7, 0x6e, 0xe2, 0x6e, 0xd2, 0xef, 0x77, 0x33, 0x5d, 0x17, 0x00, 0x90, 0xf8,
0x5e, 0x79, 0xbf, 0x8e, 0x88, 0x4d, 0x92, 0xcf, 0x22, 0x72, 0x00, 0x58, 0x50, 0xe2, 0x53, 0xd3,
0x37, 0x91, 0x03, 0xc0, 0x0a, 0x12, 0xdf, 0xc4, 0x59, 0x44, 0x5c, 0xcd, 0x7c, 0x9d, 0x97, 0xd1,
0xc5, 0x2b, 0xd5, 0x55, 0x31, 0x9b, 0x78, 0x17, 0x11, 0x6f, 0x66, 0xff, 0x3b, 0x82, 0x01, 0x52,
0x87, 0xd0, 0x95, 0xef, 0xa9, 0xa3, 0x89, 0x5f, 0x7c, 0x09, 0x81, 0x6b, 0x80, 0x25, 0xdf, 0xe0,
0x40, 0xed, 0xac, 0xec, 0xa5, 0xe3, 0x89, 0xbf, 0x7f, 0xa5, 0x06, 0x09, 0x17, 0x40, 0xb9, 0x12,
0x4f, 0xdf, 0x3b, 0xed, 0x93, 0xd0, 0x54, 0x41, 0xfd, 0x26, 0x22, 0x3e, 0x45, 0xc4, 0x5f, 0x55,
0x3c, 0x80, 0x3a, 0x78, 0x32, 0x21, 0xf1, 0x9d, 0xcc, 0x32, 0xbc, 0x98, 0x73, 0x68, 0xf2, 0x7f,
0x04, 0x0e, 0x40, 0x12, 0x2f, 0x97, 0xff, 0x50, 0xe1, 0x0b, 0x72, 0x1e, 0x5d, 0x7c, 0x4c, 0xfe,
0xa9, 0x43, 0x46, 0x63, 0x39, 0x3c, 0x43, 0x69, 0x61, 0x7a, 0xcb, 0xb3, 0xaa, 0x42, 0x25, 0xde,
0xc5, 0x4d, 0xa2, 0x15, 0xe1, 0xdb, 0xb8, 0x8c, 0x88, 0x97, 0xaa, 0xa7, 0x92, 0x86, 0xd5, 0x5f,
0x64, 0x5d, 0x74, 0xf1, 0xfe, 0x87, 0xdf, 0x5d, 0x66, 0xd5, 0x4a, 0x89, 0xe2, 0x26, 0x4f, 0xc4,
0xf4, 0xd5, 0x29, 0x77, 0xb3, 0xdc, 0x5c, 0xf7, 0x53, 0x35, 0x9f, 0x67, 0xbd, 0x71, 0x53, 0x37,
0xb4, 0x2e, 0xc9, 0x72, 0xcd, 0xdd, 0xdf, 0x7b, 0x8e, 0x6b, 0x79, 0x10, 0xe4, 0xdc, 0x32, 0x58,
0x2b, 0x8d, 0xae, 0x21, 0xb9, 0xda, 0xbf, 0x6b, 0x8e, 0x1d, 0xd4, 0x92, 0x65, 0x9e, 0x61, 0xc7,
0x99, 0xeb, 0x74, 0xca, 0xe7, 0xe4, 0x37, 0xdb, 0x8f, 0x85, 0xdf, 0x25, 0xee, 0xc0, 0x36, 0x71,
0x97, 0xa0, 0x82, 0x3f, 0xaf, 0xd2, 0xd0, 0x1e, 0x7e, 0xbe, 0xe4, 0x64, 0xd7, 0xc5, 0xd1, 0xea,
0x53, 0x17, 0x6b, 0xfe, 0xfd, 0x34, 0xf7, 0x5f, 0x7e, 0xdf, 0x2b, 0xc7, 0x51, 0x56, 0x66, 0xed,
0xe4, 0xb8, 0xa9, 0xc2, 0xc7, 0x3a, 0x37, 0xe8, 0x5c, 0x82, 0x35, 0x9d, 0xa0, 0xdd, 0x60, 0x26,
0x89, 0x6f, 0xe2, 0xf5, 0x4f, 0x73, 0x9b, 0x68, 0x9b, 0x54, 0x22, 0x2f, 0x4d, 0xdc, 0x87, 0xae,
0x97, 0x24, 0x91, 0x69, 0x12, 0xdf, 0x44, 0x8c, 0x94, 0xf8, 0xfd, 0x26, 0x5a, 0xd8, 0x27, 0x81,
0xb9, 0x1a, 0xfe, 0xd2, 0x82, 0x94, 0xa4, 0xe7, 0x79, 0x9f, 0xa2, 0xb4, 0xef, 0xb2, 0xed, 0xfb,
0x4c, 0x19, 0x15, 0x76, 0x99, 0xef, 0x09, 0x55, 0x88, 0xc4, 0xa7, 0x76, 0x00, 0x98, 0xfb, 0x26,
0x95, 0x00, 0x31, 0xf4, 0x5e, 0x3b, 0xf4, 0x9c, 0x29, 0x1f, 0x83, 0xdc, 0xb5, 0x14, 0x10, 0x8e,
0x9b, 0xbc, 0x19, 0xc9, 0xac, 0x0d, 0x1a, 0x6b, 0xcc, 0xca, 0xb7, 0x4d, 0xa6, 0x49, 0x3c, 0x87,
0x15, 0x01, 0x39, 0x0d, 0x01, 0x01, 0xa0, 0xe9, 0x24, 0x4e, 0x8a, 0xcb, 0x76, 0x5f, 0x4b, 0x4e,
0x5d, 0xa9, 0x5b, 0xac, 0xed, 0x92, 0x4a, 0x47, 0x0d, 0x29, 0x24, 0x7e, 0x1e, 0x25, 0xec, 0x66,
0x98, 0x7a, 0xe8, 0xb7, 0x94, 0x94, 0xe6, 0xba, 0x19, 0xbb, 0x78, 0x1f, 0x1b, 0xcf, 0x1f, 0x92,
0x8f, 0xea, 0x76, 0x3d, 0xa0, 0xdb, 0x77, 0xbf, 0x8c, 0xa9, 0xcf, 0x35, 0x46, 0xc1, 0xbb, 0xbe,
0x5f, 0x8e, 0xe5, 0xde, 0x50, 0x90, 0x38, 0x4e, 0x50, 0x80, 0x1f, 0xb7, 0xaa, 0x60, 0x13, 0x9f,
0xa2, 0x8b, 0x17, 0x59, 0x49, 0xb1, 0x94, 0x07, 0x33, 0x63, 0xcb, 0xaa, 0xf5, 0xf9, 0xc9, 0x7d,
0x12, 0xcd, 0x79, 0x84, 0x69, 0x94, 0x82, 0x95, 0x93, 0xf8, 0x2e, 0x9e, 0x17, 0x2b, 0xc3, 0x9a,
0x86, 0x90, 0x00, 0x48, 0xbc, 0x07, 0xa7, 0x31, 0xe5, 0x95, 0xf1, 0x21, 0xf2, 0xf1, 0x44, 0x5c,
0xa7, 0x83, 0x36, 0x46, 0x55, 0x53, 0x47, 0x61, 0x24, 0x3e, 0xa8, 0x00, 0x6f, 0xcc, 0xae, 0xce,
0x34, 0x1d, 0x80, 0xd2, 0xb8, 0x2e, 0x62, 0x14, 0x5a, 0x93, 0xc0, 0xa7, 0xfe, 0xde, 0x63, 0xa8,
0x38, 0xbc, 0x01, 0x5d, 0x73, 0x1b, 0x60, 0xcd, 0x91, 0x9a, 0xfb, 0x7e, 0xde, 0xd2, 0xeb, 0xc2,
0x53, 0x7d, 0xcf, 0xa1, 0x9f, 0x93, 0x6e, 0xab, 0xd6, 0xcb, 0x4a, 0x95, 0x70, 0xbb, 0xb0, 0x80,
0x5e, 0x7c, 0x77, 0x8f, 0xa5, 0xbe, 0xff, 0xd7, 0xde, 0x9a, 0xb7, 0xe6, 0x51, 0x70, 0x17, 0x37,
0x11, 0xe5, 0x7d, 0xbf, 0xd4, 0x37, 0xd8, 0xb8, 0x95, 0x14, 0xa5, 0x6d, 0xf4, 0x8f, 0x74, 0xf7,
0x07, 0xe9, 0x00, 0x19, 0x25, 0x71, 0xd3, 0x01, 0x20, 0x54, 0xe4, 0xd6, 0x91, 0xa7, 0xb8, 0xff,
0xe6, 0x1c, 0x5d, 0x65, 0x95, 0xc4, 0x77, 0x55, 0x54, 0xca, 0x9d, 0xdc, 0xb6, 0x6f, 0x08, 0x75,
0x16, 0x73, 0xad, 0x55, 0xff, 0xf1, 0xef, 0xcd, 0xf9, 0xb7, 0xc8, 0x75, 0x0d, 0xa9, 0x7c, 0x89,
0x88, 0xa7, 0xec, 0x8a, 0x52, 0xdb, 0xcc, 0x71, 0x81, 0x8d, 0xee, 0xae, 0xea, 0xbf, 0xb7, 0x56,
0x99, 0x3a, 0x50, 0x00, 0x28, 0x92, 0x27, 0x8b, 0xfc, 0x15, 0x0d, 0x19, 0x00, 0x24, 0x71, 0x00,
0x15, 0xb1, 0xc4, 0x94, 0x44, 0x03, 0x01, 0x92, 0xc4, 0x4b, 0xbc, 0x49, 0x73, 0x3c, 0xe4, 0x19,
0xee, 0xf1, 0x5a, 0xaf, 0x2f, 0xf3, 0x8e, 0xe0, 0xd8, 0x0d, 0xd3, 0x60, 0xc3, 0x29, 0x75, 0x85,
0x00, 0x80, 0x9f, 0x48, 0x3f, 0x27, 0x7e, 0xff, 0xb4, 0x5f, 0xe3, 0x07, 0x80, 0x22, 0x25, 0x3e,
0x74, 0xb9, 0x96, 0x87, 0x9e, 0x00, 0x90, 0x95, 0xc4, 0xd3, 0xcb, 0x5a, 0x0a, 0x07, 0xb0, 0x16,
0x99, 0xfb, 0xc7, 0x83, 0xcd, 0x9c, 0xd8, 0xb7, 0x2f, 0x86, 0x8e, 0x0c, 0xc0, 0xec, 0x12, 0x37,
0x35, 0x32, 0x5f, 0x59, 0x39, 0x08, 0x02, 0x80, 0x24, 0xbe, 0xba, 0xb8, 0x5f, 0x47, 0xea, 0x73,
0x2d, 0x33, 0xde, 0xd3, 0x01, 0xc0, 0xfc, 0xa4, 0x9b, 0x13, 0x3f, 0x94, 0x2c, 0x5b, 0x17, 0xcc,
0x7d, 0xf9, 0x6c, 0x16, 0xf8, 0x1b, 0x00, 0x48, 0x7c, 0x31, 0xb1, 0xbd, 0x6b, 0x48, 0xe0, 0xf5,
0xfd, 0x2d, 0x00, 0xab, 0x93, 0x66, 0x3a, 0x65, 0xbc, 0x38, 0xde, 0x54, 0x55, 0x9a, 0xb9, 0x08,
0xf4, 0xfe, 0x3a, 0xce, 0xa3, 0x8b, 0x8f, 0xca, 0x03, 0x90, 0xc4, 0x53, 0x70, 0x5d, 0x71, 0xca,
0x7e, 0x1d, 0x9b, 0xb8, 0xcb, 0x50, 0x58, 0x57, 0xbd, 0xaf, 0x89, 0x6c, 0x81, 0xc6, 0x93, 0xf8,
0x21, 0xba, 0x78, 0x21, 0x65, 0xaf, 0x78, 0xdd, 0x1e, 0x78, 0x02, 0x24, 0xbe, 0x9a, 0x14, 0xd7,
0x10, 0xd0, 0x26, 0x3e, 0x45, 0x4d, 0x87, 0xdd, 0xfe, 0x2c, 0x72, 0x87, 0xf9, 0x02, 0x24, 0x5e,
0x21, 0x9b, 0xf8, 0x10, 0x11, 0x2f, 0x8b, 0xb8, 0xd6, 0x9f, 0x4f, 0x1c, 0xba, 0x1b, 0x20, 0xf2,
0xb7, 0xf1, 0xe3, 0xe9, 0x44, 0x12, 0x3b, 0x50, 0x24, 0xd3, 0xe7, 0xc4, 0xef, 0x8f, 0x2b, 0x5b,
0x46, 0x54, 0xf3, 0x88, 0xfb, 0xdb, 0x39, 0xed, 0x97, 0xc5, 0xd4, 0xdc, 0xd0, 0x23, 0xf0, 0x86,
0x8c, 0x7e, 0x00, 0x14, 0xd3, 0x96, 0x52, 0x24, 0xf1, 0xab, 0xd5, 0x45, 0x5c, 0x68, 0xe1, 0xcf,
0xd2, 0xe9, 0x1d, 0x4e, 0xe4, 0x67, 0xd1, 0xc5, 0xc7, 0x99, 0x57, 0xac, 0x03, 0x28, 0x26, 0x89,
0x97, 0x90, 0xc2, 0x1f, 0x92, 0x76, 0x0b, 0x49, 0xf4, 0x70, 0xb9, 0x5d, 0xb9, 0xed, 0x81, 0x0c,
0x67, 0x05, 0xaa, 0x93, 0xf8, 0x74, 0x71, 0x7f, 0xa9, 0x5e, 0xdc, 0x63, 0xf7, 0x53, 0x31, 0xad,
0x02, 0x48, 0xe2, 0x93, 0x64, 0x70, 0xbf, 0x87, 0xc8, 0xdc, 0x72, 0x7b, 0xda, 0x44, 0x0d, 0xda,
0x18, 0x0b, 0x20, 0xf1, 0x55, 0xd4, 0x33, 0xd7, 0xd0, 0xa5, 0xc5, 0x94, 0x49, 0xe4, 0x00, 0x89,
0x57, 0x2d, 0x33, 0x22, 0x07, 0x40, 0xe2, 0x84, 0xa9, 0x13, 0x03, 0x20, 0x89, 0x1f, 0x62, 0x5a,
0x72, 0xbc, 0x56, 0xa5, 0xd2, 0x38, 0x40, 0xe2, 0xe9, 0x58, 0x5a, 0xaa, 0x7d, 0x5e, 0x25, 0x3f,
0xaf, 0x5a, 0xc6, 0x39, 0xa5, 0x71, 0x9d, 0x07, 0x50, 0xb8, 0xc4, 0xc7, 0x6c, 0x7c, 0x35, 0xbf,
0x84, 0xda, 0x5c, 0x27, 0x7d, 0x58, 0xa8, 0x97, 0x9a, 0x03, 0x40, 0xe2, 0x98, 0x93, 0xfb, 0xb7,
0x2d, 0xe7, 0x49, 0xe3, 0x5d, 0xbc, 0x5a, 0xe8, 0x3b, 0x98, 0xb7, 0x07, 0x12, 0x52, 0xcf, 0x06,
0x58, 0xcb, 0xc8, 0x61, 0xfb, 0x41, 0x0b, 0xcb, 0x89, 0xe9, 0xaa, 0xf7, 0xeb, 0xf2, 0xdb, 0x36,
0xb4, 0xea, 0xf3, 0x5a, 0x3e, 0x00, 0x49, 0xbc, 0xe7, 0xf0, 0xbd, 0x0e, 0x81, 0x3f, 0x7c, 0xd7,
0x87, 0x7f, 0x4b, 0x31, 0xfe, 0x6f, 0xdd, 0x4a, 0xc8, 0x40, 0xeb, 0x12, 0x9f, 0x73, 0xe7, 0xc2,
0x5c, 0x87, 0xe7, 0x7d, 0x8f, 0x3a, 0xcb, 0x49, 0xe4, 0xdb, 0xca, 0xa6, 0x8b, 0x67, 0x0b, 0xd7,
0x90, 0x15, 0x43, 0x40, 0x86, 0x49, 0xbc, 0xad, 0x87, 0x83, 0x43, 0xc5, 0x6c, 0x55, 0x06, 0x80,
0xcc, 0x25, 0xde, 0x56, 0x0a, 0x5f, 0x42, 0xfc, 0xe3, 0xb1, 0xaa, 0x04, 0x20, 0x71, 0x14, 0x27,
0xf2, 0x87, 0x0e, 0xec, 0xd0, 0xaa, 0x92, 0xed, 0x1d, 0xdd, 0xe5, 0x8e, 0x9f, 0xfd, 0xa4, 0xd2,
0x00, 0x12, 0x5f, 0x2a, 0x85, 0x97, 0x21, 0x9c, 0x25, 0x12, 0xf9, 0xf0, 0xe9, 0x9e, 0x5d, 0xe2,
0x77, 0xee, 0x26, 0x40, 0xe2, 0x93, 0xe9, 0xfb, 0x46, 0x65, 0x39, 0xc2, 0x99, 0x6b, 0xe5, 0xca,
0xb7, 0x29, 0x7b, 0xdf, 0xe7, 0x5b, 0x79, 0x02, 0x90, 0xf8, 0x82, 0xc2, 0xfb, 0x98, 0xd9, 0xf5,
0x1c, 0x2d, 0xfe, 0x59, 0x39, 0xa6, 0x77, 0x00, 0x4d, 0x49, 0xfc, 0x56, 0xd1, 0x2e, 0x36, 0x22,
0x99, 0x2f, 0xdd, 0x03, 0x68, 0x54, 0xe2, 0xcb, 0xaf, 0x45, 0xae, 0x2f, 0xad, 0xf6, 0x1d, 0x91,
0x7c, 0x2f, 0xdd, 0xeb, 0x0c, 0xbf, 0x9f, 0x79, 0x76, 0x94, 0x4f, 0xc6, 0xe1, 0xe6, 0xc9, 0x88,
0x2f, 0xf3, 0xa1, 0x89, 0x02, 0xcd, 0x61, 0xba, 0xe1, 0xfe, 0x1a, 0x6e, 0x07, 0xfc, 0xfc, 0x8b,
0x24, 0x65, 0x26, 0x8d, 0x03, 0x55, 0x27, 0xf1, 0x97, 0x49, 0xf4, 0xd4, 0x2a, 0xc3, 0x57, 0x92,
0x3c, 0x73, 0x9b, 0x02, 0x48, 0x29, 0xf1, 0x14, 0x22, 0x7b, 0x5f, 0x95, 0x68, 0x1b, 0x1a, 0xba,
0x55, 0x31, 0xc2, 0x01, 0x2a, 0xba, 0x8f, 0x9f, 0x28, 0xfc, 0x4c, 0xe9, 0xbb, 0x7c, 0x70, 0xe8,
0xcf, 0x02, 0x90, 0xc4, 0x67, 0x64, 0x99, 0x55, 0x2d, 0x6b, 0x8b, 0x6e, 0xad, 0xbf, 0xbf, 0x7d,
0x43, 0x2c, 0xd2, 0x07, 0x9a, 0x91, 0x78, 0xbf, 0x61, 0xfe, 0x94, 0xbd, 0x3c, 0x3e, 0x36, 0x54,
0xf6, 0x73, 0xae, 0x24, 0xc9, 0xe3, 0x99, 0x83, 0x07, 0xa4, 0x40, 0x81, 0x49, 0x7c, 0xda, 0x09,
0x31, 0x27, 0xcd, 0x94, 0x7c, 0x9f, 0xa3, 0xeb, 0xc6, 0xae, 0x28, 0xd9, 0xf7, 0xcc, 0x81, 0x58,
0x01, 0x12, 0x9f, 0x91, 0xe5, 0xd6, 0x14, 0x97, 0x38, 0x8d, 0x70, 0x78, 0x6e, 0xfc, 0x4b, 0x33,
0x65, 0x01, 0x20, 0x4b, 0x89, 0xb7, 0x45, 0x7a, 0x79, 0x3e, 0x55, 0xa8, 0x00, 0x89, 0xb7, 0x95,
0x6e, 0xeb, 0xe5, 0x76, 0x4f, 0x62, 0x3f, 0xfc, 0x80, 0xd3, 0xb4, 0x0b, 0x20, 0x89, 0xcf, 0x48,
0xaa, 0x7d, 0x45, 0x4e, 0xb3, 0xff, 0xa6, 0xe3, 0xa7, 0x48, 0xbc, 0x24, 0x04, 0x90, 0x78, 0xa6,
0xa4, 0xda, 0xe9, 0xb0, 0x8b, 0x9b, 0x0c, 0xbe, 0xcd, 0xa1, 0x8e, 0xe4, 0xc7, 0x29, 0x12, 0x67,
0x56, 0x02, 0x28, 0x3e, 0x89, 0x4f, 0x49, 0xb6, 0x79, 0x4d, 0x13, 0x0c, 0xed, 0x48, 0xfa, 0xac,
0x6a, 0x01, 0x40, 0xe2, 0xc0, 0x0c, 0x1d, 0x96, 0x67, 0x26, 0xc0, 0x6a, 0x12, 0xdf, 0x34, 0xb4,
0x86, 0xbb, 0x64, 0xb9, 0x6d, 0xe2, 0x5d, 0xb2, 0xcf, 0xf5, 0x70, 0x13, 0xa8, 0x2a, 0x89, 0xb7,
0x73, 0x88, 0x6e, 0x6e, 0xf2, 0xfa, 0xf1, 0x7a, 0xf6, 0xcb, 0xf9, 0x8d, 0xdb, 0x1a, 0x20, 0xf1,
0x6d, 0xe4, 0xb5, 0x06, 0x79, 0x4a, 0xca, 0xdc, 0xc4, 0x59, 0xd5, 0x69, 0x7c, 0xfc, 0xe7, 0x76,
0x9a, 0x04, 0x50, 0xaf, 0xc4, 0x0f, 0x91, 0xcf, 0xaa, 0x89, 0xc3, 0x07, 0x13, 0x5f, 0x1d, 0x94,
0x5c, 0xc9, 0x53, 0x09, 0x7d, 0xae, 0x7d, 0xfb, 0x5a, 0xf1, 0xf7, 0x55, 0x95, 0x03, 0x40, 0xe2,
0x83, 0xc4, 0x69, 0xd5, 0xc4, 0xb2, 0x9c, 0x2a, 0x02, 0x00, 0x65, 0xaf, 0x4e, 0x69, 0x79, 0xb5,
0xc3, 0xa1, 0xa5, 0x89, 0x9b, 0x86, 0x9e, 0x61, 0x00, 0x24, 0xde, 0x38, 0x35, 0x4e, 0xa9, 0x7c,
0xbf, 0x99, 0xd8, 0xed, 0x8e, 0xef, 0xf7, 0x41, 0xe5, 0x03, 0x23, 0xc8, 0xc8, 0x0d, 0xe5, 0x4b,
0x7c, 0x9b, 0x80, 0xc7, 0x14, 0x70, 0xcd, 0xa9, 0x7e, 0xf7, 0x2b, 0xf8, 0x2f, 0xb5, 0x46, 0x40,
0x12, 0xaf, 0xbb, 0xa7, 0xcc, 0x39, 0x8d, 0xcf, 0xd1, 0xf1, 0x78, 0x21, 0x07, 0x20, 0xf1, 0xaa,
0x52, 0x7d, 0xee, 0x22, 0x07, 0x50, 0x66, 0x60, 0x22, 0x71, 0xe9, 0xb1, 0xfa, 0x91, 0x06, 0x80,
0x86, 0x92, 0xf8, 0x50, 0x91, 0xef, 0x96, 0xd7, 0x69, 0xf3, 0xb2, 0x9b, 0xab, 0x53, 0xd4, 0x61,
0x00, 0x24, 0xbe, 0x80, 0xc0, 0x6e, 0x56, 0xfc, 0xdb, 0x69, 0xe5, 0x49, 0x9a, 0x00, 0x89, 0x37,
0x99, 0x20, 0x4d, 0xcf, 0x00, 0x20, 0xf1, 0x02, 0xd8, 0xbf, 0x87, 0xca, 0x45, 0x56, 0xc9, 0x56,
0xaa, 0x06, 0xd0, 0x84, 0xc4, 0x07, 0xa4, 0xe8, 0xdf, 0xff, 0xe3, 0xef, 0xaf, 0xf6, 0x7c, 0xce,
0x5b, 0x32, 0x05, 0x40, 0xe2, 0x19, 0x8a, 0xfc, 0x57, 0x7f, 0xfb, 0xab, 0xf8, 0xdd, 0x3f, 0xff,
0x2e, 0xfe, 0xfc, 0xbf, 0x7f, 0x1e, 0x9b, 0x8a, 0xdf, 0xd5, 0xdc, 0xb9, 0x01, 0x20, 0xf1, 0x6c,
0xa5, 0xf5, 0xec, 0xef, 0x9e, 0xc5, 0xdf, 0xff, 0xc3, 0xdf, 0xc7, 0x1f, 0xae, 0xfe, 0x10, 0x7f,
0xf9, 0xef, 0xbf, 0x8c, 0x15, 0xdf, 0x9c, 0x7b, 0x76, 0xdf, 0xce, 0xf6, 0xf3, 0x63, 0x45, 0x6e,
0xf4, 0x01, 0x64, 0xcb, 0xf1, 0x8a, 0x7f, 0xfb, 0x3c, 0xbe, 0xdd, 0x12, 0xf6, 0x5b, 0x61, 0xa4,
0x7e, 0x40, 0xb9, 0x89, 0xd7, 0xbf, 0xfe, 0x9b, 0x5f, 0x6f, 0xfe, 0xe5, 0x9f, 0xfe, 0x25, 0xfe,
0xf4, 0x5f, 0x7f, 0x8a, 0xff, 0xfc, 0xf7, 0xff, 0x1c, 0xf2, 0xf7, 0xae, 0xe3, 0xfb, 0x7d, 0x48,
0xbe, 0x15, 0xdb, 0x79, 0xb2, 0x43, 0x9b, 0x1f, 0xaf, 0xf9, 0xd9, 0x40, 0x69, 0x7e, 0x8c, 0xb5,
0x5f, 0x9f, 0x1f, 0x72, 0xbd, 0x87, 0x7e, 0xd6, 0x88, 0x01, 0xa5, 0x90, 0xd2, 0x55, 0x45, 0x26,
0xf1, 0xd4, 0xf2, 0xdb, 0xff, 0xb7, 0xde, 0x6f, 0x7e, 0xb3, 0x89, 0x3f, 0xfe, 0xdb, 0x1f, 0xe3,
0xaf, 0xff, 0xf3, 0xd7, 0xa1, 0xbf, 0xbb, 0x6f, 0x8b, 0xdd, 0xab, 0x19, 0x6e, 0x8c, 0x93, 0x41,
0x02, 0xec, 0xe2, 0xd5, 0xaa, 0x37, 0x71, 0xea, 0x94, 0xfe, 0xf0, 0x99, 0xd2, 0x3f, 0x90, 0x7d,
0x12, 0x5f, 0x94, 0xdf, 0xfe, 0xeb, 0x6f, 0xe3, 0x6e, 0x97, 0x17, 0x36, 0xf1, 0x7a, 0xeb, 0x81,
0x08, 0xdf, 0xa6, 0xc3, 0x5d, 0x52, 0x49, 0xdf, 0x1b, 0x7f, 0xce, 0x32, 0x2d, 0xac, 0x21, 0xd5,
0x6f, 0xff, 0xa6, 0x84, 0x0e, 0x64, 0x96, 0xc4, 0x17, 0xe6, 0x6e, 0xbf, 0x83, 0x36, 0xc5, 0x09,
0xae, 0xc5, 0xa1, 0xeb, 0xe3, 0x3f, 0x87, 0x76, 0x03, 0xad, 0x49, 0x7c, 0x72, 0x92, 0x3b, 0xf4,
0xfb, 0x29, 0x44, 0x3e, 0xf6, 0x33, 0x86, 0x7d, 0xb7, 0xf3, 0x0a, 0x6a, 0xf3, 0xb3, 0x29, 0x17,
0x60, 0x6d, 0x89, 0xef, 0x7b, 0xd1, 0x66, 0x8d, 0x53, 0x69, 0xfa, 0x08, 0x61, 0x4e, 0x91, 0x2f,
0x27, 0xa4, 0xb3, 0x95, 0xfe, 0x76, 0xf7, 0xcb, 0xd9, 0xa7, 0x29, 0xa7, 0x46, 0x1e, 0xd3, 0xf9,
0x17, 0xcd, 0x19, 0x2d, 0xb2, 0xe6, 0x9c, 0xf8, 0xeb, 0x3d, 0xff, 0xf7, 0x7c, 0xa5, 0x8e, 0xe5,
0xe4, 0xe0, 0xde, 0x29, 0x8f, 0x2b, 0x5e, 0xee, 0x0e, 0xca, 0xb8, 0x8f, 0xac, 0x52, 0x09, 0x74,
0xdf, 0xbc, 0xfd, 0xf7, 0xbc, 0x59, 0xa4, 0x2c, 0x0f, 0x7d, 0xf7, 0x54, 0x87, 0x79, 0x3c, 0xf2,
0xf4, 0x97, 0xdf, 0x37, 0x7f, 0x0e, 0x12, 0x6f, 0x96, 0xcf, 0x11, 0x3d, 0x05, 0xd0, 0x47, 0x9a,
0x8f, 0xff, 0x7f, 0xb1, 0xf5, 0x0d, 0xd0, 0xa5, 0xd2, 0xf7, 0xdc, 0x4b, 0xa1, 0xe6, 0xd8, 0xb3,
0xe6, 0xfe, 0xe8, 0xb8, 0x97, 0xa3, 0xbf, 0x2f, 0x99, 0xa3, 0x11, 0x8e, 0x06, 0x37, 0x8c, 0x94,
0x0d, 0xb9, 0xaf, 0xc4, 0xfa, 0xa7, 0xcc, 0x7d, 0x29, 0xef, 0x24, 0xfa, 0xae, 0xfc, 0xe8, 0x12,
0x96, 0xcb, 0x92, 0xd2, 0xdc, 0x77, 0x2d, 0x8f, 0x23, 0x88, 0xdd, 0xe5, 0xf0, 0xbd, 0x44, 0xef,
0x92, 0x96, 0xd3, 0xd4, 0x4e, 0x28, 0x87, 0x4e, 0x06, 0x6d, 0xb3, 0x7d, 0x89, 0xef, 0xea, 0xf7,
0xd6, 0x90, 0x24, 0x7e, 0xbd, 0xe2, 0x34, 0xc7, 0xdd, 0xa2, 0x8d, 0x7e, 0x48, 0x72, 0x1d, 0xda,
0xc1, 0xac, 0x4d, 0x17, 0x37, 0x3b, 0xd7, 0xe2, 0x6c, 0xe2, 0xd3, 0x81, 0x75, 0xf1, 0x0f, 0x9c,
0x2e, 0xba, 0x65, 0xef, 0xd0, 0xce, 0x65, 0xdf, 0xfd, 0x40, 0xe8, 0xa8, 0x8c, 0x27, 0x03, 0x1a,
0xd2, 0x0b, 0xc5, 0xb5, 0x47, 0x32, 0x4b, 0xca, 0x61, 0x9c, 0xc8, 0xfa, 0x3c, 0x2c, 0x7e, 0xde,
0xf3, 0xbb, 0xde, 0x14, 0x5b, 0xd6, 0x96, 0x29, 0xa2, 0x59, 0x89, 0xb7, 0x38, 0x74, 0xaa, 0x6b,
0x09, 0xdb, 0xf4, 0x51, 0x54, 0x4e, 0x29, 0x76, 0x7a, 0xc7, 0xf9, 0xd9, 0x12, 0x45, 0xd4, 0x80,
0x07, 0x9b, 0xe3, 0x52, 0xef, 0xcf, 0xd3, 0x09, 0x29, 0x85, 0x30, 0x7e, 0x8a, 0xe6, 0x34, 0xfa,
0xcd, 0xfb, 0x77, 0x31, 0xf5, 0x05, 0xa7, 0x9c, 0x64, 0x3e, 0x6d, 0x84, 0x62, 0xaa, 0x05, 0x92,
0x78, 0x83, 0x7c, 0xfe, 0xe1, 0x0d, 0xc2, 0x74, 0xcb, 0x04, 0x1f, 0x44, 0x32, 0x46, 0x28, 0x7d,
0xa7, 0x39, 0xf6, 0x6d, 0x31, 0x50, 0x42, 0x0a, 0x3f, 0x5c, 0x7e, 0x97, 0x46, 0x5f, 0x20, 0x71,
0xac, 0x97, 0x28, 0x6b, 0xfc, 0x7b, 0xcb, 0x7e, 0xb7, 0x57, 0x49, 0xe6, 0xcd, 0x81, 0x02, 0x38,
0x5e, 0xb9, 0xb1, 0x3d, 0x2c, 0x7b, 0x3b, 0x8b, 0x39, 0x76, 0x04, 0x6c, 0x93, 0xbe, 0x53, 0x2a,
0x6d, 0x75, 0x8c, 0x53, 0xa6, 0x5a, 0x4c, 0xb3, 0x80, 0xc4, 0x0f, 0x36, 0xb6, 0x8f, 0xf1, 0xe3,
0x9a, 0xf5, 0xfe, 0x8d, 0xee, 0x36, 0xba, 0x78, 0x36, 0xa0, 0x61, 0xfe, 0xbc, 0x63, 0xe1, 0xfa,
0xa9, 0xab, 0xdb, 0x29, 0xa1, 0xa1, 0xd7, 0xb6, 0x6f, 0x09, 0xe1, 0x94, 0xcf, 0xcf, 0x64, 0xef,
0xe4, 0x44, 0x42, 0x7f, 0x17, 0x43, 0xde, 0x5c, 0x25, 0x73, 0x90, 0x78, 0x46, 0xc3, 0xfd, 0x6d,
0xf3, 0xc1, 0x53, 0x13, 0xdb, 0x74, 0x6e, 0x92, 0x97, 0xdd, 0xd8, 0xef, 0xb1, 0x89, 0x0f, 0xab,
0xee, 0x51, 0xbe, 0xcc, 0xbd, 0xf5, 0x36, 0x22, 0xde, 0x8e, 0x7e, 0xff, 0x80, 0xcc, 0x91, 0x11,
0xe6, 0xc4, 0xb7, 0x09, 0x70, 0xf9, 0x46, 0x9a, 0xd3, 0x54, 0xd2, 0xcb, 0x83, 0x12, 0x6b, 0xbd,
0xae, 0x1d, 0x5c, 0x01, 0x49, 0xbc, 0xb8, 0xe1, 0xf7, 0xae, 0x57, 0xd5, 0xbb, 0x5e, 0x2b, 0x3d,
0x34, 0xf6, 0x32, 0xea, 0xda, 0xbc, 0x39, 0x48, 0xbc, 0xda, 0x46, 0x7e, 0x13, 0x31, 0xa1, 0x91,
0xf6, 0xd9, 0xb7, 0x64, 0xdf, 0xef, 0xae, 0xd3, 0x09, 0xac, 0xb7, 0xcd, 0x02, 0x99, 0x03, 0x24,
0x9e, 0x6d, 0x67, 0x90, 0xd3, 0x2b, 0x36, 0xfb, 0xf6, 0xe0, 0xee, 0xe2, 0x45, 0xb3, 0x23, 0x88,
0x29, 0xcf, 0x48, 0xbc, 0x3c, 0x84, 0x85, 0x79, 0x92, 0x50, 0x08, 0x67, 0x8a, 0xb3, 0x38, 0x9e,
0xee, 0x15, 0x18, 0xa6, 0x3d, 0x23, 0x31, 0x6f, 0x8e, 0xa2, 0x24, 0x6e, 0x9d, 0xf7, 0xf0, 0x94,
0xf7, 0x7d, 0x83, 0xff, 0x30, 0xf8, 0x77, 0xd6, 0xba, 0x56, 0x32, 0x1f, 0x23, 0x73, 0x27, 0x0f,
0x21, 0x7b, 0x89, 0x63, 0x9a, 0x24, 0x86, 0x2d, 0xeb, 0x1b, 0x37, 0x6f, 0xfb, 0xe3, 0x69, 0x4a,
0x97, 0x3d, 0xae, 0xeb, 0x68, 0x96, 0x63, 0xd5, 0xda, 0x93, 0xf9, 0x53, 0xa9, 0x1c, 0x24, 0x8e,
0xa9, 0x6c, 0x26, 0x75, 0x1c, 0x98, 0x2e, 0x73, 0x53, 0x2c, 0xc8, 0x5a, 0xe2, 0x6e, 0x4e, 0xb4,
0x2b, 0xf3, 0xd3, 0x11, 0x32, 0xff, 0xa0, 0x00, 0xb1, 0xb4, 0xc4, 0x6f, 0x89, 0xbc, 0x18, 0x2e,
0x74, 0xc4, 0x8b, 0xca, 0xfc, 0xe6, 0xab, 0xcc, 0xbb, 0x01, 0xbf, 0xf5, 0x52, 0x79, 0x63, 0x59,
0x89, 0xf7, 0xdd, 0xa3, 0xc4, 0x8d, 0xb9, 0x0c, 0xfb, 0xcf, 0xd4, 0x7c, 0xab, 0x6e, 0x56, 0x91,
0xf9, 0xfb, 0xc1, 0x32, 0x57, 0x27, 0x58, 0x30, 0x89, 0x0f, 0x1d, 0x2e, 0xba, 0x39, 0xfb, 0x71,
0xbe, 0xea, 0x74, 0x00, 0xe6, 0x94, 0xb9, 0xf6, 0x82, 0xcc, 0x24, 0x3e, 0x26, 0x65, 0xb8, 0x41,
0x0f, 0x95, 0xe9, 0x47, 0x85, 0x50, 0x6d, 0xdd, 0x1e, 0x91, 0x39, 0xf2, 0x4b, 0xe2, 0x43, 0x53,
0x06, 0xa1, 0xe7, 0x9d, 0xb2, 0xbb, 0xd1, 0xdb, 0x00, 0x83, 0xcc, 0x51, 0xa4, 0xc4, 0x1f, 0xb9,
0x18, 0xfd, 0x9b, 0xdf, 0x1f, 0x6f, 0xe6, 0x6d, 0xcf, 0x54, 0x42, 0x4e, 0xf5, 0x7b, 0xbb, 0xea,
0x2c, 0xd5, 0xe7, 0xb4, 0x2a, 0xa9, 0x31, 0x32, 0x07, 0xf6, 0x70, 0x3c, 0xf1, 0x86, 0x7c, 0x1b,
0x9b, 0xf8, 0x18, 0xd3, 0xdf, 0xd6, 0xbc, 0xfa, 0x6e, 0x05, 0x73, 0xcd, 0xf3, 0xb4, 0x3f, 0xbf,
0x70, 0x93, 0x8f, 0x5c, 0x0e, 0x09, 0x63, 0xea, 0x91, 0x67, 0x29, 0x24, 0x55, 0xcb, 0xbd, 0xd1,
0xd2, 0x81, 0x1c, 0xc8, 0x58, 0xe2, 0xf7, 0x37, 0xe3, 0xfd, 0xa9, 0x3c, 0x29, 0x13, 0xc3, 0xb6,
0xcf, 0xaa, 0xe1, 0x26, 0x9e, 0x5a, 0x46, 0xdb, 0x1a, 0xfe, 0x26, 0xce, 0x9a, 0x9a, 0x53, 0x9f,
0x56, 0x86, 0xb7, 0x11, 0xf1, 0xa2, 0xf7, 0x81, 0xd2, 0xb9, 0x89, 0xbc, 0xf6, 0x80, 0x83, 0x51,
0x1c, 0x65, 0xda, 0xd8, 0x0e, 0x71, 0x5e, 0x94, 0xb8, 0x52, 0x27, 0xdc, 0x1f, 0x3f, 0xaf, 0xcf,
0xef, 0xf7, 0xd9, 0x5d, 0x6f, 0xae, 0x1d, 0xf8, 0x72, 0x9d, 0x12, 0xc8, 0x49, 0x88, 0xad, 0x8e,
0x48, 0x4a, 0x0f, 0x10, 0x19, 0xd4, 0xc3, 0x93, 0x59, 0x1b, 0xc8, 0x7c, 0xfb, 0x6d, 0x5c, 0x65,
0x3f, 0x57, 0xe8, 0x21, 0x6e, 0x19, 0x8d, 0x32, 0x97, 0xe9, 0xad, 0xa9, 0x1d, 0x39, 0x96, 0xe0,
0x22, 0xc7, 0x8b, 0x3a, 0x5a, 0xa5, 0xe1, 0xcc, 0xd9, 0x14, 0xfa, 0x9c, 0xb4, 0x33, 0xee, 0xba,
0xcf, 0x62, 0xae, 0x9d, 0x1a, 0x25, 0xf1, 0x32, 0x58, 0x2a, 0x75, 0x0d, 0x29, 0x2f, 0x89, 0x7c,
0x5d, 0x7f, 0x65, 0x50, 0xfe, 0xe5, 0x0e, 0x27, 0x6b, 0x62, 0x7a, 0x0a, 0xdb, 0xdf, 0x79, 0xdd,
0xa7, 0xcd, 0x6f, 0x1f, 0x1d, 0x9f, 0xee, 0x9c, 0x17, 0x9e, 0x63, 0xee, 0xb5, 0xc6, 0xb3, 0x39,
0xc9, 0x9c, 0xc4, 0x33, 0x29, 0xf7, 0x27, 0x59, 0x35, 0x0c, 0x37, 0xe2, 0xd8, 0x06, 0xbb, 0x39,
0xf0, 0xf3, 0x3f, 0x0a, 0xfe, 0xf3, 0xca, 0xd7, 0x5b, 0x7e, 0x43, 0x7e, 0xfc, 0xf7, 0x21, 0x8b,
0x72, 0x33, 0xbd, 0xd2, 0x2c, 0xf9, 0x1d, 0xcf, 0xf6, 0x78, 0xce, 0xe1, 0xa7, 0x68, 0xed, 0x8c,
0xc7, 0xa9, 0x62, 0x49, 0x21, 0xcb, 0x9c, 0x84, 0xbb, 0xed, 0x5a, 0xf2, 0x93, 0xd5, 0xcb, 0x59,
0x57, 0x8e, 0x0c, 0x5f, 0xc1, 0x72, 0xb1, 0x73, 0xdf, 0x1c, 0x54, 0x49, 0x0d, 0xcb, 0xf6, 0xde,
0x45, 0xc4, 0x9b, 0x26, 0x87, 0xe7, 0x3f, 0x37, 0xee, 0xdd, 0xab, 0x76, 0x72, 0x78, 0xb2, 0xbe,
0xf4, 0xf4, 0xc0, 0x1a, 0xc2, 0xef, 0x32, 0x59, 0xf1, 0x35, 0xe5, 0xd0, 0x67, 0x23, 0xb4, 0xc8,
0xb6, 0x0d, 0x55, 0x29, 0xf1, 0x1a, 0x86, 0x96, 0xe9, 0x24, 0xde, 0xef, 0xa1, 0x65, 0x2b, 0x12,
0x5f, 0xef, 0x9e, 0x98, 0x2f, 0x0d, 0x9b, 0x36, 0xd1, 0x11, 0x35, 0x21, 0xf1, 0xed, 0x37, 0xff,
0x8f, 0x0f, 0xf7, 0xea, 0xb8, 0x11, 0x86, 0x3c, 0x68, 0xc9, 0xe1, 0xa1, 0x4c, 0x7f, 0x09, 0xcd,
0xb9, 0xd2, 0xe8, 0x4b, 0x6c, 0x3b, 0x24, 0xba, 0xd6, 0x54, 0x0e, 0x12, 0xc7, 0xcc, 0x0d, 0x2e,
0xf5, 0xeb, 0xec, 0x7d, 0xd3, 0xf8, 0x5a, 0x37, 0x60, 0x5f, 0x01, 0xad, 0xd9, 0x40, 0x52, 0x49,
0x72, 0x5e, 0x91, 0x7b, 0x6e, 0x44, 0xe2, 0x24, 0xbe, 0x90, 0x10, 0xf6, 0xcf, 0xdb, 0x4f, 0x93,
0xf8, 0xb6, 0xf5, 0xeb, 0xbb, 0x53, 0xec, 0x5c, 0x6b, 0xc1, 0x6b, 0x14, 0x79, 0xda, 0xe4, 0x3e,
0xdf, 0x5b, 0xc6, 0xb9, 0xbe, 0xed, 0x59, 0xfb, 0x68, 0x21, 0x93, 0x39, 0x7d, 0x12, 0x2f, 0x3d,
0x89, 0x0f, 0x4d, 0xe3, 0xdf, 0xff, 0xce, 0x75, 0x74, 0xf1, 0x22, 0xfb, 0xa4, 0x9b, 0xcb, 0x03,
0xb0, 0x9c, 0xd3, 0xf9, 0xd0, 0x54, 0x3e, 0xc7, 0x66, 0x66, 0x15, 0x8b, 0xf2, 0x9b, 0xef, 0x7c,
0x9a, 0xcd, 0xde, 0x3b, 0x24, 0x9e, 0x91, 0x00, 0xe6, 0x5a, 0x89, 0xd1, 0x67, 0x7e, 0xbc, 0x9c,
0x29, 0x8b, 0xcb, 0xe8, 0xe2, 0x55, 0x31, 0x1d, 0xf3, 0x5a, 0x72, 0x9a, 0x3b, 0x95, 0xe7, 0xba,
0xe2, 0x67, 0xce, 0xeb, 0xca, 0x7c, 0x15, 0x0d, 0x89, 0xd7, 0x22, 0xf1, 0x7d, 0x7f, 0xa3, 0xdf,
0x7a, 0xeb, 0xf9, 0x1e, 0x24, 0x96, 0x38, 0x15, 0xb0, 0x84, 0xd4, 0x72, 0x5b, 0x8e, 0x98, 0xab,
0xc4, 0xfb, 0x06, 0x92, 0x96, 0x46, 0x06, 0xdf, 0xf0, 0x24, 0x50, 0x0f, 0x7d, 0x6f, 0xb0, 0xed,
0x37, 0xfd, 0xa6, 0x88, 0x0d, 0xbb, 0x72, 0xbb, 0xbe, 0xa9, 0xd3, 0x12, 0xf7, 0xff, 0xbe, 0xac,
0x7a, 0x5d, 0x36, 0x6a, 0x2b, 0xf7, 0xfe, 0x23, 0xf1, 0x06, 0x6f, 0xbc, 0x3e, 0x37, 0x61, 0xee,
0xc9, 0x26, 0x47, 0x91, 0x4f, 0xdb, 0x36, 0xe2, 0xe9, 0x57, 0x91, 0x9e, 0xcc, 0x72, 0x5d, 0xc3,
0x3b, 0x15, 0x42, 0x2f, 0x08, 0xd3, 0x29, 0x39, 0xf4, 0xe0, 0xb9, 0xbe, 0xd8, 0xb2, 0xe4, 0xd0,
0x71, 0xcc, 0x35, 0xe7, 0x3a, 0x57, 0x99, 0xe3, 0x7c, 0xf9, 0xfd, 0x1e, 0x2f, 0x2f, 0x27, 0x5f,
0xcb, 0x52, 0x2f, 0x8d, 0x0d, 0x5d, 0x0e, 0xdb, 0xf0, 0x94, 0xca, 0x71, 0xa0, 0x3e, 0xb6, 0xbd,
0x72, 0x3d, 0xf4, 0x35, 0xec, 0x12, 0x5e, 0x89, 0xce, 0xf5, 0xd8, 0xb2, 0xa9, 0xaf, 0xbc, 0x3f,
0xfe, 0x5e, 0xba, 0xe7, 0x14, 0x0f, 0x0f, 0x85, 0x87, 0x5e, 0x53, 0x29, 0x27, 0x0a, 0xf5, 0xdd,
0x63, 0xa6, 0xc2, 0x7d, 0xdb, 0x25, 0xf1, 0xf5, 0xd3, 0xd9, 0x3a, 0xcb, 0xfc, 0xf6, 0xed, 0x8f,
0x3e, 0xdf, 0xca, 0x89, 0x93, 0xbd, 0xcb, 0xb3, 0xee, 0xa7, 0x13, 0x3e, 0x8f, 0x6a, 0xc0, 0xa5,
0x8e, 0xc2, 0xd6, 0xf8, 0x7e, 0xe3, 0xaf, 0xe7, 0x22, 0xb6, 0xbd, 0xef, 0x90, 0x43, 0x12, 0x5f,
0x52, 0xba, 0x92, 0x38, 0x7e, 0x60, 0x9d, 0x35, 0xa7, 0x0f, 0x67, 0xa3, 0x2e, 0x9b, 0xb6, 0xce,
0x22, 0xf6, 0x24, 0xcb, 0x7b, 0xc1, 0x1f, 0x8d, 0x4a, 0x8b, 0x39, 0x8b, 0x3c, 0x4d, 0x32, 0x4f,
0xb7, 0x3e, 0x79, 0xfc, 0xf5, 0xbc, 0x39, 0x28, 0x4e, 0xdb, 0x49, 0x4b, 0xe2, 0x0d, 0x26, 0x71,
0x37, 0x7e, 0xaa, 0x54, 0x55, 0xc6, 0x14, 0xd0, 0xd4, 0x3d, 0x7c, 0xd2, 0xbe, 0xf9, 0xb9, 0xc6,
0x5c, 0xf2, 0x9c, 0xcf, 0x3f, 0x1a, 0x4c, 0xe2, 0x56, 0xa7, 0x20, 0x5f, 0x6a, 0xec, 0xdc, 0xba,
0x78, 0xff, 0xf5, 0x7b, 0x9d, 0x8e, 0xfc, 0x84, 0xab, 0xa4, 0x2b, 0x48, 0x96, 0x7e, 0x78, 0x6d,
0xe5, 0x8b, 0x24, 0x2e, 0x89, 0x2b, 0xbf, 0x3d, 0x64, 0xf7, 0x4a, 0xf4, 0xec, 0xc9, 0xb1, 0x95,
0x63, 0xf4, 0x96, 0x68, 0x23, 0x73, 0x3c, 0x18, 0x25, 0x71, 0x12, 0x47, 0xf9, 0x8d, 0x6c, 0x11,
0x79, 0xa6, 0x95, 0xf9, 0x7c, 0x87, 0x82, 0x97, 0x38, 0x2a, 0xcb, 0xf0, 0x5c, 0x4d, 0x12, 0xcf,
0xad, 0xb1, 0x92, 0x38, 0x91, 0xa7, 0xd8, 0x56, 0x36, 0xa7, 0xf5, 0xe5, 0xed, 0xb0, 0xce, 0x76,
0x15, 0x24, 0x4e, 0xe2, 0xd5, 0xcb, 0xbc, 0xe4, 0x32, 0xcd, 0x77, 0x73, 0xad, 0x71, 0x4b, 0x40,
0xeb, 0xd7, 0xf8, 0xaa, 0xf7, 0x1a, 0x79, 0x90, 0x38, 0x91, 0xd7, 0x28, 0xf4, 0x5c, 0xe6, 0x90,
0x49, 0x7c, 0x76, 0xac, 0x4e, 0x41, 0xbd, 0x8d, 0xa7, 0x06, 0xc9, 0x8c, 0xdd, 0x93, 0x65, 0x89,
0x95, 0x20, 0x8f, 0xd7, 0x76, 0xeb, 0x66, 0x94, 0xc4, 0x25, 0x71, 0x48, 0xe4, 0xa5, 0x27, 0xf3,
0xc7, 0x6b, 0x9c, 0x67, 0xda, 0x25, 0xc7, 0x83, 0xbd, 0x1d, 0xcf, 0x46, 0x36, 0x24, 0xbe, 0x40,
0x83, 0xab, 0xb1, 0x7c, 0xc7, 0xbc, 0x34, 0x94, 0xcf, 0x29, 0x39, 0xfd, 0x1f, 0x96, 0xae, 0x7d,
0xcd, 0x05, 0xbc, 0x8d, 0x4a, 0x1e, 0x24, 0x4e, 0xe4, 0xad, 0xa5, 0xf3, 0x3c, 0xce, 0x2d, 0xed,
0x97, 0xd6, 0xb5, 0x8d, 0x83, 0x98, 0x13, 0x47, 0x3d, 0xdc, 0x37, 0xf8, 0xeb, 0xa4, 0xd3, 0x10,
0xa5, 0x7c, 0xef, 0xd2, 0x0e, 0x81, 0x28, 0xed, 0xa5, 0x2c, 0x12, 0x87, 0x27, 0xf9, 0x8b, 0xc9,
0xe1, 0xc5, 0x4e, 0xa1, 0x39, 0x7d, 0xdd, 0x3d, 0x49, 0xe2, 0x40, 0xe1, 0x42, 0x9b, 0xeb, 0x38,
0x34, 0xa9, 0x7c, 0xfd, 0x4e, 0x89, 0xc4, 0x81, 0x2a, 0x45, 0xde, 0x6d, 0xf9, 0x9f, 0xa7, 0x52,
0xf9, 0xca, 0xa9, 0xdc, 0x28, 0x20, 0x19, 0x7a, 0xba, 0x1c, 0x6e, 0x58, 0x89, 0x63, 0xbd, 0xf2,
0x6f, 0xa1, 0xec, 0x87, 0x08, 0xd3, 0x46, 0x53, 0x24, 0x0e, 0x12, 0x57, 0x07, 0x85, 0x8b, 0x7c,
0xae, 0xdd, 0x20, 0xad, 0x48, 0x21, 0x71, 0x02, 0x81, 0xba, 0x28, 0x30, 0x95, 0xe7, 0x36, 0x12,
0xa8, 0x0c, 0x73, 0xe2, 0x68, 0x8b, 0x16, 0x5e, 0xd5, 0x3f, 0xfc, 0xfd, 0x2f, 0x66, 0x48, 0xef,
0x6d, 0x96, 0xa7, 0x24, 0x2e, 0x01, 0xce, 0x3a, 0x7c, 0x85, 0x44, 0x9e, 0x42, 0xb0, 0x63, 0xcb,
0xa2, 0xc6, 0xe3, 0xf5, 0x24, 0x71, 0xec, 0xc0, 0xf6, 0x9e, 0x12, 0xf9, 0x3a, 0x65, 0xd0, 0x47,
0x9c, 0x63, 0x96, 0x21, 0x4a, 0xe0, 0x24, 0x5e, 0x21, 0x97, 0x6e, 0xfa, 0x02, 0x45, 0xde, 0x8a,
0xcc, 0xb7, 0x2f, 0xc5, 0x1c, 0x77, 0x8f, 0xce, 0x79, 0x10, 0x32, 0x7e, 0x42, 0xc1, 0xd5, 0x34,
0x7c, 0xc5, 0xd8, 0x7a, 0xe9, 0xbf, 0x99, 0x94, 0x07, 0x9f, 0xdb, 0xcb, 0x61, 0x13, 0xef, 0x22,
0xe2, 0xcd, 0x2c, 0x9d, 0x29, 0x48, 0x3c, 0xb3, 0x46, 0xf2, 0x25, 0x22, 0x9e, 0xba, 0xc1, 0x0b,
0x16, 0x58, 0x2b, 0xf5, 0xb2, 0xd4, 0x28, 0xc4, 0x3d, 0x4e, 0xe2, 0x4d, 0x34, 0x10, 0x37, 0x7a,
0xbe, 0xe2, 0xb2, 0x43, 0x22, 0x81, 0x93, 0x38, 0x61, 0xb8, 0xe9, 0xab, 0x10, 0xd7, 0x45, 0x74,
0xf1, 0x56, 0x79, 0xb8, 0x97, 0x49, 0xbc, 0x2d, 0x61, 0x4c, 0x39, 0xe5, 0xfc, 0x32, 0xba, 0x78,
0xa5, 0x10, 0x33, 0x14, 0x57, 0xad, 0x82, 0x4a, 0x25, 0x74, 0x02, 0x27, 0x71, 0x8d, 0x43, 0x83,
0x28, 0x44, 0x5a, 0x75, 0xbe, 0x03, 0x50, 0xc2, 0x31, 0x71, 0x24, 0x0e, 0x09, 0x10, 0xea, 0x24,
0x61, 0xd9, 0xb8, 0x37, 0x49, 0x9c, 0x38, 0x46, 0xe8, 0xa3, 0x8b, 0xf7, 0x0a, 0x73, 0x72, 0x5d,
0xf4, 0x3f, 0x13, 0xb2, 0xb5, 0x44, 0xde, 0xf7, 0x7e, 0x25, 0x70, 0x12, 0x27, 0xf4, 0xc9, 0x3a,
0x57, 0xd7, 0xea, 0x60, 0xa9, 0xb2, 0xfa, 0x76, 0xcd, 0xb8, 0xe7, 0x36, 0x24, 0x0e, 0x22, 0xa9,
0xa8, 0x1e, 0x94, 0x3f, 0x48, 0x9c, 0x40, 0x92, 0x7d, 0x16, 0xa1, 0xac, 0x53, 0x17, 0xca, 0x1d,
0x24, 0x0e, 0x42, 0xcf, 0xaa, 0x1e, 0xce, 0x22, 0xe2, 0x4a, 0x79, 0x83, 0xc4, 0x41, 0xe6, 0x2d,
0xd5, 0x85, 0xb2, 0x06, 0x89, 0x83, 0xd0, 0x89, 0x1c, 0x24, 0x0e, 0x32, 0x21, 0x9b, 0x75, 0xcb,
0xbe, 0xce, 0xd7, 0xf5, 0x41, 0xe2, 0x20, 0xf3, 0x66, 0xca, 0x5e, 0xb9, 0x82, 0xc4, 0xb1, 0xa8,
0xcc, 0x89, 0x87, 0xc8, 0x41, 0xe2, 0xa8, 0x44, 0xe6, 0x04, 0x44, 0xe6, 0x20, 0x71, 0xac, 0x26,
0x96, 0x93, 0x48, 0x7d, 0xc6, 0x27, 0x09, 0x11, 0x39, 0x48, 0x1c, 0x15, 0x24, 0x74, 0x22, 0x9a,
0x52, 0xce, 0xb7, 0xd1, 0xc5, 0x33, 0x85, 0x05, 0x12, 0xc7, 0xfa, 0x32, 0x27, 0xf4, 0x71, 0x23,
0x20, 0x65, 0x06, 0x12, 0x87, 0x84, 0x5e, 0x78, 0xd9, 0x2a, 0x2b, 0x1c, 0xe0, 0x89, 0x22, 0x40,
0x4f, 0xe9, 0x5e, 0x24, 0x15, 0xd7, 0x52, 0x87, 0xf0, 0x96, 0x51, 0xb6, 0xfb, 0xca, 0xea, 0x9d,
0x42, 0x82, 0x24, 0x8e, 0xe5, 0xa7, 0x02, 0xe6, 0x48, 0xe7, 0x53, 0xf6, 0xf5, 0xce, 0x39, 0xd1,
0x4a, 0xe3, 0x20, 0x71, 0xac, 0x28, 0xa0, 0x14, 0x07, 0x26, 0xe4, 0x93, 0x7c, 0xf3, 0x14, 0xf9,
0x75, 0x74, 0xf1, 0xc2, 0xcd, 0x86, 0x6d, 0x1c, 0x2b, 0x02, 0x4c, 0x94, 0xe2, 0xab, 0xde, 0x89,
0x12, 0xfb, 0x38, 0x8f, 0xdd, 0x3b, 0x21, 0x3e, 0x57, 0x3c, 0x90, 0xc4, 0x91, 0xd7, 0x14, 0x81,
0x24, 0x3e, 0xbc, 0xcc, 0x4c, 0xab, 0x60, 0x0b, 0x1e, 0x6c, 0x62, 0x3e, 0x59, 0x92, 0x4e, 0x3d,
0x1d, 0x0c, 0x48, 0x1c, 0xc4, 0xe4, 0x5a, 0x80, 0xf4, 0xb8, 0xa9, 0xb1, 0xee, 0x14, 0x41, 0x5a,
0xca, 0x7f, 0x00, 0x68, 0x4a, 0x05, 0x03, 0xf1, 0x60, 0x13, 0x25, 0x71, 0x1e, 0x5d, 0x7c, 0xac,
0x7e, 0xe4, 0xe2, 0x01, 0x31, 0x48, 0x1c, 0x55, 0xa5, 0x70, 0xe9, 0x13, 0x20, 0x71, 0x14, 0x24,
0x6d, 0xf2, 0x06, 0x48, 0x1c, 0x45, 0x8a, 0xbb, 0xfe, 0xe9, 0x12, 0x80, 0xc4, 0x51, 0x9d, 0xbc,
0x25, 0x6e, 0x60, 0x34, 0x1a, 0x0f, 0x86, 0x88, 0x3b, 0xed, 0x2b, 0xf6, 0xe4, 0x3d, 0xae, 0x83,
0x54, 0x6e, 0x90, 0xc4, 0x21, 0x79, 0x03, 0x75, 0xe0, 0x65, 0x1f, 0x2c, 0x29, 0xf0, 0x4b, 0x02,
0xef, 0x59, 0x4e, 0x80, 0x24, 0x8e, 0xac, 0x04, 0x4e, 0xde, 0x43, 0x78, 0xa9, 0x08, 0x40, 0xe2,
0x58, 0x5f, 0xde, 0xc4, 0x0d, 0x90, 0x38, 0x8a, 0x13, 0xb8, 0x03, 0x7e, 0x01, 0x12, 0x47, 0x71,
0x02, 0x97, 0xba, 0x01, 0x12, 0x47, 0x81, 0x02, 0x27, 0x6f, 0x80, 0xc4, 0x21, 0x7d, 0x63, 0x62,
0x5d, 0xa0, 0x59, 0x2c, 0x31, 0x24, 0x0d, 0x02, 0x07, 0x24, 0x71, 0x34, 0x22, 0xef, 0xcb, 0xef,
0xce, 0xd4, 0xc4, 0xf2, 0xe8, 0x3c, 0x41, 0xe2, 0xcd, 0xcb, 0xfb, 0x4b, 0x44, 0x3c, 0x25, 0x0f,
0x80, 0xc4, 0xd1, 0x42, 0xfa, 0x26, 0xef, 0xdc, 0x47, 0x47, 0x20, 0x71, 0x90, 0x03, 0x81, 0x67,
0x50, 0x47, 0xaf, 0x15, 0x02, 0xc6, 0xe0, 0xc1, 0x26, 0x81, 0x13, 0x78, 0x2e, 0x35, 0xa5, 0x4e,
0x20, 0x89, 0xe3, 0x1b, 0x25, 0xbc, 0x8b, 0x88, 0x37, 0xe4, 0x0d, 0x90, 0x38, 0xda, 0x48, 0xdf,
0x4e, 0xd5, 0x29, 0x6d, 0xb4, 0x04, 0x90, 0x38, 0x21, 0x48, 0xdf, 0x85, 0xa0, 0x8e, 0x40, 0xe2,
0xe4, 0x4d, 0x0c, 0xc5, 0xd6, 0xdb, 0xad, 0x82, 0xc2, 0x2e, 0x34, 0x62, 0x02, 0x47, 0xee, 0xf5,
0xa6, 0xae, 0xb0, 0x07, 0xab, 0x53, 0x08, 0x1c, 0x80, 0x24, 0x8e, 0x22, 0x04, 0x4e, 0xde, 0x52,
0x38, 0xaa, 0xc3, 0x9c, 0xb8, 0xf4, 0x8d, 0x7c, 0xeb, 0xef, 0x42, 0x61, 0x41, 0x12, 0x6f, 0x5d,
0xde, 0x04, 0x6e, 0xe4, 0x84, 0xaa, 0x31, 0x27, 0x5e, 0xb7, 0xc0, 0xaf, 0x89, 0xa0, 0xc8, 0xfa,
0x3b, 0x57, 0x6f, 0x90, 0xc4, 0x5b, 0x17, 0x38, 0x09, 0x48, 0xe0, 0x20, 0x71, 0x10, 0x38, 0x08,
0x1c, 0x24, 0x8e, 0x65, 0x04, 0x70, 0x1d, 0x5d, 0xbc, 0x50, 0x68, 0x85, 0x76, 0xbc, 0x04, 0x8e,
0x91, 0x58, 0x9d, 0x52, 0x83, 0x08, 0x34, 0xfe, 0x72, 0xc5, 0x0d, 0x90, 0x38, 0x19, 0xa0, 0x82,
0x7a, 0xd2, 0x11, 0x63, 0x24, 0x6e, 0x9c, 0xb2, 0xc5, 0x70, 0x11, 0x5d, 0xbc, 0x55, 0x70, 0x85,
0x77, 0xae, 0x04, 0x0e, 0x12, 0x6f, 0x54, 0x12, 0x1a, 0x7f, 0xf9, 0xa3, 0x22, 0x75, 0x08, 0x12,
0x27, 0x70, 0x14, 0x26, 0x6e, 0x75, 0x88, 0x84, 0x98, 0x13, 0x5f, 0x57, 0x18, 0x67, 0x11, 0x71,
0xa5, 0xe1, 0x37, 0x24, 0x6e, 0x40, 0x12, 0x6f, 0x54, 0x1c, 0xe4, 0x5d, 0x97, 0xb4, 0xd5, 0x27,
0x48, 0x9c, 0xc0, 0xb1, 0xba, 0xb4, 0x6f, 0xa3, 0x8b, 0x67, 0xa3, 0xff, 0x9e, 0x7a, 0x05, 0x89,
0x13, 0x38, 0x16, 0x4e, 0xda, 0x7d, 0xeb, 0xa3, 0xcf, 0x35, 0xa8, 0x5b, 0x90, 0x38, 0x81, 0x63,
0x46, 0x79, 0x4f, 0x2d, 0xff, 0x43, 0xd7, 0xa3, 0x7e, 0x91, 0x00, 0x0f, 0x36, 0x09, 0x9c, 0xbc,
0x1f, 0x39, 0x8d, 0x2e, 0x6e, 0x14, 0x28, 0x48, 0x1c, 0xd3, 0x04, 0x43, 0xe0, 0x87, 0xca, 0xf4,
0x24, 0x22, 0x3e, 0x27, 0xcb, 0xdb, 0x5d, 0xbc, 0x57, 0xa8, 0x20, 0x71, 0x48, 0xdf, 0x65, 0xa4,
0xed, 0x65, 0xca, 0xf9, 0xbe, 0xa3, 0x01, 0x48, 0x9c, 0xc0, 0x95, 0x61, 0x52, 0x96, 0x2b, 0xe7,
0x77, 0x2a, 0x10, 0x24, 0x4e, 0xe0, 0xca, 0x6f, 0x3a, 0x6b, 0x6d, 0xd1, 0x7b, 0xa6, 0x22, 0x41,
0xe2, 0x04, 0xae, 0xec, 0xf2, 0x4f, 0xdc, 0xbb, 0xf8, 0x18, 0x11, 0x2f, 0x55, 0x2a, 0xe6, 0x86,
0x40, 0x08, 0xbc, 0x2e, 0x81, 0xe7, 0x54, 0xa6, 0x96, 0x18, 0x82, 0xc4, 0x09, 0x5c, 0x59, 0x1d,
0xe4, 0x32, 0xba, 0x78, 0x55, 0xec, 0xf7, 0x24, 0x72, 0x90, 0x38, 0x81, 0x37, 0x25, 0xef, 0xd2,
0xca, 0x4e, 0x1a, 0xc7, 0xcc, 0x3c, 0x51, 0x04, 0x04, 0xbe, 0x48, 0x19, 0xa5, 0x49, 0xdf, 0x17,
0x3a, 0x36, 0x40, 0x12, 0x27, 0xef, 0xf9, 0xcb, 0x66, 0xf8, 0x16, 0xbb, 0x35, 0x97, 0xa1, 0x34,
0x8e, 0x19, 0xb1, 0x3a, 0x65, 0x7e, 0x81, 0x6f, 0xdf, 0xe9, 0x4e, 0xb9, 0xb4, 0x43, 0x17, 0x47,
0xca, 0x06, 0x73, 0x61, 0x3a, 0x65, 0xfe, 0x04, 0xfe, 0xac, 0x89, 0x32, 0x59, 0x42, 0x52, 0x44,
0x08, 0x90, 0xf8, 0x44, 0x89, 0x0c, 0x7b, 0x0b, 0xaf, 0xd6, 0x61, 0xf2, 0x26, 0xce, 0x7e, 0x11,
0xf7, 0x74, 0xb1, 0xde, 0x46, 0xc4, 0x79, 0x13, 0x79, 0x5c, 0xe7, 0x84, 0x19, 0x30, 0x17, 0x37,
0x57, 0x12, 0xac, 0x4d, 0xe0, 0x9b, 0xf8, 0x14, 0x11, 0xcf, 0x93, 0x4c, 0x2d, 0xec, 0xef, 0x24,
0xdf, 0x1c, 0xfc, 0x84, 0x52, 0x37, 0xac, 0xda, 0x77, 0xff, 0x98, 0x17, 0x87, 0x24, 0x9e, 0x55,
0xe6, 0xaa, 0x4d, 0xe0, 0x77, 0x13, 0x05, 0x7e, 0x1b, 0x5d, 0x1c, 0x1d, 0x2c, 0x97, 0x2e, 0xde,
0xf6, 0xba, 0x1a, 0x00, 0xbf, 0xe0, 0xc1, 0x66, 0xea, 0x14, 0x5e, 0x83, 0xc0, 0x37, 0xf1, 0x25,
0x22, 0x9e, 0xea, 0xcc, 0x00, 0x49, 0xbc, 0x35, 0x2e, 0x8b, 0xee, 0xa4, 0x1e, 0xe7, 0xb8, 0xa7,
0x08, 0xfc, 0xbc, 0x57, 0xea, 0x9e, 0x22, 0xfe, 0x72, 0xe7, 0x90, 0xcf, 0x35, 0x11, 0xa4, 0x46,
0x52, 0x4a, 0x99, 0xc4, 0x4b, 0x4c, 0x9e, 0x39, 0xee, 0x59, 0xd2, 0xef, 0x9a, 0xca, 0x9c, 0x1b,
0x37, 0x2f, 0x8e, 0xc4, 0x98, 0x4e, 0xd1, 0x21, 0x4d, 0x1f, 0x7d, 0xac, 0xb3, 0x77, 0xc9, 0x26,
0xc2, 0x89, 0x3c, 0x00, 0x89, 0xa7, 0x94, 0x59, 0xde, 0xe2, 0x4e, 0xb3, 0xba, 0x44, 0x6a, 0x9c,
0x5e, 0x6e, 0x96, 0x14, 0x82, 0xc4, 0xb3, 0x6c, 0x9c, 0xe5, 0xee, 0xa4, 0x57, 0xaa, 0xb8, 0x37,
0x71, 0x57, 0x55, 0x67, 0xb2, 0x89, 0x4f, 0x2b, 0x1d, 0x60, 0x01, 0x12, 0x47, 0x95, 0xd2, 0xbe,
0x67, 0xf9, 0x6d, 0x03, 0xda, 0x4d, 0xab, 0xcf, 0xdd, 0xc0, 0x20, 0xf1, 0x36, 0x44, 0x9d, 0xf2,
0xb4, 0xf7, 0x3c, 0xd3, 0xf6, 0xbd, 0xc8, 0xd3, 0x2c, 0x75, 0xcc, 0x8f, 0xf3, 0x98, 0x63, 0x83,
0x30, 0x90, 0x38, 0x76, 0x4a, 0x33, 0xb7, 0xf3, 0x12, 0xd3, 0x0a, 0x3c, 0xd7, 0x29, 0x89, 0x2e,
0x9e, 0x55, 0x99, 0xc8, 0xbb, 0xf8, 0xe8, 0x95, 0x25, 0xa4, 0xc2, 0x3a, 0xf1, 0x7e, 0xe4, 0x93,
0x9a, 0x36, 0xf1, 0xa1, 0x09, 0x81, 0xf7, 0xbd, 0xbe, 0xda, 0x24, 0xef, 0xa1, 0x27, 0x24, 0xf1,
0xea, 0x99, 0x7e, 0xf8, 0x6e, 0x8d, 0xdb, 0x02, 0x58, 0x2d, 0x03, 0x12, 0x47, 0xa5, 0x5c, 0xf4,
0xdc, 0x93, 0x24, 0xef, 0x34, 0x2e, 0xa1, 0x02, 0x5b, 0x31, 0x9d, 0x52, 0x1e, 0xa7, 0xbd, 0x7f,
0xee, 0xfe, 0xf5, 0xf7, 0xb7, 0x4d, 0x94, 0x4a, 0x4d, 0x92, 0xdf, 0xc4, 0x6b, 0xb7, 0x39, 0x48,
0xbc, 0x56, 0xba, 0xb8, 0xe9, 0x95, 0x5c, 0xfb, 0xfc, 0x5c, 0x69, 0x69, 0xbc, 0x9d, 0xef, 0xe3,
0xb1, 0x27, 0x48, 0xbc, 0x61, 0xc9, 0xb7, 0x3b, 0x37, 0x6c, 0xca, 0x05, 0x24, 0x8e, 0x42, 0xb8,
0x6c, 0xf2, 0x5b, 0x7b, 0x78, 0x09, 0x90, 0x78, 0x25, 0x32, 0x7b, 0xa5, 0x10, 0x2a, 0x48, 0xe3,
0xfb, 0x4f, 0x39, 0x32, 0xaa, 0x00, 0x89, 0x37, 0x99, 0x8c, 0x6b, 0x6f, 0xfc, 0xd2, 0x38, 0x40,
0xe2, 0x33, 0x70, 0xa3, 0x08, 0xa4, 0xf1, 0x19, 0xbe, 0xc7, 0x07, 0x95, 0x09, 0x12, 0x5f, 0x86,
0x93, 0xcc, 0x1a, 0xff, 0x3b, 0x69, 0xbc, 0x0a, 0x5e, 0x6a, 0x5a, 0x20, 0xf1, 0x36, 0x79, 0x53,
0xfd, 0x37, 0xac, 0xe7, 0x75, 0xfc, 0x53, 0xb7, 0x2b, 0x48, 0x7c, 0x7d, 0xce, 0x14, 0x41, 0x86,
0x94, 0x20, 0xf2, 0x43, 0xeb, 0xf9, 0x3d, 0xe0, 0x04, 0x89, 0x4f, 0x16, 0x41, 0x9f, 0xa9, 0x92,
0xa7, 0x0a, 0x2a, 0xc3, 0x34, 0x0e, 0x90, 0x38, 0x90, 0x3d, 0x17, 0x92, 0x2c, 0x48, 0x1c, 0x53,
0xb9, 0x55, 0x04, 0xab, 0xa5, 0xf1, 0xb7, 0x15, 0x7c, 0x07, 0x23, 0x0a, 0x90, 0x38, 0x9a, 0x16,
0xf9, 0xa1, 0x87, 0x9c, 0x5f, 0x14, 0x12, 0x48, 0x1c, 0xc8, 0x9b, 0xeb, 0x3d, 0xff, 0x97, 0xff,
0x33, 0x8b, 0xfd, 0x6f, 0x6f, 0x9e, 0xa8, 0x5e, 0x90, 0x78, 0x7d, 0x5c, 0x2a, 0x82, 0xef, 0x24,
0xf8, 0xe2, 0x40, 0x1a, 0x2f, 0x79, 0x6e, 0xfc, 0xb3, 0x0a, 0x06, 0x89, 0xd7, 0x27, 0x2d, 0xfb,
0xa7, 0x0c, 0x49, 0xb3, 0xf7, 0x22, 0x37, 0xad, 0x02, 0x12, 0x07, 0x0a, 0x26, 0xef, 0x69, 0x15,
0x1b, 0x62, 0x81, 0xc4, 0x25, 0x4f, 0x65, 0xd2, 0xd8, 0xc1, 0xca, 0x20, 0x71, 0x45, 0x00, 0x9d,
0x1b, 0x40, 0xe2, 0x40, 0x39, 0x94, 0x9a, 0xc6, 0x8d, 0x22, 0x40, 0xe2, 0xcd, 0xe0, 0xe5, 0xa3,
0x52, 0xa7, 0x55, 0x8c, 0x22, 0x40, 0xe2, 0x88, 0xb0, 0x72, 0xa5, 0x68, 0x91, 0x03, 0x24, 0xde,
0x3c, 0x0e, 0xa9, 0x00, 0x48, 0x1c, 0x05, 0x27, 0x50, 0x12, 0x97, 0xc6, 0x41, 0xe2, 0x00, 0xb2,
0xeb, 0x78, 0x74, 0x3a, 0x20, 0xf1, 0x8a, 0xd0, 0xa0, 0xa5, 0x71, 0x90, 0xb8, 0x22, 0xa8, 0x52,
0xee, 0xaf, 0x15, 0xc2, 0x4f, 0x5c, 0x16, 0x25, 0x72, 0x69, 0x1c, 0x24, 0xde, 0x34, 0x24, 0xfe,
0xb3, 0x14, 0xad, 0xd8, 0x01, 0x89, 0xa3, 0x18, 0x9e, 0x2b, 0x82, 0x81, 0xe9, 0x56, 0xc2, 0x45,
0xa1, 0x1c, 0x2b, 0x02, 0x34, 0x27, 0xf2, 0x7d, 0xb2, 0xde, 0xc4, 0x5d, 0x11, 0x2f, 0xdc, 0xf4,
0xbd, 0xce, 0x34, 0x1d, 0xd3, 0x45, 0x15, 0x27, 0x28, 0x91, 0x38, 0x0a, 0xc2, 0x1b, 0x9b, 0x2d,
0x74, 0x38, 0xdb, 0xa5, 0xfd, 0x21, 0x22, 0x5e, 0x26, 0xbe, 0x92, 0x37, 0xb1, 0x89, 0x37, 0xbd,
0x46, 0x33, 0x20, 0x71, 0x24, 0x69, 0xfc, 0xcf, 0x14, 0x42, 0x23, 0x69, 0x7c, 0xcd, 0xbf, 0x49,
0xe8, 0x59, 0x60, 0x4e, 0xfc, 0x30, 0x8e, 0xc6, 0xaa, 0x55, 0xe4, 0xfb, 0x65, 0xf5, 0x49, 0x21,
0xf5, 0x10, 0xfa, 0xb7, 0xff, 0x40, 0xe2, 0x99, 0xe2, 0xed, 0xc7, 0x36, 0xf1, 0x70, 0x78, 0x9c,
0xd4, 0x75, 0x7e, 0x24, 0x9e, 0x5d, 0x62, 0xbb, 0xc9, 0xb6, 0xc1, 0x60, 0x2a, 0xd7, 0x05, 0x94,
0xf1, 0x69, 0x71, 0x9d, 0x9f, 0x64, 0x4e, 0xe2, 0xd2, 0xfa, 0xc4, 0x6e, 0x07, 0x7d, 0x4b, 0xea,
0x45, 0xf6, 0x9d, 0x65, 0xfa, 0x10, 0xd1, 0x45, 0x17, 0x47, 0xbf, 0xfc, 0x9b, 0xb3, 0x93, 0x20,
0xf3, 0x45, 0xf0, 0x60, 0xb3, 0x44, 0x89, 0xef, 0x6b, 0x18, 0x5d, 0xbc, 0x57, 0x1d, 0x83, 0x94,
0x76, 0x54, 0xad, 0x68, 0xfa, 0x3c, 0x78, 0xbc, 0xef, 0x24, 0xe6, 0x7d, 0x3b, 0xf4, 0xe1, 0x33,
0x3c, 0x08, 0x95, 0xc4, 0x81, 0x55, 0x64, 0xb7, 0x7e, 0x1a, 0x3f, 0x1a, 0xfc, 0xf3, 0xa9, 0x84,
0x99, 0xf2, 0xb3, 0xa4, 0x72, 0x49, 0x1c, 0x11, 0xb1, 0x89, 0x33, 0x85, 0xb0, 0x42, 0x22, 0x5f,
0x7b, 0xd9, 0xe1, 0xc3, 0xdf, 0xfe, 0xf9, 0x1a, 0xcf, 0xa3, 0x8b, 0x8f, 0xab, 0x74, 0x24, 0x63,
0xa4, 0x2c, 0x95, 0x93, 0x78, 0xa6, 0x2c, 0xb9, 0x0c, 0xf1, 0x6a, 0xcf, 0xff, 0x9d, 0xab, 0x8a,
0x59, 0x3b, 0xd0, 0xd7, 0xab, 0x4f, 0x57, 0xe5, 0x24, 0xbf, 0xc7, 0x8e, 0xe5, 0x5d, 0xc4, 0xd7,
0x97, 0x81, 0x86, 0xc9, 0x7c, 0x99, 0x0e, 0xa8, 0x72, 0xf4, 0x86, 0x69, 0x86, 0x81, 0xb7, 0x8b,
0xbd, 0x60, 0xb3, 0x7f, 0x3e, 0x5c, 0x7d, 0xce, 0x5d, 0xd7, 0xca, 0x78, 0x4a, 0x3b, 0x51, 0xa6,
0x33, 0x60, 0x4e, 0x3c, 0x0d, 0x4f, 0x15, 0x41, 0x25, 0xd8, 0x24, 0x6b, 0x5a, 0xd9, 0x8d, 0x11,
0xf2, 0xfd, 0x2a, 0x16, 0xd3, 0x84, 0x24, 0xae, 0x01, 0x29, 0x84, 0xcc, 0x13, 0x27, 0x99, 0xef,
0xe3, 0xca, 0x92, 0x44, 0x12, 0x27, 0x0f, 0x2c, 0xd7, 0x21, 0xaa, 0x8b, 0xbe, 0xe5, 0x78, 0x3a,
0xea, 0x3e, 0x57, 0xbe, 0x24, 0x0e, 0x2c, 0x20, 0x72, 0x87, 0x6f, 0x1c, 0x2e, 0xc7, 0x9b, 0x89,
0xd3, 0x2c, 0x84, 0x4e, 0xe2, 0x84, 0x83, 0xd9, 0xca, 0x75, 0xa3, 0x90, 0x06, 0x96, 0xe7, 0x54,
0xa1, 0x83, 0xc4, 0x8b, 0xc5, 0x0d, 0xac, 0x5e, 0x6a, 0x14, 0x3a, 0x99, 0x93, 0x38, 0xb0, 0xfa,
0x28, 0x87, 0x54, 0xc8, 0x9c, 0xc4, 0x2b, 0xb8, 0x15, 0x41, 0xe4, 0x58, 0x4f, 0xe6, 0x0d, 0x97,
0x3f, 0x89, 0xa7, 0xb9, 0x01, 0xe7, 0x7d, 0x8b, 0x8f, 0x20, 0xca, 0x10, 0x39, 0xd6, 0x93, 0x79,
0xc3, 0xe9, 0x9c, 0xc4, 0xc9, 0x05, 0x3a, 0x5b, 0x32, 0x27, 0x71, 0x40, 0x87, 0x49, 0xe4, 0x33,
0xca, 0xdc, 0xbc, 0x39, 0x89, 0x17, 0x9c, 0xee, 0xf6, 0xbd, 0x8e, 0x7c, 0xa1, 0x80, 0xb2, 0x14,
0xb9, 0x57, 0xc8, 0x73, 0x4a, 0xe7, 0x95, 0xcb, 0x9c, 0xc4, 0xf3, 0xe7, 0x6a, 0xcf, 0x4d, 0xfd,
0x56, 0xf1, 0xac, 0xa4, 0x93, 0xb1, 0x75, 0x86, 0x65, 0x3a, 0xd2, 0x7d, 0x32, 0xaf, 0x4c, 0xe8,
0x24, 0x0e, 0x0c, 0x97, 0xc8, 0xe1, 0x07, 0xd9, 0xa6, 0x55, 0x96, 0x49, 0xe5, 0xe6, 0xcd, 0x49,
0xbc, 0xb9, 0x34, 0x82, 0xe5, 0xca, 0x9f, 0xc8, 0xf3, 0x17, 0x7a, 0x05, 0x75, 0x44, 0xe2, 0x39,
0x43, 0x02, 0xea, 0x10, 0x63, 0x3a, 0xd7, 0xeb, 0x51, 0xa9, 0x7c, 0x13, 0x5f, 0x4a, 0xfc, 0xca,
0xd2, 0x5c, 0x8a, 0x86, 0x38, 0x57, 0x2a, 0x76, 0x00, 0x44, 0x5d, 0x92, 0x56, 0x67, 0x6b, 0xd4,
0xcf, 0x59, 0x8c, 0x7b, 0x46, 0xb1, 0xdc, 0x41, 0x2f, 0x24, 0x5e, 0xa9, 0xc4, 0x09, 0xbc, 0xe6,
0xb4, 0x7d, 0xfa, 0xf5, 0x94, 0x79, 0x94, 0x30, 0x2a, 0xca, 0xbc, 0xbd, 0x99, 0x4e, 0x01, 0xd2,
0x0c, 0xe1, 0x87, 0xf0, 0xd9, 0xde, 0x1f, 0x45, 0xd4, 0xd3, 0xa3, 0xfc, 0x33, 0xae, 0x2b, 0x89,
0x4e, 0x12, 0xc7, 0xda, 0x49, 0xaf, 0x92, 0x44, 0xd8, 0x4c, 0x5d, 0x65, 0x56, 0x0f, 0x6e, 0x0a,
0x12, 0x47, 0x49, 0x22, 0x27, 0xfa, 0x7c, 0xea, 0x2c, 0x93, 0xb2, 0x56, 0xe1, 0x39, 0x4a, 0x9c,
0xc0, 0x89, 0x3c, 0x2d, 0xe7, 0xd1, 0xc5, 0x47, 0x15, 0xb3, 0xb7, 0xce, 0x5e, 0xc7, 0xd8, 0x43,
0x3e, 0x56, 0x6e, 0x93, 0x84, 0x40, 0xe2, 0x68, 0x43, 0xe4, 0xdb, 0xb8, 0x8c, 0x2e, 0x5e, 0xa9,
0xac, 0xa4, 0x75, 0xb7, 0x78, 0x99, 0x12, 0x42, 0x6e, 0x12, 0x27, 0x70, 0x09, 0x2f, 0x07, 0xdc,
0x6b, 0xe9, 0x3b, 0xe2, 0x99, 0xca, 0x54, 0x45, 0x91, 0x38, 0xa4, 0x74, 0x42, 0x2f, 0x58, 0xe6,
0xa4, 0x40, 0xe2, 0x58, 0xff, 0xfe, 0xfa, 0x14, 0x11, 0xcf, 0xab, 0xfb, 0x5e, 0xb5, 0xdd, 0xaf,
0x29, 0x65, 0x9e, 0xb0, 0x6c, 0x48, 0x21, 0x27, 0x89, 0x1f, 0x7a, 0xbb, 0x8c, 0xc4, 0x71, 0x7f,
0x9f, 0x7c, 0x88, 0x88, 0x97, 0x44, 0x4f, 0xe6, 0x24, 0x9e, 0x9f, 0xc4, 0xa5, 0x70, 0xac, 0x3b,
0xd4, 0xcf, 0x4d, 0xe6, 0xf7, 0xc1, 0xe6, 0x2c, 0x22, 0xde, 0xfc, 0xf0, 0x3f, 0xd7, 0xd1, 0xc5,
0x8b, 0x2a, 0xca, 0x7e, 0x62, 0xdb, 0x3e, 0xd6, 0x0a, 0x80, 0xca, 0x93, 0xec, 0xf8, 0xfd, 0x43,
0x72, 0x16, 0xe2, 0xf3, 0x9f, 0x7e, 0x67, 0xe9, 0xa0, 0xf3, 0xed, 0xdf, 0xfb, 0xf6, 0x5a, 0xf6,
0x5d, 0xc7, 0x0c, 0x9d, 0xae, 0x74, 0x27, 0x89, 0x03, 0x0f, 0xf7, 0xdf, 0x49, 0x44, 0x7c, 0x6e,
0xa6, 0x73, 0xcb, 0xc9, 0x29, 0x13, 0xae, 0x57, 0x12, 0x07, 0xf0, 0x20, 0x92, 0x9b, 0x9f, 0x82,
0x5d, 0xa9, 0xd3, 0x35, 0xa5, 0x05, 0xa2, 0x4d, 0xdc, 0x8d, 0xbd, 0x2e, 0xe9, 0x2e, 0x97, 0x24,
0x2e, 0x85, 0xa3, 0xa6, 0x36, 0x51, 0x16, 0x17, 0xab, 0x1c, 0x75, 0x98, 0x28, 0x8d, 0x4b, 0xe2,
0x00, 0xc6, 0xa4, 0xf6, 0x9a, 0x4e, 0x36, 0x7a, 0x13, 0x9b, 0xaf, 0x0f, 0x4e, 0x0b, 0x0c, 0x4c,
0x24, 0x6e, 0xe8, 0x07, 0x2c, 0x23, 0xfa, 0x12, 0xde, 0x5e, 0x7d, 0x68, 0x8b, 0x05, 0xb5, 0x3b,
0x12, 0x07, 0xb0, 0x94, 0xd4, 0xdf, 0x47, 0x1c, 0x38, 0x64, 0x3a, 0x17, 0xd1, 0xf7, 0x5d, 0x6d,
0x42, 0xe2, 0x00, 0xd0, 0x43, 0xf4, 0x6b, 0xae, 0x9c, 0xb9, 0x17, 0x7a, 0xf7, 0xf5, 0xda, 0xe6,
0xfc, 0x3b, 0x27, 0x63, 0x4e, 0x7c, 0x32, 0x54, 0x1f, 0xda, 0x2b, 0xf7, 0x19, 0x36, 0xa6, 0xfa,
0x6c, 0x53, 0x29, 0xc0, 0xf4, 0xf6, 0x99, 0xb6, 0x93, 0x99, 0x73, 0x8b, 0x8d, 0x51, 0x3b, 0x20,
0x4a, 0xe2, 0x00, 0x4a, 0x4f, 0xef, 0xbb, 0xde, 0xf6, 0x4c, 0xbf, 0x27, 0xcd, 0x84, 0xa5, 0x80,
0x3d, 0x18, 0xb5, 0xe7, 0x3b, 0x89, 0x03, 0xa8, 0x55, 0xee, 0x2f, 0x66, 0x49, 0xf0, 0x73, 0x89,
0x7c, 0xe4, 0x74, 0x8d, 0x83, 0x92, 0x01, 0xb4, 0x9b, 0xe0, 0xbf, 0xfd, 0x37, 0x4c, 0xe4, 0x5f,
0x66, 0x1b, 0x41, 0x90, 0x78, 0x41, 0x38, 0xed, 0x1c, 0xc8, 0x4b, 0xea, 0x11, 0x17, 0x3d, 0x7f,
0xfa, 0xe9, 0xd7, 0x87, 0xad, 0x53, 0xda, 0xff, 0x97, 0x14, 0x97, 0x4d, 0xe2, 0x87, 0x0b, 0xfa,
0x6c, 0xc5, 0x1b, 0x0a, 0xc0, 0xb2, 0xed, 0xee, 0xed, 0x80, 0xb6, 0x37, 0x75, 0xb5, 0xcc, 0x53,
0x12, 0x5f, 0x86, 0x79, 0x76, 0x7f, 0x5b, 0xab, 0x73, 0x00, 0xb0, 0x7e, 0x88, 0x4a, 0x38, 0x0a,
0x27, 0xf1, 0x1c, 0x3b, 0x07, 0x29, 0x1c, 0x28, 0x43, 0xe4, 0x19, 0x4c, 0x89, 0x92, 0x38, 0x00,
0x14, 0x1c, 0xa8, 0x48, 0x1c, 0x00, 0x0a, 0x16, 0x39, 0x89, 0xaf, 0xc1, 0xfd, 0xfe, 0x10, 0xbb,
0xb8, 0x54, 0x40, 0x00, 0x48, 0x3c, 0x77, 0x8d, 0xef, 0xee, 0xf5, 0x5f, 0x29, 0x1e, 0x40, 0x1a,
0x27, 0xf1, 0x46, 0x86, 0x52, 0x00, 0x24, 0x71, 0x00, 0xc0, 0xd8, 0x40, 0x37, 0xf4, 0xa5, 0x9f,
0xfd, 0xd3, 0xa9, 0x24, 0x9e, 0x1c, 0x6f, 0x55, 0x02, 0xd8, 0xcf, 0xd0, 0x97, 0x7e, 0x92, 0xee,
0x97, 0x4e, 0xe2, 0xd3, 0x05, 0xee, 0x41, 0x24, 0xd0, 0x0e, 0xe7, 0xb9, 0x5d, 0x10, 0x89, 0xef,
0x16, 0x78, 0xbf, 0x21, 0x92, 0x07, 0x91, 0x40, 0x3b, 0x74, 0x3b, 0xb6, 0x8b, 0x5d, 0x71, 0xc4,
0x6e, 0x2b, 0xda, 0xcc, 0x2a, 0x04, 0x00, 0x24, 0xf1, 0xa5, 0x04, 0x3e, 0x66, 0xe5, 0x8a, 0x93,
0x7c, 0x80, 0xd2, 0xd3, 0x78, 0x56, 0xed, 0x94, 0xc4, 0x25, 0x70, 0x00, 0x92, 0x78, 0x83, 0x02,
0x1f, 0x97, 0xc2, 0x4f, 0x14, 0x34, 0x20, 0xc9, 0xa7, 0xfc, 0x38, 0x73, 0xe2, 0xcb, 0x9e, 0xa2,
0xfd, 0xb9, 0x94, 0x21, 0x1a, 0x80, 0x32, 0x68, 0x5b, 0xe2, 0x63, 0xa7, 0x4f, 0x08, 0x17, 0xe0,
0x8d, 0x4c, 0xd2, 0xf9, 0x13, 0x15, 0x41, 0xe0, 0x00, 0x56, 0x14, 0xb8, 0x24, 0xbe, 0x60, 0x25,
0x10, 0x38, 0xd0, 0xaa, 0xbc, 0xbf, 0x44, 0xa2, 0xe3, 0xd4, 0x48, 0x9c, 0xbc, 0x01, 0x94, 0x9e,
0xbc, 0xbb, 0x38, 0x4a, 0xf5, 0xd9, 0x47, 0x2a, 0x61, 0x61, 0x81, 0x5b, 0x27, 0x0e, 0xd4, 0xe7,
0x8d, 0xa9, 0xef, 0x8c, 0x4c, 0x68, 0xfb, 0xc7, 0x2a, 0x41, 0x02, 0x07, 0x30, 0xc1, 0x1b, 0x29,
0x5e, 0xfa, 0xdb, 0xc4, 0xeb, 0xe8, 0xe2, 0xfd, 0x98, 0x4b, 0x7e, 0x52, 0x61, 0x25, 0x7c, 0x48,
0x92, 0xbe, 0xe7, 0x13, 0xf8, 0xa9, 0x96, 0x02, 0x34, 0x2c, 0xf0, 0xed, 0x8c, 0xde, 0x9e, 0xf6,
0xa8, 0xf9, 0x4a, 0x58, 0x23, 0x75, 0xef, 0xbe, 0xce, 0xeb, 0xe8, 0xe2, 0x85, 0xd6, 0x04, 0x14,
0xe0, 0x8d, 0xb1, 0xce, 0xd8, 0xf5, 0xf7, 0x46, 0x7e, 0xde, 0x71, 0xd3, 0x95, 0x10, 0xd1, 0x8d,
0x1d, 0xc2, 0xcc, 0xc4, 0x73, 0x2d, 0x0a, 0xc8, 0xd4, 0x1d, 0x53, 0x82, 0xde, 0x26, 0xde, 0x45,
0xc4, 0x9b, 0x39, 0xbe, 0xc2, 0x71, 0x33, 0x15, 0xb0, 0x56, 0xea, 0x06, 0x50, 0xae, 0x3f, 0xc6,
0xa7, 0xed, 0x4f, 0x4b, 0x85, 0xb2, 0xe3, 0x6a, 0x0b, 0x9f, 0xbc, 0x01, 0xa4, 0x1f, 0xbd, 0x2f,
0xfb, 0x99, 0xd5, 0x49, 0x7c, 0x7c, 0x21, 0xdd, 0x46, 0x17, 0xcf, 0xdc, 0xb9, 0x00, 0x26, 0x38,
0xe7, 0x7a, 0xb6, 0x74, 0x5d, 0xfd, 0x12, 0xc3, 0xf1, 0xf2, 0xbe, 0x88, 0x2e, 0xde, 0xba, 0x13,
0x01, 0x24, 0x20, 0x3b, 0x81, 0xe7, 0x2f, 0x71, 0xd3, 0x26, 0x00, 0x6a, 0x26, 0x81, 0xab, 0xf2,
0x94, 0xb8, 0x57, 0xe4, 0x01, 0x90, 0x77, 0x61, 0x12, 0x9f, 0xba, 0x04, 0x87, 0xbc, 0x01, 0x0c,
0xf1, 0xc5, 0x92, 0x0f, 0x22, 0x67, 0xf4, 0xd3, 0xfa, 0x12, 0xcf, 0x6d, 0x6f, 0x13, 0x00, 0x44,
0x3e, 0x9c, 0xd3, 0xe8, 0xe2, 0x66, 0x8d, 0xaf, 0xb1, 0x9e, 0xc4, 0xc9, 0x1b, 0x40, 0xc9, 0x22,
0xcf, 0xc4, 0x41, 0xcb, 0x49, 0x3c, 0x55, 0x8f, 0x47, 0xde, 0x00, 0x52, 0x8b, 0xfc, 0x7b, 0x57,
0x9d, 0x44, 0x7c, 0x77, 0x1e, 0xee, 0xcd, 0x5a, 0x29, 0x7b, 0x5d, 0x89, 0xa7, 0x9e, 0x6f, 0x22,
0x6f, 0x00, 0xcb, 0x48, 0xfd, 0x26, 0x22, 0x5f, 0x69, 0x2f, 0x23, 0xf1, 0x94, 0x02, 0xef, 0x6c,
0xd2, 0x05, 0x00, 0xcb, 0x49, 0xdc, 0x3e, 0xde, 0x04, 0x0e, 0xa0, 0x50, 0x89, 0x6f, 0xbe, 0x9b,
0x47, 0x22, 0xee, 0xc7, 0x72, 0x99, 0x6d, 0x07, 0x33, 0x00, 0x24, 0x9e, 0x92, 0xcf, 0xe4, 0x3d,
0x21, 0x7d, 0x9b, 0xf7, 0x07, 0xb0, 0xaa, 0xc4, 0x87, 0x2c, 0xd7, 0x49, 0x7f, 0x76, 0xe5, 0xb2,
0xa7, 0x51, 0x1f, 0xba, 0xfe, 0xe1, 0x53, 0x27, 0x17, 0x6e, 0x47, 0x00, 0x43, 0x49, 0x9f, 0xfc,
0xe6, 0xdc, 0xa3, 0xf7, 0xfe, 0xf3, 0x3f, 0x44, 0xc4, 0xcb, 0xca, 0xea, 0x21, 0xb7, 0xc3, 0x29,
0x00, 0x34, 0x99, 0xc4, 0xe7, 0xa2, 0xee, 0x07, 0x82, 0xb7, 0x04, 0x0e, 0x20, 0xa7, 0x24, 0x7e,
0x16, 0x11, 0x57, 0x83, 0xd2, 0x78, 0xab, 0xab, 0x36, 0xcc, 0x81, 0x03, 0xc8, 0x4e, 0xe2, 0x2d,
0x4b, 0x99, 0xbc, 0x01, 0x54, 0x21, 0xf1, 0x7c, 0x45, 0x7e, 0x7f, 0x48, 0x44, 0xe2, 0xd3, 0xa6,
0x01, 0xa0, 0x3e, 0x89, 0xdf, 0x8b, 0xfc, 0x24, 0xc6, 0x2c, 0x3b, 0x1c, 0x93, 0x6d, 0xcd, 0x2b,
0x03, 0x20, 0xf1, 0x85, 0x18, 0xbf, 0xc2, 0xe4, 0x3c, 0xba, 0xf8, 0xa8, 0xda, 0x00, 0x20, 0x57,
0x36, 0x71, 0x32, 0xe9, 0xcd, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x59, 0xf9, 0x7f, 0xd1,
0xfd, 0x4a, 0x75, 0xe6, 0x0f, 0x4f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
0x42, 0x60, 0x82
};
 
#endif
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/virtualanode.C
5,6 → 5,7
#include "automation.h"
#include "edl.h"
#include "edlsession.h"
#include "clip.h"
#include "floatautos.h"
#include "mwindow.h"
#include "module.h"
25,30 → 26,14
Module *real_module,
Plugin *real_plugin,
Track *track,
VirtualNode *parent_module,
double *buffer_in[],
double *buffer_out[],
int input_is_master,
int output_is_master,
int in,
int out)
VirtualNode *parent_module)
: VirtualNode(renderengine,
vconsole,
real_module,
real_plugin,
track,
parent_module,
input_is_master,
output_is_master,
in,
out)
parent_module)
{
for(int i = 0; i < RING_BUFFERS; i++)
{
this->buffer_in[i] = buffer_in[i];
this->buffer_out[i] = buffer_out[i];
}
 
for(int i = 0; i < MAXCHANNELS; i++)
{
pan_before[i] = pan_after[i] = 0;
57,17 → 42,12
 
VirtualANode::~VirtualANode()
{
if(!shared_output) delete [] buffer_out[0];
if(!shared_input) delete [] buffer_in[0];
}
 
 
 
 
 
 
 
 
VirtualNode* VirtualANode::create_module(Plugin *real_plugin,
Module *real_module,
Track *track)
77,13 → 57,7
real_module,
0,
track,
this,
data_in_input ? buffer_in : buffer_out,
buffer_out,
data_in_input ? input_is_master : output_is_master,
output_is_master,
real_plugin->in,
real_plugin->out);
this);
}
 
 
94,146 → 68,185
0,
real_plugin,
track,
this,
data_in_input ? buffer_in : buffer_out,
buffer_out,
data_in_input ? input_is_master : output_is_master,
output_is_master,
real_plugin->in,
real_plugin->out);
this);
}
 
 
void VirtualANode::new_output_buffer()
{
buffer_out[0] = new double[renderengine->edl->session->audio_module_fragment];
}
 
void VirtualANode::new_input_buffer()
int VirtualANode::read_data(double *output_temp,
int64_t start_position,
int64_t len,
int64_t sample_rate)
{
buffer_in[0] = new double[renderengine->edl->session->audio_module_fragment];
}
VirtualNode *previous_plugin = 0;
 
double* VirtualANode::get_module_input(int ring_buffer, int64_t fragment_offset)
{
double *result;
if(data_in_input)
//printf("VirtualANode::read_data 1 %p\n", this);
// This is a plugin on parent module with a preceeding effect.
// Get data from preceeding effect on parent module.
if(parent_node && (previous_plugin = parent_node->get_previous_plugin(this)))
{
if(input_is_master)
result = buffer_in[ring_buffer] + fragment_offset;
else
result = buffer_in[0];
//printf("VirtualANode::read_data 2\n");
((VirtualANode*)previous_plugin)->render(output_temp,
start_position,
len,
sample_rate);
//printf("VirtualANode::read_data 3\n");
}
else
// First plugin on parent module.
// Read data from parent module
if(parent_node)
{
if(output_is_master)
result = buffer_out[ring_buffer] + fragment_offset;
else
result = buffer_out[0];
((VirtualANode*)parent_node)->read_data(output_temp,
start_position,
len,
sample_rate);
}
return result;
}
 
double* VirtualANode::get_module_output(int ring_buffer, int64_t fragment_position)
{
double *result;
 
if(output_is_master)
result = buffer_out[ring_buffer] + fragment_position;
else
result = buffer_out[0];
 
return result;
// This is the first node in the tree
{
//printf("VirtualANode::read_data 8\n");
((AModule*)real_module)->render(output_temp,
start_position,
len,
renderengine->command->get_direction(),
sample_rate,
0);
//printf("VirtualANode::read_data 9\n");
}
//printf("VirtualANode::read_data 100 %p\n", this);
return 0;
}
 
int VirtualANode::render(double **audio_out,
int64_t audio_out_position,
int ring_buffer,
int64_t fragment_position,
int64_t fragment_len,
int64_t real_position,
int64_t source_length,
int reverse,
ARender *arender)
int VirtualANode::render(double *output_temp,
int64_t start_position,
int64_t len,
int64_t sample_rate)
{
ARender *arender = ((VirtualAConsole*)vconsole)->arender;
if(real_module)
{
render_as_module(audio_out,
audio_out_position,
ring_buffer,
fragment_position,
fragment_len,
real_position,
arender);
render_as_module(arender->audio_out,
output_temp,
start_position,
len,
sample_rate);
}
else
if(real_plugin)
{
render_as_plugin(real_position,
fragment_position,
fragment_len,
ring_buffer);
render_as_plugin(output_temp,
start_position,
len,
sample_rate);
}
return 0;
}
 
void VirtualANode::render_as_plugin(int64_t real_position,
int64_t fragment_position,
int64_t fragment_len,
int ring_buffer)
void VirtualANode::render_as_plugin(double *output_temp,
int64_t start_position,
int64_t len,
int64_t sample_rate)
{
real_position += track->nudge;
((AAttachmentPoint*)attachment)->render(buffer_in[ring_buffer] + fragment_position,
buffer_out[ring_buffer] + fragment_position,
fragment_len,
real_position);
if(!attachment ||
!real_plugin ||
!real_plugin->on) return;
//printf("VirtualANode::render_as_plugin 1 %p\n", this);
 
//printf("VirtualANode::render_as_plugin 1 %p\n", output_temp);
// If we're the first plugin in the parent module, data needs to be read from
// what comes before the parent module. Otherwise, data needs to come from the
// previous plugin.
((AAttachmentPoint*)attachment)->render(
output_temp,
plugin_buffer_number,
start_position,
len,
sample_rate);
//printf("VirtualANode::render_as_plugin 100 %p\n", this);
}
 
int VirtualANode::render_as_module(double **audio_out,
int64_t audio_out_position,
int ring_buffer,
int64_t fragment_position,
int64_t fragment_len,
int64_t real_position,
ARender *arender)
double *output_temp,
int64_t start_position,
int64_t len,
int64_t sample_rate)
{
int in_output = 0;
double *buffer_in = get_module_input(ring_buffer, fragment_position);
double *buffer_out = get_module_output(ring_buffer, fragment_position);
int direction = renderengine->command->get_direction();
EDL *edl = vconsole->renderengine->edl;
 
// Render fade
render_fade(buffer_in,
buffer_out,
fragment_len,
real_position,
//printf("VirtualANode::render_as_module 1 %p\n", this);
 
// Process last subnode. This calls read_data, propogates up the chain
// of subnodes, and finishes the chain.
if(subnodes.total)
{
VirtualANode *node = (VirtualANode*)subnodes.values[subnodes.total - 1];
node->render(output_temp,
start_position,
len,
sample_rate);
}
else
// Read data from previous entity
{
read_data(output_temp,
start_position,
len,
sample_rate);
}
 
 
render_fade(output_temp,
len,
start_position,
sample_rate,
track->automation->fade_autos,
direction,
1);
0);
 
// Get the peak but don't limit
// Calculate position relative to project for meters
int64_t project_sample_rate = edl->session->sample_rate;
int64_t start_position_project = start_position *
project_sample_rate /
sample_rate;
if(real_module && renderengine->command->realtime)
{
ARender *arender = ((VirtualAConsole*)vconsole)->arender;
double max = 0, min = 0, peak;
int64_t meter_render_start; // Starting sample of meter block
int64_t meter_render_end; // Ending sample of meter block
// Starting sample of meter block
int64_t meter_render_start;
// Ending sample of meter block
int64_t meter_render_end;
int64_t current_level = ((AModule*)real_module)->current_level;
// Number of samples in each meter fragment normalized to requested rate
int meter_render_fragment = arender->meter_render_fragment *
sample_rate /
project_sample_rate;
 
// Scan fragment in meter sized fragments
for(int i = 0; i < fragment_len; )
for(int i = 0; i < len; )
{
meter_render_start = i;
meter_render_end = i + arender->meter_render_fragment;
if(meter_render_end > fragment_len) meter_render_end = fragment_len;
meter_render_end = i + meter_render_fragment;
if(meter_render_end > len)
meter_render_end = len;
max = 0;
min = 0;
// Number of samples into the fragment this meter sized fragment is,
// normalized to project sample rate.
int64_t meter_render_start_project = meter_render_start *
project_sample_rate /
sample_rate;
 
// Scan meter sized fragment
for( ; i < meter_render_end; i++)
{
if(buffer_out[i] > max) max = buffer_out[i];
if(output_temp[i] > max) max = output_temp[i];
else
if(buffer_out[i] < min) min = buffer_out[i];
if(output_temp[i] < min) min = output_temp[i];
}
 
if(fabs(max) > fabs(min))
244,9 → 257,9
((AModule*)real_module)->level_history[current_level] =
peak;
((AModule*)real_module)->level_samples[current_level] =
(renderengine->command->get_direction() == PLAY_FORWARD) ?
(real_position + meter_render_start) :
(real_position - meter_render_start);
(direction == PLAY_FORWARD) ?
(start_position_project + meter_render_start_project) :
(start_position_project - meter_render_start_project);
((AModule*)real_module)->current_level =
arender->get_next_peak(((AModule*)real_module)->current_level);
}
254,88 → 267,124
 
// process pans and copy the output to the output channels
// Keep rendering unmuted fragments until finished.
int mute_constant;
int64_t mute_fragment;
int64_t mute_position = 0;
 
for(int i = 0; i < fragment_len; )
for(int i = 0; i < len; )
{
mute_fragment = fragment_len - i;
int mute_constant;
int64_t mute_fragment = len - i;
int64_t mute_fragment_project = mute_fragment *
project_sample_rate /
sample_rate;
start_position_project = start_position +
((direction == PLAY_FORWARD) ? i : -i);
start_position_project = start_position_project *
project_sample_rate /
sample_rate;
 
// How many samples until the next mute?
get_mute_fragment(real_position,
get_mute_fragment(start_position_project,
mute_constant,
mute_fragment,
mute_fragment_project,
(Autos*)track->automation->mute_autos,
direction,
1);
 
0);
// Fragment is playable
if(!mute_constant)
{
for(int i = 0;
i < MAX_CHANNELS;
i++)
for(int j = 0;
j < MAX_CHANNELS;
j++)
{
if(audio_out[i])
if(audio_out[j])
{
double *buffer = audio_out[i];
double *buffer = audio_out[j];
 
render_pan(buffer_out + mute_position,
buffer + audio_out_position + mute_position,
// printf("VirtualANode::render_as_module 4.3 %p %p %lld %lld %lld %lld %p %d %d\n",
// output_temp,
// buffer,
// mute_position,
// mute_fragment,
// start_position +
// ((direction == PLAY_FORWARD) ? i : -i),
// sample_rate,
// (Autos*)track->automation->pan_autos,
// j,
// direction);
render_pan(output_temp + mute_position,
buffer + mute_position,
mute_fragment,
real_position,
start_position,
sample_rate,
(Autos*)track->automation->pan_autos,
i,
j,
direction,
1);
0);
}
}
}
//printf("VirtualANode::render_as_module 4.4\n");
 
fragment_len -= mute_fragment;
real_position += (direction == PLAY_REVERSE) ? -mute_fragment : mute_fragment;
len -= mute_fragment;
i += mute_fragment;
mute_position += mute_fragment;
}
 
//printf("VirtualANode::render_as_module 100 %p\n", this);
return 0;
}
 
int VirtualANode::render_fade(double *input, // start of input fragment
double *output, // start of output fragment
int64_t fragment_len, // fragment length in input scale
int64_t input_position, // starting sample of input buffer in project
Autos *autos,
int direction,
int use_nudge)
int VirtualANode::render_fade(double *buffer,
int64_t len,
int64_t input_position,
int64_t sample_rate,
Autos *autos,
int direction,
int use_nudge)
{
double value, fade_value;
FloatAuto *previous = 0;
FloatAuto *next = 0;
if(use_nudge) input_position += track->nudge;
EDL *edl = vconsole->renderengine->edl;
int64_t project_sample_rate = edl->session->sample_rate;
if(use_nudge) input_position += track->nudge *
sample_rate /
project_sample_rate;
 
// Normalize input position to project sample rate here.
// Automation functions are general to video and audio so it
// can't normalize itself.
int64_t input_position_project = input_position *
project_sample_rate /
sample_rate;
int64_t len_project = len *
project_sample_rate /
sample_rate;
 
if(((FloatAutos*)autos)->automation_is_constant(input_position,
fragment_len,
if(((FloatAutos*)autos)->automation_is_constant(input_position_project,
len_project,
direction,
fade_value))
{
if(fade_value <= INFINITYGAIN)
if(fade_value <= INFINITYGAIN)
value = 0;
else
value = DB::fromdb(fade_value);
for(int64_t i = 0; i < fragment_len; i++)
for(int64_t i = 0; i < len; i++)
{
output[i] = input[i] * value;
buffer[i] *= value;
}
}
else
{
for(int64_t i = 0; i < fragment_len; i++)
for(int64_t i = 0; i < len; i++)
{
int64_t slope_len = fragment_len - i;
int64_t slope_len = len - i;
input_position_project = input_position *
project_sample_rate /
sample_rate;
 
fade_value = ((FloatAutos*)autos)->get_value(input_position,
fade_value = ((FloatAutos*)autos)->get_value(input_position_project,
direction,
previous,
next);
345,81 → 394,59
else
value = DB::fromdb(fade_value);
 
output[i] = input[i] * value;
buffer[i] *= value;
 
if(direction == PLAY_FORWARD)
input_position++;
 
else
input_position--;
}
}
 
// Get slope intercept formula for next fragment
// get_fade_automation(slope,
// intercept,
// input_position,
// slope_len,
// autos);
//
// if(slope != 0)
// {
// for(double j = 0;
// j < slope_len;
// j++, i++)
// {
// value = slope * j + intercept;
// value = DB::fromdb(value);
// output[i] = input[i] * value;
// }
// }
// else
// {
// double value = DB::fromdb(intercept);
// for(int j = 0;
// j < slope_len;
// j++, i++)
// {
// output[i] = input[i] * value;
// }
// }
//
//
// if(direction == PLAY_FORWARD)
// input_position += slope_len;
// else
// input_position -= slope_len;
// }
 
return 0;
}
 
int VirtualANode::render_pan(double *input, // start of input fragment
double *output, // start of output fragment
int64_t fragment_len, // fragment length in input scale
int64_t input_position, // starting sample of input buffer in project
Autos *autos,
int channel,
int direction,
int use_nudge)
int VirtualANode::render_pan(double *input, // start of input fragment
double *output, // start of output fragment
int64_t fragment_len, // fragment length in input scale
int64_t input_position, // starting sample of input buffer in project
int64_t sample_rate, // sample rate of input_position
Autos *autos,
int channel,
int direction,
int use_nudge)
{
double slope, intercept;
if(use_nudge) input_position += track->nudge;
double slope = 0.0;
double intercept = 1.0;
EDL *edl = vconsole->renderengine->edl;
int64_t project_sample_rate = edl->session->sample_rate;
if(use_nudge) input_position += track->nudge *
sample_rate /
project_sample_rate;
 
for(int64_t i = 0; i < fragment_len; )
for(int i = 0; i < fragment_len; )
{
int64_t slope_len = fragment_len - i;
int64_t slope_len = (fragment_len - i) *
project_sample_rate /
sample_rate;
 
// Get slope intercept formula for next fragment
get_pan_automation(slope,
intercept,
input_position,
input_position *
project_sample_rate /
sample_rate,
slope_len,
autos,
channel,
direction);
 
if(slope != 0)
slope_len = slope_len * sample_rate / project_sample_rate;
slope = slope * sample_rate / project_sample_rate;
slope_len = MIN(slope_len, fragment_len - i);
 
//printf("VirtualANode::render_pan 3 %d %lld %f %p %p\n", i, slope_len, slope, output, input);
if(!EQUIV(slope, 0))
{
for(double j = 0; j < slope_len; j++, i++)
{
440,6 → 467,8
input_position += slope_len;
else
input_position -= slope_len;
 
//printf("VirtualANode::render_pan 4\n");
}
 
return 0;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/pluginaclient.C
9,12 → 9,19
PluginAClient::PluginAClient(PluginServer *server)
: PluginClient(server)
{
sample_rate = 0;
if(server &&
server->edl &&
server->edl->session)
{
project_sample_rate = server->edl->session->sample_rate;
sample_rate = project_sample_rate;
}
else
{
project_sample_rate = 1;
sample_rate = 1;
}
}
 
PluginAClient::~PluginAClient()
55,24 → 62,89
return 0;
}
 
void PluginAClient::plugin_process_realtime(double **input,
double **output,
int64_t current_position,
int64_t fragment_size,
int64_t total_len)
int PluginAClient::process_realtime(int64_t size,
double **input_ptr,
double **output_ptr)
{
//printf("PluginAClient::plugin_process_realtime 1\n");
this->source_position = current_position;
this->total_len = total_len;
return 0;
}
 
if(is_multichannel())
process_realtime(fragment_size, input, output);
else
process_realtime(fragment_size, input[0], output[0]);
int PluginAClient::process_realtime(int64_t size,
double *input_ptr,
double *output_ptr)
{
return 0;
}
 
int PluginAClient::process_buffer(int64_t size,
double **buffer,
int64_t start_position,
int sample_rate)
{
for(int i = 0; i < PluginClient::total_in_buffers; i++)
read_samples(buffer[i],
i,
sample_rate,
source_position,
size);
process_realtime(size, buffer, buffer);
return 0;
}
 
int PluginAClient::process_buffer(int64_t size,
double *buffer,
int64_t start_position,
int sample_rate)
{
read_samples(buffer,
0,
sample_rate,
source_position,
size);
process_realtime(size, buffer, buffer);
return 0;
}
 
 
 
 
int PluginAClient::plugin_start_loop(int64_t start,
int64_t end,
int64_t buffer_size,
int total_buffers)
{
sample_rate = get_project_samplerate();
return PluginClient::plugin_start_loop(start,
end,
buffer_size,
total_buffers);
}
 
int PluginAClient::plugin_get_parameters()
{
sample_rate = get_project_samplerate();
return PluginClient::plugin_get_parameters();
}
 
 
int64_t PluginAClient::local_to_edl(int64_t position)
{
if(position < 0) return position;
return (int64_t)(position *
get_project_samplerate() /
sample_rate);
return 0;
}
 
int64_t PluginAClient::edl_to_local(int64_t position)
{
if(position < 0) return position;
return (int64_t)(position *
sample_rate /
get_project_samplerate());
}
 
 
int PluginAClient::plugin_process_loop(double **buffers, int64_t &write_length)
{
write_length = 0;
83,22 → 155,43
return process_loop(buffers[0], write_length);
}
 
int PluginAClient::read_samples(double *buffer, int channel, int64_t start_position, int64_t total_samples)
int PluginAClient::read_samples(double *buffer,
int channel,
int64_t start_position,
int64_t total_samples)
{
//printf("PluginAClient::read_samples 1\n");
return server->read_samples(buffer, channel, start_position, total_samples);
return server->read_samples(buffer,
channel,
start_position,
total_samples);
}
 
int PluginAClient::read_samples(double *buffer, int64_t start_position, int64_t total_samples)
int PluginAClient::read_samples(double *buffer,
int64_t start_position,
int64_t total_samples)
{
//printf("PluginAClient::read_samples 1\n");
return server->read_samples(buffer, start_position, total_samples);
return server->read_samples(buffer,
0,
start_position,
total_samples);
}
 
int PluginAClient::read_samples(double *buffer,
int channel,
int sample_rate,
int64_t start_position,
int64_t len)
{
return server->read_samples(buffer,
channel,
sample_rate,
start_position,
len);
}
 
 
void PluginAClient::send_render_gui(void *data, int size)
{
//printf("PluginVClient::send_render_gui 1\n");
server->send_render_gui(data, size);
}
 
107,8 → 200,18
render_gui(data, size);
}
 
int PluginAClient::get_project_samplerate()
{
return project_sample_rate;
}
 
int PluginAClient::get_samplerate()
{
return sample_rate;
}
 
 
 
 
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/filethread.C
1,4 → 1,5
#include "asset.h"
#include "bcsignals.h"
#include "condition.h"
#include "file.h"
#include "filethread.h"
84,13 → 85,18
output_lock[local_buffer]->lock("FileThread::run 1");
return_value = 0;
 
TRACE("FileThread::run 1");
 
// Timer timer;
// timer.update();
if(!last_buffer[local_buffer])
{
TRACE("FileThread::run 2");
if(output_size[local_buffer])
{
TRACE("FileThread::run 3");
file_lock->lock("FileThread::run 2");
TRACE("FileThread::run 4");
if(do_audio)
{
result = file->write_samples(audio_buffer[local_buffer],
123,6 → 129,7
}
else
done = 1;
TRACE("FileThread::run 10");
 
//printf("FileThread::run %lld\n", timer.get_difference());
input_lock[local_buffer]->unlock();
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/edlsession.C
60,8 → 60,22
 
 
 
PlaybackConfig* EDLSession::get_playback_config(int strategy, int head)
{
return playback_config[strategy].values[head];
}
 
ArrayList<PlaybackConfig*>* EDLSession::get_playback_config(int strategy)
{
return &playback_config[strategy];
}
 
int EDLSession::get_playback_heads(int strategy)
{
return playback_config[strategy].total;
}
 
 
void EDLSession::equivalent_output(EDLSession *session, double *result)
{
if(session->output_w != output_w ||
112,8 → 126,6
asset_columns[i] = defaults->get(string, 100);
}
audio_channels = defaults->get("ACHANNELS", 2);
audio_module_fragment = defaults->get("AUDIO_MODULE_FRAGMENT", 2048);
audio_read_length = defaults->get("PLAYBACK_READ_LENGTH", 131072);
audio_tracks = defaults->get("ATRACKS", 2);
auto_conf->load_defaults(defaults);
autos_follow_edits = defaults->get("AUTOS_FOLLOW_EDITS", 1);
234,8 → 246,6
defaults->update("ASSETLIST_FORMAT", assetlist_format);
defaults->update("ASPECTW", aspect_w);
defaults->update("ASPECTH", aspect_h);
defaults->update("AUDIO_MODULE_FRAGMENT", audio_module_fragment);
defaults->update("PLAYBACK_READ_LENGTH", audio_read_length);
defaults->update("ATRACKS", audio_tracks);
defaults->update("AUTOS_FOLLOW_EDITS", autos_follow_edits);
defaults->update("BRENDER_START", brender_start);
424,8 → 434,6
sprintf(string, "ASSET_COLUMN%d", i);
asset_columns[i] = file->tag.get_property(string, asset_columns[i]);
}
audio_module_fragment = file->tag.get_property("AUDIO_MODULE_FRAGMENT", audio_module_fragment);
audio_read_length = file->tag.get_property("PLAYBACK_READ_LENGTH", audio_read_length);
auto_conf->load_xml(file);
auto_keyframes = file->tag.get_property("AUTO_KEYFRAMES", auto_keyframes);
autos_follow_edits = file->tag.get_property("AUTOS_FOLLOW_EDITS", autos_follow_edits);
480,8 → 488,6
sprintf(string, "ASSET_COLUMN%d", i);
file->tag.set_property(string, asset_columns[i]);
}
file->tag.set_property("AUDIO_MODULE_FRAGMENT", audio_module_fragment);
file->tag.set_property("PLAYBACK_READ_LENGTH", audio_read_length);
auto_conf->save_xml(file);
file->tag.set_property("AUTO_KEYFRAMES", auto_keyframes);
file->tag.set_property("AUTOS_FOLLOW_EDITS", autos_follow_edits);
593,8 → 599,6
aspect_w = session->aspect_w;
aspect_h = session->aspect_h;
audio_channels = session->audio_channels;
audio_module_fragment = session->audio_module_fragment;
audio_read_length = session->audio_read_length;
audio_tracks = session->audio_tracks;
autos_follow_edits = session->autos_follow_edits;
brender_start = session->brender_start;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/plugindialog.C
502,9 → 502,10
this->dialog = dialog;
}
PluginDialogAttachNew::~PluginDialogAttachNew()
{ }
{
}
int PluginDialogAttachNew::handle_event()
{
{
dialog->attach_new(dialog->selected_available);
set_done(0);
return 1;
559,7 → 560,7
PluginDialogAttachShared::~PluginDialogAttachShared() { }
int PluginDialogAttachShared::handle_event()
{
dialog->attach_module(dialog->selected_shared);
dialog->attach_shared(dialog->selected_shared);
set_done(0);
return 1;
}
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/amodule.h
33,9 → 33,10
void create_objects();
CICache* get_cache();
int render(double *buffer,
int64_t input_len,
int64_t input_position,
int input_len,
int direction,
int sample_rate,
int use_nudge);
void reverse_buffer(double *buffer, int64_t len);
int get_buffer_size();
56,6 → 57,7
 
// Temporary buffer for rendering transitions
double *transition_temp;
int transition_temp_alloc;
};
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/virtualanode.h
2,6 → 2,7
#define VIRTUALANODE_H
 
 
#include "arender.inc"
#include "filethread.inc" // RING_BUFFERS
#include "maxchannels.h"
#include "plugin.inc"
16,63 → 17,53
Module *real_module,
Plugin *real_plugin,
Track *track,
VirtualNode *parent_module,
double *buffer_in[],
double *buffer_out[],
int input_is_master,
int output_is_master,
int in,
int out);
VirtualNode *parent_module);
 
~VirtualANode();
 
void new_output_buffer();
void new_input_buffer();
VirtualNode* create_module(Plugin *real_plugin,
Module *real_module,
Track *track);
VirtualNode* create_plugin(Plugin *real_plugin);
 
// need *arender for peak updating
int render(double **audio_out,
int64_t audio_out_position,
int double_buffer,
int64_t fragment_position,
int64_t fragment_len,
int64_t real_position,
int64_t source_length,
int reverse,
ARender *arender);
// Called by VirtualAConsole::process_buffer to process exit_nodes.
// read_data recurses down the tree.
int render(double *output_temp,
int64_t start_position,
int64_t len,
int64_t sample_rate);
 
// Pointers to data, whether drive read buffers or temp buffers
double *buffer_in[RING_BUFFERS];
double *buffer_out[RING_BUFFERS];
// Read data from whatever comes before this node.
// Calls render in either the parent node or the module for the track.
int read_data(double *output_temp,
int64_t start_position,
int64_t len,
int64_t sample_rate);
 
private:
// need *arender for peak updating
int render_as_module(double **audio_out,
int64_t audio_out_position,
int ring_buffer,
int64_t fragment_position,
int64_t fragment_len,
int64_t real_position,
ARender *arender);
void render_as_plugin(int64_t real_position,
int64_t fragment_position,
int64_t fragment_len,
int ring_buffer);
double *output_temp,
int64_t start_position,
int64_t len,
int64_t sample_rate);
void render_as_plugin(double *output_temp,
int64_t start_position,
int64_t len,
int64_t sample_rate);
 
int render_fade(double *input, // start of input fragment
double *output, // start of output fragment
int64_t buffer_len, // fragment length in input scale
int64_t input_position, // starting sample of input buffer in project
Autos *autos, // DB not used in pan
int direction,
int use_nudge);
int render_fade(double *buffer,
int64_t len,
int64_t input_position,
int64_t sample_rate,
Autos *autos,
int direction,
int use_nudge);
int render_pan(double *input, // start of input fragment
double *output, // start of output fragment
int64_t fragment_len, // fragment length in input scale
int64_t input_position, // starting sample of input buffer in project
int64_t sample_rate,
Autos *autos,
int channel,
int direction,
85,8 → 76,10
int channel,
int direction);
 
double* get_module_input(int double_buffer, int64_t fragment_position);
double* get_module_output(int double_buffer, int64_t fragment_position);
/*
* double* get_module_input(int double_buffer, int64_t fragment_position);
* double* get_module_output(int double_buffer, int64_t fragment_position);
*/
 
DB db;
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/assets.C
80,17 → 80,22
return 0;
}
 
Assets& Assets::operator=(Assets &assets)
void Assets::copy_from(Assets *assets)
{
while(last) delete last;
 
for(Asset *current = assets.first; current; current = NEXT)
for(Asset *current = assets->first; current; current = NEXT)
{
Asset *new_asset;
append(new_asset = new Asset);
new_asset->copy_from(current, 1);
}
}
 
Assets& Assets::operator=(Assets &assets)
{
printf("Assets::operator= 1\n");
copy_from(&assets);
return *this;
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/pluginaclient.h
14,23 → 14,83
int get_render_ptrs();
int init_realtime_parameters();
void plugin_process_realtime(double **input,
double **output,
int64_t current_position,
int64_t fragment_size,
int64_t total_len);
 
// Replaced by pull method
/*
* void plugin_process_realtime(double **input,
* double **output,
* int64_t current_position,
* int64_t fragment_size,
* int64_t total_len);
*/
int is_audio();
// These should return 1 if error or 0 if success.
// Multichannel buffer process for backwards compatibility
virtual int process_realtime(int64_t size,
double **input_ptr,
double **output_ptr);
// Single channel buffer process for backwards compatibility and transitions
virtual int process_realtime(int64_t size,
double *input_ptr,
double *output_ptr) { return 0; };
virtual int process_realtime(int64_t size,
double **input_ptr,
double **output_ptr) { return 0; };
double *output_ptr);
 
// Process buffer using pull method. By default this loads the input into the
// buffer and calls process_realtime with input and output pointing to buffer.
// start_position - requested position relative to sample_rate. Relative
// to start of EDL. End of buffer if reverse.
// sample_rate - scale of start_position.
virtual int process_buffer(int64_t size,
double **buffer,
int64_t start_position,
int sample_rate);
virtual int process_buffer(int64_t size,
double *buffer,
int64_t start_position,
int sample_rate);
 
 
virtual int process_loop(double *buffer, int64_t &write_length) { return 1; };
virtual int process_loop(double **buffers, int64_t &write_length) { return 1; };
int plugin_process_loop(double **buffers, int64_t &write_length);
int read_samples(double *buffer, int channel, int64_t start_position, int64_t total_samples);
int read_samples(double *buffer, int64_t start_position, int64_t total_samples);
 
int plugin_start_loop(int64_t start,
int64_t end,
int64_t buffer_size,
int total_buffers);
 
int plugin_get_parameters();
 
// Called by non-realtime client to read audio for processing.
// buffer - output wave
// channel - channel of the plugin input for multichannel plugin
// start_position - start of samples in forward. End of samples in reverse.
// Relative to start of EDL. Scaled to sample_rate.
// len - number of samples to read
int read_samples(double *buffer,
int channel,
int64_t start_position,
int64_t len);
int read_samples(double *buffer,
int64_t start_position,
int64_t len);
 
// Called by realtime plugin to read audio from previous entity
// sample_rate - scale of start_position. Provided so the client can get data
// at a higher fidelity than provided by the EDL.
int read_samples(double *buffer,
int channel,
int sample_rate,
int64_t start_position,
int64_t len);
 
// Get the sample rate of the EDL
int get_project_samplerate();
// Get the requested sample rate
int get_samplerate();
 
int64_t local_to_edl(int64_t position);
int64_t edl_to_local(int64_t position);
 
void send_render_gui(void *data, int size);
void plugin_render_gui(void *data, int size);
virtual void render_gui(void *data, int size) {};
41,7 → 101,13
// point to the regions for a single render
float **input_ptr_render;
float **output_ptr_render;
int project_sample_rate; // sample rate of incomming data
// sample rate of EDL. Used for normalizing keyframes
int project_sample_rate;
// Local parameters set by non realtime plugin about the file to be generated.
// Retrieved by server to set output file format.
// In realtime plugins, these are set before every process_buffer as the
// requested rates.
int sample_rate;
};
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/edlsession.h
31,6 → 31,10
char* get_cwindow_display();
void boundaries();
 
PlaybackConfig* get_playback_config(int strategy, int head);
ArrayList<PlaybackConfig*>* get_playback_config(int strategy);
int get_playback_heads(int strategy);
 
void equivalent_output(EDLSession *session, double *result);
void dump();
 
48,10 → 52,6
float aspect_w;
float aspect_h;
int audio_channels;
// Samples to send through console
int64_t audio_module_fragment;
// Samples to read from disk at a time
int64_t audio_read_length;
int audio_tracks;
// automation follows edits during editing
int autos_follow_edits;
111,11 → 111,6
int output_w;
int output_h;
int64_t playback_buffer;
// Global playback. This is loaded from defaults but not from XML probably
// because it was discovered to be the most convenient.
// It is part of the EDL probably because the playback setting was
// going to be bound to the EDL.
ArrayList<PlaybackConfig*> playback_config[PLAYBACK_STRATEGIES];
int playback_cursor_visible;
int64_t playback_preload;
int playback_software_position;
166,6 → 161,13
float vwindow_zoom;
// Global ID counter
static int current_id;
 
private:
// Global playback. This is loaded from defaults but not from XML probably
// because it was discovered to be the most convenient.
// It is part of the EDL probably because the playback setting was
// going to be bound to the EDL.
ArrayList<PlaybackConfig*> playback_config[PLAYBACK_STRATEGIES];
};
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/brender.C
111,7 → 111,7
char string[BCTEXTLEN];
int size;
FILE *fd;
printf("BRender::run 1 %d\n", getpid());
//printf("BRender::run 1 %d\n", getpid());
 
 
// Construct executable command with the designated filesystem port
512,7 → 512,7
{
//printf("BRenderThread::start 1\n");
preferences = new Preferences;
*preferences = *mwindow->preferences;
preferences->copy_from(mwindow->preferences);
packages = new PackageDispatcher;
 
// Fix preferences to use local node
544,6 → 544,8
int64_t end_frame = Units::round(command->edl->tracks->total_video_length() *
command->edl->session->frame_rate);
if(end_frame < start_frame) end_frame = start_frame;
 
 
printf("BRenderThread::start 1 map=%d equivalent=%d brender_start=%d result=%d end=%d\n",
last_contiguous,
last_good,
568,7 → 570,7
 
//sleep(1);
//printf("BRenderThread::start 3 %d\n", result);
farm_server = new RenderFarmServer(mwindow,
farm_server = new RenderFarmServer(mwindow->plugindb,
packages,
preferences,
0,
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/patchbay.C
372,7 → 372,6
 
int PatchBay::update()
{
//printf("PatchBay::update 1\n");
int patch_count = 0;
 
// Every patch has a GUI regardless of whether or not it is visible.
429,7 → 428,6
patches.remove_number(patches.total - 1);
}
 
//printf("PatchBay::update 10\n");
return 0;
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/vrender.C
1,31 → 1,32
#include "asset.h"
#include "cache.h"
#include "condition.h"
#include "virtualconsole.h"
#include "datatype.h"
#include "edits.h"
#include "edl.h"
#include "edlsession.h"
#include "file.h"
#include "localsession.h"
#include "mainsession.h"
#include "mwindow.h"
#include "overlayframe.h"
#include "playabletracks.h"
#include "playbackengine.h"
#include "playabletracks.h"
#include "preferences.h"
#include "preferencesthread.h"
#include "renderengine.h"
#include "mainsession.h"
#include "strategies.inc"
#include "units.h"
#include "tracks.h"
#include "transportque.h"
#include "vrender.h"
#include "units.h"
#include "vedit.h"
#include "vframe.h"
#include "videoconfig.h"
#include "videodevice.h"
#include "virtualconsole.h"
#include "virtualvconsole.h"
#include "vmodule.h"
#include "vrender.h"
#include "vtrack.h"
 
 
36,10 → 37,16
: CommonRender(renderengine)
{
data_type = TRACK_VIDEO;
input_temp = 0;
transition_temp = 0;
overlayer = new OverlayFrame(renderengine->preferences->processors);
}
 
VRender::~VRender()
{
if(input_temp) delete input_temp;
if(transition_temp) delete transition_temp;
if(overlayer) delete overlayer;
}
 
 
97,6 → 104,8
int use_brender = 0;
int result = 0;
 
//printf("VRender::process_buffer 1\n");
 
// Determine the rendering strategy for this frame.
use_vconsole = get_use_vconsole(playable_edit,
input_position,
133,7 → 142,6
else
if(playable_edit)
{
//printf("VRender::process_buffer 1 %d\n", current_position);
result = ((VEdit*)playable_edit)->read_frame(video_out[0],
current_position,
renderengine->command->get_direction(),
151,6 → 159,7
}
 
 
//printf("VRender::process_buffer 10\n");
return result;
}
 
170,7 → 179,7
 
 
// Total number of playable tracks is 1
if(vconsole->total_tracks != 1) return 1;
if(vconsole->total_entry_nodes != 1) return 1;
 
playable_track = vconsole->playable_tracks->values[0];
 
263,6 → 272,8
// Number of frames to skip.
int64_t frame_step = 1;
 
first_frame = 1;
 
// Number of frames since start of rendering
session_frame = 0;
framerate_counter = 0;
308,17 → 319,10
start_sample = Units::tosamples(session_frame - 1,
renderengine->edl->session->sample_rate,
renderengine->edl->session->frame_rate);
// printf("VRender:run 9 currentsample=%lld endsample=%lld startsample=%lld samplerate=%lld framerate=%f\n",
// current_sample,
// end_sample,
// start_sample,
// renderengine->edl->session->sample_rate,
// renderengine->edl->session->frame_rate);
 
// Straight from XMovie
if(end_sample < current_sample)
if(first_frame || end_sample < current_sample)
{
// Frame rendered late. Flash it now.
// Frame rendered late or this is the first frame. Flash it now.
flash_output();
 
if(renderengine->edl->session->video_every_frame)
372,19 → 376,22
{
// Came after the earliest sample so keep going
}
//printf("VRender:run 20\n");
}
 
// Flash frame now.
flash_output();
}
//printf("VRender:run 11\n");
}
 
//printf("VRender:run 12 %d\n", current_position);
// Trigger audio to start
if(first_frame)
{
renderengine->first_frame_lock->unlock();
first_frame = 0;
renderengine->reset_sync_position();
}
 
session_frame += frame_step;
//printf("VRender:run 13 %d %d\n", frame_step, last_playback);
 
// advance position in project
current_input_length = frame_step;
406,7 → 413,6
renderengine->playback_engine &&
renderengine->command->command != CURRENT_FRAME)
{
//printf("VRender:run 17 %d\n", current_position);
renderengine->playback_engine->update_tracking(fromunits(current_position));
}
 
415,17 → 421,16
if(framerate_counter >= renderengine->edl->session->frame_rate &&
renderengine->command->realtime)
{
//printf("VRender::run 1\n");
renderengine->update_framerate((float)framerate_counter /
((float)framerate_timer.get_difference() / 1000));
//printf("VRender::run 2\n");
framerate_counter = 0;
framerate_timer.update();
}
//printf("VRender:run 13\n");
}
 
//printf("VRender:run 14\n");
// In case we were interrupted before the first loop
renderengine->first_frame_lock->unlock();
 
}
 
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/assets.h
29,6 → 29,7
FileXML *xml,
char *output_path);
Assets& operator=(Assets &assets);
void copy_from(Assets *assets);
 
// Enter a new asset into the table.
// If the asset already exists return the asset which exists.
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/mainundo.C
53,13 → 53,17
if(undo_before_updated)
{
FileXML file;
//printf("MainUndo::update_undo_after 1\n");
mwindow->edl->save_xml(mwindow->plugindb,
&file,
"",
0,
0);
//printf("MainUndo::update_undo_after 1\n");
file.terminate_string();
//printf("MainUndo::update_undo_after 1\n");
current_entry->set_data_after(file.string);
//printf("MainUndo::update_undo_after 10\n");
undo_before_updated = 0;
}
}
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/tracks.C
113,13 → 113,12
 
}
 
 
 
Tracks& Tracks::operator=(Tracks &tracks)
void Tracks::copy_from(Tracks *tracks)
{
Track *new_track;
 
delete_all_tracks();
for(Track *current = tracks.first; current; current = NEXT)
for(Track *current = tracks->first; current; current = NEXT)
{
switch(current->data_type)
{
130,8 → 129,14
new_track = add_video_track(0, 0);
break;
}
*new_track = *current;
new_track->copy_from(current);
}
}
 
Tracks& Tracks::operator=(Tracks &tracks)
{
printf("Tracks::operator= 1\n");
copy_from(&tracks);
return *this;
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/filevorbis.C
48,8 → 48,25
{
FILE *fd = fopen(asset->path, "rb");
OggVorbis_File vf;
 
// Test for Quicktime since OGG misinterprets it
fseek(fd, 4, SEEK_SET);
char data[4];
fread(data, 4, 1, fd);
if(data[0] == 'm' &&
data[1] == 'd' &&
data[2] == 'a' &&
data[3] == 't')
{
fclose(fd);
return 0;
}
fseek(fd, 0, SEEK_SET);
 
if(ov_open(fd, &vf, NULL, 0) < 0)
{
// OGG failed. Close file handle manually.
ov_clear(&vf);
if(fd) fclose(fd);
return 0;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/virtualconsole.C
19,83 → 19,51
VirtualConsole::VirtualConsole(RenderEngine *renderengine,
CommonRender *commonrender,
int data_type)
: Thread()
{
this->renderengine = renderengine;
this->commonrender = commonrender;
this->data_type = data_type;
total_tracks = 0;
startup_lock = new Condition(1, "VirtualConsole::startup_lock");
total_entry_nodes = 0;
playable_tracks = 0;
ring_buffers = 0;
virtual_modules = 0;
entry_nodes = 0;
}
 
 
VirtualConsole::~VirtualConsole()
{
//printf("VirtualConsole::~VirtualConsole 1\n");
delete_virtual_console();
delete_input_buffers();
 
delete startup_lock;
if(playable_tracks) delete playable_tracks;
}
 
int VirtualConsole::total_ring_buffers()
{
return 2;
}
 
 
void VirtualConsole::create_objects()
{
interrupt = 0;
done = 0;
current_input_buffer = 0;
current_vconsole_buffer = 0;
 
get_playable_tracks();
total_tracks = playable_tracks->total;
allocate_input_buffers();
total_entry_nodes = playable_tracks->total;
build_virtual_console(1);
sort_virtual_console();
//dump();
 
}
 
void VirtualConsole::start_playback()
{
done = 0;
interrupt = 0;
current_input_buffer = 0;
current_vconsole_buffer = 0;
if(renderengine->command->realtime && data_type == TRACK_AUDIO)
{
// don't start a thread unless writing to an audio device
startup_lock->lock();
for(int ring_buffer = 0; ring_buffer < ring_buffers; ring_buffer++)
{
input_lock[ring_buffer]->reset();
output_lock[ring_buffer]->reset();
input_lock[ring_buffer]->lock("VirtualConsole::start_playback");
}
Thread::set_synchronous(1); // prepare thread base class
//printf("VirtualConsole::start_playback 2 %d\n", renderengine->edl->session->real_time_playback);
Thread::start();
//printf("VirtualConsole::start_playback 3 %d\n", renderengine->edl->session->real_time_playback);
startup_lock->lock();
startup_lock->unlock();
}
done = 0;
}
 
void VirtualConsole::get_playable_tracks()
{
}
 
Module* VirtualConsole::module_of(Track *track)
{
for(int i = 0; i < commonrender->total_modules; i++)
{
//printf("VirtualConsole::module_of %p %p\n", (Track*)commonrender->modules[i]->track, track);
if(commonrender->modules[i]->track == track) return commonrender->modules[i];
if(commonrender->modules[i]->track == track)
return commonrender->modules[i];
}
return 0;
}
124,83 → 92,48
return 0;
}
 
int VirtualConsole::allocate_input_buffers()
void VirtualConsole::build_virtual_console(int persistent_plugins)
{
if(!ring_buffers)
// allocate the entry nodes
if(!entry_nodes)
{
ring_buffers = total_ring_buffers();
entry_nodes = new VirtualNode*[total_entry_nodes];
 
// allocate the drive read buffers
for(int ring_buffer = 0;
ring_buffer < ring_buffers;
ring_buffer++)
for(int i = 0; i < total_entry_nodes; i++)
{
input_lock[ring_buffer] = new Condition(1, "VirtualConsole::input_lock");
output_lock[ring_buffer] = new Condition(1, "VirtualConsole::output_lock");
last_playback[ring_buffer] = 0;
new_input_buffer(ring_buffer);
}
}
 
return 0;
}
 
void VirtualConsole::build_virtual_console(int persistant_plugins)
{
// allocate the virtual modules
//printf("VirtualConsole::build_virtual_console 1\n");
if(!virtual_modules)
{
virtual_modules = new VirtualNode*[total_tracks];
 
//printf("VirtualConsole::build_virtual_console 2 %d %d\n", data_type, total_tracks);
for(int i = 0; i < total_tracks; i++)
{
//printf("VirtualConsole::build_virtual_console 3\n");
virtual_modules[i] = new_toplevel_node(playable_tracks->values[i],
entry_nodes[i] = new_entry_node(playable_tracks->values[i],
module_of(playable_tracks->values[i]),
i);
 
// Expand the track
virtual_modules[i]->expand(persistant_plugins, commonrender->current_position);
//printf("VirtualConsole::build_virtual_console 3\n");
// Expand the trees
entry_nodes[i]->expand(persistent_plugins,
commonrender->current_position);
}
commonrender->restart_plugins = 1;
}
//dump();
}
 
int VirtualConsole::sort_virtual_console()
VirtualNode* VirtualConsole::new_entry_node(Track *track,
Module *module,
int track_number)
{
// sort the console
int done = 0, result = 0;
int64_t attempts = 0;
int i;
printf("VirtualConsole::new_entry_node should not be called\n");
return 0;
}
 
//printf("VirtualConsole::sort_virtual_console 1\n");
if(!render_list.total)
{
while(!done && attempts < 50)
{
// Sort iteratively until all the remaining plugins can be rendered.
// Iterate backwards so video is composited properly
done = 1;
for(i = total_tracks - 1; i >= 0; i--)
{
result = virtual_modules[i]->sort(&render_list);
if(result) done = 0;
}
attempts++;
}
void VirtualConsole::append_exit_node(VirtualNode *node)
{
node->is_exit = 1;
exit_nodes.append(node);
}
 
//printf("VirtualConsole::sort_virtual_console 2 %d\n", render_list.total);
// prevent short circuts
if(attempts >= 50)
{
printf("VirtualConsole::sort_virtual_console: Recursive.\n");
}
//printf("VirtualConsole::sort_virtual_console 2\n");
void VirtualConsole::reset_attachments()
{
for(int i = 0; i < commonrender->total_modules; i++)
{
commonrender->modules[i]->reset_attachments();
}
return 0;
}
 
void VirtualConsole::dump()
210,8 → 143,8
for(int i = 0; i < commonrender->total_modules; i++)
commonrender->modules[i]->dump();
printf(" Nodes\n");
for(int i = 0; i < total_tracks; i++)
virtual_modules[i]->dump(0);
for(int i = 0; i < total_entry_nodes; i++)
entry_nodes[i]->dump(0);
}
 
 
324,100 → 257,21
return result;
}
 
void VirtualConsole::run()
{
startup_lock->unlock();
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
int VirtualConsole::delete_virtual_console()
{
// delete the virtual modules
for(int i = 0; i < total_tracks; i++)
// delete the virtual node tree
for(int i = 0; i < total_entry_nodes; i++)
{
delete virtual_modules[i];
delete entry_nodes[i];
}
// Seems to get allocated even if new[0].
if(virtual_modules) delete [] virtual_modules;
virtual_modules = 0;
 
// delete sort order
render_list.remove_all();
if(entry_nodes) delete [] entry_nodes;
entry_nodes = 0;
exit_nodes.remove_all();
}
 
int VirtualConsole::delete_input_buffers()
{
// delete input buffers
for(int buffer = 0; buffer < ring_buffers; buffer++)
{
delete_input_buffer(buffer);
}
 
for(int i = 0; i < ring_buffers; i++)
{
delete input_lock[i];
delete output_lock[i];
}
 
total_tracks = 0;
ring_buffers = 0;
return 0;
}
 
int VirtualConsole::start_rendering(int duplicate)
{
this->interrupt = 0;
 
if(renderengine->command->realtime && commonrender->asynchronous)
{
// don't start a thread unless writing to an audio device
startup_lock->lock();
set_synchronous(1); // prepare thread base class
start();
}
return 0;
}
 
int VirtualConsole::wait_for_completion()
{
if(renderengine->command->realtime && commonrender->asynchronous)
{
join();
}
return 0;
}
 
int VirtualConsole::swap_input_buffer()
{
current_input_buffer++;
if(current_input_buffer >= total_ring_buffers()) current_input_buffer = 0;
return 0;
}
 
int VirtualConsole::swap_thread_buffer()
{
current_vconsole_buffer++;
if(current_vconsole_buffer >= total_ring_buffers()) current_vconsole_buffer = 0;
return 0;
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/vrender.h
1,10 → 1,11
#ifndef VRENDER_H
#define VRENDER_H
 
#include "guicast.h"
#include "commonrender.h"
#include "edit.inc"
#include "guicast.h"
#include "mwindow.inc"
#include "overlayframe.inc"
#include "renderengine.inc"
#include "vframe.inc"
 
76,10 → 77,22
VFrame *video_out[MAX_CHANNELS];
// Byte offset of video_out
int64_t output_offset;
 
// Temp frame for VModule loading
VFrame *input_temp;
// Temp frame for VModule transitions
VFrame *transition_temp;
// Engine for camera and projector automation
OverlayFrame *overlayer;
 
 
int64_t source_length; // Total number of frames to render for transitions
// Total number of frames to render for transitions
int64_t source_length;
 
// Flag first frame to unlock audio
int first_frame;
 
private:
int init_device_buffers();
Timer timer;
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/floatautos.C
108,7 → 108,6
start -= length;
}
 
//printf("FloatAutos::automation_is_constant 1 %d %d\n", start, end);
 
// No keyframes on track
if(total_autos == 0)
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/tracks.h
121,6 → 121,8
int delete_tracks(); // delete all the recordable tracks
int delete_all_tracks(); // delete just the tracks
 
void copy_from(Tracks *tracks);
 
// ================================== EDL editing
int copy(double start,
double end,
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/recordvideo.C
2,12 → 2,14
#include "batch.h"
#include "bcsignals.h"
#include "clip.h"
#include "condition.h"
#include "edl.h"
#include "edlsession.h"
#include "errorbox.h"
#include "file.h"
#include "filethread.h"
#include "language.h"
#include "mutex.h"
#include "mwindow.h"
#include "mwindowgui.h"
#include "preferences.h"
28,17 → 30,21
RecordVideo::RecordVideo(MWindow *mwindow,
Record *record,
RecordThread *record_thread)
: Thread()
: Thread(1, 0, 0)
{
reset_parameters();
this->mwindow = mwindow;
this->record = record;
this->record_thread = record_thread;
this->gui = record->record_gui;
unhang_lock = new Mutex("RecordVideo::unhang_lock");
trigger_lock = new Condition(1, "RecordVideo::trigger_lock");
}
 
RecordVideo::~RecordVideo()
{
delete unhang_lock;
delete trigger_lock;
}
 
void RecordVideo::reset_parameters()
62,8 → 68,7
else
buffer_size = mwindow->edl->session->video_write_length;
 
set_synchronous(1);
trigger_lock.lock();
trigger_lock->lock("RecordVideo::arm_recording");
Thread::start();
 
return 0;
71,7 → 76,7
 
void RecordVideo::start_recording()
{
trigger_lock.unlock();
trigger_lock->unlock();
}
 
int RecordVideo::stop_recording()
79,24 → 84,18
// Device won't exist if interrupting a cron job
if(record->vdevice)
{
//printf("RecordVideo::stop_recording 1 %p\n", record->vdevice);
// Interrupt IEEE1394 crashes
record->vdevice->interrupt_crash();
//printf("RecordVideo::stop_recording 1\n");
 
// Interrupt video4linux crashes
if(record->vdevice->get_failed())
{
//printf("RecordVideo::stop_recording 2\n");
Thread::end();
Thread::join();
//printf("RecordVideo::stop_recording 3\n");
 
cleanup_recording();
//printf("RecordVideo::stop_recording 4\n");
}
}
//printf("RecordVideo::stop_recording 5\n");
return 0;
}
 
145,8 → 144,6
write_result = 0;
grab_result = 0;
 
//printf("RecordVideo::run 1 %d\n", getpid());
 
// Thread out the I/O
if(!record_thread->monitor)
{
164,8 → 161,8
 
 
// Wait for trigger
trigger_lock.lock();
trigger_lock.unlock();
trigger_lock->lock("RecordVideo::run");
trigger_lock->unlock();
 
//printf("RecordVideo::run 1 %d\n", record_thread->monitor);
 
190,7 → 187,6
delay = (int64_t)((float)(next_sample - current_sample) /
record->default_asset->sample_rate *
1000
// / 2
);
// Sanity check and delay.
if(delay < 2000 && delay > 0) delayer.delay(delay);
337,6 → 333,7
}
 
cleanup_recording();
TRACE("RecordVideo::run 100");
}
 
void RecordVideo::read_buffer()
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/recordthread.C
2,10 → 2,12
#include "audiodevice.h"
#include "batch.h"
#include "bcsignals.h"
#include "condition.h"
#include "drivesync.h"
#include "edl.h"
#include "edlsession.h"
#include "file.h"
#include "mutex.h"
#include "mwindow.h"
#include "record.h"
#include "recordaudio.h"
17,7 → 19,7
 
 
RecordThread::RecordThread(MWindow *mwindow, Record *record)
: Thread()
: Thread(1, 0, 0)
{
this->mwindow = mwindow;
this->record = record;
25,11 → 27,21
record_timer = new Timer;
record_audio = 0;
record_video = 0;
pause_lock = new Condition(1, "RecordThread::pause_lock");
startup_lock = new Condition(1, "RecordThread::startup_lock");
loop_lock = new Condition(1, "RecordThread::loop_lock");
state_lock = new Mutex("RecordThread::state_lock");
}
 
RecordThread::~RecordThread()
{
TRACE("RecordThread::~RecordThread 1");
delete record_timer;
delete pause_lock;
delete startup_lock;
delete loop_lock;
delete state_lock;
TRACE("RecordThread::~RecordThread 10");
}
 
int RecordThread::create_objects()
54,16 → 66,14
this->monitor = monitor;
this->context = context;
resume_monitor = !monitor;
loop_lock.lock();
loop_lock->lock("RecordThread::start_recording");
// Startup lock isn't
startup_lock.lock();
completion_lock.lock();
startup_lock->lock("RecordThread::start_recording");
 
 
set_synchronous(0);
Thread::start();
startup_lock.lock();
startup_lock.unlock();
startup_lock->lock("RecordThread::start_recording");
startup_lock->unlock();
//printf("RecordThread::start_recording 10\n");
return 0;
}
71,7 → 81,7
int RecordThread::stop_recording(int resume_monitor)
{
// Stop RecordThread while waiting for batch
state_lock.lock();
state_lock->lock("RecordThread::stop_recording");
engine_done = 1;
 
this->resume_monitor = resume_monitor;
82,31 → 92,27
if(record_video)
{
record_video->batch_done = 1;
state_lock.unlock();
state_lock->unlock();
record_video->stop_recording();
}
else
if(record_audio && context != CONTEXT_SINGLEFRAME)
{
record_audio->batch_done = 1;
state_lock.unlock();
state_lock->unlock();
record_audio->stop_recording();
}
 
 
completion_lock.lock();
completion_lock.unlock();
Thread::join();
return 0;
}
 
int RecordThread::pause_recording()
{
// Stop the thread before finishing the loop
//printf("RecordThread::pause_recording 1\n");
pause_lock.lock();
//printf("RecordThread::pause_recording 1\n");
pause_lock->lock("RecordThread::pause_recording");
 
state_lock.lock();
state_lock->lock("RecordThread::pause_recording");
if(record->default_asset->video_data)
{
record_video->batch_done = 1;
115,19 → 121,16
{
record_audio->batch_done = 1;
}
state_lock.unlock();
//printf("RecordThread::pause_recording 1\n");
state_lock->unlock();
// Stop the recordings
if(record->default_asset->audio_data && context != CONTEXT_SINGLEFRAME)
record_audio->stop_recording();
if(record->default_asset->video_data)
record_video->stop_recording();
//printf("RecordThread::pause_recording 1\n");
 
// Wait for thread to stop before closing devices
loop_lock.lock();
loop_lock.unlock();
//printf("RecordThread::pause_recording 1\n");
loop_lock->lock("RecordThread::pause_recording");
loop_lock->unlock();
 
 
 
148,8 → 151,8
{
record_audio->batch_done = 0;
}
loop_lock.lock();
pause_lock.unlock();
loop_lock->lock("RecordThread::resume_recording");
pause_lock->unlock();
//printf("RecordThread::resume_recording 2\n");
return 0;
}
203,7 → 206,7
if(!engine_done) usleep(BATCH_DELAY);
if(!engine_done)
{
record->record_gui->lock_window();
record->record_gui->lock_window("RecordThread::do_cron");
record->record_gui->flash_batch();
record->record_gui->unlock_window();
}
215,7 → 218,7
void RecordThread::run()
{
int rewinding_loop = 0;
startup_lock.unlock();
startup_lock->unlock();
record->get_current_time(last_seconds, last_day);
 
 
228,7 → 231,7
do_cron();
}
 
state_lock.lock();
state_lock->lock("RecordThread::run");
// Test for stopped while waiting
if(!engine_done)
{
300,7 → 303,7
if(record->default_asset->video_data)
record_video->arm_recording();
TRACE("RecordThread::run 11");
state_lock.unlock();
state_lock->unlock();
 
// Trigger loops
 
313,10 → 316,10
 
 
if(record->default_asset->audio_data && context != CONTEXT_SINGLEFRAME)
record_audio->join();
record_audio->Thread::join();
TRACE("RecordThread::run 14");
if(record->default_asset->video_data)
record_video->join();
record_video->Thread::join();
TRACE("RecordThread::run 15");
 
// Stop file threads here to keep loop synchronized
369,16 → 372,16
}
else
{
state_lock.unlock();
state_lock->unlock();
}
 
// Wait for thread to stop before closing devices
loop_lock.unlock();
loop_lock->unlock();
if(monitor)
{
// Pause until monitor is resumed
pause_lock.lock();
pause_lock.unlock();
pause_lock->lock("RecordThread::run");
pause_lock->unlock();
}
}while(!engine_done);
 
394,6 → 397,5
{
record->capture_state = IS_DONE;
}
completion_lock.unlock();
}
 
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/confirmsave.C
1,5 → 1,6
#include "asset.h"
#include "confirmsave.h"
#include "language.h"
#include "mwindow.h"
#include "mwindowgui.h"
 
42,9 → 43,23
 
if(list.total)
{
ConfirmSaveWindow window(mwindow, &list);
window.create_objects();
result = window.run_window();
if(mwindow)
{
ConfirmSaveWindow window(mwindow, &list);
window.create_objects();
result = window.run_window();
}
else
{
printf("The following files exist.\n");
for(int i = 0; i < list.total; i++)
{
printf(" %s\n", list.values[i]->get_text());
}
printf("It's so hard to configure non-interactive rendering that\n"
"we'll assume you didn't want to overwrite them and crash here.\n");
result = 1;
}
list.remove_all_objects();
return result;
}
86,7 → 101,7
int x = 10, y = 10;
add_subwindow(title = new BC_Title(5,
5,
"The following files exist. Overwrite them?"));
_("The following files exist. Overwrite them?")));
y += 30;
add_subwindow(listbox = new BC_ListBox(x,
y,
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/awindowgui.C
122,7 → 122,6
{
//printf("AssetPicon::create_objects 1\n");
File *file = mwindow->video_cache->check_out(asset);
//printf("AssetPicon::create_objects 2\n");
 
if(file)
{
1119,7 → 1118,6
 
void AWindowAssets::draw_background()
{
//printf("AWindowAssets::draw_background %s\n", mwindow->edl->session->current_folder);
BC_ListBox::draw_background();
set_color(RED);
set_font(LARGEFONT);
/branches/automake-1_1_6/cinelerra/hvirtual/cinelerra/virtualconsole.h
3,35 → 3,46
 
#include "arraylist.h"
#include "commonrender.inc"
#include "condition.inc"
#include "maxbuffers.h"
#include "module.inc"
#include "playabletracks.inc"
#include "renderengine.inc"
#include "thread.h"
#include "track.inc"
#include "virtualnode.inc"
 
class VirtualConsole : public Thread
// Virtual console runs synchronously for audio and video in
// pull mode.
class VirtualConsole
{
public:
VirtualConsole(RenderEngine *renderengine, CommonRender *commonrender, int data_type);
VirtualConsole(RenderEngine *renderengine,
CommonRender *commonrender,
int data_type);
virtual ~VirtualConsole();
 
virtual void create_objects();
void start_playback();
virtual int total_ring_buffers();
virtual void get_playable_tracks() {};
virtual void get_playable_tracks();
int allocate_input_buffers();
virtual void new_input_buffer(int ring_buffer) { };
virtual void delete_input_buffer(int ring_buffer) { };
void start_playback();
 
// Called during each process buffer operation to reset the status
// of the attachments to unprocessed.
void VirtualConsole::reset_attachments();
void dump();
 
// Create ptrs to input buffers
virtual void create_input_ptrs() {};
 
// Build the nodes
void build_virtual_console(int persistant_plugins);
virtual VirtualNode* new_toplevel_node(Track *track, Module *module, int track_number) { return 0; };
void build_virtual_console(int persistent_plugins);
 
// Create a new entry node in subclass of desired type.
// was new_toplevel_node
virtual VirtualNode* new_entry_node(Track *track,
Module *module,
int track_number);
// Append exit node to table when expansion hits the end of a tree.
void append_exit_node(VirtualNode *node);
 
Module* module_of(Track *track);
Module* module_number(int track_number);
// Test for reconfiguration.
40,21 → 51,32
int64_t &length,
int &last_playback);
 
virtual void run();
 
RenderEngine *renderengine;
CommonRender *commonrender;
// Total playable tracks
int total_tracks;
// Top level node for each playable track
VirtualNode **virtual_modules;
 
 
// Total entry nodes. Corresponds to the total playable tracks.
// Was total_tracks
int total_entry_nodes;
// Entry node for each playable track
// Was toplevel_nodes
VirtualNode **entry_nodes;
 
// Exit node for each playable track. Rendering starts here and data is pulled
// up the tree. Every virtual module is an exit node.
ArrayList<VirtualNode*> exit_nodes;
 
 
// Order to process nodes
ArrayList<VirtualNode*> render_list;
// Replaced by pull system
// ArrayList<VirtualNode*> render_list;
 
 
int data_type;
// Store result of total_ring_buffers for destructor
int ring_buffers;
// Pull method can't use ring buffers for input.
// int ring_buffers;
// exit conditions
int interrupt;
int done;
72,42 → 94,17
 
 
virtual int init_rendering(int duplicate) {};
int sort_virtual_console();
// Replaced by pull system
// int sort_virtual_console();
int delete_virtual_console();
int delete_input_buffers();
int swap_thread_buffer();
int swap_input_buffer();
 
// Set duplicate when this virtual console is to share the old resources.
int start_rendering(int duplicate);
virtual int stop_rendering(int duplicate) {};
 
// for synchronizing start and stop
int wait_for_completion();
int wait_for_startup();
 
virtual int send_last_output_buffer() {};
 
 
 
 
// playable tracks