From efb9b6c1c381057d7c03eef4355c85a887d14f05 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 14 Apr 2012 12:02:39 +0000 Subject: libmv: bundle new upstream version of libmv from own branch Added modal solver module which is needed for tripod solving. For details of this solver read changelog of libmv. --- extern/libmv/CMakeLists.txt | 2 + extern/libmv/ChangeLog | 19 ++- extern/libmv/files.txt | 2 + extern/libmv/libmv/simple_pipeline/modal_solver.cc | 130 +++++++++++++++++++++ extern/libmv/libmv/simple_pipeline/modal_solver.h | 48 ++++++++ extern/libmv/third_party/ssba/README.libmv | 0 6 files changed, 195 insertions(+), 6 deletions(-) create mode 100644 extern/libmv/libmv/simple_pipeline/modal_solver.cc create mode 100644 extern/libmv/libmv/simple_pipeline/modal_solver.h mode change 100755 => 100644 extern/libmv/third_party/ssba/README.libmv diff --git a/extern/libmv/CMakeLists.txt b/extern/libmv/CMakeLists.txt index 02723b64b62..6be813883ec 100644 --- a/extern/libmv/CMakeLists.txt +++ b/extern/libmv/CMakeLists.txt @@ -69,6 +69,7 @@ set(SRC libmv/simple_pipeline/detect.cc libmv/simple_pipeline/initialize_reconstruction.cc libmv/simple_pipeline/intersect.cc + libmv/simple_pipeline/modal_solver.cc libmv/simple_pipeline/pipeline.cc libmv/simple_pipeline/reconstruction.cc libmv/simple_pipeline/resect.cc @@ -126,6 +127,7 @@ set(SRC libmv/simple_pipeline/detect.h libmv/simple_pipeline/initialize_reconstruction.h libmv/simple_pipeline/intersect.h + libmv/simple_pipeline/modal_solver.h libmv/simple_pipeline/pipeline.h libmv/simple_pipeline/reconstruction.h libmv/simple_pipeline/resect.h diff --git a/extern/libmv/ChangeLog b/extern/libmv/ChangeLog index 33068bddf90..7248e4c9cd9 100644 --- a/extern/libmv/ChangeLog +++ b/extern/libmv/ChangeLog @@ -1,3 +1,16 @@ +commit a44312a7beb2963b8e3bf8015c516d2eff40cc3d +Author: Sergey Sharybin +Date: Thu Apr 12 13:56:02 2012 +0600 + + Added solver for modal camera motion, currently supports only tripod solving + + This solver is intended to deal with such camera motions as tripod and panning, + where it's impossible to reconstruct exact position of markers in 3d view. + + It projects markers onto sphere and uses rigid registration of rotation to + find rotation angles which makes bundles from previous and current frame be + as closest as it's possible. + commit fa3842e472e3b9c789e47bf6d8f592aa40a84f16 Author: Sergey Sharybin Date: Thu Apr 12 12:32:48 2012 +0600 @@ -520,9 +533,3 @@ Author: Matthias Fauconneau Date: Fri Aug 19 16:04:37 2011 +0200 MSVC compatibility: heap allocate pattern, explicit float cast. - -commit 702658d2f8616964a6eeb3743fd85e97ac7ff09d -Author: Matthias Fauconneau -Date: Fri Aug 19 14:59:24 2011 +0200 - - Expose regularization parameters (areaPenalty and conditionPenalty) in API. diff --git a/extern/libmv/files.txt b/extern/libmv/files.txt index 1e564d3a2f2..85d09ce05b8 100644 --- a/extern/libmv/files.txt +++ b/extern/libmv/files.txt @@ -42,6 +42,8 @@ libmv/simple_pipeline/initialize_reconstruction.cc libmv/simple_pipeline/initialize_reconstruction.h libmv/simple_pipeline/intersect.cc libmv/simple_pipeline/intersect.h +libmv/simple_pipeline/modal_solver.cc +libmv/simple_pipeline/modal_solver.h libmv/simple_pipeline/pipeline.cc libmv/simple_pipeline/pipeline.h libmv/simple_pipeline/reconstruction.cc diff --git a/extern/libmv/libmv/simple_pipeline/modal_solver.cc b/extern/libmv/libmv/simple_pipeline/modal_solver.cc new file mode 100644 index 00000000000..ede0071dc64 --- /dev/null +++ b/extern/libmv/libmv/simple_pipeline/modal_solver.cc @@ -0,0 +1,130 @@ +// Copyright (c) 2012 libmv authors. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +#include + +#include "libmv/logging/logging.h" +#include "libmv/simple_pipeline/modal_solver.h" +#include "libmv/simple_pipeline/rigid_registration.h" + +#ifdef _MSC_VER +# define snprintf _snprintf +#endif + +namespace libmv { + +static void ProjectMarkerOnSphere(Marker &marker, Vec3 &X) { + X(0) = marker.x; + X(1) = marker.y; + X(2) = 1.0; + + X *= 5.0 / X.norm(); +} + +static void ModalSolverLogProress(ProgressUpdateCallback *update_callback, + double progress) +{ + if (update_callback) { + char message[256]; + + snprintf(message, sizeof(message), "Solving progress %d%%", (int)(progress * 100)); + + update_callback->invoke(progress, message); + } +} + +void ModalSolver(Tracks &tracks, + EuclideanReconstruction *reconstruction, + ProgressUpdateCallback *update_callback) { + int max_image = tracks.MaxImage(); + int max_track = tracks.MaxTrack(); + + LG << "Max image: " << max_image; + LG << "Max track: " << max_track; + + Mat3 R = Mat3::Identity(); + + for (int image = 0; image <= max_image; ++image) { + vector all_markers = tracks.MarkersInImage(image); + + ModalSolverLogProress(update_callback, (float) image / max_image); + + // Skip empty frames without doing anything + if (all_markers.size() == 0) { + LG << "Skipping frame: " << image; + continue; + } + + vector points, reference_points; + + // Cnstruct pairs of markers from current and previous image, + // to reproject them and find rigid transformation between + // previous and current image + for (int track = 0; track <= max_track; ++track) { + EuclideanPoint *point = reconstruction->PointForTrack(track); + + if (point) { + Marker marker = tracks.MarkerInImageForTrack(image, track); + + if (marker.image == image) { + Vec3 X; + + LG << "Use track " << track << " for rigid registration between image " << + image - 1 << " and " << image; + + ProjectMarkerOnSphere(marker, X); + + points.push_back(R * point->X); + reference_points.push_back(X); + } + } + } + + if (points.size()) { + Mat3 dR = Mat3::Identity(); + + // Find rigid delta transformation from previous image to current image + RigidRegistration(reference_points, points, dR); + + R *= dR; + } + + reconstruction->InsertCamera(image, R, Vec3::Zero()); + + // Review if there's new tracks for which position might be reconstructed + for (int track = 0; track <= max_track; ++track) { + if (!reconstruction->PointForTrack(track)) { + Marker marker = tracks.MarkerInImageForTrack(image, track); + + if (marker.image == image) { + // New track appeared on this image, project it's position onto sphere + + LG << "Projecting track " << track << " at image " << image; + + Vec3 X; + ProjectMarkerOnSphere(marker, X); + reconstruction->InsertPoint(track, R.inverse() * X); + } + } + } + } +} + +} // namespace libmv diff --git a/extern/libmv/libmv/simple_pipeline/modal_solver.h b/extern/libmv/libmv/simple_pipeline/modal_solver.h new file mode 100644 index 00000000000..560b37c2987 --- /dev/null +++ b/extern/libmv/libmv/simple_pipeline/modal_solver.h @@ -0,0 +1,48 @@ +// Copyright (c) 2012 libmv authors. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +#ifndef LIBMV_SIMPLE_PIPELINE_MODAL_SOLVER_H_ +#define LIBMV_SIMPLE_PIPELINE_MODAL_SOLVER_H_ + +#include "libmv/simple_pipeline/tracks.h" +#include "libmv/simple_pipeline/reconstruction.h" +#include "libmv/simple_pipeline/callbacks.h" + +namespace libmv { + +/*! + This solver solves such camera motion as tripod rotation, reconstructing + only camera motion itself. Bundles are not reconstructing properly, they're + just getting projected onto sphere. + + Markers from tracks object would be used for recosntruction, and algorithm + assumes thir's positions are undistorted already and they're in nnormalized + space. + + Reconstructed cameras and projected bundles would be added to reconstruction + object. +*/ +void ModalSolver(Tracks &tracks, + EuclideanReconstruction *reconstruction, + ProgressUpdateCallback *update_callback = NULL); + +} // namespace libmv + +#endif // LIBMV_SIMPLE_PIPELINE_MODAL_SOLVER_H_ diff --git a/extern/libmv/third_party/ssba/README.libmv b/extern/libmv/third_party/ssba/README.libmv old mode 100755 new mode 100644 -- cgit v1.2.3 From f9d9b4635da01c5a27ef9adbd3d3171f5ceeb47d Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 14 Apr 2012 12:02:47 +0000 Subject: Camera tracking: support of tripod motion solving Expose option into interface to use modal solver which currently supports only tripod motion. This solver requires two tracks at least to reconstruct motion. Using more tracks aren't improving solution in general, just adds instability into solution and slows down things a lot. Refirement of camera intrinsics is supported by this solver. To use this solver just activate "Tripod Motion" checkbox in solver panel. --- extern/libmv/libmv-capi.cpp | 84 +++++++++++++++++++++------ extern/libmv/libmv-capi.h | 3 + release/scripts/startup/bl_ui/space_clip.py | 4 ++ source/blender/blenkernel/intern/tracking.c | 34 ++++++++--- source/blender/makesdna/DNA_tracking_types.h | 11 +++- source/blender/makesrna/intern/rna_tracking.c | 6 ++ 6 files changed, 113 insertions(+), 29 deletions(-) diff --git a/extern/libmv/libmv-capi.cpp b/extern/libmv/libmv-capi.cpp index e4708e5907d..3f697d487b6 100644 --- a/extern/libmv/libmv-capi.cpp +++ b/extern/libmv/libmv-capi.cpp @@ -54,6 +54,7 @@ #include "libmv/simple_pipeline/pipeline.h" #include "libmv/simple_pipeline/camera_intrinsics.h" #include "libmv/simple_pipeline/rigid_registration.h" +#include "libmv/simple_pipeline/modal_solver.h" #include #include @@ -384,6 +385,31 @@ int libmv_refineParametersAreValid(int parameters) { LIBMV_REFINE_RADIAL_DISTORTION_K1)); } +void libmv_solveRefineIntrinsics(libmv::Tracks *tracks, libmv::CameraIntrinsics *intrinsics, + libmv::EuclideanReconstruction *reconstruction, int refine_intrinsics, + reconstruct_progress_update_cb progress_update_callback, void *callback_customdata) +{ + /* only a few combinations are supported but trust the caller */ + int libmv_refine_flags = 0; + + if (refine_intrinsics & LIBMV_REFINE_FOCAL_LENGTH) { + libmv_refine_flags |= libmv::BUNDLE_FOCAL_LENGTH; + } + if (refine_intrinsics & LIBMV_REFINE_PRINCIPAL_POINT) { + libmv_refine_flags |= libmv::BUNDLE_PRINCIPAL_POINT; + } + if (refine_intrinsics & LIBMV_REFINE_RADIAL_DISTORTION_K1) { + libmv_refine_flags |= libmv::BUNDLE_RADIAL_K1; + } + if (refine_intrinsics & LIBMV_REFINE_RADIAL_DISTORTION_K2) { + libmv_refine_flags |= libmv::BUNDLE_RADIAL_K2; + } + + progress_update_callback(callback_customdata, 1.0, "Refining solution"); + + libmv::EuclideanBundleCommonIntrinsics(*(libmv::Tracks *)tracks, libmv_refine_flags, + reconstruction, intrinsics); +} libmv_Reconstruction *libmv_solveReconstruction(libmv_Tracks *tracks, int keyframe1, int keyframe2, int refine_intrinsics, double focal_length, double principal_x, double principal_y, double k1, double k2, double k3, @@ -423,24 +449,48 @@ libmv_Reconstruction *libmv_solveReconstruction(libmv_Tracks *tracks, int keyfra libmv::EuclideanCompleteReconstruction(normalized_tracks, reconstruction, &update_callback); if (refine_intrinsics) { - /* only a few combinations are supported but trust the caller */ - int libmv_refine_flags = 0; - if (refine_intrinsics & LIBMV_REFINE_FOCAL_LENGTH) { - libmv_refine_flags |= libmv::BUNDLE_FOCAL_LENGTH; - } - if (refine_intrinsics & LIBMV_REFINE_PRINCIPAL_POINT) { - libmv_refine_flags |= libmv::BUNDLE_PRINCIPAL_POINT; - } - if (refine_intrinsics & LIBMV_REFINE_RADIAL_DISTORTION_K1) { - libmv_refine_flags |= libmv::BUNDLE_RADIAL_K1; - } - if (refine_intrinsics & LIBMV_REFINE_RADIAL_DISTORTION_K2) { - libmv_refine_flags |= libmv::BUNDLE_RADIAL_K2; - } + libmv_solveRefineIntrinsics((libmv::Tracks *)tracks, intrinsics, reconstruction, + refine_intrinsics, progress_update_callback, callback_customdata); + } + + progress_update_callback(callback_customdata, 1.0, "Finishing solution"); + libmv_reconstruction->tracks = *(libmv::Tracks *)tracks; + libmv_reconstruction->error = libmv::EuclideanReprojectionError(*(libmv::Tracks *)tracks, *reconstruction, *intrinsics); + + return (libmv_Reconstruction *)libmv_reconstruction; +} + +struct libmv_Reconstruction *libmv_solveModal(struct libmv_Tracks *tracks, int refine_intrinsics, double focal_length, + double principal_x, double principal_y, double k1, double k2, double k3, + reconstruct_progress_update_cb progress_update_callback, void *callback_customdata) +{ + /* Invert the camera intrinsics. */ + libmv::vector markers = ((libmv::Tracks*)tracks)->AllMarkers(); + libmv_Reconstruction *libmv_reconstruction = new libmv_Reconstruction(); + libmv::EuclideanReconstruction *reconstruction = &libmv_reconstruction->reconstruction; + libmv::CameraIntrinsics *intrinsics = &libmv_reconstruction->intrinsics; + + ReconstructUpdateCallback update_callback = + ReconstructUpdateCallback(progress_update_callback, callback_customdata); + + intrinsics->SetFocalLength(focal_length, focal_length); + intrinsics->SetPrincipalPoint(principal_x, principal_y); + intrinsics->SetRadialDistortion(k1, k2, k3); + + for (int i = 0; i < markers.size(); ++i) { + intrinsics->InvertIntrinsics(markers[i].x, + markers[i].y, + &(markers[i].x), + &(markers[i].y)); + } + + libmv::Tracks normalized_tracks(markers); + + libmv::ModalSolver(normalized_tracks, reconstruction, &update_callback); - progress_update_callback(callback_customdata, 1.0, "Refining solution"); - libmv::EuclideanBundleCommonIntrinsics(*(libmv::Tracks *)tracks, libmv_refine_flags, - reconstruction, intrinsics); + if (refine_intrinsics) { + libmv_solveRefineIntrinsics((libmv::Tracks *)tracks, intrinsics, reconstruction, + refine_intrinsics, progress_update_callback, callback_customdata); } progress_update_callback(callback_customdata, 1.0, "Finishing solution"); diff --git a/extern/libmv/libmv-capi.h b/extern/libmv/libmv-capi.h index 01019832374..f72a72d494b 100644 --- a/extern/libmv/libmv-capi.h +++ b/extern/libmv/libmv-capi.h @@ -68,6 +68,9 @@ int libmv_refineParametersAreValid(int parameters); struct libmv_Reconstruction *libmv_solveReconstruction(struct libmv_Tracks *tracks, int keyframe1, int keyframe2, int refine_intrinsics, double focal_length, double principal_x, double principal_y, double k1, double k2, double k3, reconstruct_progress_update_cb progress_update_callback, void *callback_customdata); +struct libmv_Reconstruction *libmv_solveModal(struct libmv_Tracks *tracks, int refine_intrinsics, double focal_length, + double principal_x, double principal_y, double k1, double k2, double k3, + reconstruct_progress_update_cb progress_update_callback, void *callback_customdata); int libmv_reporojectionPointForTrack(struct libmv_Reconstruction *libmv_reconstruction, int track, double pos[3]); double libmv_reporojectionErrorForTrack(struct libmv_Reconstruction *libmv_reconstruction, int track); double libmv_reporojectionErrorForImage(struct libmv_Reconstruction *libmv_reconstruction, int image); diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py index c7ab9de72ac..51a1751bb00 100644 --- a/release/scripts/startup/bl_ui/space_clip.py +++ b/release/scripts/startup/bl_ui/space_clip.py @@ -227,7 +227,11 @@ class CLIP_PT_tools_solve(Panel): else "Object Motion") col.operator("clip.clear_solution") + col = layout.column() + col.prop(settings, "use_tripod_solver") + col = layout.column(align=True) + col.active = not settings.use_tripod_solver col.prop(settings, "keyframe_a") col.prop(settings, "keyframe_b") diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c index 7654c361d14..9e3bc2648a5 100644 --- a/source/blender/blenkernel/intern/tracking.c +++ b/source/blender/blenkernel/intern/tracking.c @@ -1523,6 +1523,7 @@ typedef struct MovieReconstructContext { #endif char object_name[MAX_NAME]; int is_camera; + short motion_flag; float focal_length; float principal_point[2]; @@ -1752,7 +1753,11 @@ int BKE_tracking_can_reconstruct(MovieTracking *tracking, MovieTrackingObject *o #if WITH_LIBMV ListBase *tracksbase = BKE_tracking_object_tracks(tracking, object); - if (count_tracks_on_both_keyframes(tracking, tracksbase)<8) { + if (tracking->settings.motion_flag & TRACKING_MOTION_MODAL) { + /* TODO: check for number of tracks? */ + return TRUE; + } + else if (count_tracks_on_both_keyframes(tracking, tracksbase) < 8) { BLI_strncpy(error_msg, "At least 8 common tracks on both of keyframes are needed for reconstruction", error_size); return FALSE; @@ -1781,7 +1786,8 @@ MovieReconstructContext* BKE_tracking_reconstruction_context_new(MovieTracking * MovieTrackingTrack *track; BLI_strncpy(context->object_name, object->name, sizeof(context->object_name)); - context->is_camera = object->flag&TRACKING_OBJECT_CAMERA; + context->is_camera = object->flag & TRACKING_OBJECT_CAMERA; + context->motion_flag = tracking->settings.motion_flag; context->tracks_map = tracks_map_new(context->object_name, context->is_camera, num_tracks, 0); @@ -1894,13 +1900,23 @@ void BKE_tracking_solve_reconstruction(MovieReconstructContext *context, short * progressdata.stats_message = stats_message; progressdata.message_size = message_size; - context->reconstruction = libmv_solveReconstruction(context->tracks, - context->keyframe1, context->keyframe2, - context->refine_flags, - context->focal_length, - context->principal_point[0], context->principal_point[1], - context->k1, context->k2, context->k3, - solve_reconstruction_update_cb, &progressdata); + if (context->motion_flag & TRACKING_MOTION_MODAL) { + context->reconstruction = libmv_solveModal(context->tracks, + context->refine_flags, + context->focal_length, + context->principal_point[0], context->principal_point[1], + context->k1, context->k2, context->k3, + solve_reconstruction_update_cb, &progressdata); + } + else { + context->reconstruction = libmv_solveReconstruction(context->tracks, + context->keyframe1, context->keyframe2, + context->refine_flags, + context->focal_length, + context->principal_point[0], context->principal_point[1], + context->k1, context->k2, context->k3, + solve_reconstruction_update_cb, &progressdata); + } error = libmv_reprojectionError(context->reconstruction); diff --git a/source/blender/makesdna/DNA_tracking_types.h b/source/blender/makesdna/DNA_tracking_types.h index 9c0f63028c1..2f099ed59f5 100644 --- a/source/blender/makesdna/DNA_tracking_types.h +++ b/source/blender/makesdna/DNA_tracking_types.h @@ -123,7 +123,7 @@ typedef struct MovieTrackingSettings { short default_pattern_match; /* re-adjust every N frames */ short default_flag; /* default flags like color channels used by default */ - short pod; + short motion_flag; /* flags describes motion type */ /* ** common tracker settings ** */ short speed; /* speed of tracking */ @@ -131,8 +131,8 @@ typedef struct MovieTrackingSettings { /* ** reconstruction settings ** */ int keyframe1, keyframe2; /* two keyframes for reconstrution initialization */ - /* ** which camera intrinsics to refine. uses on the REFINE_* flags */ - short refine_camera_intrinsics, pad23; + /* which camera intrinsics to refine. uses on the REFINE_* flags */ + short refine_camera_intrinsics, pad2; /* ** tool settings ** */ @@ -243,6 +243,11 @@ enum { /* MovieTrackingSettings->flag */ #define TRACKING_SETTINGS_SHOW_DEFAULT_EXPANDED (1<<0) +/* MovieTrackingSettings->motion_flag */ +#define TRACKING_MOTION_TRIPOD (1<<0) + +#define TRACKING_MOTION_MODAL (TRACKING_MOTION_TRIPOD) + /* MovieTrackingSettings->speed */ #define TRACKING_SPEED_FASTEST 0 #define TRACKING_SPEED_REALTIME 1 diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c index 56222c67a23..13948fde367 100644 --- a/source/blender/makesrna/intern/rna_tracking.c +++ b/source/blender/makesrna/intern/rna_tracking.c @@ -607,6 +607,12 @@ static void rna_def_trackingSettings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Show Expanded", "Show the expanded in the user interface"); RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); + /* solver settings */ + prop = RNA_def_property(srna, "use_tripod_solver", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_boolean_sdna(prop, NULL, "motion_flag", TRACKING_MOTION_TRIPOD); + RNA_def_property_ui_text(prop, "Tripod Motion", "Tracking footage is shooted by tripod camera and should use special sovler for this"); + /* limit frames */ prop = RNA_def_property(srna, "default_frames_limit", PROP_INT, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); -- cgit v1.2.3 From 339efd5e0158706f3e0cd6251ee65c7446fc96ed Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 14 Apr 2012 12:02:54 +0000 Subject: Camera tracking: if there's no image for current frame display default grid and allow to interact with tracks for operators which doesn't require image. --- source/blender/blenkernel/intern/movieclip.c | 4 +- source/blender/editors/include/ED_screen.h | 1 + source/blender/editors/screen/area.c | 60 +++++++++++++++++++++ source/blender/editors/space_clip/clip_draw.c | 5 ++ source/blender/editors/space_clip/tracking_ops.c | 33 +++++++++--- source/blender/editors/space_image/image_draw.c | 61 +--------------------- .../editors/transform/transform_conversions.c | 5 +- 7 files changed, 99 insertions(+), 70 deletions(-) diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c index 9a640bcb8eb..9f8585675e3 100644 --- a/source/blender/blenkernel/intern/movieclip.c +++ b/source/blender/blenkernel/intern/movieclip.c @@ -925,8 +925,8 @@ void BKE_movieclip_get_size(MovieClip *clip, MovieClipUser *user, int *width, in real_ibuf_size(clip, user, ibuf, width, height); } else { - *width = 0; - *height = 0; + *width = clip->lastsize[0]; + *height = clip->lastsize[1]; } if (ibuf) diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index f0fffb34b73..f62befdaa31 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -66,6 +66,7 @@ void ED_region_header(const struct bContext *C, struct ARegion *ar); void ED_region_toggle_hidden(struct bContext *C, struct ARegion *ar); void region_scissor_winrct(struct ARegion *ar, struct rcti *winrct); void ED_region_info_draw(struct ARegion *ar, const char *text, int block, float alpha); +void ED_region_grid_draw(struct ARegion *ar, float zoomx, float zoomy); /* spaces */ void ED_spacetypes_init(void); diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index bed17048ea1..d3da167cf72 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1813,3 +1813,63 @@ void ED_region_info_draw(ARegion *ar, const char *text, int block, float alpha) BLF_position(fontid, 12, rect.ymin + 5, 0.0f); BLF_draw(fontid, text, BLF_DRAW_STR_DUMMY_MAX); } + +void ED_region_grid_draw(ARegion *ar, float zoomx, float zoomy) +{ + float gridsize, gridstep = 1.0f / 32.0f; + float fac, blendfac; + int x1, y1, x2, y2; + + /* the image is located inside (0,0),(1, 1) as set by view2d */ + UI_ThemeColorShade(TH_BACK, 20); + + UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &x1, &y1); + UI_view2d_to_region_no_clip(&ar->v2d, 1.0f, 1.0f, &x2, &y2); + glRectf(x1, y1, x2, y2); + + /* gridsize adapted to zoom level */ + gridsize = 0.5f * (zoomx + zoomy); + if (gridsize <= 0.0f) + return; + + if (gridsize < 1.0f) { + while (gridsize < 1.0f) { + gridsize *= 4.0f; + gridstep *= 4.0f; + } + } + else { + while (gridsize >= 4.0f) { + gridsize /= 4.0f; + gridstep /= 4.0f; + } + } + + /* the fine resolution level */ + blendfac = 0.25f * gridsize - floorf(0.25f * gridsize); + CLAMP(blendfac, 0.0f, 1.0f); + UI_ThemeColorShade(TH_BACK, (int)(20.0f * (1.0f - blendfac))); + + fac = 0.0f; + glBegin(GL_LINES); + while (fac < 1.0f) { + glVertex2f(x1, y1 * (1.0f - fac) + y2 * fac); + glVertex2f(x2, y1 * (1.0f - fac) + y2 * fac); + glVertex2f(x1 * (1.0f - fac) + x2 * fac, y1); + glVertex2f(x1 * (1.0f - fac) + x2 * fac, y2); + fac += gridstep; + } + + /* the large resolution level */ + UI_ThemeColor(TH_BACK); + + fac = 0.0f; + while (fac < 1.0f) { + glVertex2f(x1, y1 * (1.0f - fac) + y2 * fac); + glVertex2f(x2, y1 * (1.0f - fac) + y2 * fac); + glVertex2f(x1 * (1.0f - fac) + x2 * fac, y1); + glVertex2f(x1 * (1.0f - fac) + x2 * fac, y2); + fac += 4.0f * gridstep; + } + glEnd(); +} diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c index a553566ca69..418b72dc944 100644 --- a/source/blender/editors/space_clip/clip_draw.c +++ b/source/blender/editors/space_clip/clip_draw.c @@ -1400,7 +1400,12 @@ void clip_draw_main(SpaceClip *sc, ARegion *ar, Scene *scene) if (ibuf) { draw_movieclip_buffer(sc, ar, ibuf, width, height, zoomx, zoomy); IMB_freeImBuf(ibuf); + } + else { + ED_region_grid_draw(ar, zoomx, zoomy); + } + if (width && height) { draw_tracking_tracks(sc, ar, clip, width, height, zoomx, zoomy); draw_distortion(sc, ar, clip, width, height, zoomx, zoomy); } diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index 79569b82476..336ff07a1ad 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -92,6 +92,25 @@ static int space_clip_frame_poll(bContext *C) return FALSE; } +static int space_clip_size_poll(bContext *C) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc) { + MovieClip *clip = ED_space_clip(sc); + + if (clip) { + int width, height; + + BKE_movieclip_get_size(clip, &sc->user, &width, &height); + + return width > 0 && height > 0; + } + } + + return FALSE; +} + /********************** add marker operator *********************/ static void add_marker(SpaceClip *sc, float x, float y) @@ -156,7 +175,7 @@ void CLIP_OT_add_marker(wmOperatorType *ot) /* api callbacks */ ot->invoke = add_marker_invoke; ot->exec = add_marker_exec; - ot->poll = space_clip_frame_poll; + ot->poll = space_clip_size_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -643,7 +662,7 @@ void CLIP_OT_slide_marker(wmOperatorType *ot) ot->idname = "CLIP_OT_slide_marker"; /* api callbacks */ - ot->poll = space_clip_frame_poll; + ot->poll = space_clip_size_poll; ot->invoke = slide_marker_invoke; ot->modal = slide_marker_modal; @@ -1200,7 +1219,7 @@ void CLIP_OT_select_grouped(wmOperatorType *ot) /* api callbacks */ ot->exec = select_groped_exec; - ot->poll = space_clip_frame_poll; + ot->poll = space_clip_size_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -2016,7 +2035,7 @@ static Object *get_orientation_object(bContext *C) static int set_orientation_poll(bContext *C) { - if (space_clip_frame_poll(C)) { + if (space_clip_size_poll(C)) { Scene *scene = CTX_data_scene(C); SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); @@ -2626,7 +2645,7 @@ void CLIP_OT_set_scale(wmOperatorType *ot) static int set_solution_scale_poll(bContext *C) { - if (space_clip_frame_poll(C)) { + if (space_clip_size_poll(C)) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; @@ -2974,7 +2993,7 @@ void CLIP_OT_frame_jump(wmOperatorType *ot) /* api callbacks */ ot->exec = frame_jump_exec; - ot->poll = space_clip_frame_poll; + ot->poll = ED_space_clip_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3031,7 +3050,7 @@ void CLIP_OT_join_tracks(wmOperatorType *ot) /* api callbacks */ ot->exec = join_tracks_exec; - ot->poll = space_clip_frame_poll; + ot->poll = space_clip_size_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c index 29bd5f5117d..793e5712c8c 100644 --- a/source/blender/editors/space_image/image_draw.c +++ b/source/blender/editors/space_image/image_draw.c @@ -334,65 +334,6 @@ void ED_image_draw_info(ARegion *ar, int color_manage, int channels, int x, int /* image drawing */ -static void draw_image_grid(ARegion *ar, float zoomx, float zoomy) -{ - float gridsize, gridstep = 1.0f / 32.0f; - float fac, blendfac; - int x1, y1, x2, y2; - - /* the image is located inside (0,0),(1, 1) as set by view2d */ - UI_ThemeColorShade(TH_BACK, 20); - - UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &x1, &y1); - UI_view2d_to_region_no_clip(&ar->v2d, 1.0f, 1.0f, &x2, &y2); - glRectf(x1, y1, x2, y2); - - /* gridsize adapted to zoom level */ - gridsize = 0.5f * (zoomx + zoomy); - if (gridsize <= 0.0f) return; - - if (gridsize < 1.0f) { - while (gridsize < 1.0f) { - gridsize *= 4.0f; - gridstep *= 4.0f; - } - } - else { - while (gridsize >= 4.0f) { - gridsize /= 4.0f; - gridstep /= 4.0f; - } - } - - /* the fine resolution level */ - blendfac = 0.25f * gridsize - floorf(0.25f * gridsize); - CLAMP(blendfac, 0.0f, 1.0f); - UI_ThemeColorShade(TH_BACK, (int)(20.0f * (1.0f - blendfac))); - - fac = 0.0f; - glBegin(GL_LINES); - while (fac < 1.0f) { - glVertex2f(x1, y1 * (1.0f - fac) + y2 * fac); - glVertex2f(x2, y1 * (1.0f - fac) + y2 * fac); - glVertex2f(x1 * (1.0f - fac) + x2 * fac, y1); - glVertex2f(x1 * (1.0f - fac) + x2 * fac, y2); - fac += gridstep; - } - - /* the large resolution level */ - UI_ThemeColor(TH_BACK); - - fac = 0.0f; - while (fac < 1.0f) { - glVertex2f(x1, y1 * (1.0f - fac) + y2 * fac); - glVertex2f(x2, y1 * (1.0f - fac) + y2 * fac); - glVertex2f(x1 * (1.0f - fac) + x2 * fac, y1); - glVertex2f(x1 * (1.0f - fac) + x2 * fac, y2); - fac += 4.0f * gridstep; - } - glEnd(); -} - static void sima_draw_alpha_pixels(float x1, float y1, int rectx, int recty, unsigned int *recti) { @@ -781,7 +722,7 @@ void draw_image_main(SpaceImage *sima, ARegion *ar, Scene *scene) /* draw the image or grid */ if (ibuf == NULL) - draw_image_grid(ar, zoomx, zoomy); + ED_region_grid_draw(ar, zoomx, zoomy); else if (sima->flag & SI_DRAW_TILE) draw_image_buffer_repeated(sima, ar, scene, ima, ibuf, zoomx, zoomy); else if (ima && (ima->tpageflag & IMA_TILES)) diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index c273d6a5b4c..7b9e3adbc7b 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -5753,10 +5753,13 @@ static void createTransTrackingData(bContext *C, TransInfo *t) ARegion *ar = CTX_wm_region(C); SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); + int width, height; t->total = 0; - if (!clip || !BKE_movieclip_has_frame(clip, &sc->user)) + BKE_movieclip_get_size(clip, &sc->user, &width, &height); + + if (!clip || width == 0 || height == 0) return; if (!ELEM(t->mode, TFM_RESIZE, TFM_TRANSLATION)) -- cgit v1.2.3 From 0daa5b0c474067b54b2e26a3408df03c0042f9d8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 03:40:10 +0000 Subject: bmesh: inset tool depth used bad normals for edge verts. --- source/blender/bmesh/operators/bmo_inset.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/source/blender/bmesh/operators/bmo_inset.c b/source/blender/bmesh/operators/bmo_inset.c index ee52f8bc0a9..712f6b736d6 100644 --- a/source/blender/bmesh/operators/bmo_inset.c +++ b/source/blender/bmesh/operators/bmo_inset.c @@ -495,8 +495,6 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) BM_face_copy_shared(bm, f); } - MEM_freeN(edge_info); - /* we could flag new edges/verts too, is it useful? */ BMO_slot_buffer_from_enabled_flag(bm, op, "faceout", BM_FACE, ELE_NEW); @@ -505,6 +503,28 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) float (*varr_co)[3]; BMOIter oiter; + /* we need to re-calculate tagged normals, but for this purpose we can copy tagged verts from the + * faces they inset from, */ + for (i = 0, es = edge_info; i < edge_info_len; i++, es++) { + zero_v3(es->e_new->v1->no); + zero_v3(es->e_new->v2->no); + } + for (i = 0, es = edge_info; i < edge_info_len; i++, es++) { + float *no = es->l->f->no; + add_v3_v3(es->e_new->v1->no, no); + add_v3_v3(es->e_new->v2->no, no); + } + for (i = 0, es = edge_info; i < edge_info_len; i++, es++) { + /* annoying, avoid normalizing twice */ + if (len_squared_v3(es->e_new->v1->no) != 1.0f) { + normalize_v3(es->e_new->v1->no); + } + if (len_squared_v3(es->e_new->v2->no) != 1.0f) { + normalize_v3(es->e_new->v2->no); + } + } + /* done correcting edge verts normals */ + /* untag verts */ BM_mesh_elem_hflag_disable_all(bm, BM_VERT, BM_ELEM_TAG, FALSE); @@ -537,4 +557,6 @@ void bmo_inset_exec(BMesh *bm, BMOperator *op) } MEM_freeN(varr_co); } + + MEM_freeN(edge_info); } -- cgit v1.2.3 From af7eb3f2106612543e1e0a22e639fdfde3035dc8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 04:03:25 +0000 Subject: fix for buffer overrun crash with saving scene name longer then 24 characters. writing render info would try write= 64 length string into 24 length buffer. updated py script to extract render info too. --- release/scripts/modules/blend_render_info.py | 2 +- source/blender/blenloader/intern/writefile.c | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/release/scripts/modules/blend_render_info.py b/release/scripts/modules/blend_render_info.py index 7c30b480d6b..5a09f664637 100755 --- a/release/scripts/modules/blend_render_info.py +++ b/release/scripts/modules/blend_render_info.py @@ -75,7 +75,7 @@ def read_blend_rend_chunk(path): # Now we want the scene name, start and end frame. this is 32bites long start_frame, end_frame = struct.unpack('>2i' if is_big_endian else '<2i', blendfile.read(8)) - scene_name = blendfile.read(24) + scene_name = blendfile.read(64) scene_name = scene_name[:scene_name.index(b'\0')] diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 0f2990a9157..61969c7878a 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -757,24 +757,30 @@ static void current_screen_compat(Main *mainvar, bScreen **screen) *screen= (window)? window->screen: NULL; } +typedef struct RenderInfo { + int sfra; + int efra; + char scene_name[MAX_ID_NAME - 2]; +} RenderInfo; + static void write_renderinfo(WriteData *wd, Main *mainvar) /* for renderdeamon */ { bScreen *curscreen; Scene *sce; - int data[8]; + RenderInfo data; /* XXX in future, handle multiple windows with multiple screnes? */ current_screen_compat(mainvar, &curscreen); for (sce= mainvar->scene.first; sce; sce= sce->id.next) { if (sce->id.lib==NULL && ( sce==curscreen->scene || (sce->r.scemode & R_BG_RENDER)) ) { - data[0]= sce->r.sfra; - data[1]= sce->r.efra; + data.sfra = sce->r.sfra; + data.efra = sce->r.efra; + memset(data.scene_name, 0, sizeof(data.scene_name)); - memset(data+2, 0, sizeof(int)*6); - BLI_strncpy((char *)(data+2), sce->id.name+2, sizeof(sce->id.name)-2); + BLI_strncpy(data.scene_name, sce->id.name + 2, sizeof(data.scene_name)); - writedata(wd, REND, 32, data); + writedata(wd, REND, sizeof(data), &data); } } } -- cgit v1.2.3 From bd7d3c5e9db2af90b81b3506c616f66e72e85e03 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 04:15:27 +0000 Subject: removed unneeded fnmatch include from outliner, comment files as needing header cleanup. --- source/blender/editors/space_outliner/outliner_edit.c | 11 ++--------- .../blender/editors/space_outliner/outliner_select.c | 12 ++---------- .../blender/editors/space_outliner/outliner_tools.c | 12 ++---------- source/blender/editors/space_outliner/outliner_tree.c | 19 +++++++++---------- 4 files changed, 15 insertions(+), 39 deletions(-) diff --git a/source/blender/editors/space_outliner/outliner_edit.c b/source/blender/editors/space_outliner/outliner_edit.c index 981c4a5d867..4c1c6b15042 100644 --- a/source/blender/editors/space_outliner/outliner_edit.c +++ b/source/blender/editors/space_outliner/outliner_edit.c @@ -29,6 +29,8 @@ * \ingroup spoutliner */ +/* TODO - HEADER CLEANUP - many of these are copy-pasted */ + #include #include #include @@ -56,15 +58,6 @@ #include "BLI_utildefines.h" #include "BLI_math_base.h" -#if defined WIN32 && !defined _LIBC -# include "BLI_fnmatch.h" /* use fnmatch included in blenlib */ -#else -# ifndef _GNU_SOURCE -# define _GNU_SOURCE -# endif -# include -#endif - #include "BLF_translation.h" #include "BKE_animsys.h" diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c index c7aa4dc4e92..5594f22fc91 100644 --- a/source/blender/editors/space_outliner/outliner_select.c +++ b/source/blender/editors/space_outliner/outliner_select.c @@ -29,6 +29,8 @@ * \ingroup spoutliner */ +/* TODO - HEADER CLEANUP - many of these are copy-pasted */ + #include #include #include @@ -56,16 +58,6 @@ #include "BLI_utildefines.h" #include "BLI_math_base.h" -#if defined WIN32 && !defined _LIBC -# include "BLI_fnmatch.h" /* use fnmatch included in blenlib */ -#else -# ifndef _GNU_SOURCE -# define _GNU_SOURCE -# endif -# include -#endif - - #include "BKE_animsys.h" #include "BKE_context.h" #include "BKE_deform.h" diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c index ba3637a88af..3a8f8c54d05 100644 --- a/source/blender/editors/space_outliner/outliner_tools.c +++ b/source/blender/editors/space_outliner/outliner_tools.c @@ -29,6 +29,8 @@ * \ingroup spoutliner */ +/* TODO - HEADER CLEANUP - many of these are copy-pasted */ + #include #include #include @@ -56,16 +58,6 @@ #include "BLI_utildefines.h" #include "BLI_math_base.h" -#if defined WIN32 && !defined _LIBC -# include "BLI_fnmatch.h" /* use fnmatch included in blenlib */ -#else -# ifndef _GNU_SOURCE -# define _GNU_SOURCE -# endif -# include -#endif - - #include "BKE_animsys.h" #include "BKE_context.h" #include "BKE_deform.h" diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index e83fce0cf05..83c2bdaf347 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -34,6 +34,15 @@ #include #include +#if defined WIN32 && !defined _LIBC || defined __sun +# include "BLI_fnmatch.h" /* use fnmatch included in blenlib */ +#else +# ifndef _GNU_SOURCE +# define _GNU_SOURCE +# endif +# include +#endif + #include "MEM_guardedalloc.h" #include "DNA_anim_types.h" @@ -57,16 +66,6 @@ #include "BLI_utildefines.h" #include "BLI_math_base.h" -#if defined WIN32 && !defined _LIBC || defined __sun -# include "BLI_fnmatch.h" /* use fnmatch included in blenlib */ -#else -# ifndef _GNU_SOURCE -# define _GNU_SOURCE -# endif -# include -#endif - - #include "BKE_animsys.h" #include "BKE_context.h" #include "BKE_deform.h" -- cgit v1.2.3 From 61015fbd8cf4c4ee70773a12e9463a7b7071ef20 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 04:41:27 +0000 Subject: fix for memory leak in the knife tool --- source/blender/editors/mesh/editmesh_knife.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 0ace06b1a1a..670b06887eb 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -2746,6 +2746,9 @@ static void knifetool_exit(bContext *C, wmOperator *op) if (kcd->cagecos) MEM_freeN(kcd->cagecos); + if (kcd->linehits) + MEM_freeN(kcd->linehits); + /* destroy kcd itself */ MEM_freeN(kcd); op->customdata = NULL; -- cgit v1.2.3 From 5b0fcbd8f908b85ad344d7caeac892d50c18f33f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 05:17:54 +0000 Subject: outliner header cleanup (copy pasted headers when split up Im guessing) --- .../blender/editors/space_outliner/outliner_draw.c | 24 ++------------- .../blender/editors/space_outliner/outliner_edit.c | 35 +--------------------- .../blender/editors/space_outliner/outliner_ops.c | 6 +--- .../editors/space_outliner/outliner_select.c | 33 ++------------------ .../editors/space_outliner/outliner_tools.c | 22 -------------- .../blender/editors/space_outliner/outliner_tree.c | 24 --------------- 6 files changed, 6 insertions(+), 138 deletions(-) diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c index 73289dce968..779475943dd 100644 --- a/source/blender/editors/space_outliner/outliner_draw.c +++ b/source/blender/editors/space_outliner/outliner_draw.c @@ -29,49 +29,30 @@ * \ingroup spoutliner */ -#include -#include - -#include "MEM_guardedalloc.h" - -#include "DNA_anim_types.h" #include "DNA_armature_types.h" -#include "DNA_camera_types.h" #include "DNA_group_types.h" -#include "DNA_key_types.h" #include "DNA_lamp_types.h" -#include "DNA_material_types.h" -#include "DNA_mesh_types.h" -#include "DNA_meta_types.h" -#include "DNA_particle_types.h" +#include "DNA_object_types.h" #include "DNA_scene_types.h" -#include "DNA_world_types.h" #include "DNA_sequence_types.h" -#include "DNA_object_types.h" #include "BLI_blenlib.h" #include "BLI_utildefines.h" +#include "BLI_ghash.h" -#include "BKE_animsys.h" #include "BKE_context.h" #include "BKE_deform.h" #include "BKE_depsgraph.h" -#include "BKE_fcurve.h" #include "BKE_global.h" -#include "BKE_group.h" #include "BKE_library.h" #include "BKE_main.h" #include "BKE_modifier.h" #include "BKE_report.h" #include "BKE_scene.h" -#include "BKE_sequencer.h" - -#include "BLI_ghash.h" #include "ED_armature.h" #include "ED_object.h" #include "ED_screen.h" -#include "ED_util.h" #include "WM_api.h" #include "WM_types.h" @@ -85,7 +66,6 @@ #include "UI_view2d.h" #include "RNA_access.h" -#include "RNA_define.h" #include "outliner_intern.h" diff --git a/source/blender/editors/space_outliner/outliner_edit.c b/source/blender/editors/space_outliner/outliner_edit.c index 4c1c6b15042..62d93f62d0f 100644 --- a/source/blender/editors/space_outliner/outliner_edit.c +++ b/source/blender/editors/space_outliner/outliner_edit.c @@ -29,72 +29,39 @@ * \ingroup spoutliner */ -/* TODO - HEADER CLEANUP - many of these are copy-pasted */ - -#include -#include -#include -#include - #include "MEM_guardedalloc.h" #include "DNA_anim_types.h" -#include "DNA_armature_types.h" -#include "DNA_constraint_types.h" -#include "DNA_camera_types.h" #include "DNA_group_types.h" -#include "DNA_key_types.h" -#include "DNA_lamp_types.h" -#include "DNA_material_types.h" -#include "DNA_mesh_types.h" -#include "DNA_meta_types.h" -#include "DNA_particle_types.h" #include "DNA_scene_types.h" -#include "DNA_world_types.h" -#include "DNA_sequence_types.h" #include "DNA_object_types.h" #include "BLI_blenlib.h" #include "BLI_utildefines.h" -#include "BLI_math_base.h" #include "BLF_translation.h" #include "BKE_animsys.h" #include "BKE_context.h" -#include "BKE_deform.h" #include "BKE_depsgraph.h" -#include "BKE_fcurve.h" -#include "BKE_global.h" -#include "BKE_group.h" #include "BKE_library.h" #include "BKE_main.h" -#include "BKE_modifier.h" #include "BKE_report.h" #include "BKE_scene.h" -#include "BKE_sequencer.h" -#include "ED_armature.h" #include "ED_object.h" #include "ED_screen.h" -#include "ED_util.h" +#include "ED_keyframing.h" #include "WM_api.h" #include "WM_types.h" -#include "BIF_gl.h" -#include "BIF_glutil.h" - #include "UI_interface.h" -#include "UI_interface_icons.h" #include "UI_resources.h" #include "UI_view2d.h" #include "RNA_access.h" #include "RNA_define.h" -#include "RNA_enum_types.h" - -#include "ED_keyframing.h" #include "outliner_intern.h" diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c index d2ef4573ccf..12f8f2cb38b 100644 --- a/source/blender/editors/space_outliner/outliner_ops.c +++ b/source/blender/editors/space_outliner/outliner_ops.c @@ -28,9 +28,6 @@ * \ingroup spoutliner */ - -#include - #include "DNA_space_types.h" #include "WM_api.h" @@ -42,9 +39,8 @@ #include "outliner_intern.h" -/* ************************** registration **********************************/ - +/* ************************** registration **********************************/ void outliner_operatortypes(void) { diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c index 5594f22fc91..f43e9b19672 100644 --- a/source/blender/editors/space_outliner/outliner_select.c +++ b/source/blender/editors/space_outliner/outliner_select.c @@ -29,46 +29,21 @@ * \ingroup spoutliner */ -/* TODO - HEADER CLEANUP - many of these are copy-pasted */ - -#include -#include -#include -#include - #include "MEM_guardedalloc.h" -#include "DNA_anim_types.h" #include "DNA_armature_types.h" -#include "DNA_constraint_types.h" -#include "DNA_camera_types.h" #include "DNA_group_types.h" -#include "DNA_key_types.h" #include "DNA_lamp_types.h" #include "DNA_material_types.h" -#include "DNA_mesh_types.h" -#include "DNA_meta_types.h" -#include "DNA_particle_types.h" +#include "DNA_object_types.h" #include "DNA_scene_types.h" -#include "DNA_world_types.h" #include "DNA_sequence_types.h" -#include "DNA_object_types.h" +#include "DNA_world_types.h" -#include "BLI_blenlib.h" #include "BLI_utildefines.h" -#include "BLI_math_base.h" -#include "BKE_animsys.h" #include "BKE_context.h" -#include "BKE_deform.h" #include "BKE_depsgraph.h" -#include "BKE_fcurve.h" -#include "BKE_global.h" -#include "BKE_group.h" -#include "BKE_library.h" -#include "BKE_main.h" -#include "BKE_modifier.h" -#include "BKE_report.h" #include "BKE_scene.h" #include "BKE_sequencer.h" @@ -80,12 +55,8 @@ #include "WM_api.h" #include "WM_types.h" -#include "BIF_gl.h" -#include "BIF_glutil.h" #include "UI_interface.h" -#include "UI_interface_icons.h" -#include "UI_resources.h" #include "UI_view2d.h" #include "RNA_access.h" diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c index 3a8f8c54d05..5c527face83 100644 --- a/source/blender/editors/space_outliner/outliner_tools.c +++ b/source/blender/editors/space_outliner/outliner_tools.c @@ -29,48 +29,31 @@ * \ingroup spoutliner */ -/* TODO - HEADER CLEANUP - many of these are copy-pasted */ - -#include -#include -#include -#include - #include "MEM_guardedalloc.h" #include "DNA_anim_types.h" #include "DNA_armature_types.h" -#include "DNA_constraint_types.h" -#include "DNA_camera_types.h" #include "DNA_group_types.h" -#include "DNA_key_types.h" #include "DNA_lamp_types.h" #include "DNA_material_types.h" #include "DNA_mesh_types.h" #include "DNA_meta_types.h" -#include "DNA_particle_types.h" #include "DNA_scene_types.h" #include "DNA_world_types.h" -#include "DNA_sequence_types.h" #include "DNA_object_types.h" #include "BLI_blenlib.h" #include "BLI_utildefines.h" -#include "BLI_math_base.h" #include "BKE_animsys.h" #include "BKE_context.h" -#include "BKE_deform.h" #include "BKE_depsgraph.h" #include "BKE_fcurve.h" -#include "BKE_global.h" #include "BKE_group.h" #include "BKE_library.h" #include "BKE_main.h" -#include "BKE_modifier.h" #include "BKE_report.h" #include "BKE_scene.h" -#include "BKE_sequencer.h" #include "ED_armature.h" #include "ED_object.h" @@ -80,12 +63,7 @@ #include "WM_api.h" #include "WM_types.h" -#include "BIF_gl.h" -#include "BIF_glutil.h" - #include "UI_interface.h" -#include "UI_interface_icons.h" -#include "UI_resources.h" #include "UI_view2d.h" #include "RNA_access.h" diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index 83c2bdaf347..e3c89c82ec6 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -31,8 +31,6 @@ #include #include -#include -#include #if defined WIN32 && !defined _LIBC || defined __sun # include "BLI_fnmatch.h" /* use fnmatch included in blenlib */ @@ -64,41 +62,19 @@ #include "BLI_blenlib.h" #include "BLI_utildefines.h" -#include "BLI_math_base.h" -#include "BKE_animsys.h" -#include "BKE_context.h" -#include "BKE_deform.h" -#include "BKE_depsgraph.h" #include "BKE_fcurve.h" -#include "BKE_global.h" -#include "BKE_group.h" -#include "BKE_library.h" #include "BKE_main.h" #include "BKE_modifier.h" -#include "BKE_report.h" -#include "BKE_scene.h" #include "BKE_sequencer.h" #include "ED_armature.h" -#include "ED_object.h" #include "ED_screen.h" -#include "ED_util.h" #include "WM_api.h" #include "WM_types.h" -#include "BIF_gl.h" -#include "BIF_glutil.h" - -#include "UI_interface.h" -#include "UI_interface_icons.h" -#include "UI_resources.h" -#include "UI_view2d.h" - #include "RNA_access.h" -#include "RNA_define.h" -#include "RNA_enum_types.h" #include "outliner_intern.h" -- cgit v1.2.3 From c30dba9a92b1d5cf0b88902c4c33388b3681fcc8 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Thu, 26 Apr 2012 08:04:11 +0000 Subject: Fix OIIO dll copying for win32-mingw --- SConstruct | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SConstruct b/SConstruct index 96d27ae76b0..b1603fd0397 100644 --- a/SConstruct +++ b/SConstruct @@ -774,7 +774,7 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'win64-vc', 'linuxcross'): dllsources.append('${LCGDIR}/thumbhandler/lib/BlendThumb.dll') dllsources.append('${LCGDIR}/thumbhandler/lib/BlendThumb64.dll') - if env['WITH_BF_OIIO']: + if env['WITH_BF_OIIO'] and env['OURPLATFORM'] != 'win32-mingw': dllsources.append('${LCGDIR}/openimageio/bin/OpenImageIO.dll') dllsources.append('#source/icons/blender.exe.manifest') -- cgit v1.2.3 From 2118d3c19cdff3de2ff39f664f1e86051f989f08 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 08:27:50 +0000 Subject: code cleanup: bmesh comments/todos, no functional changes. --- source/blender/blenlib/BLI_array.h | 2 +- source/blender/bmesh/bmesh.h | 35 ++++++++++++++++ source/blender/bmesh/intern/bmesh_core.c | 68 ++++++++++++++++++++++++++------ 3 files changed, 91 insertions(+), 14 deletions(-) diff --git a/source/blender/blenlib/BLI_array.h b/source/blender/blenlib/BLI_array.h index d66b8c009d7..dac0143b5b6 100644 --- a/source/blender/blenlib/BLI_array.h +++ b/source/blender/blenlib/BLI_array.h @@ -64,7 +64,7 @@ #define BLI_array_staticdeclare(arr, maxstatic) \ int _##arr##_count = 0; \ void *_##arr##_tmp; \ - char _##arr##_static[maxstatic * sizeof(arr)] + char _##arr##_static[maxstatic * sizeof(arr)] /* this returns the entire size of the array, including any buffering. */ diff --git a/source/blender/bmesh/bmesh.h b/source/blender/bmesh/bmesh.h index 6b41babd927..13926c42192 100644 --- a/source/blender/bmesh/bmesh.h +++ b/source/blender/bmesh/bmesh.h @@ -192,6 +192,41 @@ * - bmo_xxx() - Low level / internal operator API functions. * - _bm_xxx() - Functions which are called via macros only. * + * \section bm_todo BMesh TODO's + * + * There may be a better place for this section, but adding here for now. + * + * + * \subsection bm_todo_tools Tools + * + * Probably most of these will be bmesh operators. + * + * - make ngons flat. + * - make ngons into tris/quads (ngon poke?), many methods could be used here (triangulate/fan/quad-fan). + * - solidify (precise mode), keeps even wall thickness, re-creates outlines of offset faces with plane-plane + * intersections. + * - split vert (we already have in our API, just no tool) + * - bridge (add option to bridge between different edge loop counts, option to remove selected face regions) + * - flip selected region (invert all faces about the plane defined by the selected region outline) + * - interactive dissolve (like the knife tool but draw over edges to dissolve) + * + * + * \subsection bm_todo_optimize Optimizations + * + * - skip normal calc when its not needed (when calling chain of operators & for modifiers, flag as dirty) + * - skip BMO flag allocation, its not needed in many cases, this is fairly redundant to calc by default. + * - ability to call BMO's with option not to create return data (will save some time) + * - binary diff UNDO, currently this uses huge amount of ram when all shapes are stored for each undo step for eg. + * - use two differnt iterator types for BMO map/buffer types. + * - avoid string lookups for BMO slot lookups _especially_ when used in loops, this is very crappy. + * + * + * \subsection bm_todo_tools_enhance Tool Enhancements + * + * - face inset interpolate loop data from face (currently copies - but this stretches UV's in an ugly way) + * - vert slide UV correction (like we have for edge slide) + * - fill-face edge net - produce consistant normals, currently it won't, fix should be to fill in edge-net node + * connected with previous one - since they already check for normals of adjacent edge-faces before creating. */ #ifdef __cplusplus diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index f3f7614fe02..756fd742fa6 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -50,6 +50,9 @@ #endif +/** + * \brief Main function for creating a new vertex. + */ BMVert *BM_vert_create(BMesh *bm, const float co[3], const BMVert *example) { BMVert *v = BLI_mempool_calloc(bm->vpool); @@ -85,6 +88,12 @@ BMVert *BM_vert_create(BMesh *bm, const float co[3], const BMVert *example) return v; } +/** + * \brief Main function for creating a new edge. + * + * \note Duplicate edges are supported by the API however users should _never_ see them. + * so unless you need a unique edge or know the edge won't exist, you should call wih \a nodouble=TRUE + */ BMEdge *BM_edge_create(BMesh *bm, BMVert *v1, BMVert *v2, const BMEdge *example, int nodouble) { BMEdge *e; @@ -181,10 +190,11 @@ BMFace *BM_face_copy(BMesh *bm, BMFace *f, const short copyverts, const short co BLI_array_staticdeclare(verts, BM_NGON_STACK_SIZE); BMLoop *l_iter; BMLoop *l_first; - BMLoop *l2; - BMFace *f2; + BMLoop *l_copy; + BMFace *f_copy; int i; + /* BMESH_TODO - grow verts array in one go! (right here) */ l_iter = l_first = BM_FACE_FIRST_LOOP(f); do { if (copyverts) { @@ -196,6 +206,7 @@ BMFace *BM_face_copy(BMesh *bm, BMFace *f, const short copyverts, const short co } } while ((l_iter = l_iter->next) != l_first); + /* BMESH_TODO - grow edges array in one go! (right here) */ l_iter = l_first = BM_FACE_FIRST_LOOP(f); i = 0; do { @@ -222,18 +233,18 @@ BMFace *BM_face_copy(BMesh *bm, BMFace *f, const short copyverts, const short co i++; } while ((l_iter = l_iter->next) != l_first); - f2 = BM_face_create(bm, verts, edges, f->len, FALSE); + f_copy = BM_face_create(bm, verts, edges, f->len, FALSE); - BM_elem_attrs_copy(bm, bm, f, f2); + BM_elem_attrs_copy(bm, bm, f, f_copy); l_iter = l_first = BM_FACE_FIRST_LOOP(f); - l2 = BM_FACE_FIRST_LOOP(f2); + l_copy = BM_FACE_FIRST_LOOP(f_copy); do { - BM_elem_attrs_copy(bm, bm, l_iter, l2); - l2 = l2->next; + BM_elem_attrs_copy(bm, bm, l_iter, l_copy); + l_copy = l_copy->next; } while ((l_iter = l_iter->next) != l_first); - return f2; + return f_copy; } /** @@ -270,6 +281,9 @@ BLI_INLINE BMFace *bm_face_create__internal(BMesh *bm) return f; } +/** + * \brief Main face creation function + */ BMFace *BM_face_create(BMesh *bm, BMVert **verts, BMEdge **edges, const int len, int nodouble) { BMFace *f = NULL; @@ -319,6 +333,12 @@ BMFace *BM_face_create(BMesh *bm, BMVert **verts, BMEdge **edges, const int len, return f; } +/** + * Check the element is valid. + * + * BMESH_TODO, when this raises an error the output is incredible confusing. + * need to have some nice way to print/debug what the hecks going on. + */ int bmesh_elem_check(void *element, const char htype) { BMHeader *head = element; @@ -446,14 +466,16 @@ int bmesh_elem_check(void *element, const char htype) } /** - * low level function, only free's, - * does not change adjust surrounding geometry */ + * low level function, only frees the vert, + * doesn't change or adjust surrounding geometry + */ static void bm_kill_only_vert(BMesh *bm, BMVert *v) { bm->totvert--; bm->elem_index_dirty |= BM_VERT; BM_select_history_remove(bm, v); + if (v->head.data) CustomData_bmesh_free_block(&bm->vdata, &v->head.data); @@ -461,6 +483,10 @@ static void bm_kill_only_vert(BMesh *bm, BMVert *v) BLI_mempool_free(bm->vpool, v); } +/** + * low level function, only frees the edge, + * doesn't change or adjust surrounding geometry + */ static void bm_kill_only_edge(BMesh *bm, BMEdge *e) { bm->totedge--; @@ -475,6 +501,10 @@ static void bm_kill_only_edge(BMesh *bm, BMEdge *e) BLI_mempool_free(bm->epool, e); } +/** + * low level function, only frees the face, + * doesn't change or adjust surrounding geometry + */ static void bm_kill_only_face(BMesh *bm, BMFace *f) { if (bm->act_face == f) @@ -492,6 +522,10 @@ static void bm_kill_only_face(BMesh *bm, BMFace *f) BLI_mempool_free(bm->fpool, f); } +/** + * low level function, only frees the loop, + * doesn't change or adjust surrounding geometry + */ static void bm_kill_only_loop(BMesh *bm, BMLoop *l) { bm->totloop--; @@ -502,7 +536,7 @@ static void bm_kill_only_loop(BMesh *bm, BMLoop *l) } /** - * kills all edges associated with f, along with any other faces containing + * kills all edges associated with \a f, along with any other faces containing * those edges */ void BM_face_edges_kill(BMesh *bm, BMFace *f) @@ -526,7 +560,7 @@ void BM_face_edges_kill(BMesh *bm, BMFace *f) } /** - * kills all verts associated with f, along with any other faces containing + * kills all verts associated with \a f, along with any other faces containing * those vertices */ void BM_face_verts_kill(BMesh *bm, BMFace *f) @@ -587,7 +621,9 @@ void BM_face_kill(BMesh *bm, BMFace *f) bm_kill_only_face(bm, f); } - +/** + * kills \a e and all faces that use it. + */ void BM_edge_kill(BMesh *bm, BMEdge *e) { @@ -615,6 +651,9 @@ void BM_edge_kill(BMesh *bm, BMEdge *e) bm_kill_only_edge(bm, e); } +/** + * kills \a v and all edges that use it. + */ void BM_vert_kill(BMesh *bm, BMVert *v) { if (v->e) { @@ -746,6 +785,9 @@ static int bm_loop_reverse_loop(BMesh *bm, BMFace *f return 1; } +/** + * \brief Flip the faces direction + */ int bmesh_loop_reverse(BMesh *bm, BMFace *f) { #ifdef USE_BMESH_HOLES -- cgit v1.2.3 From f92fcbd413274bb417a0f0dd363b0cfad2931f24 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Thu, 26 Apr 2012 11:23:37 +0000 Subject: Minor fix in response to Koji Iigura's mail. Own error, sorry about that (I tend to forget not all OS are utf-8 yet :/ ). --- source/blender/makesdna/DNA_modifier_types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 6c1d9892ba2..30280e95646 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -898,7 +898,7 @@ typedef struct WeightVGEditModifierData { typedef struct WeightVGMixModifierData { ModifierData modifier; - /* XXX Note: I tried to keep everything logically ordered – provided the + /* XXX Note: I tried to keep everything logically ordered - provided the * alignment constraints... */ char defgrp_name_a[64]; /* Name of vertex group to modify/weight. MAX_VGROUP_NAME. */ -- cgit v1.2.3 From 41ebd0bb77cf532fa8b95dc0dee62cd21da574d4 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Thu, 26 Apr 2012 11:48:36 +0000 Subject: * Compile fix for recent Outliner header cleanup. --- source/blender/editors/space_outliner/outliner_tree.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index e3c89c82ec6..e2d43386c5e 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -62,6 +62,7 @@ #include "BLI_blenlib.h" #include "BLI_utildefines.h" +#include "BLI_math.h" #include "BKE_fcurve.h" #include "BKE_main.h" -- cgit v1.2.3 From 426daf8cc5f8734737da2f254c466d93da7dee7f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 26 Apr 2012 12:13:22 +0000 Subject: Fix related to #31067: missing update when toggling Premultiply on a sequencer strip. --- source/blender/makesrna/intern/rna_sequencer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index 2ed2f295cb6..c94d420da8a 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -1243,7 +1243,7 @@ static void rna_def_filter_video(StructRNA *srna) prop = RNA_def_property(srna, "use_premultiply", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_PREMUL); RNA_def_property_ui_text(prop, "Premultiply", "Convert RGB from key alpha to premultiplied alpha"); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); prop = RNA_def_property(srna, "use_flip_x", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPX); -- cgit v1.2.3 From 6d4841ba827511c64fe44987837d35ec9c30b86f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 26 Apr 2012 12:13:26 +0000 Subject: Fix #31058: missing Simplify panel for cycles. --- intern/cycles/blender/addon/ui.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 4a8b639b390..624d00b377d 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -783,6 +783,31 @@ class CyclesTexture_PT_colors(CyclesButtonsPanel, Panel): layout.template_color_ramp(mapping, "color_ramp", expand=True) +class CyclesScene_PT_simplify(CyclesButtonsPanel, Panel): + bl_label = "Simplify" + bl_context = "scene" + COMPAT_ENGINES = {'CYCLES'} + + def draw_header(self, context): + rd = context.scene.render + self.layout.prop(rd, "use_simplify", text="") + + def draw(self, context): + layout = self.layout + + rd = context.scene.render + + layout.active = rd.use_simplify + + split = layout.split() + + col = split.column() + col.prop(rd, "simplify_subdivision", text="Subdivision") + + col = split.column() + col.prop(rd, "simplify_child_particles", text="Child Particles") + + def draw_device(self, context): scene = context.scene layout = self.layout -- cgit v1.2.3 From ec6c3f632ede3d9bdbc75fec19d6a0b2d49a646c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 26 Apr 2012 12:30:37 +0000 Subject: Fix #31066: cycles keeps rendering in viewport after window closed. --- source/blender/editors/include/ED_render.h | 2 ++ source/blender/editors/render/render_update.c | 43 +++++++++++++++------------ source/blender/editors/screen/screen_edit.c | 3 ++ 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/source/blender/editors/include/ED_render.h b/source/blender/editors/include/ED_render.h index 73bbd5ffef8..5392ef86ba7 100644 --- a/source/blender/editors/include/ED_render.h +++ b/source/blender/editors/include/ED_render.h @@ -37,6 +37,7 @@ struct MTex; struct Render; struct RenderInfo; struct Scene; +struct ScrArea; /* render_ops.c */ @@ -46,6 +47,7 @@ void ED_operatortypes_render(void); void ED_render_id_flush_update(struct Main *bmain, struct ID *id); void ED_render_engine_changed(struct Main *bmain); +void ED_render_engine_area_exit(struct ScrArea *sa); void ED_render_scene_update(struct Main *bmain, struct Scene *scene, int updated); /* render_preview.c */ diff --git a/source/blender/editors/render/render_update.c b/source/blender/editors/render/render_update.c index 35b4126339e..48c35873304 100644 --- a/source/blender/editors/render/render_update.c +++ b/source/blender/editors/render/render_update.c @@ -116,35 +116,40 @@ void ED_render_scene_update(Main *bmain, Scene *scene, int updated) CTX_free(C); } -void ED_render_engine_changed(Main *bmain) +void ED_render_engine_area_exit(ScrArea *sa) { - /* on changing the render engine type, clear all running render engines */ - bScreen *sc; - ScrArea *sa; + /* clear all render engines in this area */ ARegion *ar; - for (sc = bmain->screen.first; sc; sc = sc->id.next) { - for (sa = sc->areabase.first; sa; sa = sa->next) { - if (sa->spacetype != SPACE_VIEW3D) - continue; + if (sa->spacetype != SPACE_VIEW3D) + return; - for (ar = sa->regionbase.first; ar; ar = ar->next) { - RegionView3D *rv3d; + for (ar = sa->regionbase.first; ar; ar = ar->next) { + RegionView3D *rv3d; - if (ar->regiontype != RGN_TYPE_WINDOW) - continue; - - rv3d = ar->regiondata; + if (ar->regiontype != RGN_TYPE_WINDOW) + continue; + + rv3d = ar->regiondata; - if (rv3d->render_engine) { - RE_engine_free(rv3d->render_engine); - rv3d->render_engine = NULL; - } - } + if (rv3d->render_engine) { + RE_engine_free(rv3d->render_engine); + rv3d->render_engine = NULL; } } } +void ED_render_engine_changed(Main *bmain) +{ + /* on changing the render engine type, clear all running render engines */ + bScreen *sc; + ScrArea *sa; + + for (sc = bmain->screen.first; sc; sc = sc->id.next) + for (sa = sc->areabase.first; sa; sa = sa->next) + ED_render_engine_area_exit(sa); +} + /***************************** Updates *********************************** * ED_render_id_flush_update gets called from DAG_id_tag_update, to do * * editor level updates when the ID changes. when these ID blocks are in * diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 03d8b3d3e9c..cafa4527c20 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1154,6 +1154,9 @@ void ED_area_exit(bContext *C, ScrArea *sa) ED_fileselect_exit(C, (SpaceFile *)sl); } } + else if (sa->spacetype == SPACE_VIEW3D) { + ED_render_engine_area_exit(sa); + } CTX_wm_area_set(C, sa); for (ar= sa->regionbase.first; ar; ar= ar->next) -- cgit v1.2.3 From 6d2cd240108caea9c8c19b2f413f28384cf06675 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 15:20:26 +0000 Subject: fix memory leak in validating mesh and remove unneeded knife operator settings store. --- source/blender/blenkernel/intern/mesh.c | 2 ++ source/blender/editors/mesh/editmesh_knife.c | 4 ---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 514380dc980..b9a65403f84 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -1154,6 +1154,8 @@ void mesh_strip_loose_edges(Mesh *me) for (a = 0, l = me->mloop; a < me->totloop; a++, l++) { l->e = new_idx[l->e]; } + + MEM_freeN(new_idx); } void mball_to_mesh(ListBase *lb, Mesh *me) diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index 670b06887eb..b3bc0a1ffa9 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -2721,10 +2721,6 @@ static void knifetool_exit(bContext *C, wmOperator *op) WM_cursor_restore(CTX_wm_window(C)); - /* remember setting for later */ - RNA_boolean_set(op->ptr, "use_occlude_geometry", !kcd->cut_through); - WM_operator_last_properties_store(op); /* XXX - this is clunky but modal ops wont do this automatic */ - /* deactivate the extra drawing stuff in 3D-View */ ED_region_draw_cb_exit(kcd->ar->type, kcd->draw_handle); -- cgit v1.2.3 From ef0a4c0ba9a43107b60f7af1d75066d8fabf9223 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 15:38:16 +0000 Subject: fix for bevel modifier creating invalid geometry - simply tell BM_face_split() to check for doubles. --- source/blender/blenkernel/intern/mesh.c | 2 +- source/blender/bmesh/tools/BME_bevel.c | 36 ++++++++++++++++----------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index b9a65403f84..59dd7db43da 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -1128,7 +1128,7 @@ void mesh_strip_loose_edges(Mesh *me) MEdge *e; MLoop *l; int a, b; - unsigned int *new_idx = MEM_mallocN(sizeof(int) * me->totedge, "strip_loose_edges old2new idx mapping for loops."); + unsigned int *new_idx = MEM_mallocN(sizeof(int) * me->totedge, __func__); for (a = b = 0, e = me->medge; a < me->totedge; a++, e++) { if (e->v1 != e->v2) { diff --git a/source/blender/bmesh/tools/BME_bevel.c b/source/blender/bmesh/tools/BME_bevel.c index 6a91d6f9d00..a357767e1d8 100644 --- a/source/blender/bmesh/tools/BME_bevel.c +++ b/source/blender/bmesh/tools/BME_bevel.c @@ -305,7 +305,7 @@ static BMVert *BME_bevel_split_edge(BMesh *bm, BMVert *v, BMVert *v1, BMLoop *l, e1 = e2; } ov = BM_edge_other_vert(e1, v); - sv = BM_edge_split(bm, e1, v, &ne, 0); + sv = BM_edge_split(bm, e1, v, &ne, 0.0f); //BME_data_interp_from_verts(bm, v, ov, sv, 0.25); /* this is technically wrong.. */ //BME_data_interp_from_faceverts(bm, v, ov, sv, 0.25); //BME_data_interp_from_faceverts(bm, ov, v, sv, 0.25); @@ -347,7 +347,7 @@ static BMVert *BME_bevel_split_edge(BMesh *bm, BMVert *v, BMVert *v1, BMLoop *l, else { is_split_vert = 0; ov = BM_edge_other_vert(l->e, v); - sv = BM_edge_split(bm, l->e, v, &ne, 0); + sv = BM_edge_split(bm, l->e, v, &ne, 0.0f); //BME_data_interp_from_verts(bm, v, ov, sv, 0.25); /* this is technically wrong.. */ //BME_data_interp_from_faceverts(bm, v, ov, sv, 0.25); //BME_data_interp_from_faceverts(bm, ov, v, sv, 0.25); @@ -371,8 +371,8 @@ static BMVert *BME_bevel_split_edge(BMesh *bm, BMVert *v, BMVert *v1, BMLoop *l, if (vtd1->loc == NULL) { /* this is a vert with data only for calculating initial weights */ - if (vtd1->weight < 0) { - vtd1->weight = 0; + if (vtd1->weight < 0.0f) { + vtd1->weight = 0.0f; } scale = vtd1->weight / vtd1->factor; if (!vtd1->max) { @@ -537,14 +537,14 @@ static BMLoop *BME_bevel_edge(BMesh *bm, BMLoop *l, float value, int UNUSED(opti se = l->next->e; jf = NULL; if (kl->v == kv) { - BM_face_split(bm, kl->f, kl->prev->v, kl->next->v, &nl, kl->prev->e, FALSE); + BM_face_split(bm, kl->f, kl->prev->v, kl->next->v, &nl, kl->prev->e, TRUE); ke = kl->e; /* BMESH-TODO: jfke doesn't handle customdata */ jf = bmesh_jfke(bm, kl->prev->radial_next->f, kl->f, kl->prev->e); BM_vert_collapse_edge(bm, ke, kv, FALSE); } else { - BM_face_split(bm, kl->f, kl->next->next->v, kl->v, &nl, kl->next->e, FALSE); + BM_face_split(bm, kl->f, kl->next->next->v, kl->v, &nl, kl->next->e, TRUE); ke = kl->e; /* BMESH-TODO: jfke doesn't handle customdata */ jf = bmesh_jfke(bm, kl->next->radial_next->f, kl->f, kl->next->e); @@ -583,14 +583,14 @@ static BMLoop *BME_bevel_edge(BMesh *bm, BMLoop *l, float value, int UNUSED(opti se = l->e; jf = NULL; if (kl->v == kv) { - BM_face_split(bm, kl->f, kl->prev->v, kl->next->v, &nl, kl->prev->e, FALSE); + BM_face_split(bm, kl->f, kl->prev->v, kl->next->v, &nl, kl->prev->e, TRUE); ke = kl->e; /* BMESH-TODO: jfke doesn't handle customdata */ jf = bmesh_jfke(bm, kl->prev->radial_next->f, kl->f, kl->prev->e); BM_vert_collapse_edge(bm, ke, kv, FALSE); } else { - BM_face_split(bm, kl->f, kl->next->next->v, kl->v, &nl, kl->next->e, FALSE); + BM_face_split(bm, kl->f, kl->next->next->v, kl->v, &nl, kl->next->e, TRUE); ke = kl->e; /* BMESH-TODO: jfke doesn't handle customdata */ jf = bmesh_jfke(bm, kl->next->radial_next->f, kl->f, kl->next->e); @@ -605,7 +605,7 @@ static BMLoop *BME_bevel_edge(BMesh *bm, BMLoop *l, float value, int UNUSED(opti } if (!BMO_elem_flag_test(bm, v1, BME_BEVEL_NONMAN) || !BMO_elem_flag_test(bm, v2, BME_BEVEL_NONMAN)) { - BM_face_split(bm, f, v2, v1, &l, e, FALSE); + BM_face_split(bm, f, v2, v1, &l, e, TRUE); BMO_elem_flag_enable(bm, l->e, BME_BEVEL_BEVEL); l = l->radial_next; } @@ -633,7 +633,7 @@ static BMLoop *BME_bevel_vert(BMesh *bm, BMLoop *l, float value, int UNUSED(opti l = l->next->next; /* "cut off" this corner */ - /* f = */ BM_face_split(bm, l->f, v2, v1, NULL, l->e, FALSE); + /* f = */ BM_face_split(bm, l->f, v2, v1, NULL, l->e, TRUE); return l; } @@ -694,7 +694,7 @@ static BMFace *BME_bevel_poly(BMesh *bm, BMFace *f, float value, int options, BM f = l->f; /* max pass */ - if (value > 0.5f && max > 0) { + if (value > 0.5f && max > 0.0f) { max = -1; BM_ITER_ELEM (l, &iter, f, BM_LOOPS_OF_FACE) { if (BMO_elem_flag_test(bm, l->e, BME_BEVEL_BEVEL) || BMO_elem_flag_test(bm, l->e, BME_BEVEL_ORIG)) { @@ -835,7 +835,7 @@ static void BME_bevel_add_vweight(BME_TransData_Head *td, BMesh *bm, BMVert *v, vtd->weight = weight; } } - else if (vtd->weight < 0) { + else if (vtd->weight < 0.0f) { vtd->factor = factor; vtd->weight = weight; } @@ -897,11 +897,11 @@ static void bevel_init_edges(BMesh *bm, int options, float angle, BME_TransData_ const float threshold = (options & BME_BEVEL_ANGLE) ? cosf(angle + 0.001) : 0.0f; BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { - weight = 0.0; + weight = 0.0f; if (!BMO_elem_flag_test(bm, e, BME_BEVEL_NONMAN)) { if (options & BME_BEVEL_SELECT) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { - weight = 1.0; + weight = 1.0f; } } else if (options & BME_BEVEL_WEIGHT) { @@ -925,10 +925,10 @@ static void bevel_init_edges(BMesh *bm, int options, float angle, BME_TransData_ } } else { - weight = 1.0; + weight = 1.0f; } - if (weight > 0.0) { + if (weight > 0.0f) { BMO_elem_flag_enable(bm, e, BME_BEVEL_BEVEL); BME_bevel_add_vweight(td, bm, e->v1, weight, 1.0, options); BME_bevel_add_vweight(td, bm, e->v2, weight, 1.0, options); @@ -1071,9 +1071,9 @@ static BMesh *BME_bevel_mesh(BMesh *bm, float value, int UNUSED(res), int option if (l->v != v) l = l->next; if (l2->v != v) l2 = l2->next; if (l->f->len > 3) - BM_face_split(bm, l->f, l->next->v, l->prev->v, &l, l->e, FALSE); /* clip this corner off */ + BM_face_split(bm, l->f, l->next->v, l->prev->v, &l, l->e, TRUE); /* clip this corner off */ if (l2->f->len > 3) - BM_face_split(bm, l2->f, l2->next->v, l2->prev->v, &l, l2->e, FALSE); /* clip this corner off */ + BM_face_split(bm, l2->f, l2->next->v, l2->prev->v, &l, l2->e, TRUE); /* clip this corner off */ curedge = bmesh_disk_edge_next(curedge, v); } while (curedge != v->e); BME_Bevel_Dissolve_Disk(bm, v); -- cgit v1.2.3 From d3c1ece20120b9b91db7bb5b9123aa15f6f1407a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 16:32:30 +0000 Subject: fix [#31113] bmesh.types.BMLayerCollection getter calculate key indices wrong (own fault) also add check so layer.name won't crash incase the layer becomes invalid. --- .../python/bmesh/bmesh_py_types_customdata.c | 28 +++++++++++++++++----- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/source/blender/python/bmesh/bmesh_py_types_customdata.c b/source/blender/python/bmesh/bmesh_py_types_customdata.c index 91104fb23f5..6a02d8e4a25 100644 --- a/source/blender/python/bmesh/bmesh_py_types_customdata.c +++ b/source/blender/python/bmesh/bmesh_py_types_customdata.c @@ -63,7 +63,15 @@ static CustomData *bpy_bm_customdata_get(BMesh *bm, char htype) static CustomDataLayer *bpy_bmlayeritem_get(BPy_BMLayerItem *self) { CustomData *data = bpy_bm_customdata_get(self->bm, self->htype); - return &data->layers[CustomData_get_layer_index_n(data, self->type, self->index)]; + const int index_absolute = CustomData_get_layer_index_n(data, self->type, self->index); + if (index_absolute != -1) { + return &data->layers[index_absolute]; + } + else { + PyErr_SetString(PyExc_RuntimeError, + "layer has become invalid"); + return NULL; + } } /* py-type definitions @@ -126,9 +134,10 @@ static PyObject *bpy_bmlayercollection_active_get(BPy_BMLayerItem *self, void *U BPY_BM_CHECK_OBJ(self); data = bpy_bm_customdata_get(self->bm, self->htype); - index = CustomData_get_active_layer_index(data, self->type); + index = CustomData_get_active_layer_index(data, self->type); /* absolute */ if (index != -1) { + index -= CustomData_get_layer_index(data, self->type); /* make relative */ return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index); } else { @@ -146,7 +155,12 @@ static PyObject *bpy_bmlayeritem_name_get(BPy_BMLayerItem *self, void *UNUSED(fl BPY_BM_CHECK_OBJ(self); layer = bpy_bmlayeritem_get(self); - return PyUnicode_FromString(layer->name); + if (layer) { + return PyUnicode_FromString(layer->name); + } + else { + return NULL; + } } static PyGetSetDef bpy_bmlayeraccess_vert_getseters[] = { @@ -311,7 +325,7 @@ static PyObject *bpy_bmlayercollection_keys(BPy_BMLayerCollection *self) BPY_BM_CHECK_OBJ(self); data = bpy_bm_customdata_get(self->bm, self->htype); - index = CustomData_get_layer_index(data, self->type); + index = CustomData_get_layer_index(data, self->type); /* absolute, but no need to make relative */ ret = PyList_New(0); @@ -426,9 +440,10 @@ static PyObject *bpy_bmlayercollection_get(BPy_BMLayerCollection *self, PyObject int index; data = bpy_bm_customdata_get(self->bm, self->htype); - index = CustomData_get_named_layer_index(data, self->type, key); + index = CustomData_get_named_layer_index(data, self->type, key); /* absolute index */ if (index != -1) { + index -= CustomData_get_layer_index(data, self->type); /* make relative */ return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index); } } @@ -471,9 +486,10 @@ static PyObject *bpy_bmlayercollection_subscript_str(BPy_BMLayerCollection *self BPY_BM_CHECK_OBJ(self); data = bpy_bm_customdata_get(self->bm, self->htype); - index = CustomData_get_named_layer_index(data, self->type, keyname); + index = CustomData_get_named_layer_index(data, self->type, keyname); /* absolute */ if (index != -1) { + index -= CustomData_get_layer_index(data, self->type); /* make relative */ return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index); } else { -- cgit v1.2.3 From 7e5c02672ae9c368260632f3717d56b4927a99f7 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 26 Apr 2012 17:01:04 +0000 Subject: Fix for undefined reference to abort() in outliner selection module --- source/blender/editors/space_outliner/outliner_select.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c index f43e9b19672..c06576e48a6 100644 --- a/source/blender/editors/space_outliner/outliner_select.c +++ b/source/blender/editors/space_outliner/outliner_select.c @@ -29,6 +29,8 @@ * \ingroup spoutliner */ +#include + #include "MEM_guardedalloc.h" #include "DNA_armature_types.h" -- cgit v1.2.3 From 73a6ae710679ad5f2186e61d57d916442d23a43a Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 26 Apr 2012 17:48:07 +0000 Subject: Fix crash clicking Render button in render layer compositing node. Actually this crash could happen in other situations too, problem was a bug in the jobs system. A job could be suspended, and the operator would stop before the job was actually done since it was not marked as running. --- source/blender/windowmanager/intern/wm_jobs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/blender/windowmanager/intern/wm_jobs.c b/source/blender/windowmanager/intern/wm_jobs.c index 774aec51216..877b8a92296 100644 --- a/source/blender/windowmanager/intern/wm_jobs.c +++ b/source/blender/windowmanager/intern/wm_jobs.c @@ -173,10 +173,12 @@ int WM_jobs_test(wmWindowManager *wm, void *owner) { wmJob *steve; + /* job can be running or about to run (suspended) */ for (steve = wm->jobs.first; steve; steve = steve->next) if (steve->owner == owner) - if (steve->running) + if (steve->running || steve->suspended) return 1; + return 0; } -- cgit v1.2.3 From e75e40c97281078730ed9c0a649e99b7e981c919 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 26 Apr 2012 17:49:48 +0000 Subject: Release commit, 2.63! Special thanks to Mango team for awesome splash screen! And everybody else who made this release! :) --- doc/manpage/blender.1 | 20 +- release/datafiles/splash.png | Bin 188517 -> 229594 bytes source/blender/blenkernel/BKE_blender.h | 4 +- source/blender/blenloader/intern/readfile.c | 6 +- source/blender/editors/datafiles/splash.png.c | 13071 +++++++++++++----------- 5 files changed, 7198 insertions(+), 5903 deletions(-) diff --git a/doc/manpage/blender.1 b/doc/manpage/blender.1 index 97c11bc138c..6257a78171b 100644 --- a/doc/manpage/blender.1 +++ b/doc/manpage/blender.1 @@ -1,4 +1,13 @@ -.TH "BLENDER" "1" "April 05, 2012" "Blender Blender 2\&.62 (sub 3)" +.TH "BLENDER" "1" "April 26, 2012" "Blender Blender 2\&.63 (sub 0) + build date: 2012-04-26 + build time: 19:38:31 + build revision: 45987 + build platform: Linux + build type: Debug + build c flags: -fopenmp -msse2 -msse -pipe -fPIC -funsigned-char -fno-strict-aliasing -Wall -Wcast-align -Werror=declaration-after-statement -Werror=implicit-function-declaration -Werror=return-type -Wstrict-prototypes -Wno-char-subscripts -Wno-unknown-pragmas -Wpointer-arith -Wunused-parameter -Wwrite-strings + build c++ flags: -D__STDC_CONSTANT_MACROS -fopenmp -msse2 -msse -pipe -fPIC -funsigned-char -fno-strict-aliasing -Wall -Wno-invalid-offsetof -Wno-sign-compare + build link flags: -pthread + build system: CMake" .SH NAME blender \- a 3D modelling and rendering package @@ -15,7 +24,7 @@ Use Blender to create TV commercials, to make technical visualizations, business http://www.blender.org .SH OPTIONS -Blender 2.62 (sub 3) +Blender 2.63 (sub 0) Usage: blender [args ...] [file] [args ...] .br .SS "Render Options:" @@ -220,6 +229,12 @@ Enable floating point exceptions Enable debug messages from FFmpeg library .br +.TP +.B \-\-debug\-libmv +.br +Enable debug messages from libmv library +.br + .IP .TP @@ -406,6 +421,7 @@ Arguments are executed in the order they are given. eg \fIBLENDER_SYSTEM_DATAFILES\fR Directory for system wide data files. \fIBLENDER_SYSTEM_PYTHON\fR Directory for system python libraries. \fITMP\fR or \fITMPDIR\fR Store temporary files here. + \fISDL_AUDIODRIVER\fR LibSDL audio driver \- alsa, esd, dma. \fIPYTHONHOME\fR Path to the python directory, eg. /usr/lib/python. .br .br diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png index 47aca040453..2dab9257905 100644 Binary files a/release/datafiles/splash.png and b/release/datafiles/splash.png differ diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index e0fac79359d..507200802f4 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -41,8 +41,8 @@ extern "C" { /* these lines are grep'd, watch out for our not-so-awesome regex * and keep comment above the defines. * Use STRINGIFY() rather than defining with quotes */ -#define BLENDER_VERSION 262 -#define BLENDER_SUBVERSION 4 +#define BLENDER_VERSION 263 +#define BLENDER_SUBVERSION 0 #define BLENDER_MINVERSION 250 #define BLENDER_MINSUBVERSION 0 diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index d2f6100517a..d278d3733e6 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -13301,6 +13301,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) + if (main->versionfile < 263) { /* Default for old files is to save particle rotations to pointcache */ ParticleSettings *part; @@ -13308,11 +13309,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main) part->flag |= PART_ROTATIONS; } - /* put compatibility code here until next subversion bump */ - { - - } - /* WATCH IT!!!: pointers from libdata have not been converted yet here! */ /* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */ diff --git a/source/blender/editors/datafiles/splash.png.c b/source/blender/editors/datafiles/splash.png.c index 0b313dcb143..2c4d6b0c834 100644 --- a/source/blender/editors/datafiles/splash.png.c +++ b/source/blender/editors/datafiles/splash.png.c @@ -1,5898 +1,7181 @@ /* DataToC output of file */ -int datatoc_splash_png_size= 188517; -char datatoc_splash_png[]= { -137, 80, 78, 71, 13, - 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0, 0, 0, 8, 90,206, 70, 0, 0, 10, 79, -105, 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, - 84, 83,233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, - 33,161,217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131, -163,136,138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, - 53,128, 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248, -126, 60, 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1, -192,116,145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, - 0, 80, 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, - 59, 0,172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, - 11,178, 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, - 16,231, 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, - 97,154, 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54, -142,182, 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, - 6,128,109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69, -161,144,185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224, -190,226, 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29, -211, 34,196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, - 44,251, 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111, -193,212, 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202, -179, 63,199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196, -194, 66, 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, - 14, 46,194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35, -142, 8, 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, - 61,114, 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26, -132, 70,162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48, -192,232, 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137, -245, 99,207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17, -218, 9, 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, - 47, 16,123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, - 52, 72, 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, - 98, 64,113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, - 53,143, 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247, -105,175,232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, - 25,155, 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42, -182, 42,124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83, -125,174, 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164, -126, 89,253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117, -129, 53,196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, - 7,227,152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170, -150,151,150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71, -103,143,206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238, -152,158,190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6, -219, 12,206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60, -163,213, 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185, -166, 41,166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, - 90, 44,182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37, -214,187,173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109, -182,125, 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115, -180,114, 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105, -157, 83,155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245, -113, 93,225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208, -195,200, 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176, -183,165,119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195, -111,158, 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33, -191,142, 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247, -231,152,206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, - 26,209, 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60, -218, 55,186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135, -226,157,226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148, -240, 65, 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, - 72, 42, 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, - 32,109, 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110, -139,183, 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205, -137,202, 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, - 88,230,189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151, -174,126,189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89, -223,181, 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180, -169,171,196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237, -245,246, 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, - 84, 54,238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77, -213,102,213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14, -182,215,185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, - 35,112, 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, - 70,155, 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105, -218,233,130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16, -116,225,210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60, -254,147,211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22, -255,214,213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79, -188, 95,244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207, -254,145,245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38, -158, 23,254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, - 25,175,219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40, -255,104,249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 6, 98, 75, 71, 68, 0, - 0, 0, 0, 0, 0,249, 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, - 0, 7,116, 73, 77, 69, 7,220, 2, 15, 16, 38, 41, 22,193,141,250, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,189,121,220,101, - 87, 85,231,253, 93,123,159, 59, 60,207, 83,115, 85,170, 50,146,137,132,132, 81, 8,208, 54, 40, 70, 9, 32, 40, 42, 72,130,208, -138, 10, 10,221, 14,221,106, 55,130,173,253,170,175,162, 4, 7,212, 87,232, 38,109,191,190,106,171, 40,210, 14,216, 56, 16, 20, - 25, 84,196,200, 76,152, 50, 48,101,170,212,252, 12,247,222,115,246, 94,239, 31,123,237,115,246,189,169, 74, 42, 69,134,170,244, - 89,245,121, 62,245, 12,247,158,123,134,189,247,111,173,223,250,173,181,161,183,222,122,235,173,183,222,122,235,173,183,222,122, -235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173, -183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222, 30, 16,243, 15,240,231,137,125,141,129, - 11,156,227, 52, 85,214,129,218,126,223, 91,111,189,245,214, 91,111,189,157, 2, 38,128,115, 78, 30,254,227, 87, 62,238,205, 31, -250,197,111,185,227, 99,191,242,188,125, 63,247,237, 79,248,211, 97,229, 46, 43, 94,211, 91,111,189,245,214, 91,111,189,157,228, -145,186, 0,195,239,123,246, 35, 94,243,139, 47,184,228, 37,123,234,141,149,211,182,172, 44,125,245,191,186,232, 17, 95,117,201, -105, 87,188,247,250,219,110, 59,176, 58,251, 52,160, 61,184,247,214, 91,111,189,245,214,219,201, 13,234, 14, 88,254,154,243,150, -190,245,153,187,155, 71,111,236,221, 79,125, 96, 31,205,198,148,139, 47, 62,119,251, 11,190,234,194,231,126,234, 75, 7,252,103, -110, 57,252, 97, 96,163, 7,246,222,122,235,173,183,222,122, 59,185, 35,245,209,251,111, 62,124,219,206,173,195,199, 62,245,194, - 45,167,107,163,132, 35,135,105,142, 28, 97,251,238,221,213,139,158,254,200,175, 9,177,185,232,189,159,184,237,131,192,190, 30, -216,123,235,173,183,222,122,235,237,228, 4,117, 0, 81,229,200,219, 63,113,232, 67,183,111,132,157,207,184,116,219,197, 99, 95, - 81,111,108, 16, 14,238,135,209, 50,207,120,234, 35, 47,125,236,185, 91, 47,255,187,143,221,114,243,234,164,185,177,127, 68,189, -245,214, 91,111,189,245,118,252,209,243, 3,253,121, 99, 96, 43,112,246, 87, 61,124,243,119,254,207, 23, 93,240, 61,231, 46, 85, -227,245,245, 26,188,199,157,121, 30,227,115,206,225,134, 91,246, 29,126,197,175,191,235,231,223,249,161, 47,189, 17, 56, 98,239, -215,147,249,102,170,234,101,192,118,251,241, 70, 17,121, 72, 59, 37,255,167, 93,111,111,189,245,214, 91, 15,234, 71, 55, 7,108, - 1,246,156,190,165,250,166, 63,248,206, 11,127,228,171, 78, 95, 57,125,178, 17,128,136,236, 57,155,165,135,157,207, 76, 35,255, -233, 55,223,247,219,255,207,159,126,244, 39,128, 47,216,249,126,217,192,174,170, 23, 0, 23, 28,231,203, 15,136,200,117,199,121, -220,119, 0, 87,216,143,175, 22,145,171, 31,226,160,254,127,212,245,246,214, 91,111,189,157,236, 86,125, 25,160, 28,129,205, 59, - 55, 13, 30,179,115,165,218, 25, 85,100,206, 83, 16, 16, 17,209,252, 27,201,191,111,255, 90, 1,203,117,208,141, 31,126,251, 29, -127,249, 43,223,114,206,183, 60,101,247,202,182, 89,173,112, 96, 31,147,229, 77, 12,118,238,225,215, 94,113,249, 75, 46,123,248, -158, 71,252,208,155,222,253,202,131,171,179,247,222, 71,192,126, 37,240,218,123, 1, 94, 0,111, 1,174, 21,145,107,250, 97,243, -144,117, 82, 60,240,175,128,175, 3,158, 4, 60, 10,216, 3,140,128,131,192,231,128,127, 4,126, 79, 68,254,225,126, 58,135, 39, - 3, 87, 1, 95, 11,156, 5,236, 4,214,237,179, 63, 2,188, 7,120,187,136,124,225,100,189,134,222,122,235,237,212,138,212, 5, -112, 43, 35,255, 21, 63,251,236,115,127,238, 69,143,219,125,249,214,165,193, 48,138, 75,128,237, 92,250, 18, 65, 42, 63,247, 51, -206, 33,222,119, 63, 75,250, 91, 68,180, 86,137,227,170,242,148,199,241, 30,135, 48, 88, 25,243,145,155,110,223,251,178,215, 95, -251,147,255,252,233,189,191, 9, 76,191, 28, 96, 87,213, 87,221, 27, 80, 95,176,107,129,171, 68,228, 64, 31,169, 63,116,174, 87, - 85,255, 43,240,124, 96,247,113,190,229, 93,192, 75, 69,228,166,251,232,243,207, 2,222, 0,124,243,113,188,252,157, 34,114,197, -201,118, 13,189,245,214,219,169, 27,169,159,246,186,231,158,255,250,239,123,202, 89, 95, 61, 91,143,104, 20,188,147, 20,192,171, -164, 47, 28, 18, 37, 65,175, 2, 78, 82,108, 31, 21, 60,136, 72,138,247, 21,188,136, 84, 78,188, 69,196, 9,212, 21, 80, 37,138, - 48, 93,159,241,216,115,119,159,246,142,159,123,254,175,127,223, 27,255,246,162,223,255,155, 79,255, 60,176,247, 62,138,218, 51, - 80, 31,203,174, 56,202,207,239, 80,213,103, 28, 13,216,123, 59,101,237,223, 30,229,119,251, 44,178, 61,104, 17,243,163,233,196, -165,151, 3,255,172,170, 95, 35, 34, 31,251, 50, 1,253, 81, 6,176,187,138, 95, 31, 2,110, 4, 14, 0,155,129,139, 73, 90,148, -147,242, 26,122,235,173,183, 83, 23,212,101, 52,112, 23,124,227,165,219,159,164,107, 53,245,100, 10, 49, 38,144,110,153,117,131, - 91,145, 14,119,189,195,237,220,109,224, 30, 17, 7, 68, 99,241, 5, 90,132,119, 49, 1,191,115, 16,108,249, 17,152, 77,107,182, - 14,135,238,247,126,244, 57, 63,252,164, 71,156,254,152, 31,251,141,247,253,232,180, 14, 31,186, 47,128, 93, 68,158,113, 15,139, -110,166,235,115, 30,254, 50,224,229, 64,159, 67,126,232,217, 39,129,223, 4,254, 92, 68, 62,177, 48, 14,118, 0,255, 17,120,149, -141,204, 29,192,219, 84,245, 82, 17,153,156, 32,160,159, 15,188,179, 0,244, 15, 2, 63,102,209,120,179,240,218, 71, 3,207, 3, -206, 63,153,174,161,183,222,122, 59,121,204,157,192,123,252,172,142,251,222,252,145,189,239, 23, 55,101,101, 24, 88, 89,130,229, -177,218, 87,236,190, 31, 69,198,110, 6,161, 70, 70,203, 9,228, 99,132, 24,105,163,114, 0,102, 16, 39, 16, 55, 64, 39,192, 52, -253,172, 51,123,189,162, 26,169, 67,164,153, 6,126,248, 91,159,116,197, 59, 94,247,173,127,114,222,158, 45,207,183,133,201,221, -159, 55, 73, 68,222, 2, 60,195,162,166,108, 87,246,195,231, 33,101,239, 7,158, 35, 34,151,138,200,235, 22,193,208,198,193,126, - 17,249,113,224, 37,197,175,207, 59, 70,132,124,188,246,223, 73, 57,111,128, 63, 0,158, 36, 34,127,181, 8,232,246,249, 31, 19, -145,159, 17,145,151,158,100,215,208, 91,111,189,157, 36,118, 34, 57,245, 1,137, 6,124,212,215, 92,184,233,249,151,158,190,116, -174,128,139,170, 49, 31, 50,106,130,236,245, 89,116,143,127,216,230, 71,126,239,211, 30,126,193,184, 26,187, 8,144,115,234, 8, - 52,235,136, 23,220, 57,143,195,157,246,112,100,203,233,200,120, 11, 52, 83,226,218, 94,244,200,173,196,189,159,134,102, 2,126, -201,114,237, 30,193, 49, 92, 25,241,233, 91,246, 29,250,250, 87,255,175,151,223,116,235,161,183, 90,180, 30,143, 51, 58,154,203, -169,139,136, 28,231,251,222,100, 17,250, 81,223,119, 34, 57,102, 85,221,110,145,127,182,235,238, 11, 90,127, 65,225,127, 66,229, -102,247,116,140,147,229,122, 23,206,243,186, 7, 34, 45,162,170,127, 9, 60,203,126,124,143,136, 60,237, 4,142,241, 34,224,247, -236,199,143, 3,143, 23,145,250,129,154,252,247,197, 53,244,214, 91,111, 39,151,157, 8,253, 30,128, 53,224,250,191,187, 97,245, -245,127,119,195,234, 18, 71,111, 98,179,243,217,143,221,253,178,231, 63,241,252, 51,150,221,208, 53, 81, 19,245, 62,153,160,211, - 53, 8,107,248,139,191,154,234,137, 47,198,159,255,149,199,164, 16,116,255,205, 52, 55,188,147,240,185,247, 33,126, 8,170,168, -192,108,125,198,197,103,238,220,250, 39, 63,253,205,111,120,250, 43,255,112,255,157,135, 38,127,195,125,151, 99, 63,150,221, 39, -117,216, 6,108, 47,183,104,255,178,163,252,253, 70,224, 26,224,154, 99, 1,148,170,190,182,120,239, 91, 68,228,154,226,184, 47, -103,161,100,207,142,121,245,241,168,247, 85,245,229, 36,122,246,130,123,123, 94,247,199,245,222,205,181,190,202,142,187,189,120, -249,181,198,170,220,223,246,103, 5, 32, 94,122,130,199,248,247,197,247,175,122, 32, 1,253, 62,188,134,222,122,235,237, 20, 7, -245, 8, 76,128,134,212, 20,198,178,222,109,212,175, 34, 60,242,234, 23, 92,252, 83,175,188,252,188,203,195, 12,102, 33,160,245, - 20,157,172, 67, 51,133, 74, 25, 61,231,199,168,158,248,162,123,166, 18,118,156,199, 96,199,203,112,167, 63,150,230, 3,191, 1, - 46, 36,200, 23, 97,182, 94,243,216,139,206,216,245,250,127,119,249,235,190,227,181,127,249,124,224,243,247, 51,168,151,224,113, - 66,209,160,170, 94, 1,252,225,194,177, 22,237, 2, 99, 18, 94,174,170, 87, 29,163, 78,254,178, 34, 74,190,214, 26,193,188,233, -104,160, 89, 28,243, 77,170,122,153,136,188,226,110,192,247, 77, 28, 59,181,144,207,235, 74, 85,125,198, 3,120,189, 71,187,214, -119,220,195, 49,239,111,219, 87,124,191,229, 4,198,193, 35,129,236,205,222, 1,252,229,169,118, 13,189,245,214,219, 67, 3,212, - 49,224,172,237,139, 2,208,253,185,187,198,207,125,211,139, 46,185,250, 89, 23,239,186,104,186, 17, 9,161,134,233, 6, 52, 53, -136, 34, 3, 24, 61,239,231,241,143,254,134,246, 96,135, 55,166,252,213,135,110,230,175, 62,124, 51,251, 87, 55, 24,120,225,210, - 51,119,240, 77, 79,124, 56, 79,184,240,140,116,224,115,158,132, 12, 55, 83,191,247,151, 96, 88,165, 83,112, 66,179, 58,229,219, -159,254,232,199,255,207,119,126,242,101,127,245,129,155, 95,195,151, 89,238,118, 15,209,230,149, 11, 17,225,189, 61,198,149, 6, -112,165, 93,103,199,202, 78, 66, 25,205, 94, 64,167,180,191,238, 30,156,141, 63, 44, 34,235,183,216,113, 51, 32,150,231,253,114, - 85,189,241, 24, 84,249,107,143, 2,232,229,177,242,185, 93,118,148,235,120,160,174,119,251, 2,160, 31, 40,206,239,130, 7,112, -238,156, 87,124,191,247, 4,222, 95, 58, 69,239, 22,145,240, 32,204,255, 47,247, 26,122,235,173,183,135, 8,168,207, 5,211, 6, -162, 91,159,253,232, 29, 63,124,205, 85,143,248,209,179, 55, 45, 45,109,172, 5, 52, 76,161,158,218, 39,121,164, 89, 99,240,212, -239,153, 3,244,127,252,204,173,188,242,119,223,195,141,119, 30, 97, 60, 26, 48,168, 28, 78,225,195, 95,216,207, 31,253,195, 39, -121,238, 19, 47,228,191, 92,249,213, 44,143, 6,184, 61,151, 80, 61,250, 42,154, 15,254, 38,108,222, 3,104, 74,162,171,240,211, - 47,121,202,247,252,245, 63,223,252, 71,170,124,140,148, 34,184,175, 1,253, 77, 11,160,113,205,189, 60,198, 5,118,140,108, 55, - 2,175, 16,145, 69,231,224,234,133,232, 54,127,246, 19,239,230,240,175, 42, 0,248, 21,139, 20,182,125,246, 31, 22,224,249, 42, - 85,157,163,186,141,114,127,249, 2,248, 94,181,144, 71, 47,207,237,138, 7,233,122, 95, 85, 28,239,213, 38, 98, 92,124, 86, 15, -132,189,160,248,254,253, 39,240,254, 39, 21,223,127,196,206,125, 39,240, 50, 59,246,133,192,178,129,237,191,144,168,242,223,185, -143, 41,250, 47,247, 26,122,235,173,183,135, 24,168,103, 64, 63,255,135,190,238,172,159,121,237,179,207,251, 55, 85,172, 88,159, -214, 16,102, 16,154,148, 71, 23, 64, 3,178,235, 28,170, 39,119,162,219,207,220,118,128,151,188,225,175,184, 99,163, 97,121,101, -137,218,123, 6, 3,207,208, 11, 94,135, 72,104,120,235,251, 63,139,119,142,159,125,241,229, 41, 98,127,248,215, 18, 62,245,151, - 16, 86,161, 90, 74,122,187, 89,205,227, 47,220,125,250,147, 47, 61,253, 89,239,255,196,109,215,147, 82, 4,199, 29,173,155,112, -238, 88,118,197, 81, 0,236,104,224,116, 79,246,166,133,232,242,137,199,202, 75,139,200,181, 70,111,231,136,244, 50, 85,125,249, - 61,228,195,175, 21,145,171,142,113,188, 27, 85,245,213,118,188, 28,237, 94, 97, 78,192, 34, 88,102,192, 60,106, 29,126,113,110, -255,252, 32, 94,239,141,199, 58,222, 3, 36,146,123,198,130,211,241,251, 39,112,152,199, 22,223,223,170,170,207, 4,126, 11, 56, -125,225,117,231,216,215, 55, 3, 63,174,170, 47, 20,145,127, 62, 73,174,161,183,222,122, 59,201,236,203, 41, 5, 19, 64,118,172, - 84, 87,188,249,187, 30,241,199,175,255,198,243,254, 13, 53, 76, 99,157,202,209, 36,192,192, 65, 37, 80, 9,202, 12,127,241,211, -144, 77, 93,127,141, 87,255,238,251,248,204, 23, 15,113,168, 17,110, 93,109,248,194,161, 25,159,189,115,131, 27,239,220,224,192, - 36,160, 85,197,214,173,155,248,147,127,250, 12,215,126,216,154, 94,249, 10,127,193,211,208,195,123,193, 59, 16, 37, 10, 12,151, -134,188,240,242, 71, 92, 65,202, 13,222, 91, 85,255,107,239,230,235,138,133,232,252, 25,247,182, 85,172,229,128,203,227,188,250, -158,192,199,232,231,107, 22,156,139,187,179, 87,220,195,241,174,165,163,169, 41, 89, 7,163,201, 75, 22,226,234,187, 59,191,163, -156,219, 3,125,189, 87, 63, 88,141,127, 84,117,235, 2, 3,241, 65,224,173, 39,112,168,157,197,247,143,179, 72, 60, 3,250, 29, -164,118,176,255, 0, 28, 94,120,102,127,167,170, 79, 57, 73,174,161,183,222,122,123, 8,128,122, 22,197,109,250,234, 11, 55,255, -200,251,190,255, 81,127,244,194, 75,119, 60,110,125, 61, 16, 8, 16,235,116, 84, 47,136, 23,164, 18,196, 59,164, 18,220,153,143, -110, 15,114,211,237, 7,249,139, 15,125, 30,150,151,186, 50, 55,239, 9, 56,142, 76, 3, 55,237, 93,231,198, 59,214,169, 85,136, -222,243,206,143,126,174, 59,129, 93, 15, 71, 55, 14, 3,141,157,141, 66, 19,185,228,236, 29, 23, 2,103,112,255,109, 84,115,165, - 69,145,247,150,226, 45, 1,234,192,189,112, 10,174, 93,248,236, 99,217,117,199, 89,178,118,221, 49,206,233,138, 5,128, 61,158, -243,123,203,131,116,189, 55, 62, 88,253,247, 85,213, 89, 52,157,155,191,204,128,151,181, 91, 28,220, 59, 43,187,195,253, 0,169, - 55,251,237,164,230, 50,167,139,200,211, 68,228, 41,192,105,192,247,147,196,169,144, 40,249, 55,171,234,150,147,224, 26,122,235, -173,183,147,204,238, 45,253,158,233,246, 51, 95,250,149,167,253,212, 27,159,123,238,247, 14,162,103,125, 22,193, 43,104, 68, 20, - 36, 10,234,197,168,247,244, 22,169,134,184,237, 15,107, 15,116,243,222,195,108,172,215,176,101,212,249, 9,121, 89,113, 14, 84, - 57,184, 90, 83,207, 26,206,222, 90,113,100,210,165, 18,101,243, 30,192,195,116, 29, 89,218,140,162,208, 52,156,191,103,243,238, -209,208,159, 62,157,133,235,239,229,117,189,250,110,254,118,129,129,212, 5, 36,106,184, 85,127,223,139,104,241,138, 99, 0, 43, -247, 20, 93,151, 77,122, 76,185,126,221, 61,128,225,221,217,141,119,115,141,247,234, 88,139,231,246, 0, 94,239,117, 15,226,124, -249, 37,230,123,179,191, 82, 68, 62,120,130,199, 26, 47,252,188, 6,124,173,136, 92,191,112, 79,102,192, 27, 85,245,115,192,159, -219,175,207, 1,254, 29, 39,214,209,240,190,188,134,222,122,235,237, 20, 6,117, 1,216, 60,246, 79,249,133,111, 56,251,117,175, -184,236,180,167,206,102, 48, 25,164,150,175, 26, 20,169, 35,195,161,227, 80, 8,113, 9,231,168,124, 91,193, 46, 0,218, 53,201, -218,189,117, 25, 63, 28, 16, 34,214, 47, 94, 13,212,237,127, 21,240,142,181,245,154,207, 77, 38,140, 30, 87,156,170, 6,208, 58, - 53,165,113, 91, 16,141,104,140,236, 88, 25, 44,111, 93, 30,110,191, 99,182,113,175, 24,136,227,108,154,242, 42, 82,222, 57, 55, - 79,121, 7,119, 47, 94, 43,173, 44, 51,187,192,154,182,156,136, 29,139, 33,248,114,169,232, 19, 2, 97,123,237,101, 15,240,245, - 62, 40,160,174,170,255, 23,240, 67,197,175,222, 32, 34,191,246,101, 28,114,157,212,211, 61,219,213,139,128,190, 48, 70,255,183, -170,190,165, 96, 48,190,251,222,130,250,253,112, 13,189,245,214,219, 41, 8,234,153,202, 30, 92,178,103,252,226,223,125,225,249, - 87, 63, 97,247,242,238,141, 89,132, 81,149, 0,189,142, 84,117,100,184,228,249,241,119,126,233,195,231,110, 27,110,251,222,203, - 78, 59,119,162, 32, 57, 90,175,107,226,157,159,197,157,147, 68,191,151,158,181,147,127,117,209,110,254,254,250,189, 80, 85, 9, -196,157,206,247,133,139,233,189,147,253,107, 92,116,122,183,190,235,225, 91, 96,122, 24,157,110, 67,108,199, 24,141,217, 41,192, -113, 63,208,239, 34,114,181, 69,145,185, 19,221,241,136,215,142, 6, 78,247,102, 47,247, 7,195, 14,220, 7,175, 61,149,174,247, -120,192,240, 63, 1, 63, 93,252,234,119,129, 31,252, 50, 15,187,186, 0,234,191,125, 28,239,249,173, 2,212, 31,161,170,187, 69, -228,142, 7,241, 26,122,235,173,183, 83, 12,212, 51,221,190,251,170,175,216,241,202, 95,125,206,217,255,254,244,241, 96,184, 30, - 5, 89, 78, 33,184,206, 34,227,168, 76,134,240,131,111,251,220,219,174,121,223, 29,127,252, 63,174, 58,239, 71, 69,141,121,247, -166,126,175, 28,122,123,183, 17,148,115,194, 79, 60,239,137, 60,231, 19,127, 14,147, 26, 70, 67,219,221,205, 64, 61, 2, 26, 97, -117,157,199, 63,242, 44,190,227,107, 30,213,190, 55,222,113, 61,170, 53, 18,102,233,133,170, 56, 81,246,175, 78, 54, 14,175,207, -142,220, 95, 55,203,128,189,220,178,245, 74,238,101,105, 27,137, 2, 63,209,206,116,167,226,174,112,167,244,245,170,234, 15, 0, -191, 80,252,234,143,129,239,186, 15,114,208,119,146,244, 31, 0,251, 68,228,115,199,201,140,176,224, 48,221,241, 32, 94, 67,111, -189,245,118, 10,129,186, 0, 82,121,185,248, 53, 95,127,230,175,190,242, 95,159,254,172,166,129,245,202, 33, 35,135, 70, 69, 55, - 2, 43,149,112,243,180,153,124,247,255,188,233, 55,222,245,233,195,191, 11,196,207, 31,170,111, 71,244, 18,109, 35,117, 96,188, - 76,184,249,189, 84, 7,110, 70,182,159, 7,192,179, 31,127, 30,215,252,187,175,229,135,254,199,123, 88, 63, 56,133,241, 40, 41, -218, 85, 97, 86,195,250, 6, 79,184,100, 15,127,244,202,111, 96,101, 60, 72,103, 85,111, 16, 62,241, 86,100, 56, 74, 10,123,141, -104, 12,224, 28, 55,220,118,112,239,100, 22,246,114,255, 9,229, 32,229,156, 51, 93,125,197, 9,188,255,154,135,250, 62,235, 15, -149,235,181,218,253,146,158,254,107,224,219,142,182,217,202, 9,216, 39,129,199,100, 80, 63,206,247,236,187, 27, 70,228,193,184, -134,222,122,235,237, 36, 51,119, 15,160,190,251,181,207, 57,235, 13, 63,250,212,211,159, 53,105,160, 94,174,144, 37,143, 70, 96, - 61,176, 50,246,252,237, 45,107,183, 95,254,198, 79,254,228,187, 62,125,248,191, 2, 55, 3, 95,250,212,157,147, 79,225, 4,130, - 5, 2,222, 37,138,189, 89,165,126,239,235,231, 62,228,123,159,254, 40,254,225,231, 95,192, 15,125,227, 99, 56,127,199,136,177, -214,108,114,129,167, 92,180,139, 95,255,190,175,227,221,175,185,146,243,247,116, 66,225,230, 3,191,129, 30,188, 25, 6, 35,212, - 68,120, 52, 1,156,240,169, 47, 30,248, 28,169, 89, 71, 60,201,238,243,177, 84,231,167,250,249, 93,113,138, 94,239,241, 0,250, -119, 3,255,173,112, 16,223, 13,124,139, 9,215,238, 11,251,120,241,253,232, 56,223,179, 40,174,155, 60,200,215,208, 91,111,189, -157, 66,145, 58,231,108, 31, 94,254,221,143,217,241,244,217, 36,194,166, 1, 50, 20,116,166,248, 73,195,104,197,243, 59, 31,222, -247,201, 31,248,163,155,127,225,240, 70,120,143, 69, 17,107,192,248,221, 55, 28,249,167, 91,143,212, 47,221,181, 60,168,130,106, - 87, 4,183,180, 76,252,252,187,105,222,247, 43, 84, 79,237,244, 58,143, 61,119, 23,175,127,233,211,248,249,239,104,184,109,255, - 26,195, 65,197,153, 59, 86,238,114, 62,225, 19,127, 74,243,145,223,129,241,114,242, 58,156, 71, 67, 68, 66,164,158, 76,121,235, -123,110,120, 31,169, 31,253,253, 9,234, 39,146, 31, 46, 5,101, 87,168,234,246, 7,171,206,250, 24,118, 99,113,126,151, 29, 39, -232, 93,118, 10, 95,239, 61, 93,219,139,129,223, 40,192,240,253,192, 55,138,200,198,125,248, 49,239, 46,190, 63, 83, 85,199,199, -177,159,249,226, 62,234,183, 63,200,215,208, 91,111,189,157, 66,145,122,117,222,142,209, 69,219, 71,158, 38, 38,117,187,174, 7, -134,179,128,140,132, 87,254,213, 23,174,125,201,239,220,240, 31, 15,111,132,119,218,226,114,136, 84,243, 90,223,114,112,246, 79, -111,189,254,192,135, 6, 21,232, 36, 0,138, 56, 82,189,250,242,102,194, 71,126,155,250,218,159, 64,215,239,156, 15, 67, 6, 21, -231,237,217,122, 87, 64,175, 55, 8,239,127, 35,205,123, 94,131,140,134,136,247, 41, 95, 63, 24, 65,221, 48,112,240,143,159,186, -245,182,191,255,196,237,215,146,122,191,223, 47,160,190,176,197,231, 98, 68,122,119,182, 88, 38,246,242,147,108, 28,148,231,183, -221,218,182,158,104,148,126, 42, 92,239,221, 61,227,111, 37,137,214,242,220,248, 32,240,245, 34,114, 95,107, 53,222, 77, 71,167, - 15,128,203,143,227, 61,207, 42,190, 63, 72,162,240, 31,204,107,232,173,183,222, 78, 33, 80,247,159,184,125,227,211, 95,156,133, -102,121,217,179, 92, 7,150, 61,172,250,168,223,254,135, 55,254,254, 47,190,227,214,159, 2, 62, 76, 18,252,172,145,250,173,231, -141, 94,110,255,213,191,187,253, 45,135,234, 64, 85, 7,168,163,237,133, 78, 18,206,173,108, 38,222,240, 23,204,222,250, 18,194, -199,223,138, 30,254,210,209, 23,216,181,189,196, 27,174,101,246,199, 47,165,249,224,127,135,241, 24,124,149,154,205,136, 32,110, -128, 76,106,240,202,207,190,249,131,127, 12,124,214, 62,255, 62, 7,117,107, 56,179,184, 57,201, 91,142,231,189,214,159,188, 20, -139,189,234, 30, 34,221, 7,218,222,194,188, 40,237, 85,199,113, 47, 94,117, 10, 95,239,177,174,235,185,164,118,169,121, 43,225, -143, 3,207, 20,145,131,247,245,103,217, 6, 46,165,226,253,199, 84, 85,238,230,220, 54, 51,175, 86,127,187,136,196, 7,243, 26, -122,235,173,183,147,207,238,150,126,223,183,218,124,224,133,191,127,211,213, 63,244,180, 61, 87,238, 92,174,182, 94,127,231,228, -139,255,237,189,119,188,237,227,183,172,255, 25,112,171, 69, 11,179, 5, 16, 13,192,198,103,247, 78,254,226, 53,127,115,219, 21, -175,251,134,115,158,209,172, 54, 80, 57,100,228, 59, 50,112,121, 11, 52,135,168,223,251,115,200,112, 19,178,243, 18,220,142, 11, -161, 26, 67,172,137, 7, 63,143,238,253, 56, 76, 14,194, 96, 0, 43, 69, 3, 46, 5,162, 67,167,194,112,147,227,183,174,253,212, - 39,254,250, 95,190,244,251, 36,234,253, 62,221,147,218,162,243, 43,184,235,254,226, 7,184,119,202,247, 87, 48,223,123,253, 29, -182,205,232,181,199,241,249, 87, 26, 16,220, 47,130, 51, 17, 57,160,170, 87,211,149,235, 93,161,170,111, 58,218, 22,173, 6,232, -199,179,237,233, 73,123,189,199,248,220,103,154,115, 99,138, 76, 62, 13, 92, 33, 34,119,126, 25,199, 44,213,229,207, 19,145, 63, - 89,120,201,207, 3,223, 67, 42,109,123, 26,240,122, 85,253,145, 69,176, 86,213,101,224,205,164,166, 51,216,124,187,250,129,184, -134,222,122,235,237,161, 3,234, 53,176,255, 31,110, 60,242,255,254,195,141, 71,222, 97, 11,207, 62,224, 54, 18,213,190,106,175, - 89, 44,139,201,251,173,223,246, 75,239,188,245,245,143, 63,103,249,252, 23, 61,110,231,195, 55, 14,207,144, 45, 67, 24,185,212, -105, 14,133,193, 0, 25, 12,146,130,125,223,135,105,238,184,174, 61,156,184, 10,170, 33,172,108, 90, 88,185,128, 89, 64,227, 18, -227,209,144,235, 62,115,251,129,255,240,223,223,255, 58,139,210, 55, 56,129, 29,218,244,110, 90,163,221, 29,104,221,155, 60,177, -117, 75,123, 5, 93,207,237, 12,116,215,146,232,234,197,190,236,217,153,200, 17,238,171,239,231,177,112, 13,243,219,160,190,220, -104,248,107,138,115,187,130, 68,165,111,183, 72,252, 0,199,200,193,159, 2,215,187,104,127,194,188, 96,109, 29,248,255,142,119, -104,136,200,215,159,128, 51,181,215,202,205,126,203,126,245, 31,128,167,169,234,111, 0,215,219,252,124, 2,169,123,220,185,197, - 91,255,111, 17,249,200,201,112, 13,189,245,214,219,169, 3,234,193,128,187, 49, 16,119,246,187,169,125, 5,142,189, 19, 90, 3, -172, 70,213,143,254,219, 55,223,244,179, 59, 87,170,215, 60,243,225, 91,207,154, 28,154,193,230, 1, 50,246, 93,253,122, 66,112, - 24,142,239,190, 14, 77,129,168, 48, 13,196,195, 51,150,206,216,195,245,183, 30, 88,189,234,234,191,187,250,208, 90,253,158,194, -201,184,191,237, 58, 3,244,123,221,217, 76, 68,174, 41, 26,216,108, 47,128,242, 65, 87,136, 91,180,126,149, 69,215, 23, 20, 96, -251,218,163,188,252, 0,112,213, 49,254,118, 74, 92,239, 81,108,105,225,231,175,120,128,238,251,111,171,234, 25,192,207,217, 28, -123, 60,240,134,187,121,203,175, 0, 63,115, 50, 93, 67,111,189,245,118,242,152,187, 7, 24,109, 72,249,242, 3,192,126, 18,221, -190,110,191,215,123,120,239, 20, 56,116,120, 35,188,235,121,215,124,250, 63,255,206, 7,247,125,114, 60,116, 12, 14,215,196, 67, - 53, 76, 98,123, 20, 65, 16, 57,202,151,253, 35, 0,179,136, 30,110,144, 3, 83,150,182,111,227, 93, 55, 30,186,237, 89, 63,121, -237, 79,222,120,251,234,255,178,115, 91,231,254, 83,189, 95,107, 17,235, 85, 34,242,196, 19, 1,244, 18,232, 72,237,101,175,225, -248,154,171,188,133, 68,101,223,239,155,152,216,166, 48, 79,188,135,207,186,150,180,237,233,117,167,250,245,158, 44,102,105,134, -203,129,127,186,155,151,125, 4,248, 38, 17,249,225,163,229,210,123,235,173,183,222,224,254,109,210, 2, 73,172,179,108, 81,218, -163,190,251, 41,187,191,231,103,158,125,214, 55,157,181,117, 88, 53, 83,165,169, 4,198, 30,169, 92,138,220, 93,113, 58,170, 16, - 64,155, 8,147,128,175, 35,131,129,112, 56,192,207,189,103,255,223,254,242,219,110,120, 83, 29,226, 7,232, 74,233, 78,201,102, - 26, 70,113, 47, 82,216, 55,146,118, 55,187,246, 65, 60,175, 76,135,151,123,162, 95,123,156,187,193,157,114,215,123, 18,141,135, -139,128, 39, 1,103,218,252,188, 13,248, 71, 17,249, 76,191, 92,245,214, 91,111, 15, 54,168,103, 96, 31,147,182,154, 60,253, 97, - 59, 70, 95,247,242,175,222,253, 45,223,121,217,174, 39,159,189,121, 48, 64, 5, 85, 37,138, 16,139,179,113, 10, 78, 53,149,174, - 9,236,155,132,248, 7, 31,222,255,209, 55,189,239,142,183,125,228, 11,107,111, 7,190,104,204,193,198,169, 10,232,189,245,214, - 91,111,189,245,118,170,129,122,254,156, 33,176, 2,108, 1, 78,223,177,169,250,138, 39,159,183,233,201, 47,120,220,142, 39, 61, -238,172,229, 51,182,143,252,202, 74, 37,195,202,137,107, 34,186, 30,226,236,208, 44,174,127,230,142,141,189,111,249,208,254,127, -249,251, 27, 87,255,233,150,131,179,235,128, 47, 1,135, 73, 57,244,251,173, 38,189,183,222,122,235,173,183,222,122, 80,191,251, -207,114, 36,117,238,178,125,109, 6,118, 0,123,150, 71,110,231,184,114, 91, 6, 94,134, 77,212,102,210,232,145,245,105,216,167, -202, 29, 36,138,253, 48, 41,111,190,198, 61, 11,245,122,235,173,183,222,122,235,173, 7,245, 7, 16,220, 7, 22,189,231,175,138, -174, 97, 6, 22,129,215,246, 53, 51, 32,111,122, 48,239,173,183,222,122,235,173,183,147, 7,212, 23, 63, 63,131,124,254,191, 4, -117, 45,254,239,129,188,183,222,122,235,173,183,222, 78, 98, 80,191,187,243,233, 65,188,183,222,122,235,173,183,222,122,235,173, -183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222, -122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235,173,183,222,122,235, -173,183,222,122,235,173,183,222,122,235,237,126, 50,185,236,180, 93,170,128, 56, 16, 60, 14,240,206, 33, 78, 82, 39, 24,201,173, -222, 28, 34,224, 36,245,135,241,222,225,108, 31,116,239, 82, 35, 56, 5,188, 19,196, 9,131,252,122, 0, 17,236,109,120, 71,251, - 62, 39,224, 17,162,166, 93, 87,157, 19,124,126, 33,138, 23,193,171, 18, 81,156,203,251,174, 87,136, 6, 28,130, 31, 8, 62, 4, - 70, 78,240, 40, 30, 80,167, 16, 97,136, 50, 85, 37,160,108, 21, 88,169, 28,195, 42,245,163,165,242, 92, 60,155,240,132, 11, 4, -249,198, 11,224, 43,214,144, 29,207,131,241, 51, 96,184, 2,178, 9,100, 37, 93,188,206, 64, 87,161,190, 29,142,188, 14,253,244, - 77,240,143, 99,226, 71,239, 96,114,243, 97, 14, 15,132,102,101,204,157,107,240,169, 53,144, 8, 91, 6,176,105,224,112, 46, 82, - 71, 88,171,133,105,128,129,128,162, 4, 32, 58, 65, 67, 32, 70,104, 52,221, 59, 81,235,190,163,160, 2, 66,218,165, 78, 28,169, - 57,110,126,104,154,254,182,216, 83,183,253,187,245,237,145,246,169,104,123,255,219,215,216,126,245,115,191, 3, 84, 28, 98, 71, - 83,181, 70,126, 66,219, 10, 72, 36,245,242,245,214, 11, 80, 4, 42, 15, 81, 29, 81, 99,215, 49, 72, 23,143,156,118,211,109,255, -164,224,237, 69, 51,210, 56,113, 2, 3, 7,227, 42, 29,171,137, 16, 3, 72, 37, 12, 61,108, 95,169,216,188,175,230,172, 93, 75, - 84,223,117, 22, 60, 50,192,142,139, 96,211, 85, 48,126,108,250,128,250, 19,176,246,103, 48,109, 64, 46,128,112,115, 58,250, 48, -192,182, 43, 97,240,104, 82, 71,226, 85, 88,127, 39,124,238,191,193, 39, 60,251,174,190,137, 27, 42,229,208,192, 81, 7, 88,118, -214,203, 88, 32,186,244, 92,163,192, 76, 29,177, 14,204, 80, 98,128,105,132,160, 16, 4, 66, 80,102, 81, 17, 32,106,250,125,190, -110, 5,156, 83,198,164,107,209,152,126, 31, 21, 26,148,202,158,231, 84, 96, 26,210, 51, 70,211,120, 73,131, 99,126,140, 84, 54, -142, 28,218,182, 98,172, 28, 12, 68, 24, 58,216,228, 97,164,202, 29,181,114,103,147, 78, 98,164, 80, 9,172, 6,216, 80,109,231, -221, 88, 96, 87, 5, 35,129, 89,132,101,129,109, 14,238, 12,202,135,167,112, 48, 40,162,202, 52, 20,231,148,199, 93,241,115,110, -255, 88, 14,153,114, 24,196,252,224, 17, 68,180, 29,125,206,190,198,164,243,139,105, 10, 19,237,218,134,164,251,155,199,123, 69, -234, 49,173, 54,130, 29,202,200,254, 94,147,238,187, 22,195, 48,146,174,119, 18,187,115,245,246,229,138,249,147,223,211,144,239, -143,180, 45, 47, 21,165, 18, 88,178,175,129, 77, 73, 87,206, 51, 73,107,219, 80, 96, 69,210, 39,205, 20,234,252,252,237, 61,209, -198,132,147,180, 17,198, 72, 28, 94,210,239, 39,170, 76,219,215,203,220,156,174,128,136, 16,236,247,145,124,108,101,136,176,221, - 41, 75,192,134,194,106, 76,115,113, 93,149,219,163,114, 32,166,223, 47,139,112,182, 75,235,239, 94, 85, 86, 53,125,102, 19,243, -241,148, 90,161, 70,105,138, 49,156,103,177,179,103,148,231,171,144,215,175,180, 80, 69,164,125, 6, 51,148,105, 84,136, 17,161, -235,239, 93,142,137, 60, 36,212,174, 81,224, 46,227, 34,127,137, 20,231,144, 23,163, 98,237,155, 91, 95, 22,142,131,192,192,121, -156,147, 22,195, 70, 26,113,162,108, 68,152,218,170,231,129, 74,187, 57,165,118,222, 1,233,182, 2, 21,193, 11, 12, 92,197,168, -170, 24,120, 79,227, 61,235,245,140,122, 54, 67, 99, 64, 5,230, 27,164,118,239,165, 56,175,104, 63,167,239,243,249,187,118, 13, -135,132,185,222, 87, 68,160, 81,197,197,200,226,162,172,237,189, 77,227, 20, 85, 69, 52, 29, 72,109, 11, 84, 81,219,226, 92,139, -187, 99,223, 56, 17, 68,237,160, 78,218, 1,235,178, 23,160, 66,144,180, 72, 57,215,157,158, 72,247,254,116,234,206, 62, 43,218, -244,180,133, 6, 1,231,210, 77,117,180,206,133, 83, 69,109, 53, 20,177,197, 33,223, 16,192,185,118,229, 64,129, 74, 4,111, 94, -137,243, 48,208, 4,144, 3, 34, 1, 73,103, 16, 3, 90, 76,205,110,186,147, 30,167, 12, 64, 54, 67,165, 48,126, 1,114,246, 47, -161,151, 68,220,193,237,140,238,156,178,114,100,131,189,190,225,112, 28,224,156, 50,240,201,121, 24,136,226,241, 68,133,202,219, - 57, 69, 5, 17, 6,164,133, 60, 22,231,174, 24,144,219,205,116,206,208,132,136,196, 60,197, 99, 58, 51,129,136, 75,131,217, 97, -175, 41, 39, 95, 66,128,202, 29,107, 11, 59,215, 78,160,114, 2, 36,160, 79,231, 40,136, 57, 22,121,193,138,243,147,206, 0, 61, -109,141,235, 24, 58,101,214,164,201,157, 23,210, 60,233,165,123, 44, 54, 86,180, 3,128,242,243, 21,115,222, 34,106,231,226,134, -130, 87, 24, 58,112,123, 39,236,172, 61,213,183,236,129,199, 4,216,122, 38, 44, 93, 1,163, 75,210, 50, 31,111,129,141, 15,193, -250, 45, 32,231,147,118,230, 5,164, 2,105,138,229, 33,164,101,193,237,132,241, 18,108,153, 49, 64, 88, 82, 69, 42, 24, 84,224, -196, 17, 52, 18, 98, 2, 58,196,158, 31,218, 62,180,236,103,229,169, 32, 2, 35, 73,139, 67, 99, 99,185,156, 62, 18,211,177,199, - 62, 57, 50,117, 76,227,219,197,244,158, 1,105, 81,198,165,191, 57,233, 6,197,220,115,178,181, 97,104,192,224, 13, 76, 42,215, - 57,132,211, 38,237,124,180, 63,164, 5, 54,131,144, 23, 24,219,235,130,129,231,192,198,221,192, 9, 42,105, 54,228,215, 45, 11, - 28,178, 25, 49, 20, 3, 37,251,140,202,156,153,238,153, 43,206,238, 67, 67, 90, 59,202, 5,220,139,206,129, 67, 40,158,200,178, - 36, 80,143, 6,110, 83, 45,150, 29, 77,159,237,153,239, 29,157,207, 91,165,115,192, 26,187,166,198, 0,222,171, 50, 64,216,148, -150, 20, 54, 52,189, 70, 10, 80,145,226,222, 6, 32,168,166,177,216,190, 70,147, 19, 75,218,128, 2, 77,199, 31, 73,186,255,106, - 7, 25,230,115,162, 3,241, 65, 1, 42,106,159, 91,231,207, 85, 69,196, 17, 36,129,115,176,187,181,100, 19, 76,237, 94, 52, 10, -162, 9,136, 43, 3,180, 96,231, 80, 9, 8,142,101,129, 37, 17, 20,101,162,145,198,230, 83, 0,106, 21, 14, 3, 51, 85, 60,202, - 70, 84, 84,160, 65,136, 54,162,156,164,135, 53, 18, 97, 44, 74,208,132, 3,141, 57,143,216,243,172,138,235,105,180,187,150,228, -128, 69, 60, 14, 17,161, 22, 80, 21,162,179,207,137, 58,119,159, 99, 17,160,116,200,210, 61,149,242,181,249,222, 75,225,212, 57, -145,185, 77, 64, 90, 80, 84,230, 28, 3,230, 86,245,136,199, 83, 1,155,156, 48,148,138,195, 54, 94,199,121, 12,199,128, 67, 65, -149,218,214,232, 88, 2,122,123,254, 66,144, 52,143, 91,108,243, 3,130, 11,136,166, 59,226,142,178,198,249, 34, 62,139,249,170, -139, 49,172,133, 91,226,128,177,243, 44, 47, 47,227, 70, 99,234,160,204, 66, 77,168,107, 66,140, 52, 33,164,232,160,112,145, 68, -161,138,237, 66, 33,173, 71, 40,154,135,178,164, 69, 7,105,189, 36,177, 40, 27,115, 0,164, 13,187,156, 69,245, 98,139,185,189, - 63,135, 23,237, 49, 12,204,180, 59,249,204, 10,136,218,205, 17,177,133, 95,108, 48,119,222,178, 35,180,171,154,152,135,216,104, -158,116, 58, 7, 16,222,188, 37,181,133,111,232, 34, 34, 46,121, 50, 2,113, 45,224,107,187, 41, 98,199,197,131,248, 98,184,196, - 52,140,252,102, 24, 61, 1, 54,127, 29,114,209,219,209,195,219,112,251,182, 48,254,212, 12, 38, 13,181,171, 24, 8,108,114,145, - 37,192,139,208,152, 71,229, 21,212, 67, 84, 37,218,125,112, 34, 56,169,168,189,226, 66, 36,154,119,136, 43, 34,118, 27,220, 62, - 33, 10,209,158, 79,200,215,234,238, 58,136,219,255,157,177, 31,230, 32,229,209, 21, 53,226,237, 25, 32,221,164,202, 32,221, 29, - 36, 13, 74,113,198, 20,196, 4, 74,190, 93,196, 28, 34, 49,129,138, 70,212,238,119,142,212, 18, 56, 59,134, 30, 26, 34, 46, 64, -140,218,122,230,184, 52,144, 99, 72, 3, 93,204, 9,112,146,198,128,139, 9, 48, 6,164,232,125,115,173,156,113, 40,176,233,249, -103,194, 83,129,173,123, 96,252, 20, 88,186, 12,220,102,208,195, 48,253, 16,172,127, 18,166,147,132, 16, 58, 3,183, 12,126, 25, - 6,203, 32,203, 54,173,166,246, 76,183,193,210, 54,216,117, 59,195,229, 1,123,102,235,204,150, 29,179, 0,235,117,100, 18, 32, - 24,120,103, 70, 37,196, 4,244, 33, 58, 52, 51, 19, 58,207,152, 68,187,137, 78,230,129, 61, 47,232, 85,147,174,221,107,154, 7, -193,165,215, 52, 81, 24, 59,101, 57,194,204,117,142, 80,158,163,217,113,136, 54,126, 70,249,158, 21,127,247, 46,157,235,106,132, -181, 90,187, 69,199, 94, 27,237, 57,143,108,236,212,161, 3,193, 28,169, 4,151, 22,171, 1, 9,216,110, 13, 65, 13, 0, 0, 32, - 0, 73, 68, 65, 84, 43, 1,167,233,122,102,115, 32, 93, 70,235,105,177,109,138,107,141,210,177, 20, 57,174,174,200, 44, 83,199, -174, 5,123,223,212, 0, 44, 59, 0,211,194,241,240,154, 64,116, 84, 56,149,100,167, 66,161,145, 14,112, 92,187, 6, 40, 51,133, - 41,202, 8, 88, 17, 88, 66, 88,151, 20,141,182,247, 83,187, 8, 50, 44, 68,148, 33, 3,140,118,247,186,124,206,121,157, 89, 18, -216, 36,146,152, 16,133,117, 77, 78,151, 20, 14, 94,158,203, 30,152,153, 51, 84, 91, 52, 95, 58, 59, 67, 18, 83, 20,237,158,172, - 27,224,136, 8, 67,187,155,181,157, 55,118, 95,182,122, 71,133,178, 30,148, 96, 75,195, 58,112, 40, 10, 19,251,124,204, 89,186, -131,116,110,209,220,177,236,148,169, 64, 84,105, 29, 85, 81,101,217,214,250,166, 24,135,195, 5, 86, 35,154,147,225, 84,113,162, -157,147,105, 78,206,196, 57, 26, 18, 43, 25, 11, 71, 42,127,102, 11,108, 5, 22, 57, 41,162,236,133,144, 75,237,115, 97,158, 17, -114,204,163,185,204,133, 49,105, 77,246, 34, 44, 9,140, 69, 88, 5, 38,230, 60,165, 64, 85, 17, 39,104, 84, 84, 59, 64,159,139, -139,165,163, 12,242,216,142, 22, 68, 69,186,193, 41,234,138,160,136,121,224, 45, 93, 74,157,103, 50,165,192, 78, 15, 12,125,133, - 27,140,136, 49, 82, 57, 7,126, 68, 13, 56,141, 72,240, 52,245, 12,140,149,201, 8, 94, 73, 62, 82, 11, 6, 29,233, 35, 70, 23, - 43, 98, 19, 37, 17, 3,233, 14, 10, 34, 41,226, 75,236,123,114, 55,196, 37,170,206, 25, 37,159,192, 74, 18,230,171, 38,208, 54, -207, 36,104, 76,224,134,107,207, 33, 15,108,143,162, 6,246, 94, 44,142,183,155, 46,133,135,227,236,116, 84,211, 93, 21, 39,184, -168,105, 80, 8,204, 52, 34,234,104, 66, 36, 0,163, 33, 12,124,132,224,136,107,147,196,159,102, 36,109,151,181, 50,162,163,139, -236, 6, 59, 96,211,139, 33,126, 14,185,248,227,112,235, 38,170,189,107,108,254,194, 42,131, 81,205,166,225,144, 97, 52,170,187, -136, 82, 43,187, 61,181, 72,235,237, 2,212, 26, 91,146, 77,132, 20,198,133,136,132, 8, 81,169,156, 35,198,216, 69,228, 2, 33, - 96, 76, 5,109,116,158, 28,161,244, 88, 93,177,224,198,121,222,179, 29,233,145, 69, 0,119, 93, 40,217, 78, 2,181,129, 14, 18, -204, 55, 21,240,226, 16,151,134,123, 57,216, 69, 36, 57, 18,193,174,221, 39, 6,166,202, 3, 95,192,121, 65, 85,237,245,142, 58, - 68, 99,110,186,153, 87,217, 98,130, 64,133, 48, 18,216,236,148, 93,119,204,216,122,217, 14,120,233, 16,182,157, 13,163,231,192, -248, 9,224, 79, 79, 80, 57,187, 17, 86,255, 9, 38,251,147,167, 16,107,155, 33,219,192, 85, 9,220,197,205, 47, 1,126, 59,140, -118,192,150,219,169,182, 13,217,186, 62, 97,125,160, 76,106, 97,221,168,245,236, 96, 69,163,171,243, 68,110,136,115, 52, 71,122, -157,125, 19,211,152, 47, 41,188, 28,107,199,152, 22,100,209, 14, 0, 7,230,236, 4,187, 23,227, 10,124, 20,154,168,212,230,236, -249, 60,225,205,225,117,146, 35,186,110,133,205,167, 51, 85,152,198,152,156, 34,205, 35, 90,168, 68, 25,155,227,148, 1,211,134, - 19, 83,133, 42,106, 98, 69,128,245,144,206,125, 11,176,226,146,147,144,253,200,188, 64,184, 12, 90, 54, 7, 51,112,197,133, 5, -183,164, 90, 27, 59,151, 96,224,144, 23,249, 90,231, 29,130,146,201,201, 79,172, 46,162,223, 80,240,235, 82,208,175,195,246, 51, - 58,208, 9,230, 44, 52,154,128,125, 51, 48,201, 81,150,205,211, 90,139,221,163,180, 59,215, 88,210,176,246,252,189, 43,159,107, - 74,245,173, 24,224,175,197, 68,121,207,232, 28, 35,236,220, 59, 96,207,169, 53,153, 75,163, 5, 59,199, 13, 99,133,198, 22, 36, -169,118, 84,120, 14,128, 26, 77,115, 52, 81,253, 48,176, 52,101,142,246, 55, 20, 14, 42,236,183,239, 7, 70,245,214, 10,107,182, -126,108,146,148,198,153,229, 96, 3,193,139,182,142, 57, 34, 4,115,192, 42,160, 54,103,104,163, 24, 59,161, 24,123,129, 60,231, - 93,139, 25, 67,115,110,107,113,212, 46, 57,255, 65, 59,167,168,100,245, 88, 96,163, 50,205, 94,178, 41, 81,230,157,228, 98,105, - 76, 1, 71, 1,254, 37, 53, 95, 89,170,119, 44, 48,114, 9,208, 55, 16,162,116,243,116, 36,137,101,216, 0, 38,182,238,106,166, -183,219,220, 87,183,112,230,111, 27,148, 24, 26, 52,198,196, 78,101, 86, 70,239,194,184,183,209, 57, 28, 13,240,101, 46, 56, 19, - 28,181, 0,205,140,161,171, 24, 12, 61,222,251,196, 88,169, 50,211,136,162,196,186, 78, 44,182, 57,103, 85,233,253,228,153,145, -105,114,140,134,202, 51,121,145,118,117, 54,163,180,205,121,100, 34, 91,230, 40, 93,231,186,139,203, 78, 68, 75,247,138,180,224, -157,239,153,119,201, 99,116, 46,141,154,104, 81,130, 20,185,123,215,185, 53,237,194,155, 40,119,135,151,148, 43, 25,186, 20,128, - 55,196,228,113,169, 34,150,219,198, 59,130, 42,172,213, 72,227, 33,206,204, 61, 21,208,169, 1, 92,181,176,180, 12, 97,112, 38, -172,252, 32,156,253,147,112,217, 94,228,200, 78,182,220,182,193,174,245, 25,119,110,246, 12,156,183, 72, 56, 45,236,138, 18, 37, -233, 6, 90,180, 39, 22,212, 81,108,239, 81,212,128,134,142,122,137, 26,237, 94,217, 42, 18, 99,231, 44,104,231,222, 75,155, 51, -207, 83, 41,182,209,226, 92, 4,142,182,212,144, 55,250, 62, 77,144,208, 29,215,242, 51, 30, 73,192, 28, 19, 29,158, 39,140, 72, -196, 57, 71,140, 57,221,145,216, 15,103, 90, 6,181, 8,195, 41, 12,109, 96,121,213, 54,234,143, 33, 13,184, 38,216, 34, 39, 93, -228, 53,176,232,222,161,233, 25, 57,216,132,178,235, 64,205,182, 51,151,113, 63,189, 27,118,157, 15,195, 23,193,232, 49, 41, 45, -130, 66,216, 11,147, 15,192,198, 29, 48, 91, 55, 26, 32,130,140,192,173, 44,196, 95, 5, 76,184, 61,176,244, 66,216,118, 13,114, -254, 1,248,176,167,158, 42,235, 33, 69,176,190,160,100, 23,193,169, 90,136, 68,195, 28,252, 24,195, 17, 22, 83, 95, 50, 15,126, -246,127, 48, 71, 43, 42, 52, 17,182, 84, 48, 26,192,122, 16,134,209,232,109, 3,247, 68,177, 11, 99, 20,231,211, 34,225, 84,209, -144,162, 58, 53,154,115, 32, 66, 20,157, 75,129, 12, 93,202,247, 86,162,212, 77, 90,156,113, 41,189,160, 49, 13,175, 97,118,134, - 73, 57,244, 32,176, 25,161,118,202,186,118,115,173,140,144,114,110, 94,138, 84,196,188, 80,131, 57,178, 59,211,146,181,148, 26, -129,238, 94,138,116,121,241, 18,220,109,136, 49, 43, 86,195,234, 40,121,241,146, 61, 41,211, 63, 27, 36,176, 93, 49, 29,193,192, - 34,225,104,128,144, 29,156,166,252,204, 5,112, 8, 22, 89,139,165, 31, 42, 27,188,171, 6,200, 13, 41, 82,206,251, 69, 7,186, -207,106, 36, 81,251,217,185, 79,243, 34, 57,174, 10, 76,236,164,167,118, 44,117,194,192, 64,191,182,200,186,142,210,134, 27, 3, - 18,115, 81, 17, 9,154,158,207, 17, 21, 99, 39, 36,233, 8, 52,209,223, 57, 39,159, 89,145,153,129, 50, 45,251,145,214,172,136, -165, 61,165, 99, 22, 70,118, 94,119,198,196, 66, 76, 99, 58, 31, 41,243,225,118, 13, 30, 24, 69,165,114, 90,168,123, 82, 36, 60, -192, 37,214,110, 65,103,145,103,167, 44, 12,155, 57, 64, 47,242,233,177,136,106, 89, 0,118, 41,194,178, 88,230,211, 69, 88,118, -233,107, 34,194, 70, 76,201,196,161,116,250,162, 37,129, 70, 18,243,219,136,107,169,109, 45,128,217, 21,224,235, 77, 67, 22,112, -104,108,210, 4,106,255,106, 17,249,162,150,233, 40,233,245,204, 76,148,227, 87,236,238,141,157,103,105, 52,102, 88, 13,113,206, -211, 8,224, 60,206, 57, 54,204,201,156,134,136,196,208, 6, 79,149,138, 16,164,136,136, 45, 47, 35, 5,240, 58,243,192,112,174, -163, 8, 52, 3,124,167,224,113, 20, 33,170, 57, 7,206,120, 9,231,100, 30,132, 72,130, 58, 41,126, 70,210,255,193, 0, 67,131, -154,152, 78, 11,106, 66, 58, 82, 68, 93,235,116,180,185, 70,141,168, 1, 86,144, 72, 37,201, 49,169, 13, 4,189, 40, 3, 39,184, - 10,154,153,192,145, 26,234,204, 47, 23,183, 93, 39, 73, 48, 55, 71,172,218, 84, 26, 61, 2,182,252,103,228,226,255,130, 78,214, - 24,125,118, 43,103,127,124, 31,113, 58,101, 99,105, 41,129,156, 68, 26, 81, 84,197,162,180,124,220, 72,204, 98, 52, 11,107, 6, -106,116, 46,193,174,209,181,217,174,214,191,139, 54, 69, 92,151, 51,239, 22, 54, 37,250,124, 9,177, 29,125, 34,106,193,183,107, - 35,237,110,216,107, 55,185,164,244, 16, 93, 98, 63, 92,196,101, 70, 64, 58,141, 67, 90,121, 35, 85,166,225, 93, 90,234,188,166, - 72, 61,143,139, 44, 2, 10,222,232,197,144,120,225, 0,196, 6,154, 16, 91, 33,101, 6,246,161,131,177,139,109,158,184, 18,216, - 58, 13,137,214,124,213, 30, 56,237,124,168, 94, 12,227,199,219,114,166,105,233,156,124, 0, 86, 63, 6,211, 35, 48,155, 66,181, -100, 87, 51, 52, 90, 34, 64, 92, 77,116,124, 27, 15, 54,105,217, 24,158, 13,205, 89,200,198,117,212, 7,103,172, 15, 6,132,152, - 62,187,141,220,196, 0,154,121,103,182,133,241, 76,101,186,196,106,136,104,151,234, 42, 28, 23, 41,132, 69,229,236,110,138, 8, -119,102,145,213, 54,159,206, 97,170, 66,200, 14,144, 9,246, 6, 62, 69, 64, 98, 81,149,152,246, 4, 77,116,162, 15, 74,229, 82, -158, 48, 90,142, 56, 83,178,170,202,134,194, 68,133,169, 42, 49,182,119,177, 91,128, 67, 58,215,195, 49,229,246, 71, 22,173, 55, - 81,152,233,130,192,205,156,198, 16, 19,179,163,134,168,177, 88,104, 23,183, 91, 12,133,170,169,196,251,170, 20,145, 37,101, 69, - 33, 0,234,156,167, 65, 17, 61, 75, 41,220, 42,192,193, 27, 75,161,210, 1, 88,206, 79,175,106,146,171,140,109, 20, 53,210, 69, -202, 72,231,172, 21,153,162,185, 8,176,164,142, 21,101, 2,166, 49,154, 95,180, 35, 73,112, 54, 44, 34,199, 60,135,242,241,134, -162,140, 16,214,201, 57,110, 12, 92,211,154, 53,176,235,173,109,213,115, 6,242, 21,176,100, 26, 12, 85,101, 29,216, 31,147,232, - 77, 16,166,118,157, 65,231, 29,160,148, 11, 23,102, 40,107, 70,195, 15,115,158,190,125,114,243,201, 60, 65, 88, 35,165, 20,102, -106, 84,188, 46,228,139,181,123,182, 65,149,129, 42, 3, 7, 42,182,186, 27, 62, 8,142, 72,180,244,107, 10,176, 6, 44, 56,112, - 69,144,182, 64, 70,205,253,174, 20,144,198, 34,186,239,158, 77, 55,174,150, 36,105, 70,214, 17,166,154, 65, 89, 25, 26,230, 69, - 96,146,157,157, 28,181,170,131, 66, 87,228, 76, 48, 30,165,116, 36,164,197, 52, 39,166,131,144,133,188,254, 81, 88, 8, 22,116, - 2,165, 19,169, 54, 70, 86, 6, 21,219, 55,111,193, 47, 45, 35, 49,226, 92, 69,101,236, 73,211,164,232,220, 13, 42,240,130,134, -180, 78,251,148,134,210,206,187, 40, 78,166, 20, 76,181,143,184, 64,116,165, 3, 89,147,156,117, 17,164,204,107,175,165, 77, 24, -228, 92,141, 44,136, 36,180,163,126,213,117,209,162, 40, 78, 92, 7,250,154, 40,226,246,115,181,115, 62,202, 69,214,145,162, 71, -212, 49,112,129, 42,118,169,139, 74, 28,222, 69,124, 37, 52,235, 2,119,212,232,116,104, 82, 8,223,221,122, 61,156, 68,114,140, -138, 24,192,150, 6, 25,166, 72,113,235,171,145, 71,252, 56,250,244, 49,155, 14,110,229, 97,183, 31,226,118, 55, 97,178, 52, 78, - 2,194,168,166, 81,144,118,145,104, 31, 97, 76, 30,151,198,144, 68, 37,196,116, 63,188, 51, 47, 85,146,226,186,205,155,107,118, -121, 83,116,163, 14, 79, 82, 83,133, 16,230,133,114,153,154,207,207,211,199,130, 54, 77, 30,168, 6,185, 75, 46, 93, 76,116,135, -229,122, 93,142,214, 53, 61, 87, 87, 16,201,106,142,155, 51, 47,179, 18,197,187, 52, 57,242, 34,171,249,177, 42, 68, 23, 83,148, -158,159,131,239, 34,222,156, 87,243,146, 34,197,170, 74, 81,208,146,135,205,107,202,224, 41,219,224,162,211, 65,254, 53, 12, 31, -105,207,164, 78,255, 55,119,192,250,251, 97, 99, 63, 76,102, 80, 15, 83,200,175, 83,144,237, 73, 32, 23, 39, 48,219, 7,203,107, -197, 50,221,101,191,241, 91, 96,155, 75,169, 3,215,229, 79, 75,138,215, 89, 14,188,157,176, 85,138,230, 93,236,198,241, 44, 22, - 30, 77,232,132,161,170,138,120,215, 58,102, 90,140,253,210, 6,133,194, 91, 20,150, 28, 84, 33,249,156,117,166, 95, 37,127, 22, - 45,128,102, 2,168,105,186, 8,119,104, 90,136, 38, 38,149,190,179, 8,112, 18,104, 41,208, 28, 81, 54,154, 41, 96,139, 2, 21, -106, 99,182,166,116,170,251, 37,201, 57,108,155,243,210, 69, 69, 51,151,216, 4, 47,194,212,216, 3, 89, 88,104, 83,174,177,212, -138,148,162,161,206,221,170,142, 34,237,212, 66, 88,151,165,158,194,188,142, 70, 23, 22,198,202,126, 25,237,134, 74,235, 96,195, -196,158,229,184,112,172,114,164,185,178, 16,197,151,145, 96, 22, 17,102, 5,254,192,128, 54, 85,218, 36, 17,172, 20,224,239, 74, -138,121,225,153,143, 12,108, 2,202, 84,165,213,204, 84,139, 14, 80, 91, 21,160,140,115,228,111, 58,162, 0,172,199, 68,181, 79, - 45,114, 11, 40, 7, 45,106, 63,150, 34,124,102,207,119, 36,137,245, 41,215,106,135, 82,107,202,197,231,156,255,196, 28,133, 70, -165,173,120,136, 11,122,146,188,198,100,209, 95,140, 80, 57, 65,165, 67, 88, 21, 65, 53, 69,236,165,115, 88, 21,168,151, 83,135, -193,158, 81,208,121, 0, 47,211, 51,190, 76, 9,105,231,100,182,207,173, 8,150,167, 69,165,205,208, 38, 77,134,180,172,112,143, - 8,149, 19,164, 74,235,106,204,194,108, 5,231, 92,155,214,117, 6,252,222,156,150, 38,139, 13, 77,128, 20,109,157,206, 58,140, -120, 23, 2, 75,138,212,169, 51,109,135, 90,197, 81, 98, 72, 42, 95,225,171, 4,228,226, 43,188, 23,106, 28,135,102, 83, 38,235, -135, 25,185, 1,163,225,144,102, 56,166,137, 19,203,173,155,250,221, 75,151,211,142, 54, 49, 59, 79, 35,166, 73,236, 76,177,190, - 16,165,119, 96,161,173,158,186, 19,188,217, 68,201, 37,109, 11,131,218,201,252,136,203,185, 97, 17,109,193,189,144, 64, 24,173, -221, 81, 31,106,220,157, 47,156, 3,113, 9,236,209,208,130, 68,109, 74, 77, 39, 32, 46,178,105,217,177,115,139, 32,107, 2,235, - 1,153, 68,139,204, 93,151, 1,211,181,132,168,238,140,163, 80,183,211, 68,237,142,191, 18,118,255, 40,124,205, 47,226,116, 51, -155,255,188, 98,240,197,253, 28,116, 19,142, 44, 47,209,136,152, 74,191,243,247,197, 70,153, 11,130,196,216, 10,117,208,164, 30, - 21,205, 17,109,102, 72,192,123, 73,164, 85, 8, 45,161, 32, 57,215,174,225,174,138,244, 54,162, 52,117,181, 82, 76,192,142, 33, -192,165,170, 0, 23,211,100,203,185,119,103, 30, 31,150, 46,145,214,205, 11,243,229, 45, 98,142,151, 79, 66,170,236, 97, 71, 59, -126,180,114, 30,138,212,138,179,103, 23,165, 91,252,242,128,247, 70,193,143, 92, 2,184,165, 38, 48, 82,143,123,248, 10, 34, 35, -240, 59,192,143, 76, 85,227,147,111, 61,253, 24, 76, 14, 66,152, 66,157, 22, 12,209, 8,113,154,158, 97, 16, 83,190, 71, 8, 7, - 97,176, 1, 44,207,187,250,238, 52,228, 49,203,200,255, 62,140,175,187,136, 56,171,183,157, 81, 18,222, 60,167,218,137,229, 55, -211,133, 36,226,178,211,118,168,206,235,121, 37, 59, 98,133, 18, 82,140, 5,169,116,158,118,171,108, 5,170, 99,114,124, 6, 46, -221, 23, 9,105,241,214,152,233, 83,109, 35,120,236, 51, 51,107, 48, 52,237,133,138, 50, 11,105,177,143, 64, 29,147, 58,125, 96, - 11,119,166, 63,115,148, 91, 23,165,113, 85, 76, 63, 79,141,229, 26, 91,117,201,160, 85,253, 91,212,104, 74,247,129, 69, 56, 81, -211,179,115, 72, 82,145, 23,202,111, 45,227,192, 5,102,178,140,182,178, 35,225,139,212, 96,118,104,114,154, 34, 22,116,108,233, - 60,100,189, 72, 25, 9, 38,109, 77, 87,106,213, 42,221, 77,104, 55, 44,114,246, 13,221,245, 45,205,187,126, 45,152,123, 3,253, -145,192,216, 68,100,171, 6,100, 94, 74,250, 87,231,104,228, 88,204,155,202, 4,110, 41, 45, 96, 37,135,210,229, 99, 7,197,121, -137,221, 95, 44, 50, 95,178, 99, 76, 45, 58,207, 57,238,124,239, 14,107,202,237, 75, 1,214,186,144, 50,105, 10, 13, 65, 64, 24, - 74,186,142,105, 78, 63, 88, 30,191, 54, 6,161, 49,182, 39, 75,235, 18, 80,207, 59, 3,177,248, 33,144,242,239,121,253,136,115, -225,170,182, 65, 89,171, 89, 40,216,150, 12,196, 57,229, 23,115,153, 99,145,146, 41,211,174,229,161,245,104, 37,109, 54, 70, 99, - 72,250,175,202, 74,250,130,233, 12, 2, 88,181, 77, 2,105,135, 80, 59, 95,212,235,165, 40,124, 32,157, 38,196,105, 2,127,111, -215,227, 92,170,150,193,214, 2, 87,232, 4, 92,113,127,180, 43, 16,179, 74, 17,135, 56,151,212,252,170,169, 44, 56, 42, 65,148, - 67,117,205,198,129,253, 44,143,134,108, 26, 47,195,112,196,106,211,176,177,177,198,146, 10, 75,227, 33, 50, 28,227,196,179, 46, - 66, 51,155,161, 49, 82, 85,222,163, 69, 60, 46, 5,229, 85, 10,230, 22,201, 37, 89, 16, 73, 81, 68,233,106, 94, 96,101, 81,156, -162,230,141, 40,206,120, 66, 39,157,194,175, 84,213,231,168,222,187,124,209,230, 40,152, 71,227,219, 76,180,182,245,134,185,224, -171,242, 41,194,117, 46, 57, 0, 34, 48,240, 14,135,209,197, 70,157, 74,136,172, 29, 22,198, 81,208, 89,128,141,136,232,106, 17, -238, 55,160, 53,232, 45, 32, 59, 44, 98,159, 46,144, 65,211, 20,177,143,159,137,236,110,208,203,127, 25, 25,140, 25,191,125, 7, -167,125,254, 32,195,141, 9,245,112,204,186, 13, 72, 23, 35,161, 74,209,183,134, 60, 1,186,154, 31,135,164, 18,184,185, 28,190, - 24,239,160, 29, 93,239, 58, 30, 80, 26,157,207,207,148,160, 89,148,200,205,179,189, 46,157,128,221,120,137, 93,153, 89,118, 10, -156, 83,163, 64,179,126, 34, 73,191,115,121,161,216,162, 22,189,121,186, 81,231, 40, 39,141,185,254,218,142,151,129, 74,141,190, - 82, 24,104,164,170,186,219,237, 36, 45,114,198,244, 51, 20,101,105, 18,169, 70, 35,228,172,101, 88, 94,129,225,206,228,133,228, - 24,175,249, 34,108,252, 11, 52, 19,168, 29,218,116,206, 41,177, 78, 58, 9, 89, 7,153, 89, 8,179, 6,113, 13,220,210,188,204, - 70,119, 32,103, 47,227, 70, 73,100,169, 46, 57, 53, 90, 0,135,203,207, 37,231,117, 53, 69,198,141,198,148, 59, 21,136, 49,141, -251,236,228,102, 70,170,117, 56, 77,172, 22,138,249, 83,121, 73,202,122,186, 82, 50, 33,249,147,177, 0,118, 33,229, 50,215,173, -196,174,142, 41,194,174, 45, 15,239, 10,138,117, 10, 12, 93,226,156,115,137, 87, 44,114,255,121,190, 13, 11, 49, 74,206,141,175, - 91, 73, 76, 6,142,153,192,154,166,235,205,181,213,162,243,226,166, 17, 93,165,194, 44, 11,232,114,132,146,197,120, 34,212,170, -237,226, 13, 66, 83, 36,166,100, 65,219, 35, 71,139,190,115,228, 70,238,113, 32,115, 85, 1,101,224,144, 34, 94,105,131,129, 12, -182,205, 66, 89,149, 73, 96,169, 92,138,222, 91, 7, 40,215, 44, 27,184, 74,177, 80,187, 34,159, 61, 22, 97,127, 84,142, 20,218, -128, 97,113,237,163,226,190,180, 14,183, 22, 12,135, 57, 3,149, 69,253, 81, 18,101, 47, 69,105,168, 24, 77,159,105,228, 92,143, -191, 17,211,251,243,156,159,216,243,219, 80,230,202,101, 41, 34,225,122, 65,160,134,166,103,156,203,170,178,168, 48, 26,160,215, -154, 0, 62,208,105, 59, 40,198, 80,180,126, 3,178,208,131, 34,139,172,155, 24,147,246,166, 88,171,219,212, 76, 33, 20,244,139, - 37,176,116, 41,188,172, 59,169,181, 19, 28,230,178,202, 50,192, 88,172,101,207,247,174,177,241, 59,144,200, 88,133,202, 22,203, -152,233,242,150, 11, 79,192, 29,140, 89, 16,231, 58,221,150,253,189, 50,119, 56, 87, 93,164,190, 46, 21, 65, 26,211,165, 68,123, -182,137,101, 78,142,174,118, 2,225, 18, 71, 11, 38, 47, 90, 9,118, 16, 79,144,136,134, 72,136,129,213,201, 6,235,211, 13, 14, -173,173, 83, 13,135,248,170, 98, 92, 85,248,106, 64,140,145, 81,140,140, 70, 35, 54,166, 27,192, 52, 57,140,177,200,145,137,116, - 37,102,217,207, 19, 91,233,133, 46, 47,158, 20,160, 9,173,212,114,188, 71,243,142,200,234,110,171, 85, 79,107, 72,202,153,106, - 22,157,123, 3,106, 21, 84,211,136,205, 84, 71, 37, 86,156,159, 75,157,180,149,186, 91, 46, 63,226,189,239,234, 26, 69, 76, 77, - 31, 77,237,152, 38,229,104, 40,104,132,145, 75,147,123, 54,205, 34, 35,208,105, 68,214, 3,196, 3, 54,229, 77,247,170, 13,196, -125,224,110, 5, 57,183,144, 76,149,196,225, 20,100, 12, 75, 95,143,236,174,225,105,111,132,173, 99,170,183,239, 97,219,245,119, -194,234, 6,245,120, 76,172,160, 9, 66,136, 41,199,158,242,134, 93,238, 42,149,237, 5,139,186,164,168, 95, 82,188, 26,109,237, -181, 40, 65, 75,130, 56,113, 57,158,215,246, 9,120,107,108, 50, 95,255,201,188,236,199,128, 39, 77,134, 46,223,158, 91, 30,100, - 92,234, 74,131,140, 47,111,153, 1, 37,122,103,244,123, 90,176,221,130,184,165, 89,200, 33, 55,161,203,253,182, 3,191,144, 59, -139,229,144, 43,159, 0,105,105, 26, 25,132, 10,247, 85, 59,145, 39,109,135,173,103,193,224, 92,139, 83, 2,196, 47,193,218,251, - 97,122, 16,226, 12,157, 6,152,249,212,100, 38, 24,113,169, 13,200,106, 2,120, 87, 37, 10,126,180, 31,220, 22,107,117,146,117, - 20, 35, 56,109, 51, 50,116,248, 89, 96,176,228, 83, 62,215, 82, 12,106,233,181, 12,146, 77,209, 92,166,182,200, 53,196,110,193, -235,228,175, 11, 10, 93, 19,146,182,213, 2,246,152, 71,149, 48,200,148,182,129,123, 29,140, 30,142,176,201,209,214,160, 79,162, - 50,177, 8,125,166, 41,151,157,129,211, 39, 85, 70, 74, 76,196,142, 2,246,101,196,233,210,177, 71,185, 54,220,193, 52,216,115, -119,169,241,205, 84,161,246,233,239, 75, 10, 27, 34, 73,183,145,243,255,190,203, 57,123,132,113, 33, 10, 27, 26,128,110,100,149, -127, 33,136, 26,216, 98,233,173, 84, 44,150, 81, 56, 29, 56,233, 49,213,193,243,130, 56,183,176,160,231,232, 19,101,142,154,207, -141,109,198, 93,102,132, 13,237, 42, 0,102, 2, 99, 77,209,112, 44,152,199,137, 69,188, 67,129,205, 38,174,243, 69, 9,225,200, - 30,245, 17, 3,155, 97,209, 92,102, 0, 44, 91, 83,172, 18, 72,157, 57, 70,195, 5,128,115, 6, 4,193,214,184,144,157, 63, 77, -140,193, 38,103,206,135,116, 32, 21,115, 74, 72,231, 25, 5,218,230, 68,157,227,228,143,114, 55,131,233, 22, 66,225, 4,228,231, -218, 20, 77,124, 90,165,186,106, 91, 65,222,222,247, 5,133,247, 93,250, 41,228,242, 43,113, 45,111,224, 45,135,237, 76,111, 80, - 54,152,169,164,211, 86,148,140, 99,118, 20, 43, 19, 88,230,117,170,233, 42,123,231,203, 59,237,222, 52,116,172,115, 80,101, 18, - 3, 85, 72,248,149, 75,248, 52,139,229, 12,208,165,168, 0,234,202,109, 19,197, 46, 22,140,138,233,163, 68, 18,147,234,226, 0, - 37,208,208, 20,138, 4, 77,213, 66,222, 19, 98, 76,245,177,229, 56,176, 26,222, 84, 85, 19, 83,245,152, 56,188, 56,130, 79,245, -190,222,198, 88,211,212, 12, 52,178,105,105, 39,245,210,152, 3, 7, 15,224,166, 19, 54,111,218,140, 46,175, 16, 66,131,134, 72, - 52,231,175, 16, 30,104, 91, 50,225,164,204, 99,148,253,109,116, 94,244, 38,119,109,225,224,140,194, 72,199, 43, 84,239, 86, 19, -168,153,198,207, 3, 65,170, 68,225, 34,214, 85,174,163,113,165,168,111, 79,145,173, 22,170,193, 20,245,121,103, 74,197, 8, 90, -229,154, 90, 97,224,146,168,104,105, 32,196, 58, 82,185, 20, 41,229,142,104, 51, 95, 17, 39, 83,170,181,149, 36,176,210,198, 70, -245,204,142,183,150, 58,148, 13,119, 89,141,243, 17,136,251,193,237,182, 41, 92, 39, 10, 88, 70, 48,126, 46,236,220,130, 92,246, -107,232,150, 35,248,183,157,198,142,143, 30,196, 31,152,242,249, 65,197,161,145, 16,131,213,199,230,188,118,214, 35,228,112,218, -123,187, 79,161,229,145,162, 81, 85, 41,125,222,117,123, 75, 13,156,124,155,131,213,216, 32,174, 3,100, 22,196, 26,221, 19, 10, -214,225, 47, 87, 42,116, 93,224,212,101,181,123, 26,196,149,151,142,177, 23,235,134, 18,115,159,129,104,147, 80,230, 22, 88,236, - 28,106, 27,195,209,190,111, 98,202,145, 59, 19,200,229, 6, 37,222, 74,132, 6,214, 32,104, 73, 96,101, 18, 25,174, 58,252, 37, -219,144, 23,238,130, 51,207,129,193,183, 1, 15,179,176,242,150,212, 53,110,245, 75,208,172,195,108, 2,117,101,209,184,107,117, - 1,105,182,248,244, 60,101, 9,102, 95,132,233,118,112,219,193, 13, 58, 24,145, 1,108, 94,198,109,245, 12,246, 5,134,155, 96, -214, 24,253,151,187,139, 24,120,139, 69,208,161, 33, 9,205,172, 40, 65, 85,231,230, 72,219,123, 33,211,167, 5,245,230,139,116, - 68,101,236,209,216,244, 8,141, 74, 91, 23, 95,219, 61,170,130, 81,234,182,152, 55,157, 94, 49, 57,192, 69, 90,171,113, 73, 28, - 57, 49, 10,119,224,210,189,111, 29,116, 59,207,154, 84,218, 83,209, 41,228,107, 59,159,117, 77,140,192, 88,146, 96,175,209,212, -200, 38,218,245, 7, 59,118,165, 93, 62, 52, 47,196, 19,186,198, 44, 25, 28,114,115,150,236, 96,148,206,160,106,234,187, 16,138, -104, 47, 71,196,113, 81,201, 94,140,233,160, 41,245,147,197,159,161,204,173, 23,236,131,155,203,195,167,241, 42,170,173,211, 95, -219,178, 50,147, 78, 92,229,205, 1,153, 88,249,215, 33,133, 85, 96,139,192, 78,103, 0,107,192,220, 81,212,243,181, 50, 43, 46, -141,229,181,216,229,126, 75, 86, 34, 20, 76,129,180, 37, 87, 41,173,226,138,206,129,222,114,164, 89, 33, 94,118,167, 91,182,244, -194, 42, 73,249,238,109, 85, 26,219,177, 6, 40,107,154,158,137, 90, 57,242,144,178, 97, 76,210, 71,228, 58,116,191, 72, 19, 23, -234,246,174, 10,161, 77,178,182,209,182, 71,231,196,132, 37, 21,238, 77,203, 80,229,124, 58,169, 75,168,183, 52,105, 62, 78,217, - 25, 81,100,222, 17,213,194, 17, 10,208,150,201, 6,201, 93, 58, 11,177,158, 20,142,146, 72, 18, 75, 22,247, 58, 68,101,166,129, -202, 41,195,170, 66,156, 7, 39, 22, 51, 73,219,212, 6,115,152,213, 20,237,218,130,189,173,193,177,171,123,247, 86,105,146,115, -236,177, 76,109,169, 50, 16,135,120, 71,144,144,142, 87, 8,172,114,119,208, 44,182, 77,125, 88, 92,170, 48,178,106,165, 28,235, -213, 49,114, 96,245, 48,205,250, 42, 97, 58, 65, 84,169, 15, 31, 66, 87,143, 88,218,156, 36,166,115,237, 35,234,162, 7,209, 46, - 78,111, 35,110,233, 34,119, 41,101,189, 38,150,202,171, 84,110, 32,130, 22,224,159,219,238,229, 34,127,203, 33, 56, 39, 56,151, - 98,147,172, 42,118,210, 29, 63, 55, 52, 17,237,142,167, 42,109, 45, 96, 9, 86,137, 42, 49, 1,142, 79, 20, 75,101,229,113, 46, - 42,226,133,145, 79,142,192, 76, 3,218, 40, 99, 7, 58,137,169, 48,180,153, 38,186,150,104,229,109, 27,105,101,157,125, 22,220, -185, 48,184, 40,249,230, 58,129,230, 35,224, 47, 73,234,120, 53,137,143, 27,193,210,229, 32,155,144, 71,190, 1,182,125, 30, 62, -184,157,109,239,158, 48,248,232, 17,110,154,212,236,223, 50,192,161,204, 98,164,206, 15,213, 91, 94,166,209,244, 96,136,105, 80, - 72, 87, 11,233,178, 42,221,165,156,177,203,250,216,162, 69,231,124,221,250, 66,196,147,251, 0, 19,239,162,118,159, 43,173, 48, -167,206,137,195, 59, 77, 30,182,189,181, 66,105, 52,206, 45,206,226,230, 83,244,181,130,183,104, 54,104,162,137,163,137,179, 70, - 30, 42,151, 38,132, 51,111, 61,216,108, 21, 15, 3,167, 44, 57, 88,170, 35,163,137,163,122,204, 22,220,203,182,193,249,103,194, -224, 74,224, 18,251,212, 47,194,198, 91,224,240,199, 82,135,150,112,208,138,142,165, 11,151,188,128, 27, 90,211,157,218, 34,246, - 38,157,216,228,147, 48, 56, 3,134,155,128, 21, 3,245, 37, 24,109, 66,206, 24, 81,237,157,225, 53, 38, 1,140, 38,218, 51, 88, -198,162,141,204, 67,162,190,179,239, 80,138, 32,157,148,229,156, 93,169,150, 95,232, 15,224,114,231, 54, 39,140,124,215, 95,128, -144, 88,141,118, 33, 13,169, 70,124, 40,194, 52,198,182,181,108,249,153,101, 30, 49,218,138,156, 85,200, 49, 88, 78,223,106,231, -115, 75,134, 72,114,186,188, 1,112,180, 38, 63, 81, 82,117,194, 6,137,118,223,229, 96, 91,149,110,225,204,198, 82,147,117, 44, - 22,113,229,226,165,202, 58,146,121,133,169, 40, 78,211,130,159,137,139, 78,180, 54,175,105,118,243, 18,213,246, 94,229,181, 73, - 23,114,147, 20, 45, 53,187,158,111,243, 29,185,114,133, 78, 85,170,232,164, 43, 95, 27, 22, 93,209,196,238, 65,101, 17,252,154, - 74, 91,235, 62, 48,103,106,221,190, 14, 42,108, 86,216, 33,176,213,132,131,185, 21,108, 46,115, 92,145,228, 0, 76, 76, 41, 94, -149,138,108,187, 15,117,241,204, 42,211,254,168,206, 63, 75, 45, 20,251, 19, 77, 99, 43,106,138,110, 51,115,176,106,192,236,138, -161,239,117, 94, 96,231,108, 61, 31,146,244, 42,179,104,105, 6, 45, 1, 60,165, 71,186,246,185,185, 99,219,188, 32, 78,138,231, -157,157, 36,103,141,132, 68,230,149,240,173,248, 83, 82,137,170,138,164,158, 6, 42,109,251,240,204,110, 13,138,138,131,178,215, - 65, 60, 74,207,129,129,165,234, 26,233, 28,214,185, 54,171,218,117,155, 83,233, 82, 64,177,240, 84,166, 49, 18,155,134,202,167, -117, 79,173,189, 50,209,225,188, 3, 26, 66, 12, 38, 60, 75, 35,207, 75,234, 34, 39, 86, 98, 93, 57, 97,224, 28,149, 56,106, 9, - 56, 13,105,188,183,159,157,114,228, 18, 2,131,193, 0,231, 61, 33, 4, 66, 12, 72, 91,254,166,115, 42,249,220,208, 45, 5,123, - 62, 21, 63,155,224, 58, 0,245,108,210, 9,197,157,233, 27, 66,176, 57,145,220,197, 74,117, 62,151,145, 85,230, 74, 7,206,210, -130,168,116, 53,236, 57, 19,111,139,159, 20, 57, 17,213, 12,206,157,104,206,185,228,125, 56,111,255,163,133, 48, 43, 90,111,249, -121, 69,171,107,203,234,204,163, 12,214,169,204, 46,220, 57,105,197,113, 73, 20,230, 82, 71, 35, 7,203,190, 19,214,205, 80,134, -214,120,164, 65,169, 53,189, 14, 95,161,177, 78, 97, 73, 51,161,109,250,167,117, 2,239, 16, 97,118, 8,252, 7,192,239, 78, 17, -158,236,129,240, 73,208, 59,193,127, 37,200,206, 20,159,104, 99, 17,251,147,193,239,130,193,239, 35,187,222, 15,143, 13,108,122, -215, 54, 46,252,189,131,184,253, 51,142,236, 28,160, 78,152, 54,166,230,205,194, 35,187, 95,161,200,191,122,159, 35,239, 68,203, - 26,166,162, 69,223,108,114,207,251, 28,229,120, 91, 51, 11,245,181,148,110,236, 92,121,219,124,219, 81, 17,143,115,145, 74, 99, -187, 56,100,189,123,202,163, 75,145,234, 0,141, 89,108,162,233,123, 91,220,156, 75,183, 78,213,165, 22,150, 46, 80, 85,150,231, - 5,124,236, 90, 2, 84, 30,198, 78,216,228,149, 77, 77, 96,188,230,168, 46,221,140,123,217,102,184,224, 76, 88,190, 10,120,172, -141,137, 59, 96,253,191,194,129, 15,145,187,123,232,172, 73,180,187, 77,146,212,109,101, 4,110,156,150, 83,157,153, 91, 31,146, -218,108,114, 0,170,191, 79,207,200, 95,144,116, 17, 84, 73,206,190,107, 96,148, 89, 74, 99,228, 14, 88, 3, 81, 26, 99, 45, 98, - 80, 26,235, 52, 55, 47,202,145, 98,220,206, 51, 36,217,183, 29, 59, 65,188,166,146, 57,151,169,201,121, 26, 86, 13, 68,172, 2, - 48, 49, 29, 62, 69,235, 51, 21,243,230,173,165,232, 81,196,167,149,149,104, 57,237,212,195,169,185,205,124, 62, 52,152, 40, 42, -183, 53,117, 22,125, 46,217,128, 8, 22,225,109,196, 4, 4,155,156,112, 36,106,218,179,160, 21, 3,130,119,106, 98,193, 68, 93, - 86, 5,149,155,243,164, 90, 54,118, 41, 96,184, 76, 17,137,204, 83,182,190, 80, 83,119,244,176,180,139, 96,197, 93, 36, 38,201, - 25,208, 78,153, 55,199, 88, 45, 28, 63, 11,241,196, 0,126, 40, 93, 84,216,180,101,134,106, 45,157,187,250,238,117,133,181, 0, -123,173,223, 60,153, 77,177, 24,103,139,192, 14,235, 16,152,115,219,173,232,107, 17, 24,237, 57,141,236, 58,214,179,118,161,232, -212,151, 89,158, 65,161,151, 25,200, 93,234, 55,230, 58,174,229, 28,126, 83, 8,232,218, 64, 41,166,116,201, 90, 25,189,218,184, -194,156,176, 28,253,134,130,162,143,119,109,128,214, 82,212, 3,235,139,144, 53, 26, 25, 60,171,133,250,108,103, 79,177,145,252, -124,114, 9,150,182,109,169, 85,117,174,221,107,181, 80,178, 86, 21,101,148,190,232,192,153, 91,166,213,185, 74, 66,187,231, 25, -203,118,197, 69, 61, 92,136,145, 72,211,122, 3, 42, 14,231, 60, 33, 8, 33, 6, 92,140,109, 13,187, 43, 74,213, 48,103,102,224, - 28, 3,163,237, 69, 60, 34, 77, 81, 64,175, 93,173, 80,108,112,141, 48, 24, 14,113,131, 1,174,113,168, 75, 81,187,138, 9,123, -115,185,118,218,132, 5,109, 27,168, 57,162,116,209,125, 46,155,155, 99, 96,139,214,196, 49, 70, 42,181, 22,130,222,149,141, 64, -202,198,142, 50, 7,248,206,205, 55, 28,144,210,219,208, 34, 10,148,148,124,243,222,225,157,199,121,105, 85,192, 20,253,114, 83, - 84,216,149,212, 37, 47, 78,186,182,175, 69,157, 99,110,125,154,107,227,197, 34, 29,103,185, 43,113,169,148,102,224,187,235, 73, - 93,235, 60,149,213, 63, 27,105,159,110, 14,145, 32, 30, 93,141, 72,109,138,119,197,208, 98,218,209,183,179,155, 97,116, 59,184, -173,169,225,137,127, 52,132,143, 66,248, 48,248, 71,128,236,162,221,252,133, 33, 12, 31, 14,254, 7, 97,244, 44,216,242,110, 56, -235, 93, 44,159,215,112,225,107,215,248,194,254,154,176, 99,192,164,130, 80,203, 92, 61,111,119, 95, 6,133, 7, 23, 91, 97,160, - 20,202,209,114,186, 68,163, 19, 51,117,216, 57, 97, 58, 39, 51,158,107, 66, 99,157,162, 84,138,188,149,164,218,244,202, 38, 93, - 44, 22,124,172,169,143,134, 46,130,204, 10, 4,181,222,229, 41,130, 76,139,124,229, 18,159,238, 61, 12, 27,207, 82,149,192, 31, - 13,169,217,144,165, 77,150, 92,100, 84, 69, 54,133,200,120, 29,170,115, 87,112,255,118, 59,114,225,165,176,252,221,224, 31, 99, - 25,209,195,176,241, 39,112,231,223,167, 29, 73,214, 6,104, 93, 37, 69, 89, 19, 90, 23, 94,134, 77, 42, 81,195,106,213,115, 83, - 33,167,198,196, 8,108,220, 4,163,207,129, 63,183,203,226,250, 49,178,213, 83,225,169,172,254, 59,228,197, 45, 74,167,232,151, -174,251,153, 22,250,145,156,109,148,130,135,204,185, 64,135,105, 5,124,242,242,107,235, 37,148,231, 66, 44, 74,233,234,144,212, -230,161,145,156,109, 74,254,136,104,171, 84, 15,139,125,168, 10, 65,100,152,235, 51, 45,212,134, 12, 3, 73, 77,144, 92,212, 86, -164, 89, 42,171, 53, 66, 99,105,144,145,135, 81,147, 64,127,205,186,176, 45,249,178,139,152, 24,157,155,158,125,219,109,173,165, - 97,165,141,132,103, 22,149,249, 66, 79, 80,219, 25,122,233, 68, 66,101,254,191,141,168, 23,218,237,150,101,116, 25,196, 93,217, - 11,159,252,124,148, 70, 58, 70,195, 47,168,237,197, 40,248, 80,232, 63,102, 22,137,175,197, 34,197,145,169, 97, 43,225,245, 11, -145,244,204,126,183, 34,176,197,193, 86, 7,187,114,103, 57,157,103, 15, 22,235,172,115,254,119,104,121,250,213, 96, 81,119,209, - 1,186, 44,161,203,116,250,208,198,228, 97,163,146,181, 0,180,220,122,216,119, 29, 28,218,220,117,119,207,148,173, 8, 19, 7, - 7, 98,231,184,102, 96,159,153,224,174, 44, 27, 91,100,134, 68,231,203,197,114, 95, 9,111,218,139,156, 78,105, 59, 22,182, 84, -116, 94, 75,186,115,173,172,204, 88,172, 13,246, 64, 82, 47,132, 88, 56, 7,200,252,198, 47,142, 5, 81,158, 93,127, 85, 86, 48, - 20,226, 79, 93, 16,124,199,133, 40, 62,177,173,202, 58,129, 97,140,224, 93,219,236, 9,107,252,165, 20, 37,106,222,155,248,210, -208, 81, 5,245, 66, 12,190, 91, 3,231, 74,239,148, 89,104, 24,212, 80, 25,176,107,244,196, 24, 76, 68,151, 78,180,109,198, 38, -146, 54, 38,107,215, 20,103,167, 24,139,206,149,101, 40,161, 93,185,168,152, 16,112, 49,239,218,121,192,106, 98, 56,215,129,119, -209, 2, 76,139,182,164, 45,237,104,162, 8,113, 21,174,242,214,109, 44,183, 19,143,150,103,113,115,191,111,213,247,185,182, 90, -156, 85,151, 41,206,249,162, 17, 14,182,139,155,229, 6,179,154,214,169,149, 97,165,186,111,103,194,166, 76, 47, 13,173,215,117, -162,144, 21, 85,215,230,243, 98,180, 36, 98, 19, 19,168,103,129, 85,140, 86,235,188, 53, 21, 78,179,110, 15, 95,192, 89,110, 55, -126, 30,194, 13,224,215, 65,206,164,173,110,213,202,202,175,158, 12,225,177, 48,124, 38, 60,253,151, 25,251,235,121,216,207,110, - 16, 14,215, 76, 54,109,164, 86, 87, 0, 0, 32, 0, 73, 68, 65, 84, 13,208, 40,204,172,172, 13,117, 86, 74, 21, 16,141,120,201, -145,121,209, 47, 64,244,232,125,222,181, 83,190,107,177,106,204,111,242,146,115,222,182,249,139,116,212,190, 3,196,107,218,240, - 38, 59, 14,174, 75,173,136,183, 62,251,182, 0,135, 8,117, 78,158, 23,249,202, 88,212, 58, 59, 67,180, 61, 59, 6,156,254,228, -205,204,110,217,224,246,235, 55,208,232, 80,137,120,107,240, 50,116,202, 74,163,140, 86,149,106,251, 50,238,223,239, 68, 46,126, - 6,172,124, 27,248,179,211, 61,141, 7, 97,227, 47, 96,223, 31,194,190, 25, 28, 89, 70, 39,210,133, 63,217, 59, 30, 89,171, 93, - 89, 74, 83,187,217, 72,165,109,177, 6,181,120, 72,150, 32, 12,160, 57,104,101,140,227,244,188,137,200,138,107, 55,239,112, 8, - 98,247,170,178, 46, 6, 98,224,215,138,154,178, 76, 81,230,119, 8,201,142,144,196, 98,247, 52,159,247, 52,176,232, 35, 42,234, -147,130, 94, 85,137, 77,162, 1,235,188,235, 91, 73,227,105, 18, 80, 13, 13,212,146,198, 65, 90,125, 73, 17, 28,204,139, 85,233, - 20,204, 57, 63,235, 45,146,207,115, 35, 88, 4, 95, 73, 98, 80,106,159, 82, 40,174, 16,126,173, 6, 83, 93, 91,241,126, 46, 11, -171,173,244,105,174, 65,140,129,187, 47, 34, 77,151,233, 92,203,217,143,236, 30, 4, 43,221, 35, 90, 35, 36, 55,191,209, 71,217, - 11, 60,231,156,231,183, 93,234, 26, 40,185, 98, 83,140,170,136,238,181,248,123, 25,132,100,186,119,106,117,222, 89, 0,217,230, -174,139, 50,182,177,149,190,197,185, 8, 53,117,130,219, 36,202, 22,139,208,243, 6, 51,235,154, 90,149, 12,164,235,170, 22, 84, -219,136, 87,205,145,202,180,251,145,152, 54,205, 81, 91, 65,202, 46,121,180,245,240,176,100, 13, 92, 98, 1,218, 27,218, 53,228, -177,154,156, 54, 90,141,197,255,174,232,172, 55, 20,216, 41, 41,107,181,186, 64,251,151, 84,123,174, 47, 47,219, 28,151,243, 61, -235, 41,188, 9,243,252, 28, 91,107,247,172,108, 74, 99,205,110, 6,237, 30, 33,202,216, 54,169,137,226,152,105, 74, 75,206, 49, - 42, 11, 93, 39,243,248, 9,116,142,151, 22,165,144,181,118, 44, 90, 60, 74,137, 91,236,218, 82,165, 29, 66,173,169, 79,118,202, -157, 53, 43, 11, 70, 73,136,235,182,151,105, 53, 25, 62, 9,175,243, 53,121, 47,109,247,208,178,226,168,235,157,146, 38,103,221, - 52,104, 84,134,131, 1, 50, 24,128,247, 52, 26,105,130,109,239, 37, 69,251,115, 75, 53,231, 52,135, 58, 33, 70,215,130,186, 22, -122, 55, 10,167, 46,179, 27,173,242,175,108,229,160,133,104,161,108,174,172,161, 19,191,209,182, 88, 44, 55, 40, 20, 42,239,169, - 6, 3,219,116, 69,219, 19,240, 57,143, 46,105, 55,143,174,239,124, 74,196, 59, 21,156, 79, 91,185,138,184,164, 42, 52,241, 66, -234, 45, 46,157,112, 46,154,208, 76, 18, 5,152, 23,142,129,171,210,131,144,180,229, 95,202,245, 40,131, 65,100, 36,145,213, 25, -168,183, 93,192,170,172,116, 17, 43,129,154, 90,136,107, 84, 45, 13,140,182,194,240, 76,235, 46, 55,235,166,143, 59,195, 92,199, -195, 73, 57, 47, 51,112,103, 89,158, 54,231,113, 43,240, 43,224,159, 0,254,106,248,218, 31, 99,116,240,163,156,251, 11,107,108, - 12,132,125,227, 1, 97,102, 37,110, 14, 42,141, 86,163,191,176,125,170, 83, 19,164, 56,212,182, 49,108,159,141,115,136, 79,187, -215,137,179,146,108,149, 86,240,182,216,162, 80,212, 33, 46, 9, 50, 68,230,235,102, 41,104, 45, 53,192,240, 89,160,232,160, 14, -210, 46,226,174,227, 14,238,210, 21, 52, 90,165,196,146, 8, 59,207, 24,176,233,235,246,176,241,215, 95,164,250, 72,164,118,169, -191,184,143,138,175, 34, 35, 7,163, 41, 84,155,150,144, 23,111, 69, 46,185, 28,150,191, 29,252, 25,166,186,219,128,213,191,133, - 35,127, 4, 7,215,208, 91,151,173,152, 54,116, 53,112, 89,181, 84,169,209,238, 46, 37,134,227,134,129,183,218,243,200, 59,223, - 53, 16, 15,147, 50,199,131,228,132,229,221, 51,170, 28, 81, 88,149,134,164,252,185, 20,125,165,130, 21,193,184,146, 82,141,166, -148, 53, 79, 41,198, 46,130, 25,121,211, 78,132,142,122,174, 85,209,186, 83,209,151,189,229,203,157,208,162,213, 38,138,149,222, -168,237, 45,208, 53, 54, 41, 34, 89,235, 6,169, 11, 27,193,248,162, 31,122,110, 88,130, 36, 86,139,130,117,136,164,241,147,155, -224,212, 69,243,150,105, 76,206,243,192,162,200,188, 11, 90,166, 77,115,143,139, 44,228,202, 98,215,156, 14,240, 2,155, 69,152, -137, 48,139, 16,102, 41, 91,181,236,148,218,218,156, 46,164,191,231, 42,105,124,177, 80, 58,165,213,207, 80, 68,236,177,232,242, - 85, 89,202,168,235,248,215, 1, 90,217,113,174,234,146,110, 93,202,160, 43, 54,201, 11,100, 91,149, 80, 2,217, 72,186,146,181, - 97,225, 80,143,172,246, 56, 59,103,153,101,136,196,174, 63,129,209,232, 19,203,211, 79,138, 8, 59, 2, 35, 73,187,203, 73,219, - 66, 54, 57, 93, 91, 92,102,210, 18,104, 30,116,112,208,154, 30,141,173,252,176, 46,168,247,134, 46,135, 31,179, 0,205,156,184, - 45,214,195, 35, 26, 72,104, 17,249,181, 75,254,209, 90, 2, 46, 52,173,202, 14,195,176, 45,111,236,214,137,220,242, 55,167, 66, - 93, 78, 45,154,192,174,220, 68, 39,231,216,115, 91, 91, 45,158,213,162,163,154,230,136,180,192,159, 5,154,117,209,130,185,116, - 54,145,249, 84, 69,238,117,223, 54,190,210,174, 26, 37,111, 98, 86, 70,195,101,202, 39, 20, 27,190,232,194,118,177,185,147,100, - 87,226,215, 61, 67, 80,154,216,160,179, 72, 21, 35,126, 52,196,251, 10,156, 35, 74,147, 34,124, 85,156,119,120, 95, 17, 68,168, - 67, 64,235,218, 82,216,243,169,175, 50, 13, 94, 74,213, 43, 76, 81, 45, 90,182,113,237,132,106,226, 92,231, 33, 47,108,186,146, - 85,172,105,115,151, 20, 85,123,231, 16, 95,181,106,245,188, 53,167, 56,151, 64, 61,119, 5,114, 98,226,175, 20,174, 59,231, 24, - 84,149, 9,232, 82,225,191,119,130,183, 99, 58, 17,196,167,200, 31,180,109,220, 34,206,227, 84,241, 18,210,228,210,152, 60, 41, - 81, 70,218, 88,119,180, 6, 95, 69, 42,175, 12, 53,166, 14, 90, 62,166,156,143, 75,139,107,218, 68,229,136,221, 22, 43,210, 25, -140,210, 78, 94,126, 79, 2,104, 61,146,186,148,101,223, 88,150, 82, 52, 79,128,184, 14,220, 4,178, 59,213,182, 35, 41, 55, 47, - 86,224,226,207,129,229,159,130,231,124, 63, 75,255,252, 37, 46,120,199, 42,205,110, 33, 12, 43,166,117,154,236, 81, 99, 90,140, -124,161, 98,199,132,126,178, 56,217,180,235,113,158,127, 31, 45,154, 95,216, 3, 89,138,189,207, 93,238,223, 94, 76,150,178,113, - 77, 37,243, 11,107, 91,106, 29,157,245,162,183,221,152,108,177,206,173, 98, 67,148,118,235, 94,205,251, 21, 19,217,248,226, 12, -255,219,159, 99,237, 11, 83,178, 94,207, 71,197,123,101,105, 0,203,179,200, 64, 60,238,210, 49,242,148, 11, 97,229,155,147,126, - 33,235, 95,103,159,129,181,191,134,201, 26,122,104, 9, 14,154,148, 62,187,255, 3, 91,106, 7,214, 66, 77, 12, 25,227, 97, 8, - 71, 18,113, 2,200,104,106, 66,199, 17,232, 56,109,240,162, 70,216,233, 65,104,214,208, 91,103,201,121,114,138,107,253,248,172, -120,215,162,191,123,177, 64,200,194,150,138, 11, 17,115,219, 89, 47, 40,193, 9, 33,104, 42, 67, 11,133,128, 39,206,111,112,145, -201,135, 58, 80,180,230,237,162,199,178, 43,149, 22, 98,179,118,175,112,233, 22,115,219, 80,217,132,109, 93,139, 90,231, 32, 6, -105,119, 33, 11,182,169, 71, 6, 22,111, 73,201,124, 94, 83, 75, 19,148, 61,217, 61,221,126,208, 89, 37, 92, 21,170,245, 96,224, - 53, 44, 6,227,118,149,255,159,175, 55, 15,182,109,187,202,251,190, 49,230, 92,123,239,115,238,185,247,190, 70, 79,122, 79, 72, -168, 65, 2, 44, 4, 18,141, 19, 11,132, 93,136, 96,226, 34,193, 21, 87,108,210,144, 30, 87, 58, 10, 59,142,157, 96,167, 41, 39, - 16, 92,130, 74,140, 93,216, 36, 85,164, 82, 41, 39,184,202,105, 42, 78,170, 82,128,177, 33,216, 70,142,145, 82, 70, 52, 22,168, - 1,233, 73, 79,175,185,253,105,246,222,107,173, 57, 70,254, 24, 99,204, 57,215, 58,231,137,170,139,164,251,238,187,231,156,189, -247,154,115, 52,223,247,251,240, 13,207,111,240,238,127,250, 20,191,250, 51,151,248,229,151, 71, 12, 94,140,172,179,187,155, 37, -170, 5, 55, 37,180, 11,125,109,125, 91,252,158, 23, 45,117,204,234, 7,173,233, 12, 26, 79, 32, 32, 48, 65, 16,228, 21, 14,150, - 59,202,220, 83,108, 69, 65,176,217,137,150,239,130, 58, 9,114,195,214,128, 76,106,159,155, 8, 66, 98, 5,178, 79, 18, 35, 10, -247, 92,180, 75,108,232,138, 37,165, 26, 55,139,238,243,181, 87,224, 68, 91, 88,244, 9, 89,105,122,207,185,240, 99,160, 95,125, - 0, 41,107, 59, 29, 90, 44, 46,193,196,126, 76,134,140,141, 11, 73,137,174, 91, 8, 87,177,166,180,230, 99,116, 36,183, 89, 67, -121,174, 85,192,166, 93,163, 18,120, 86,168,125,254,250, 53, 72,192,109,242,130,218,215, 19,225,168,119,229,214, 9,203, 81,151, - 19, 30,244,144,154, 27, 26,143,122,182,117, 5, 72, 16, 46, 89, 21,224,212,245,178,237,153, 39,177,210,132, 58,142, 5, 0,204, - 46,188,235,197,200, 88,217, 4,209,225,136,117,158,236,188,223,108,145,242, 0, 30, 54,182, 99, 71,100,105,152,181, 45,229, 1, - 99, 74, 40,211,100,192, 49,135,128,232,226, 51,175,221, 24, 30,200,188,130,185, 48,150, 59, 91,234,212, 62,177, 51,172,249,230, - 61,182,134, 19, 56,101, 83,155,147, 81,232, 82, 74, 32, 50,188, 93,100,168,163,238, 85,172, 99,207, 41, 25, 2, 47, 15, 24,134, - 12, 38,118,242, 27,213,164, 26,114,149,124, 70, 67,242,162,248,241, 19, 2, 41, 78, 38,192, 98,182, 52, 54,178, 23, 95,164,216, -238, 35,145,217, 40,252, 82, 25,152, 76,229,152, 25,213,195,160,126,108,146,195, 30,105,107,177,158,228,131, 72,189,112,107,219, - 73,231,247,187,242, 93,237, 96,255,153, 30,248,205,249, 92,231, 16,118, 86, 23,191, 3,184,251,131,192,159,252,115,184,243,153, - 25,239,248,212, 5,248,141,183,112,127, 59, 96, 62, 26, 69,206, 94, 23, 93, 10,125,180,239,140,109,174,107,111,100, 89,172, 75, - 40,185, 11,192,137, 35,245,208,241,247,132,185, 57, 27,210,106,150,198, 43,128,141,118,188,205, 4,211, 38, 12, 84,236, 98,170, - 23, 6, 67,252,240, 39, 7,240,219, 56, 90, 92,129,201,184, 60, 31,113,249, 91, 19,116, 86, 80, 86,100,143,103,220, 50,176,157, - 20,121, 2,248,214, 6,244,221, 79,129,222,240, 33, 32,191,195,156, 4,162,192,241, 55,128,199, 63, 6, 92,190, 6,125,204,192, - 61, 0,151,179,181,141, 89,141,159, 26,105,170,224,118,178,232, 19, 96, 26,161,135,226,179,208,160,125, 28,172, 56,147, 51,212, - 17, 9,200, 71, 37, 19,176, 87,240,134, 45,104,131,151,193, 19,157,147,176, 98,124,165,178,178, 13,196,211,175, 59,120, 85, 80, - 9, 89,232,138,136,182, 56,215,174,139,212,110,119,169,175,211, 28,173,125,192,137, 26, 47, 92, 59, 44,171,118, 95, 91,169, 57, -252, 42,191,220, 21,236,228, 73,120,232,226, 81,197,219, 51,233,144,170,179,171,254,143, 26,194, 62,237,186, 74,237,180, 52,203, -232, 99,234,118,207, 91, 50, 94,253, 11, 74,120,255, 31, 60,197,233,191,121, 7,219,159,189,170,214, 53,238, 18,227,184,187, 48, -146, 94, 79,227,162,142,140,113, 83, 42, 87, 15,138,209,213,161, 26,123,216,210, 21, 38, 49, 54, 47, 21,108,211,237,163,187,253, -118,118, 91,219, 72,192, 99,233,149,217,129,252,180, 17,230,232,113,203,226,191, 71,110, 55, 82,191,240, 7, 87,197,239,213, 46, -208,193,223,176, 9,237,163, 26, 52,181,216,229, 39,143, 52,141,124,128,212,105, 41,118,190, 34, 56,135,141,242,147,183, 37,167, -158,135, 62,106,103,159,243,226,176,207, 40, 63,243, 21,229, 57,155, 48, 82,174, 73, 63,175, 99, 78,251,157,255,224, 95,239,110, -108, 50,189, 43, 15,145,221, 50, 19, 93, 61,164,198,181, 30,221,180,111,215, 67,179, 16,104,106, 15,209,137, 85, 81,247,204, 4, -211,127,238,192, 72,181, 19,167, 37, 65, 79, 87, 52,123, 44,120, 42,161,159,208, 58,238, 78,126,206,217,100, 84,155,211,136,130, - 43, 98, 55,231, 92, 10,142,211,132,195, 60,161, 76, 99,181,160, 1,203,253,127,191,223,142,226, 71,165,128,230,201,154,221,148, - 81,105, 92,206, 49, 97, 21,156,230, 13,238,156,222,194, 40,130,253,120,196,241,112,133, 50, 78, 62,169,190, 62,137, 85, 27, 88, - 54, 59,219, 98,180,162, 77,125, 30, 98,170,200, 48,143, 87,141,252, 93, 53,101,123,170, 34, 8,179,172, 49, 56,101,100, 78,181, -155,108,188, 94,139, 98,205, 57, 33,109,118,200,195, 96,127,142,185,238, 10,153, 21, 36, 77, 46,166,101,114,236,100,100,114,183, - 15, 93, 82, 49,161, 15,181, 29,196,204,130,193,173, 20, 3,169,119,187,193,231, 85, 83, 54, 66,124, 47,191,241,169,122, 36,146, -240,162,118,180, 83, 81,157, 35, 30, 62,117,106,219,175,249, 69, 64,146, 21, 1,229, 4,200,123,159,213, 60,239,221,224,108,227, -121,218,218,158,253,203,254,109,208,135,127, 2,207,254, 25,194,240,233, 43,108,158,222,226,254,201, 22,147, 88,138,121, 17, 65, -138,220,120,132,117, 40,222,167,226,247,122,248,139,169,225, 52,125, 44,100,183,120, 0,101,196, 20,241, 10,176,219,225, 8,166, -255,163,149,107,129,186, 93, 89, 28,126,169,250,147,217, 94, 67, 16,144, 61,148,193, 25,176,197, 17,183, 85,105, 81, 59, 24, 65, -113,101,188,178, 93,150, 67, 17, 12,131,133, 61, 12,163, 32, 99, 0,127,231, 25,240,190,247, 2,187,239, 48,135,129, 42,112,249, -191, 1, 79,126, 10,120,248, 4,122,121,215,230,140,231, 19, 48,205, 14, 62,247, 10, 98,172,251, 2,159,245,205,192, 60, 67,247, - 98, 39,220,193,143,164, 13, 3,233,224,116,158, 51,160, 92,180,121,169,138,193,105, 78, 18,176,201,224, 50,129,187, 21,211,130, -234,129, 46,165, 80,219, 62, 14,162,203, 0,130,190,227,171,216, 92,109,160,144,213, 5,190, 16,244,116,118, 42,155, 37,120,103, -121,195,154, 35, 50,204, 37, 89,107, 28,104, 12,174,208,145, 54, 81,209,110, 12,207, 97,241,210,118,145, 9,154,165, 38, 58,138, -112, 52, 76,142, 13,141, 75, 44, 84,248,245, 66,247, 14, 56,124,232,115, 80, 7, 97,105,100,145, 66,246,185,164,248,153,255,245, - 28,227, 79,159,227, 69, 8,118,201,192, 76, 2,198,134,212,138, 31, 93,122,164, 99,146,128, 46,103, 59,105,135, 17,213,102,117, -138,215, 54, 16,212,140,101,154,215, 90,115, 48,160,157,117,234,175,217,220,145,200,212,161, 65,147, 11,200,230, 78,123, 42, 29, - 72, 72, 17,161, 71, 46,248,165, 38, 51, 30,200, 45, 73,218, 0, 50,123,255,187,178, 11, 86,135, 14,113,155, 86,106,247,173,167, -140,165, 46,177,237,177,127,223, 33,180,123,150, 45, 29,237, 1, 3, 79, 92,184,122,219,133,199,231,164,139, 80,155, 30,248, 19, -175,195, 22,150, 53,176,247,130,101,132,122,182,122,179, 7,246,250,171, 30, 78,149, 3,236,211,239,186,125,242, 19, 58,129,109, -247,239, 14,174,152,135, 11,155, 79, 42,165,143,112, 80,197,168, 38,150,139,145,249,184,198, 46,175,172,110, 3, 53,138,223, 76, -141, 58, 55,119,197,219,210, 47,212, 79, 40,173,233, 65,209,133,126,131,137,171,223, 92, 59, 38,187,177, 86,212,166, 64,100, 90, -155, 89,108, 68, 30,233, 72,175, 59, 25,168, 5,166,103,147,184, 90,157,138,149, 64,137, 25, 41,155, 23,160, 68,234,155,152,120, -249,108,179, 67,202, 3, 84, 21,135,162, 80,153, 22,200,183,102, 51,180,239,223, 47,111, 90, 82,243,251, 31,154, 86,187,245,168, -112,220,119,206,204,200,236,187,111,207, 89,207,105,112,197,238, 12,242, 2, 32,172,103,214, 88, 15,200,219, 19,228, 97, 99, 94, -117, 17,171, 62, 2, 74,224, 47,114,242, 7, 69,157,186, 67,162,213,187,170,126,177, 23, 53,166,245, 76, 82,247, 53, 2, 69, 73, -126,121,176,237,233, 21,230, 63, 54, 86,175, 29, 16,137,213,194, 77,152,124, 20,171,109, 96,232,227,123, 83,172,133,173,224,137, -237,107,233,204, 21,242, 5, 24, 95, 3,142,143, 77,117, 77, 3,144, 79,129,225, 37, 96,243,110, 19,123,213,180, 55,191, 60,242, - 63, 3,188,227, 17,232, 47,254, 52,238,254, 88,198, 87,254,202, 37,238,239,103,124,241,108,131,139, 77,178,145,148,174, 19,162, - 18,136,220, 55, 46,182,163,141,189,121,140, 58,219,174,181,184,163,192,239, 62,170,102,132,166,204,142, 29, 30, 45, 85,182,253, -199,159,107,209,228,108,113,127,255, 6, 17, 28, 99,100,235,133, 87, 32,130, 99, 95,184,113, 31,103, 17,134,170,243,195, 60, 24, - 60, 51,176,133, 98, 56, 0,252,230, 45,248, 59,159, 5,206,254, 89,128,223, 98,213,198,254,231,129,123, 31, 6, 30,110,161, 47, -223, 54,176,246,254,104, 34,185, 67,177, 83,109,195,141,249,121,226, 55,176, 8,116,242, 69,225, 69, 1,206,221,112,157, 0, 61, -177,211,148,240,196, 94,136,233, 41, 19,224,165,231,171, 12,150,178,128, 88,145,242, 42,124,163,187,175, 67,112, 54,251,115,195, -222,209, 74, 71, 73,161, 46, 59, 65,168, 89,213, 84,174,119,225,235, 78,162, 14,209,220,221, 82, 96,242,142, 5,134,243,134, 61, - 39, 9,181,177, 52, 53, 25,188, 80,243,169, 43,150,118,163, 45, 90,166,120, 14,237,138,103,106,143,254,158,151,174,224,224, 27, -138, 0,234,244, 24,236, 68,174, 89, 9, 39,158,247, 61,193, 41,138,218,152,245,191,182,159, 77,254,192, 54,234, 20, 81,100,106, -251,253, 25,203,144,142,254,181, 41,171, 66, 40,198,253,209, 54,164,232,230,176, 76, 87,171,129, 31, 61,228,100,161,134,239,132, - 79,104,169,101,232,196,169,163, 51,222,115, 55, 42,159, 53,244, 39,132,141,104,197, 11,247, 69, 90,114,187, 84, 38,251,185,199, - 96, 58,132, 86,128,218,196,115,232,206, 86,233,128, 50,240,139,153,187,215,124,116,145, 95, 15, 56,186,235,108,142, 43, 69,229, -196,159,184, 90,254, 42, 58, 94, 93, 70,218,198, 69, 60,120, 98,219, 93,182,221,252,209, 19,221, 84,151,112,153,133,245,208, 95, -196, 43,255,126,230,110, 85, 64, 93,191,223, 79, 78,102, 88,138, 91,134, 37,132, 62,113, 61, 74,248,248,237,245,233,199,226,180, -184,136,123,234,101, 20,159,135,206, 9,145, 58,152, 79,193,114,101,164,253,247, 83,159, 81,178,152, 15,245, 32, 21, 78,224,100, -234,244, 41, 10,148, 88,121,116,141, 45,251,152, 28, 85,241,174,139, 78,125,237,179, 39,220,140, 91, 87,111, 74, 33,132,132, 12, -164,228,162, 59,182,130,250,176, 7,246, 87, 72, 57, 99, 59,108, 32,219,217, 52, 57,101, 94, 17, 20,151,249, 17,139,228,152, 20, - 80,128, 62,193,171,114,225, 27,175,157,153,145, 82, 66, 78,102, 93, 35,230,186, 67, 87, 82,187,128, 69, 64,201,246,157,236,248, -215,180, 25,144,182, 39,200,121,176, 10, 89,102,219, 19,248,195, 81,105,176,158,116, 86,197, 10,209,129, 42,217, 11, 17,112,148, -216, 93,177,248,152, 73, 43, 31, 24,126, 72, 19,139,189,185,190,231,103, 5,242, 64,224, 29, 65, 95, 30,129,105,219, 41, 50,182, -166,138,198, 19,127, 12,142, 62,154, 15,193,149, 63, 30,202,192,124,110, 59,222,241,137,185, 63,105,231, 23,251,203,192,240, 89, - 96,120, 43,176,121, 59, 48, 60,239, 99,124, 15, 10,200,255, 18,240,229,111,133,254,240,127,139,237, 71, 30,226,133,191,126,196, - 83,159, 58,224,181,243, 9,247,239,102, 92,109,178,117,238,218,209, 76,209, 68, 54, 73, 58,251, 18,213,230,220,170,181, 14,161, -197,196,190, 79,181, 27,197, 68,216,126,136, 72, 53, 67, 88,145,227,153,188,218,169, 54, 99,247,234,120,187,107,176, 21,237,233, - 72, 93, 32,200, 54,163,138, 36,139,171,182, 51, 3,155,172, 56, 17, 96,251, 64,144,110,157,128,255,253, 59,192,243, 31, 0,248, -247,218,235,115,252, 40,240,218, 15, 66,191,144,128,151,110, 1,175, 78, 54,114, 31,103,232,249, 84,151,163,116, 39,219,141, 53, -251,109, 73,126, 85,205, 98,180,150,203,217, 10,128,139, 14,202,141,193,103,172,175, 0,121, 0, 78, 63, 1,156,190,217,199,253, -163,189,206,131,171,253, 75, 7,192,232,162, 87,209,141,109,227,105,234, 93, 32,125, 55,223, 79, 61,194, 47, 43,235,157,223,181, -225, 89, 7, 93,238,196, 97,182, 54,234,108,132,221, 94,176,103,124,235, 13,136,218,190,227, 85, 90, 18,218, 34,164, 36, 98,149, -231, 98,147,129,156,196,189,238, 77,181,189,130, 13, 47,190, 15, 38, 67, 62,159, 49,225, 93, 91, 35, 61,126,238,114,198,232,239, -151,168,249,251,137,237, 48,159, 96,228,187,212, 89, 98, 3,122,146,169,187,188,169,167, 36, 82,229, 96,160, 83,119,215,239, 75, -163,203,210,133, 40, 74,209,209,145,125, 13,216, 3,159,137, 60,167, 66,155, 16,107,232,132,192,221,219,129, 43,116,240, 30,109, - 44,117, 82,235,222, 12, 8,146,172, 8,246, 96, 36,203,194, 16,100,111, 72,198,107,121, 12, 81, 88,153,204,118,203,158,168, 23, - 95,211, 39, 60, 83,199,220,231, 94, 0,136,118, 25,238,221,134,120,161,209,225, 42, 6, 34,156,145,105,115,174,168,249,231,165, -251, 28,104,199,133, 39,239,188,181, 75,129, 41, 55,116,185, 11,203,157, 95,138,167,141,179,233,226, 64, 90,132,200,132,248,110, - 82,193, 78,200,160, 74,176,201,192,149, 90,240, 75,113,186,154,212,166,237,250,180, 37,246,231,165,251,140,207,139,123,170, 75, -246,139,238,153,172, 96,141, 2, 42, 43, 28, 40,195,152,181, 88,195,226,205,105,143,157, 21, 98, 71,221,182, 37,125,242, 63,171, - 76,208, 34,142,121,189,174,245,160,245,115,210, 63,131, 53, 54,220,102, 68, 42, 2, 41,214,177,111, 56, 65, 61, 56,106,158,103, - 20,153, 49, 31, 38,228,205, 22,219, 97,107, 63,239, 4,232, 44, 46,193,108, 95,120, 49,126, 15,255,166, 89,201,120, 17,124,223, -103,199,134,162,143,185,243,160, 83,219,129, 51, 86, 51, 47, 38, 91,250, 19,192,121, 64,222,238,144, 55,131,125, 40, 75, 1,100, -246, 7,183,137,223, 64,228,227,100,187,220,137, 77, 49,207,108, 30, 66, 22,174, 84,181,218,223,104, 40,241,125, 20, 77,246,145, -202, 68, 6, 26, 16,123,240, 6, 88,103,192, 16, 28, 68, 48,188,116, 64,126,114, 2, 26,238,248, 13, 58, 0,252,148,177,223,213, -163, 59,245,178, 13,126,244,202, 46,124,221, 1,227,203,246,234,150, 2, 76,159,243,131,126, 0,242, 22, 56, 14, 64,254, 28,144, - 62,106,185,221,249,141, 54,186,207, 79, 1,252, 12,144,190, 21,244,244, 87, 0,223,241,215, 64,223,244, 81,156,254,163,115,188, -245,127, 24,241,244,111, 30,112,255, 86,193,195,167, 7, 92, 73,131, 49,196, 97, 22,196,164,152,160, 80, 93,151,232, 34, 24,131, - 28,239, 26, 7, 63,177, 19,235, 4,117,124, 26, 81,139, 89,165,217, 49,252, 2, 33,191,200,227,214, 96, 47, 42, 70, 89,101, 18, -248,200, 95, 33, 72,108,100,166, 20,104, 95,182,247,104,195,138, 13, 91,215,176,125, 44,200, 60, 32,253, 71,119, 65,239,251, 61, -192,246, 95, 4,210,179,192,252, 24,120,244, 95, 65,239, 29,129,151,223, 4,188, 54, 2,247,142,208,227,108,254,118, 47,254,128, - 4, 28, 5,148, 5,216,165, 38, 4, 40,197, 78,178,189, 71,154, 61,118,144,121, 2,112, 96, 96, 18,232,209,210,241,112,122, 31, - 24,239, 1,167,129, 4, 46,192,156,128,109, 2,205, 51,136,172,235, 27,177,236,106,226, 69,147,213, 94,177, 79,161,142,124,229, -196, 22,214,194,115,120,103,253,105,211, 37,136,164,183,101,205,235,253,111,252, 79,159, 96,241,170,203,234,133, 97,189, 24,105, - 13,111, 70,103,219,193,106, 47, 31,207,238, 9, 24,111,123, 46, 99, 36,197,103,238,205, 40, 52,215,142,149,186,125,183,220, 84, -192, 16,225, 14, 17,190,249,185, 13,222,242,238, 1, 31,255,196,136,223,186,156, 23,135, 92,216,220,142,176,231, 48,173,232,135, -189,176,176,247,227, 19, 53,171,228, 90,145,189,176, 63,145, 39,131, 81,103, 81,234, 68, 98, 21,221, 73,109, 7,171, 93,144, 85, -172, 29,135,174,235, 27,125,215, 30,218,128,177,155,116, 72, 71,216,204, 68, 70,211, 99,219, 37, 83,213, 24,152, 48, 18, 82, 64, - 40, 85,161,173, 94, 8,164,238, 82, 61,141,203, 52,112,168, 20,175,151,141,163,117,229, 99,239,187,231,210, 93,202, 2,197, 1, -132,135,254,209,223, 46, 86, 43,218, 32, 61,125, 52,173, 23, 84,115,215,197,110, 98, 50, 67,203,247,191,191,147,194,182,120,226, -187,253, 30,235, 90,250,245,201,162, 51,181,239,245, 74, 4, 59,102,100, 88, 10,224, 93, 40, 46, 65,120, 66,192,209,223,100,233, - 86, 65,252, 58, 83,174, 88, 77,245, 89, 0,189,182, 34, 92, 83,235,209,219, 64,192, 9, 39,204,153,113, 80,215,103, 69, 8,139, - 20, 72, 41,134, 20, 6, 32,204,139,203,152,217,246,224, 51, 39,232,100,202,245, 30,115, 44,175, 35,226,148,192,110, 71,222,168, -168,107,161,172, 16, 44, 34, 32, 21,155, 2, 56, 53,142, 55, 3,198,194,152,143, 71,148,113, 66,222,110,176,217,108,189, 56,157, -236,140, 81, 99,170,132,179,161,238, 35,123,242, 82,148,247,139, 93,187,118,123,105, 31, 81,112, 78, 45,137,173,194, 26,218, 40, - 79, 89,145,192,246,103, 19, 35,101,147,241,179, 20,148,105,118, 48,130,250, 37,220, 14,175, 70, 10,234, 87, 0,236,255, 92,220, -180, 47,104, 39,164,141,236, 75,114,159, 33, 21,187,252, 85, 65, 69,161, 78,242,178, 58, 90, 48, 36,197,113, 82, 60, 24,129,187, - 7,193,201,253, 2,228, 59,221, 41,117,199, 61,204,238, 87, 47,143, 93, 16,183,113, 97,213, 3,239,212, 15,246,159,170,192,241, - 2,120,164, 80,246,233,196, 86, 45,171,114, 24,128,225, 55,129,124, 2,164, 51, 32,191,201,114,193,183,239,183, 78,126,251,131, -192,155, 62, 11,124,251,223, 4,127,211, 47,226,206,207, 61,193,233, 95, 61,226,238, 23,143,184,247,108,194,227, 13, 99, 82, 66, -145, 22, 40,172,218,239, 5, 61, 88, 71,189, 93,151,149,240, 45,172,105,210, 82,189, 50,195, 17,137, 45,134, 51,117, 99,124,237, -132, 58,209, 8,167,254, 50, 17,223, 67,106,105, 65, 47,108,169, 99,153, 26,108,132,201, 84,188, 57, 1,187, 34, 56,217, 3, 89, - 50,210,127,124, 23,244, 45, 31, 0, 54,127, 28,200,239,178,111,244,248, 17,224,252, 37,224,252, 25,224,188, 0,143, 39,232,126, -130,202,232,227, 41, 95,242,110,124, 32, 71,158, 69, 26,163,163, 25,192,113,178, 86,229, 48,155,124,124, 95,108,143,126,167, 24, -166,173, 36,168, 38,208,120,116, 15,251,209,233,129, 78,218,219,154,234,149,198,229, 72, 43,186,162, 88,121,228, 58, 10, 39,204, - 22,140,187,184, 64, 99, 76, 23,175,225,228,251,119,238,133,112,157,112, 38,119,187, 92,237, 68,106,253, 57, 36,180, 68,243,162, -131,111, 68, 68, 37, 24,160, 98, 5,150, 82,191,139, 84, 27,165,118, 23,251, 12, 96,235, 87,226, 83,204,248,125, 31, 60,195, 27, -254,194, 11,120,245,207,126, 1,159,250, 59,179,243,174, 27,226,185, 87, 29,235, 74,152,182, 35,224,133,129,145, 7,224, 31,127, -102,194,199, 30,140, 53,250, 56,246,185, 17,229,155, 86,153, 4,165,195,124,246, 73,112, 88, 81,211,214, 34, 65,209,101,244, 42, -212, 25,220,157, 35, 64,186, 17,113, 19,124,209, 34,231,156,176, 20, 90,201,234,130,232, 33, 42, 49,209, 52, 75,150,239,248,201, - 58,206, 1,166,235, 17, 87, 29,176, 42,164,216, 33,157,124, 58, 80,193, 40,145,201,237,123,242, 1,141,230, 55,118, 98,193,209, - 87, 22,235,238,111,125,185,150,134, 21, 89,188, 94, 83, 23, 85, 29, 84,190,129, 90, 19, 36,212,118,178,218,141,203,201,245, 17, - 73,151,118,193,254,125, 15, 1,219,222,139,166,125,199,250, 23,234, 47,179, 54,133, 58, 70,178, 96, 8, 51,197, 46,161,157, 11, -229, 50,247,206,141,246,179, 73, 87, 12,233, 74,216,169, 93,166, 58,187,250, 63,185, 45, 45, 7,228,104, 85, 8, 36, 0, 39, 76, -216,229,132, 43, 78, 96, 50, 31, 72,124,174, 98,242, 34,218,214,204,228, 5, 68,114, 33, 93, 78, 70, 7, 5,180,114, 18,250,162, -171, 47,172,117,241,153,215, 14, 17,219,141,245,189, 24,157,139,233,189,192,132, 76,140, 97,216, 32,109, 7, 28, 64,152,199, 3, -100,182,142, 93, 55,155, 54,110,137,194, 70,125,149,101, 85,101,199,238,236,128, 38, 1,156,169,149,180,170, 5,137,228,140, 60, - 12,246,207,164,212,200,204, 32,190,241,144,253,211, 27, 73, 54, 9,156, 51, 56, 49,168, 20,136,204, 80, 41, 80, 7,232,179, 42, -152,115,165,197,177,123,131, 99,164,111, 19, 4,139,164,171, 47,150, 10,164,204,181,116, 47, 69, 48,137, 88, 55, 79,254,248,178, -121,134, 38, 81, 20,255,129, 51,219,155,240,104, 86,156, 23,197, 41, 19,228,179,151, 72, 28, 53,237,224,244, 56, 87,189,203, 4, -140,143,128,233,220, 99, 59,189,143,144,217, 41, 55,197, 61,209, 9,250,144,128,203,226, 86, 47, 1,210, 0,108, 4,184,117, 4, - 54, 87,160, 91,175, 1, 39,191, 3,156,126, 12, 56,249, 8,112,250, 71,129,221,215, 2,249,107,140, 39,255,220,191, 0,252,177, -255, 14,249, 3,191,140,167,127,232, 10,183, 62,122,196,131,167, 20,175,158, 38, 92,177,145,205,180,248, 69,236,243,161,226, 43, -127,144,127,201, 24,203,166,198,191, 14,241,202,228,116,179,129, 66,217,171,222,173, 53,219,143, 22, 44, 4, 24, 97,245,176,192, - 24, 66,164, 32,155, 99, 91,235, 1,149, 56, 33,195, 94, 95, 26, 8, 36,100,126, 76, 98, 12, 40,216, 22, 32, 29, 18,210,119,237, - 64, 31,250, 32,176,253, 1, 32,189,221,118,220,227, 39,129,199,127, 21,250, 88,129,171, 1,184, 56, 64,175, 70,232, 60,154, 80, - 37,164,215,147,135,203,108, 59,226, 78, 96, 14,103, 7,148, 31,102, 99,121,206,165,209, 40,164, 3,214, 87, 14,190, 99, 44, 40, - 25, 41,240,105, 6, 31, 7, 80, 73, 72,251,185, 93, 2,106, 21, 60,121, 81,107, 35, 59,191,156,184, 49,224,129,101,152,206,181, -145,181, 46, 53, 41,178,218,189,133,240,148, 58,185, 49,173, 56,225,241, 32, 14,238,102,156,252,247,178,239,249, 69,218, 51,203, -170,182,250,208, 22,214, 3,237, 44, 88,158, 6,118,139, 8,207,159, 18, 18, 4, 95,248, 51, 95,196, 71,255,193, 30,133, 21,236, -227,126,137, 14,182,142, 78,237,178, 72, 30, 25, 26, 0,143, 7,170,248,200, 43, 19, 62, 63,154, 62,102,227, 99,213,190,211,207, -206, 20,239, 23,129,125,209,180,238,114,210, 74,115, 16, 59,113,193, 82,231, 16,228,183,212,133,187, 20,119, 41,172,199,160, 10, - 93, 30,178, 29, 42, 91,169, 53, 19,145, 11,111, 54, 48,138, 0,100, 36,143,232,132, 11,179,226, 16,159,213, 71,168,106,196,244, -172, 97,205,210, 90,115, 22,109,182, 81, 90, 41,200,185, 35,233,237, 60,253,237,194,247, 47,195,202,170, 90, 47,225,213, 37,222, - 10,126, 59, 63,139, 39,191,197,180, 35, 57,211, 32,146,210,160,171, 41, 19,150,176,149,158, 37,191,166,226, 21,135,247,204, 30, -120, 67, 14,224, 25,130, 82,184,176, 72,155,197, 47,166, 29,213, 89, 64,138,137, 25,163, 2,231, 80, 15,227, 2,230,110, 79, 21, -133,100,233, 26,144, 21,173,182, 70,232, 82,151, 46,154,233,186,206, 85, 59, 24, 82,160,203,137,184,174,155,227,253,158, 92, 38, - 71,157,118,172,196, 63, 39,152,176,155,236,206,113, 38,118, 43, 98,110, 0, 65,233, 13, 66, 77,237, 94,237,228, 43,106, 35, 88, -218,132, 32, 30, 90, 34, 32,243, 14, 39,187, 45,142, 4,200, 52, 65, 75,193,144, 7,232,206,182,195, 82,196,159,123,110,121, 7, -113, 96,145,106,173,240, 35, 48,190, 39,186, 41, 28,147, 55,100,195,215, 21, 35,104,176,251,208,137, 25,196, 9, 57, 15, 64, 82, - 87,109,251,229,222,147,234,136, 77,225, 94, 49,131, 92,177,177,213, 35, 79,214, 1,234,108,150, 32,134,123,160, 41, 24,244,228, -251,245,134, 80,181,221,165, 56,145,139,192, 62,119, 19,241,205,131, 10,114,178,136,201,215, 14, 86, 60,104, 82,232,111, 78,192, -120,101,101, 30, 50,192,103, 64,122, 26, 40, 7,187,212,203, 30,152, 30, 57,100,102,107, 74,118,157, 60,233,131, 91,194, 91,114, -162,196, 49,146, 77, 74, 4, 34, 3, 57, 65,135,236, 92,201, 9,244,220, 63, 2,158,251, 12, 80,254, 40,112,251,187,205, 19,143, -175, 4,248,135,128,119,254, 50,232, 39,254, 10, 54,255,211,103,241,220, 79, 29,112, 50, 77,120,229,169, 1, 23,196,152,185,133, -185, 80, 63, 10, 15,166,187,239,175,147,154,248,222, 4, 90,140, 82, 74, 99, 53, 39, 31,189,138,221,105, 34,203, 11, 41, 18,245, -170, 8, 63,217,133, 62, 73, 49, 37,178, 74, 23,180, 97, 43,152,224, 70,167, 68,160,217, 71,172,172,200, 52, 99, 43, 64, 86, 70, -122, 62,129,191,231,221,192,233,127, 0,208, 91, 92,180,246, 10,240,248, 47, 0,247, 94, 4, 30, 63,227,212,140, 2, 29, 71,211, - 78, 68,168,135,167,149,144,114,123, 42,134, 8,188, 38,139, 86,219, 23,127,237, 11,112,144,142, 21,170, 30, 31,235,129,225,105, -103,235, 16, 20, 63,213, 19,240,116, 2, 61, 86,240,101, 6,243, 92,245, 28,236,187, 81,113, 5,114,176,159,227,196, 9, 60,230, -216,133, 93, 4,226,180,160,209,225,174,169,175,169, 89,152,250,188,106,213,165,102, 53,210,192,164,235,145,139,119, 35, 73,218, -133, 24,137,108,203,195, 89,187, 3,180,253,190, 84,184,135, 66, 50,240,138, 42,190,248,145, 61,238,237, 5, 83, 82,108, 32,158, - 40,104,170,100, 66, 88,149, 26, 47, 94, 59,223,242,164,138, 7, 99,241,245, 65, 88,225,186,159, 69, 91,161, 67,157, 82,189,199, -127,234,170,147, 90,239,204,141, 11,222,132, 78, 11,237,174, 71, 78,198,229, 92,148, 42,199, 29,221,142,188, 6,165,116,214,205, - 38,226,178,247,121, 88,121,182, 75, 8,183,186, 78,171,238,125,197,138,166, 66,234, 10,125,109,130, 55, 52,164,109,255,222,231, -110,108, 28,246, 53, 80,243, 90,199, 24,251, 82, 2,220,210, 8,108,201,223,199, 64,217, 82,119,233, 6, 24,103, 19,100, 58, 23, -215, 77,213, 57,160,173, 83,247,115,190,172, 71,195,218,108,204,158,132,189,152,156, 96, 53,161,137,220,245,192, 30, 23,103, 36, -204,126,193,111,220,140, 51,122,212,237,232,231,117,116,224,234, 32,170, 72, 65, 99,109,226, 54,234, 71,146, 55,234, 67, 91,193, - 86,145,181,126,233, 6,207,127,234, 86, 4,189,120,143, 18, 67,136, 49,139, 66,146,175,146,161,102,211, 37,245,213,101,139, 30, - 55, 0,145, 9, 7,136,109, 28, 95, 68,204,159, 46,101,241,157,209, 77,147,165,149, 45,176, 29, 31, 38,174,219,228, 1, 24, 6, -204,211, 12,153,103,168,171,222,145, 18,138, 40,104, 30,145,242,128,147,237, 14, 37, 15, 40,101,178, 36,205,221, 45, 28, 41,161, -140, 71,228,196,160,156, 77,184, 10,255, 97,250, 47,198, 62, 99,165,152,237,251, 1,192, 41, 33, 15, 22, 89, 39, 50, 87,191, 28, -197,222,155,204,255,205,137, 45,205,102, 16, 96,158, 33,197, 54, 62, 84,188, 91,135,237, 54,197,103,137,196,201,253,228,210, 20, -125,222,101, 19,168,146,212, 64, 4, 77,230,103, 7, 19, 56,251, 94,190,113,243,236, 34,240,138, 84,139,225, 56,171,193,221,187, -254, 39,147,226, 98, 84,220, 25, 20,178, 97,148,207, 95, 33,239,127,221, 70,226,128, 73, 86,248, 13,128,190, 2, 76,143,237,114, -150,131,117,228,124,102, 23,112,192, 75, 72,218,163,234, 19, 5,236,103,191,156, 86,165,116, 34, 83,110,111, 19,244,139,103,192, - 91, 47, 64,111,255,239, 1,122, 8,220,250, 94, 32, 63, 7,240, 45,128,190, 29, 56,251, 58,208,247,253,215, 72, 95,243,243,184, -243,159,141,216, 62,152,241,224,142,224,225,134,112, 84,170,137, 92, 49, 46,227, 16, 84,105, 39,162,153,151,202,146,193, 71, 92, - 21, 70,227, 39, 91,136, 66,226, 19, 41, 62,128,168,158,209, 4,140,163,160,136, 89,155, 2,153, 26,127,145,138, 5,233, 36, 38, - 36,175, 16,152, 20, 3, 41, 54, 89,145,103,182, 66,240,219,111, 3,207,255,187,230, 10,208, 1, 56,252, 58,240,232,135,160,175, -252, 14,240,210,109,123, 29, 47,246,144,151, 14,144,199, 19, 52,140,202,170,203,116, 20,245,211,119,203,253,242,209,118,233, 87, - 5,216,139,165, 23, 41, 64,194,109, 30,216, 51, 64,137,219,220, 62, 13,192,150, 64, 91, 6,157, 16,240,200, 34, 35,169,227,235, - 71, 81, 73, 36, 94, 44, 82, 45, 62,133, 0, 46,253,104, 48,240,174,173,133,162,200, 84,184, 97, 31,220,119,165,133,250,188,114, - 63,176, 57,108,113,221,191, 35,254,169,163,118, 64, 14, 68, 40,172, 77, 83,161, 84,187, 83,238,118,156,169, 59, 4,199, 89, 48, -122, 81,183,205,246,231,132,218,216,151,161,181, 91,231,149, 15, 62,193,106, 90,246,213, 78,212, 79,226, 57,226,169, 59,196,122, -191,248,188,210, 35,160,219, 7, 43,150,151, 77,191, 46, 96,213,133, 91,148,234,240, 0, 0, 32, 0, 73, 68, 65, 84, 31,153,171, -160,137, 22,250,132,232,152,230, 8, 25,234, 68,129, 61, 9, 49, 44,128,201,171,217,158, 63,111,151,191,165,207,165, 46,128, 90, -220,222, 55,118, 94,106,214,182, 99, 15,250, 92,162,165,127,126, 61,186, 14, 24, 80,234, 70,203, 59,255,217,206,213, 4,109,141, -139,160,109,229,163,215, 3, 61,178,182, 92, 2,114, 90, 94,228,220,119, 91,187,133, 58,188,116,195, 46,233, 68,108,125, 71, 43, -120,253,255, 91, 43,210,129, 38,230,155,123, 39,129, 54,215,132, 86, 44,107, 87, 32,213,167,172,217, 10,171,127,124, 45,144, 83, -186,214,165,175, 59,223,254,178, 79,139, 41,143,143,228,217,194, 65, 4, 97,131, 22,156, 16, 35,167,140,189, 42,138, 76, 94,116, -115,253,160, 55,122,139, 57,169,192,108, 22,213, 18,197,255,117,225,227, 53,135,202,235, 88, 43,225, 1, 90,156,135,246,249,242, -149, 52, 68,193,217, 34, 85, 45,161, 84,176,201, 25,154,179,253, 60,121,192,201,102, 3, 85,193,164,132,253,113,223,212,239,210, -129,100,184,243,123,163,235,226, 65, 14,148, 73, 9, 36,197,147, 40,154,104,160,134,191,248,172,196,160, 49, 25,154, 0,153, 39, -232, 52,161,232, 17,154,146, 81,227,180, 89,112, 36, 9, 56, 9, 4,201,210,215,220,234, 66, 29,175,176,248,131, 69,170, 16,110, - 94, 63,234,248,124, 97, 47, 10,111,225,236,220,236,224,117, 15,217, 42,239,131, 0,156,252,128,216, 50,244,162, 0,247,190, 8, - 60, 51,187,101,109,107,160, 25, 69,227,135,207, 7, 79,109, 59,119,198,228,109,179, 96,233, 33,228,191,230,101,175,234, 21,241, -244,143,150,203, 11, 2,232,130,129, 29, 3,151, 9,120,116, 2,125,124, 0,126,207,223, 0,189,241, 51,192,217,159, 0,134,119, - 24, 36,133,223, 4, 12,127, 30,244, 45, 95, 5,252,228, 79, 97,247,103, 47,240,198,151,102,236,238, 20,220,219, 38, 28, 8, 40, -243,210,165, 96, 9,104,188,176,255,176, 15,226,114, 28,230,188, 76, 7, 51,235,224,242, 1, 10,208, 16, 59, 83, 64, 38, 64,102, -241, 0,132,110, 84,111,177, 56,182, 99,100, 32,177,212,170, 62,145, 98, 96, 27,191, 51, 18,240,108, 6,222,247, 14, 96,251, 94, -123,220,198,223, 1,126,231, 95,129,126,122, 2,246,207, 1,219, 45,128, 9,250,185, 3,228,254,222,166, 64, 91,110, 65,237,125, -203, 23,144,239, 80,229,205,197,160, 52,163,119,233,197, 59,245, 32,251, 30,139,143,239,197,166, 43,228,156, 52,190,101,171,150, -156,157,194,145,129,204,245, 66,239,205, 52, 33, 46,148, 30, 16,210,227,231,147,125, 89,237, 60,193,232,186,247,222,242,214,187, - 8, 4, 43,223,115,167,158,143,253, 98, 86, 11, 92, 49, 7,130, 46, 4, 78,150, 87, 99,250,149,112, 95,134,178, 93,253,210, 45, -165,161, 55,163,181, 81, 81, 92,138, 59, 65, 68, 43,100, 67, 96,227, 79,118, 62,118,189,216,123,114, 94,191,203, 21,173, 65, 26, -220,113,201, 55, 88,166, 0, 78,139,198,139, 58,116, 15, 86,199,177, 94, 83, 12, 23,159,142,104, 71,244, 91,231,104,211,194, 66, -214, 52, 62, 49, 82, 7,173, 70,237,126,193,136,175, 46,106,209,210,141, 82,161,186,140,129,173,107,132,182,142,208,149,152,146, - 87,204,135, 78,146,116,237, 64, 79, 93,238,124,164,177, 21, 31, 81, 71,120,205, 41, 20,183,253,243, 48, 5, 32,199,183, 81,243, - 10,180, 19, 93,238,142, 34,169,205, 68,115, 12, 43, 82, 65, 13,169,189, 24,101,251, 65, 44, 43,161,165,126,137, 75,125,125,161, -235,106, 45, 16, 59,119, 46,173,158, 94, 90, 20,151,214,217,254,127,151,174,164, 75,189,149, 51,180, 94,175,243,189,197,251, 51, -117,133, 78, 95,128, 36, 88,211, 41, 68, 85, 60, 73,106,211, 69, 73, 12, 45,115, 13, 70,169,207,106,112,209, 35, 66,220, 87,194, -179,216,106,111,137,214,165,165, 72,149,174,179, 37,214,203, 3, 17, 69,153, 38,228,141,218, 72,221,197, 20, 5, 5,165, 20,164, -153, 64,121, 3,100,155,182,202, 60,130, 83, 54, 16,216, 52, 34,113,130,228,140,195,126,143,195,229,185,133,105,181, 13, 76,111, - 89,105,221,121,123,184,200,127, 32,179, 17,113,189,208, 19,200, 43,151, 33, 0, 12, 82, 32, 58,131, 99,172,206, 12, 42, 30, 16, -163, 5,202,106, 98,178, 24,135,184, 15, 75,165, 88,133,162,178,176,183, 85, 43,128, 16,180, 20, 15,183, 79,190,119, 12,232,138, -214, 75, 93,138, 66,216, 20,199,179, 42, 54,170,102,103, 80,224, 40, 6, 56, 32, 47, 7,101, 3,232,213, 0,253,236,167, 65,239, -126, 4,224,118, 67, 50,200,149,209,199,202, 8,204,151,192,116,207,163, 62, 47, 0,253,114, 71,197,138,225, 71, 7,110,237, 64, -148,223,179, 64,167,210, 78,126, 88,178, 21, 10, 3,251, 25,196, 19,240, 56, 3,143, 79,161, 95,243, 43,160, 47,255, 83,192,237, -239, 3,182,127, 0, 72,119,157, 96,247,189,160,175,122, 30,250, 87,126, 4,233,135,174,112,231,227, 71, 12, 34,120,176, 83,156, - 15,102, 69, 34, 37, 83,251, 43, 32, 65, 74,243, 90,155,179, 64,103, 79,184,242,198,214, 25, 60,237,225,236,198,248,204, 12,113, -144, 2,147, 32,185, 85, 70,168, 29,118, 34,189,216,203, 58,242,228,226, 26, 37, 32,179, 98, 67,138,129,216,130,125, 52,129,222, -117, 10,126,203, 31,180,176,155,178, 7, 30,254,151,208,127,188, 7,238,125, 25,240, 6, 31, 80,221, 63, 64, 62,123, 5,221,143, - 16,182, 27,135, 6,251,188, 17,183,153, 45, 81, 76, 60,178,203,148,139,253, 58, 22, 96, 20,232, 36, 70,148, 3, 64, 51,217,133, - 63,139,181,193, 19,128,105, 50,159, 58,109,129,244,156,121,214, 6, 1, 78, 0, 26, 60, 57, 80,101,161, 95, 13,209, 79,100, 84, -179,243, 14,138, 24,135,154, 85, 65,137, 48,206,122,227, 1,174,235,173,165,243,224, 75, 47,156,235,109,138, 93, 80, 75, 20, 81, -212,117,204, 49,112, 24,188,165,154,117, 53,218,235,148,223, 68,215, 3, 78,230, 58,248,112,133,118,236, 12,125, 44,220, 46, 68, - 47,109,146,231,179,119, 93,207, 28,157,181,182, 80,145, 96,181,247,227,234,170, 58,167,235, 63, 43, 58,210,157,160, 21,169,113, -121,246,226, 53,185, 14,249, 91,136,146,184,147,101,149, 21, 88,169, 31,157,231, 85, 97,162,171,108,119,238,222,177,132,150, 43, - 94,180,233, 31, 56,236,177,253,165,175, 75,121, 24,173,144,194, 33,234, 26,186, 21, 66, 4, 3,109,124,248, 52,249, 5,127,230, - 29,250, 25,128, 51,127,255,142,218,166, 16, 19, 34, 60,198,143, 27,180,176,156,106, 81,163,102, 11, 3, 53,253, 3,117, 94,252, -121, 81, 72,182, 43, 42,246,204,210,165,178, 21, 93, 94,196,114,205,131,221,245, 52,218, 38,125,210, 77, 51,214,228,114,245,196, -179, 62,222,149, 52, 46,116,189,214,168,243,202,167,142, 85, 40,153,116,108,133, 76,141,237, 15, 23,184,153,147,202,126, 70,113, -120,135,166,140,189, 10,202, 60,219,116, 33, 37,204,254,190, 16,147,173,146, 0, 48, 25,182,124, 38,134,200,100,174, 6,106,226, -214,158,170,184,198,237,106,231,115,215, 14,205, 13, 85, 31,185, 23, 80, 26,144,136, 33, 57,153, 99, 75, 11,166, 2,224,120,192, - 70, 5,105,216, 96, 82,193, 56, 30,204, 77, 35, 70,232,204,195, 6,137, 19,182,155, 77,219,169,115, 61,176,233,154,215,214, 64, -243, 62, 86, 55,181, 84,181,193, 69,224,138, 93,242,212,160, 39, 62, 27, 86, 42,149, 4, 69,185, 11,170, 86,181, 68, 55, 78, 72, -193,138,247,203, 92, 59,245,138,129, 15,108,103, 47,253,195,162, 82,231,158,245,107,121,153,166,110, 3,155, 3, 19,206, 97,225, - 50, 16,198, 56, 43,166, 2,191,136, 60, 77, 40, 15,208,223,126, 13,244,173, 47, 1,155,231,125,215,234, 53,180,122,223, 37,151, -192,213, 4, 61, 20,208,217, 43,192, 89, 1,134, 55,199,163,100,221,245,137, 95, 14,137,237, 73, 59,250,210,243, 40, 45,210,182, -192,236, 88,179, 53,250, 64, 1,253, 86, 2, 30,156, 65,223,115, 31,120,215,143,130,158,253, 57,224,244,251,129,225,157, 0, 15, - 0,190, 3,244,194, 51,160, 31,249, 79,129,255,230, 33, 78, 63, 34, 24,142,123,236,146,224,113,102,204, 81, 99, 83,120, 54, 61, -180, 69, 21, 50,181,195, 45,187,126,143,104, 57, 26, 69, 87,188,133,255,159,147,137,165, 36, 89, 7, 88, 5,116,140,133,119, 37, -113,140, 64,141, 33,192, 76, 78,242, 19,208,176, 1,113, 2,109, 19,248,253, 47, 0,111,248, 22, 59,178, 14,191, 12,124,241,227, -192,195,103, 13,125, 37, 51,240,242, 12,249,212, 99,200,147,189,173,101, 60,198, 75,149,237,179, 67,190, 23, 96, 79,210, 56, 73, -174,129,240,214,102, 47,214,137, 79, 98, 30,117, 87,198,171, 8,104, 44, 13, 17,118, 36,155,186,200,185,105, 33,120,103,199,226, -142,129,147, 12, 26,134,101,228,176,118, 93, 54, 80, 81,190, 91,183,145, 49,181,112, 19, 89, 41,100,200,145,161,177, 87,207,104, -151,120,221,219,173,227, 33,125, 15,162, 98,175,191,114,235,126, 8,141, 98,151, 82,187,160,145, 76,143,169,190, 79,174,239,103, -231,243,142, 9, 65,137,238,147, 90,215,143,106,103,212, 26,158, 18,161, 39, 53, 6, 51, 34,108,163,211, 45,214,249, 0, 90, 71, -126, 85,157, 28,196, 61,106, 7,119,191,179,213,238, 20,174,217,224,157,231, 62,190,247,121, 61,205,236, 33, 60,157,238, 64,226, -251,236, 70,174,172,205,224,220,239,238,235,184, 95,219,115, 64, 43, 53,124,234, 58,109,234,126,134, 56,172, 99,243,148,180, 93, -134,212,173, 88,218,110, 88, 23,197, 84,124,173,141,255,125, 83,247,251,161,130,151,149,223,122, 14,154, 29,217,134,105, 77, 30, -148,142,234, 22, 16,107, 14, 34, 32,181, 96, 23,238,160,213, 82,109,144,122,173, 99,174, 13, 30,209, 66, 23,113,205, 91,127, 77, - 96,119,253,159, 75,245,137,199,179,177, 44,120,150,221, 62, 45,154,200,155,106,191,254, 25,187,169, 19,110,133, 27, 97, 36,197, - 73,133, 41, 89,134, 9, 59, 30,156,138,235,192,216,216,139,133, 25,101, 26, 49,139, 32,147,171,206,115,134, 50, 99, 42, 5, 92, -138,221,119,137, 64,100,165, 70, 93,239,213,103, 9, 43, 13,128,118, 63, 87, 23, 53,215,137, 30,201,167,228,115,153, 49, 29, 15, -200,158, 76,202,238,141, 87, 78, 80,102,140,243,140, 34, 5,105,158, 77,112, 78,108, 22,230,204, 21, 19, 13, 15, 57,203,232, 16, -177, 11, 95, 39,173,153,203,218,240,152,104, 18,255, 42,178, 67, 75, 92, 35,239,152,217, 59,104,142,191,197,133, 7, 20, 10,121, - 47, 18, 44,230,211,195,125, 85,186, 8,184,174,234,241,175, 17,226, 5, 18, 1, 58,175,122,248,220, 65, 14,203, 80, 27,143,216, -197,110,254,105,187,248, 5,123,117,248,129, 51,214, 11, 51,202,150,161,191, 53, 2,231,191, 4, 60,251,181,150,141, 78,228,227, -117, 31,189,207, 7,232, 21, 1,143, 1,189,100, 80,185, 15,220,153,157, 74,150,205,155,126,114,176,203,102, 59, 55,115,236,209, -245,190,165,235,214, 67,133, 50, 2,152, 14,192,158,129,203, 25,116,127, 11,124, 94,172,107,127,219, 15, 0,119,255, 29, 96,247, - 33,179,216,165,127, 2,120,234, 47,129,255,212,159, 6,253,181,251,224, 95, 24,240,236,241, 2, 67, 41,120,156,146, 5, 56, 84, -212,185, 86,145,119,168, 49, 19,181,216,208,165,224, 69,151,229,156,127,143, 73, 60,204,164,120, 33, 18, 15,153,120, 32, 8, 89, - 4,161,104, 27, 80, 68,225,144,161,224,221, 0, 30, 50,104, 47,224,175,221, 2,239,255, 16,176,123,155, 37,167, 61,248, 9,232, - 23, 21,216,238,236,111,125, 52, 67, 62,123,137,242,202, 17, 50,205,174,139, 48, 5,189,169,182,115,149,225, 83,180,167, 91,246, - 16,237,226,221,183,120,151, 94,172, 83,159,172,112, 34,153,129,139,193, 63, 95,108,100,140,177, 0,122,191, 49,176,248,204,200, -116,187,198,188, 12, 17,210, 84,109,126,228,105,108,126,128,179,177,236,139, 18,148,237,175,172,130, 67,255,156,195,167, 77,220, -173, 45,146,179,191,225, 34,186,250,103,227,223,139,132, 43,183,117,198,229,115, 45,192,164,235,154, 74,168,116,213,234,158, 96, - 89, 67,201,133, 92,209, 37,234, 34,196, 98,173,214, 13,187, 28, 51, 48,148, 62,110, 52, 80,181, 13,168, 94,237, 63,180,170,245, -176,204,171, 22,186, 14,221,161, 53,237,173,126,121,186, 6,241,192, 74, 60,183, 24,109,118,182, 64, 90, 29,165,225,222, 17,159, - 52,244,157,182,116,171, 69,172, 88,235,164,109, 28,222, 2,123, 26,245,172,248,235, 90, 22,133,136,253,128, 57, 66,171,220,125, - 64,221,197,222,143,220, 77,100, 70,181,120,161, 14, 41, 60,250,190, 94, 61,242,183, 0, 56,248,229, 58,118,212,189,202, 84,138, - 49,183,195, 95,158,234, 84,232,201,153, 20,199,176, 1,162,165,145,149, 27, 58,109,237,214, 69,253,235, 5,186, 33, 44,101,245, - 62,210, 13,124,245, 5, 9,113,133,122,229, 53,195, 0,221,103,120,169,145, 91,237,166, 91,236,240, 77,133, 69,241, 38,117, 14, - 42, 29, 25,172, 44, 19, 99,224,108,239, 13,145, 37,164,145,193,101,138,223, 5, 33, 12, 79, 76,216, 12,131,199,199,218,250, 52, - 56, 17, 66,134,119,133,136, 7, 38,117,174, 10, 98,183, 90, 99, 5,166, 69,213,173, 45,220, 6,241,108,139, 69,179,218,186, 88, - 77,124, 39,218, 77, 21,128, 82, 20,162, 35,118, 68,216,158,156, 66,136, 48,205, 35,166,105,198, 60, 30,237,240, 73,169,237,212, -171,200,164, 83,186, 47, 72, 97, 17,207, 74, 93,200, 11, 5,217, 45,132, 33,161,108, 12,133,178,120,242,140,214, 72, 81, 21,139, - 8,101, 54, 54,124, 74,185, 70,141,154,202,158,171,240,139,216,170,149,102,174, 66,151, 59,174,208,185,248,126, 4, 32, 45,158, -177,142,234, 39,156, 84,205,202, 38, 90, 5, 56,179,239, 66,138, 63,229,156,128, 9,138,137, 1,253, 93, 64, 63,253,113,208,221, -207,187,119, 58, 74,123, 87, 87,149,163, 33,165,174, 12,219,164, 2,144, 94, 0,119, 94, 4,248, 57,128, 78, 64,187, 43,232,110, -242, 16,237,220,186,246,163,137,247, 80,252, 45,157,165, 43,181, 21, 50,205,160,195, 12, 58,206,160,243, 1,244,210, 41,244, 61, - 87,160,175,251, 81,224, 77,127, 31, 56,249,126, 32,125, 25,192, 95, 13,220,249, 49,208,247,254,135,192, 83, 79,192, 63,115, 23, -119,206,207,177,153, 38, 60, 32,198,101,183,227, 21,105,220,113, 67,235, 19, 56,149,133,127,154,208,129, 25,116,185,231,171,226, - 37,233, 56, 6,221,135, 49,188,153, 22,213, 73,200,201, 14,250,172,130,156, 9,124, 58,128,246, 9,124, 10,208, 31,126, 55,232, -249,239,177, 77,235,254,231,128,151, 62, 5, 92,221,178, 47,118,255, 8,125,188,135,220, 59, 66,198, 9, 74,226, 43,152, 80, 75, -118, 27, 87, 98,208,134,173,112, 58,165,166,206,185,154,235,232, 29,147,216, 26,103,246,196,187, 89,129,139, 2,154,197,190,222, -158,160, 71, 6, 77,151,174, 36,212,198,211,221, 36,208,192,181,253,150,212, 29,198,206, 52, 39,136,211,225,200, 87, 75,142, 46, -136,206, 36,244, 39,126, 99, 30, 21, 72,217, 45,102, 98,240,159, 24,115,135, 95, 55, 87,145, 92,179, 19, 13, 93,240,138,250,215, -168,209, 11,245,242, 51, 22,117,236,140,197,117, 16,209,246, 43,135, 51,166,165,174,113,103, 73,234,121,214,138,118,112,215, 98, - 70,187,213, 87,127, 72,135, 31,219, 9, 93, 27,168,213, 87,126, 64,204, 46, 38,139,144,148,210,217,167,180, 3,183, 96,213,153, -221, 52,150,167,107,102,171, 78,248,212,109,187,214,141,200, 66,105,172, 13,101, 32, 55,136,188,168,175, 87, 86,170,251,212, 77, - 50,218,101,164,238,185,167,174, 30,210, 10, 24,210,110,146, 25,241,197, 65,204, 76,126, 97, 30,187, 75, 46, 20,249, 19,150,185, -238,203, 85,131, 46, 0, 56,232, 46,247, 40, 66, 70,191, 20, 7, 50,100,172,120, 12,240,163,206,243, 31, 49,189,220, 1,129,168, - 31, 25,251,231,202,178,217,245,154, 56,239,245,132,106,215,183,219,184, 1,140,186,116,101, 80, 21, 42,182,152,214,235,255,166, - 94, 95, 99,241,106,194,213,125, 51, 92, 11,102,194, 94, 20, 3,171,195,207, 12,206,161, 72,208,164,216,176, 81, 80, 15,176, 56, - 85,168, 34,229,100,246,235,148,170,195, 59, 51,163, 48,219,120,156,201,154,153, 50,251,122, 46,132,116,104, 73,167, 55,124,207, -235, 19, 55,190,249, 90,172,171, 57,147,200,145,233, 38, 8,247,180, 54,166, 10,100, 19,215, 73,148,253, 21, 52, 37, 76,211,132, -121,158,236,123,131, 77,246, 50, 86, 99,166,122,185, 6,201,205, 71, 88, 28,163,118, 52, 1, 81, 29,108, 57,169, 45, 81, 83, 48, - 88, 68, 67, 83,164,104,153,187,248, 86, 63, 12,105, 65, 40,240, 44,106,235,134, 56, 25,129,142, 52, 50,164,217, 47,150,138,218, -240,139,124,185, 80, 9,197,170,192,192, 15,147, 43, 76, 69, 4, 5,130, 50,199, 14, 52, 4, 48, 30, 54,145,129, 91, 23, 10,254, -123,175,128,190,234, 23,129, 59,111,111, 57,220,234,137,198,243, 4,140,108,179, 48,135, 89,107, 33,227,142,157,221, 7,210,214, - 46,243, 91, 4,220, 98,235,190,175,162,210,114,112,138,175, 7,234, 55,155,162,108, 86, 40,102,232, 56,131,198, 17,180,223,128, - 95,219, 64, 63,191, 5,190,233,239,130,222,253,219,174,142,255, 0,128,119, 2,183,127, 28,244, 93,127, 26,188,125, 0,250,249, -187, 56,185,119,137,231,174,246,216, 64,113,158,147, 77, 40,188,155,216,100, 96, 67,197,222, 15,181, 29,209,226, 41,147,118,240, -193,243,119,152, 29,237,233,127, 79, 79,125,168,200,222,142, 60, 53,184, 61, 49,147, 32, 11,192,155, 12, 26, 18,120, 18,208,191, -250,229,160,175,254, 97,179,144, 29, 62, 15,156,255,117,232, 33,219,160,176,204,208,139, 35,228,229, 3,100, 63, 26,114,177, 75, - 61, 81, 85,208,224,175, 27, 17,184,144,237,216, 79, 96, 52, 57,130,141,218,227, 50, 63, 20,232, 97,130, 30,213,254, 46,144, 5, -209,236, 39, 27,207,159,101, 63,193,213,198,239, 50,218, 62, 93, 11,144,196, 2,250, 78,179,127,210,123,241,168,223,251,174,125, - 84, 53,145, 98,248,127,165,227,164,167, 80, 90, 51,131,148,113,247,132,112, 85, 4,227,108,233,133,161, 70,150,213, 97,217,139, -104, 66,237,108, 69,167,213,149, 57, 89, 45, 24,187,194,226,234,123,235,238,219,206, 81,113,125,241, 76,137,160, 73, 77, 3,170, -173, 59, 87, 63,144, 42, 57,204,219,163,121,117, 57,114, 47, 10,211, 54,221, 73,222, 25, 7,232,131, 60,115, 29, 76,166, 83,244, -203,125, 34, 50,146, 92,119, 41,177, 46,155,132,178,154, 34, 93, 3,193,248, 68,162,223,165,167,149,117,172, 23,168,201,234, 53, -150,149,152,171,223, 11, 75, 55,254,214,206,134,168,238, 43,143,113,122,179,240,217,235,223,127,189, 16,244,197, 20, 4, 98,201, -151, 27,102, 20, 85, 76, 46,170,154,171,213,177, 37,218, 77,190, 21,106,161, 59, 84,139, 12,215,194, 86, 52,113,207,240,143,215, - 40,182, 83,123,109,252,117,192,142,162,128, 27, 61,118,236,111, 10,109, 72,216, 27,227,118, 36,174,166, 18,134,122,232, 76, 11, - 51,145, 27,212,105,175, 55,146,215, 27, 13,104,215,231,234,109,205, 69, 43, 80, 11,181,159,150,218,223, 88, 73,131, 66,184, 41, -167,162, 95,207, 20,143,152,102,181,228,207,156, 24,153, 50,100, 48, 43,219,196, 70, 1, 36, 40, 68, 76,129, 62,164,140, 33,103, - 36,206, 85,171, 52,112, 2, 13, 4, 21,103,194, 3, 75,155, 75,157, 30, 52,188,172,122,209,173,215, 94,147,206,218, 73,237,103, - 21, 81,232, 60, 99,216,236,176,221,109,160,100,186,166,226,150,185, 82,138,163,150, 11, 74,153,129, 34, 86,124,108, 54,200, 57, -163, 20,179,151, 75, 41, 72,239, 56,187,245,231,205,137, 70,117, 55,196,157,242,175,250,255,124,255,192,201, 43,153,110,251, 18, - 72, 77, 78,185,118,116,129, 20,141,249,161,237,204, 75,133,202,176, 87, 73, 86,253,219,238,151,201,202,134, 72,208, 76,253,104, - 40,152,229,180, 34, 45,244, 10, 20,127, 10, 9, 10,214, 82, 59,166, 45, 19, 78, 72,107,215, 31,154,169,129, 20, 39, 25,216, 56, - 54,118, 11, 65,126, 66,224,247, 93, 1,207,124,192,112,175,243,203,192,116, 1, 76,175, 2,151,247, 45, 45,108,111,150, 41,131, - 56,251, 9,153, 21,196,197,151,203,206, 82, 29, 21, 56, 40,104, 22,131,167,140,106,221,122,168,148,180,193,156,181,204,174,204, - 86,232, 52, 3,165, 64,231, 25,116,159, 64,159,219, 1,251, 75, 96,243, 17, 80,250, 37, 35, 80,211,123,129,221,119,129,222,254, - 27,160, 23, 94, 3, 94, 59, 65,158, 18,118,165, 96,152,102, 72, 34,136, 71,160, 14,201,134, 6,213,254,163, 30,134,163,205,191, - 92, 71,128,172,245, 53, 44, 74,152,103,187,220, 69,220, 85,224, 0, 14,142,145, 36, 41,134,164,216,102,181,120,205,164, 24, 50, -131, 79, 18,210, 4,240, 63,117, 6,250, 67,127, 17,216,125, 53,112,252, 93,224,201,143, 2,247, 63, 9,220, 59,181,225,225,213, - 12,125,233, 10,229,222, 1,114, 28,109,100, 94,167, 61, 54,102,167,236,191, 6,251,197,183, 55,192,243, 27,224,118,182, 19,239, - 73, 49, 11,225,161, 0, 87, 5, 58, 10,244, 24, 68, 30,107, 73,185, 48,232, 77, 3,112, 39,219,172,242,153, 2,186,157,129,211, -111,177,144,157,195,111,128, 30,126, 6, 56,156, 24,205,238, 11,151,152, 15, 5, 83,166,214,193,114, 23, 18,231,194,180, 18, 20, - 47, 87,165, 39,127,110,114, 98,156,164,140,247,126,215, 29,188,245,159,187,141, 71, 31, 59,226,226, 74,124,240,160,215,198,152, - 90, 47, 56, 90,248,216,193,109,175, 13,191, 96,226,114, 37,130,237,248,194,230, 67,171, 95,171, 86,138, 92,244, 19,115,206,220, - 92,158,246, 76, 58,148, 36,209,138,128,213,119,233,188,162,153,117, 24, 85, 1, 33,251, 25,188,241,205, 72, 36,142,197,207,153, -253, 87, 20, 62,220,229, 77, 36, 90, 94,146,253,127,207,221, 21, 64,171,253,116,164,128, 13,180, 92, 3,193, 71,220,189,141,236, - 38, 97, 23,110,224,117, 99,177, 79,191,190, 39,174,105,100, 43,213,117, 47,220,170,222,119,120,129,151,216, 38, 24, 43, 27, 95, -241,127, 65,170, 45,140,170,238,162,116,151,156,184,240,173, 39,182, 97,133,211,149,181,109, 14,246, 94,156,144,109,157,142, 17, -216, 76,109, 69,100,188,125,187,224,238,144, 21, 2, 7, 0,247, 69, 13, 9,221,105, 28,150,190, 44,194,186, 63, 88,119,229,181, - 9,164,213, 31, 12,234,168, 79,249, 18, 59,220,103, 61,115,167,133, 35,183,141,220,233,102,123, 27,174,173, 57,184,114, 10,110, - 13, 3,118,219, 29,178,231,161, 19, 51,132,185,146, 9, 55,156,144, 83, 70, 98, 83,199,199, 36, 33,249,142,125,195, 12,164,100, - 97, 42,243,220, 61,164,180,200,230, 96,231,173, 16,249,167,187, 54,164, 55,121, 7,154,126,161, 20,197, 56, 30, 49,143, 71, 72, - 49, 30,200, 52, 77,152,198, 17,243, 52,162,204,118, 47, 4,149, 42, 86, 2,182,202, 78,190,102,208,198,208,168, 25,200, 76,139, - 14,133,152,151,239, 69, 39, 26,130, 54,219,155,104, 71,213,169,135,178,172,126,152,104, 15,156,181, 93,216,159, 86,109, 56, 74, -182, 17, 60, 57,149,137,164, 83,222, 71,118,181,167,190,233,194, 95,133,154,233,220,122,121, 96, 46,138, 35, 3,147,135, 54, 20, -175, 60,149,236,111, 27,103,197, 46,153,176,174,108, 8,250, 8,208, 79,188, 4,122,251,167,129,147,247,251, 9, 58,219,142,189, -192, 78,244,131, 24,130,116, 22,160,116, 25,184,207, 2,116, 58, 88,168,195, 45,182, 29,237, 9, 3, 83, 2,237,109,239,171,179, -223, 2,220,117,234,226,221, 41,164,234,242,136, 10,104, 44,208, 97, 6,149, 1,252,247, 78, 64,159, 28,160, 95,113, 15,248,138, -255, 17,244,182,159, 1,206,254, 36,176,251, 17,224, 27,255,103,208,151,253, 95,192,255, 1,228, 79,220,198,217,189, 43, 12,151, -123,156, 51, 99,220,248,107,210, 89,121,224, 9,111,186, 48, 96,248, 1, 86, 20,196,166,114, 62,198,154, 34,198,129,254,239, 15, -138, 38, 8,226,214,201,108, 54,192, 80, 8,148, 19, 72, 18,232,180,128, 62,244,109,192,201,123,128,249, 8, 28, 63, 6, 92,124, - 2,122,145,129,121, 0, 46,103,232, 75, 23,144,151,246,144,171, 9, 58, 22,155,178,132,128, 41, 62, 92,153,107, 41, 78,204,192, -169,191,174,228,114,224, 41,110, 88, 65,173, 84, 42,145, 67,161, 76, 86,137,239, 61,206,144,220, 31,118,188, 0,202, 19, 96,120, -155,177,231,115,178, 44,159,129,145,134, 45,118,105,194, 33,219, 65, 83, 68, 33,174,193,235,247,195,125, 22,121, 53,173,251, 66, -121,115, 66, 72, 73,113,239, 23, 14,184, 58,159, 49, 36, 3,129, 68, 23,167, 43, 79, 53, 86, 66, 58,248,164,172,248,197, 85,168, - 29,148,138,198,145,175,103, 52, 55,132,175, 58,175,160, 72,159, 85,238,145,172, 3, 97,154, 27,148,166, 66,132, 40, 58,205,134, - 18, 61,160,137,193,208,133, 0,245,240,150, 16,166,205,106,129, 33, 59, 47,200, 51, 3, 91,167,222,157, 1,216,129,112,128,173, - 48,194,167,109, 96, 36,127,250,107,254,128,217, 87,117,181, 84, 79, 93,253, 94, 86, 52,182,109,175,114,167,101, 23,216,194, 75, -150,105, 99, 61, 18,168,116, 23, 97,174,240,160,213,168,191,147, 18,111, 29,226,164, 95,162, 48, 96,191,136, 73, 45, 91, 97,195, - 9,156, 50,174,202,140, 89,154, 8, 78,160, 53, 38, 52,190,207,138, 71,213,165, 34, 29, 30,142,148,180, 17, 97,162,209, 46,184, -206, 89, 23,175,202, 6,178,245, 8,135, 54, 64, 35,205,203,206,210,141,203,125, 39, 0, 47, 43,225,190, 40, 14,210, 94,163,202, -171,232,214, 37,129, 52, 94,160,249,190,132,237,109,209,105,247,184, 91,186,121, 71,175,164, 43,239, 55,117, 97, 74, 54,145,125, - 61, 39, 69,109,166,201,137,134,100,225, 99,179,154, 67,104,203, 38,232, 53, 43, 42,129, 57,161,116,154, 39,230, 54, 78,175,250, - 22,226, 54,117, 86, 1, 51, 53,189,139,116, 19, 51,234, 19, 24,216, 38,202,224,197, 74, 65, 8, 85, 59,130,138,234, 21,136,144, -113, 87,166,169, 85,231, 85, 41,207,157,254,198,218,106, 17, 1,198, 17,188,129,117,236,228, 36,189,107,204,247,106,103,235, 62, -160,126,217,135,106, 29, 30, 59, 9, 87,149, 67,109,127,206, 76,203,203,187,251,230,217, 31,216, 22,186, 82, 64,147, 56,185, 51, - 85, 85,113, 10,200,135,219,212, 82,133, 94, 80,141, 7,213,240, 84,137,161, 58,137,185, 82,137, 52, 14, 30, 17, 76, 80, 92, 78, -132,219,108,161, 34, 86,123,152,114,103,138, 29, 22,187,200, 65,197, 42,225, 79, 78,160, 15,254, 42,176,123,175,117,235,228, 60, -173, 34,246,135,131, 65, 94,212, 58, 68,214,170, 10, 86, 37,208,105,178,147,237,118,182,142,126, 78,160, 67,134, 78,198,129, 86, - 4, 90,212,231,110, 3, 87,181,125, 20, 42, 26,154, 65, 85,208, 36,208,113, 2,141, 3,248,181, 29,232,227, 59,232,215,221, 3, -125,243,127, 1, 60,251, 3, 64,250,215, 65,111,253, 86,224, 95,251, 73,224,111,255, 42,210, 47,158, 98,247,128, 49, 60,217, 99, - 47,130,227, 96,241, 1,145, 36, 43,165, 75, 3, 35,172, 6, 95, 2, 8, 97,238, 18,197, 18,128, 13,123,230,179, 46,211,157, 2, -131, 57, 40,144,102, 5,239, 50,104,147,192, 71, 1,255,145, 51,224,249,127,163,121,249,203, 99, 15,189,219,218,229,250,240,128, -242,187, 7,148, 39, 35,100,154,141, 88,150, 90,129,201, 66, 70,234,181,120, 63,251,223, 39,108,221,246, 46, 53,236,214,104,163, - 23, 45,190, 27, 46, 46,146,235, 25, 51, 83, 49, 61, 68,118, 61,195,165,152,176, 49, 61, 5,240, 41,144, 78,129, 84,128,179, 4, -204, 9,124,220,225,116, 16,204,116,196,145,197,196,159,165,143,254,164,154, 66,215,123, 90, 99,215, 39, 16, 92,237, 11,126,245, -111,158,227,106, 82, 36,167, 43,182,245, 75,187,196,231,213,164, 50,252,228,197, 1, 34, 83,183, 39,148,186,255,165,202, 23, 40, - 62, 63, 86, 23, 6, 17,181,162,109,147,154,254, 84, 73,235, 46, 62,101, 23, 64,106,195, 63,151, 88,187, 69, 86, 0, 19, 82,209, -186,118, 72, 29,161,171,142,174,185, 6, 0,250,190,207,138,210,201,121,222, 17,141,218, 51, 18,102,105, 52, 62,138, 61,161,147, - 49,138,218, 52, 43,185,202, 57, 46,169,238, 14,115,183,141,214, 11,253,196, 11,203,212, 37,187, 69, 36,170,174,224, 35, 88,129, -109,176,126, 93, 97,231,130,118, 66, 52,238,148,219,235,221,109, 15,188,145,222,254,213, 93, 82,197,207,164, 13, 10, 78, 57, 65, -152,113,161, 82, 51,234, 75,183, 31,159,110,240,136, 23,175, 28, 7, 86,231, 4,144,231,149, 47, 39, 16,218,209,221,114, 39,112, -102, 31,181, 55,127,122,179, 25, 26,144,209, 78,128,199, 0, 30,137, 73,134,142,226, 93,179, 94,119, 31,132, 72,186,237,218, 59, -181, 34,186,203,170,187,140, 9, 55, 49,208,123,141, 2, 93,179,197,209,235,208,227,168, 83,239,115,111,181, 93,173,115, 66,188, -150,136,161, 41,225,137, 40,112, 56, 32, 19,176, 29, 54, 22, 38,227,223,179, 20, 19, 33, 13, 62, 81, 41,228,235, 55,215,205,100, -183,191, 77, 90,204, 82,189,246,138,177,137,122,149,100,241,154,217,100,165, 37,192, 47,168,157,220,135, 20,217, 8, 46,132,172, -125, 97,208,239,229, 21, 46, 28,134, 39, 2,186, 78, 71,199,209,176,205,105,176,159,169,230,109,243,242,133, 11,197, 85,140, 17, -226,247,168, 42,184,165,137,234, 20,144, 50, 27,255,189,203,152,165, 34,141,103,221,115,121,136, 22, 35, 66,173,227,122,123,242, -205, 58, 71, 32,157,125,239, 45,245,210,163, 0,237,163,117,161, 65,116,214,142,191, 12, 21,211, 59,169,226, 48, 3,187,141,117, -251, 90, 45, 63,161, 52,140,142,206,171,172, 47, 42,240,228, 69,224,153,209,201,113,212, 44,110,117, 58,160,214,177, 7,237,172, -104, 69,117,105,180, 41,183, 1, 28,179,141,235,111, 3, 60, 22,136, 8,116, 95, 34, 53,160,181, 86, 9,158,181,168,245,235,232, -172, 85, 78,194, 51,108,255, 60, 23,240, 52,129, 63,178,129, 30, 11,232,219,254, 18,240,134, 13, 64,127, 0,120,230,199, 65,223, -253,211,192,237,159, 66,250,153, 29,240,244,128,147,151, 47,145, 14,214,113,206,153,106, 81, 67, 43,236, 71, 5,173, 36, 50,120, - 30, 90, 46,111, 13,236, 33,243,216, 75,119, 88,102,242,241, 62, 41, 82,102,208,105, 6, 31, 51,248, 61, 71,224, 67,223, 15,228, -175, 52,111,255,229,255, 9,156,255, 44,244, 0,211, 37,220, 63, 66, 62,117, 9,121,184, 71, 57,142,152,146, 39,207, 45,173,225, -118, 33, 39,139, 67, 5, 49,104,151,128, 51,239,220,143,197,230,225,174,114,199, 44, 38, 72, 60,106,139,117, 10, 68, 64, 81,224, - 56,251,114, 26,192, 3, 1,142, 71,160, 60, 2,232,237, 22,178,147, 29, 74,243, 85, 39,192,191,245,118,240,167,239, 99,251,159, -124,194,243,227,169,142, 78, 85,177, 82, 88, 59, 50, 65,188,147,245,207,156,206,197,222,189,100,212,172, 34, 29, 54,181,239,164, - 56,232,111,232,236, 58, 85, 14,103,124,117,242,194, 90,116,201, 49,247,131,185, 56, 76, 38,147,197,154,194,191,159, 57, 14,186, -108, 53,203,132,182,122, 73, 41, 46, 62,203,147,214, 16, 68,170,237, 27, 55,162,216,184, 82,126,138,105, 12,145,241,220,181,165, -198,193, 57,244,113,209,141, 93, 52,105,246, 17,173,248,165,155,188,179,179,177, 61,213, 75, 43,220,134,228, 65, 41,113,225,103, -159, 2,206,157, 24, 45, 70,171,201,187,205, 74,110,163,200,124,167, 69, 31, 94,133,190,218, 18, 15,165,187,170,116,161,252,182, -175, 61,119,226, 58,116,196,186,155,118,201,165,147, 69, 69, 63, 45,218,164,205,177,203, 47,162,216,161, 96, 67,140, 45, 19,198, -210,237,238,129,197,174,188,215, 13,100, 10, 20,113, 23,204, 66,228,193, 40,246,153, 60,174,246,236, 92, 73, 27,214,165, 87, 21, -187,251,244,137, 76,220,184,245,253,254, 61, 0,143,197,222,215,176, 72,233, 10,125,218,226,111,123,156,146, 94,123, 69,214, 94, -236,165, 5,143, 32, 43, 69, 36,117, 83,162, 40, 24,230,110, 31,157,110,208, 65,244, 19,174, 30, 97,219,131,106, 42, 85,142, 13, - 9, 59, 22,243,229, 18, 49,212,183,112, 19,137,157,119, 78, 44, 45, 12,104, 17, 91, 31,167,132, 6,149, 51,252,185,138, 63,211, - 74, 38,248,166,150, 92,170, 20,205,218,242, 98, 7, 39,168,175,152,209, 9, 97,117, 33,216, 20, 40,241,170,168,161,102,253,236, - 65,107, 61,140, 34,138, 18,181,142, 93,147, 70,167, 78,139,252,103, 68,230,108,163,228,181,157, 29, 4,162, 2, 71,204, 88,231, -169, 49, 14, 47,208,194, 43,197,163, 46,146,226,137,227,239,215,142,182,228, 46, 79,223,183,131,217,133,121, 12, 85, 6,102, 15, -159, 23, 75, 94, 35, 54,123, 0, 81,251,112,136, 95,142, 42, 98,112,155,216, 59,168, 98, 6,225,232, 19,243, 74,165,242,177,102, -137, 20, 41, 34, 80,178, 75, 77,207, 1,189,184, 15,210, 3,144,159,182,116,181,254, 21,157,252, 66,159, 66, 53, 86,154,148, 56, - 24,156,119,178,117,235, 79, 39, 83,225,137, 2, 99, 6, 29, 4,196,147, 21, 16,197, 31,138,136,101,202,214,150, 69, 54,175,138, -212,215,173, 76, 0,207,130,114, 44,208, 91, 5,186,153,145, 62,126, 6,189, 53, 1,191,255, 39, 65,249,205,192,240, 53,192,233, -247,129,190,253,105, 40,127, 24,233,111,109,129,183,222,193,246, 11, 15,129,125,193,145, 24, 19, 45, 33, 9,220, 89,127,168,243, - 9,101,138,247,169,117, 17,234, 36,147,250, 96,137, 54, 81, 24, 0,222, 37, 32, 37,240,197, 30,244, 47,191, 7,184,251,199,128, -249, 33,112,254, 55,128,139, 95, 2,174, 30, 0,151, 59,224,209, 12,125,105,143,114,239, 10,229,106,196, 68,132,105,110,121, 66, -236, 12,159, 96,233, 19,179, 49,232,111, 39,224, 78, 2,110,123, 59, 95,196, 39, 33, 98, 58,132,105,134, 28,102,219,119, 85, 75, - 12,129,166,226,197,140, 27,122, 54, 0, 94, 81,232,227,115,208,151,125, 30,192, 55,154,123, 33,121, 5,240,252,206,190,137, 95, - 59,183,207, 91,118, 4,172,239,252,168,223, 49,118,227,207,208,153,132, 91,192, 14, 92, 66,210, 54, 38,212,174,139,169,123,113, -189,174, 38,170, 99, 58, 24,208,134, 92,187, 17,164,184, 56,164,181,223, 62,101,199,245,106,119,169,244,107,130,232,102,195,137, -226, 58,129, 8,129, 89, 36,177, 69,225, 70,118, 49,195, 47, 68,113,200, 76, 47,156,210,213,161, 10, 63,160,143, 65,112, 80, 11, -195,200,220, 44, 86,210,237,140,103,255,251,185,139, 17,206,104,148,154, 68,140,172, 10, 33,131, 70, 73,116,159,164,139,196,178, -133,137,163,107,197,121,117, 25,243, 77, 10,124, 93, 93, 77,206,218, 31,195, 3,238,132,188,224, 75,197,198, 71, 23, 69, 30, 85, -164,104,115, 1,117,150, 69,119,227, 36, 54,158,254, 38,153, 13, 50,148,241,218,169,182, 5,205,126,154,213,116, 63, 3,181,131, - 62,121, 69, 56,249,170, 98,175, 77, 80,135,174, 91, 23,255,172,156,116,175, 83,234,126, 29, 84,241,138, 90,150,249,236,159,239, -242, 37, 72,114,180,250,255, 92, 87, 64, 90,145,187, 75, 32, 12, 93,227, 42,210, 13, 4, 57,138, 41,172, 51, 25, 88, 90, 48,205, -154, 98,136,133,112,146,170, 51, 69,187, 9, 75,205, 68,247,206,160,248,116,119, 67, 6,160,217, 36,127,117, 37,238, 2, 53,108, -249,236, 78,174,148,157, 24,105,234,243,136,150,102,192, 8,110,241, 13,106,203,136, 18,110, 31, 62,237,155, 94,152, 98,158, 97, -147, 96,136,214,134, 86,107, 84, 48, 45, 8, 5,181,163,119, 97,185,174, 38, 16,132,229, 33, 84, 73,170,101, 70, 14,127, 57,199, - 24,165,219,129,215, 15, 72,120,196,131,105,236,151, 57, 85,108,171,137,229,200, 2,210,155,194, 39,150,248, 98,241,167, 97,205, - 73,220,213,189,106, 2,182,228,251, 67, 21, 63,196,216, 92,125,154,146,231,167,219, 97,164, 14,174, 97,136,135,191, 16,138, 6, - 73,141, 42,234,140,176, 4, 83, 76,210,236, 18, 61,157, 74,252,110,158,196,246,200, 56,245,147,236,225,104, 52,185,205,155,129, -237,155,129,139, 19, 16, 43,180, 26, 90, 75,179,168, 93,145, 43,180, 99,166,234, 18,210, 51, 54, 21,252, 27,146,123,168, 7,208, - 85, 1,149, 12, 61,204, 45, 98,169,151, 41,160, 59, 41, 82,167,255, 35, 7,232,140, 5,170, 71,232,169, 2,233, 18,252,177, 83, -208, 83,247,129,175,255, 49,128,254,156,193,106,182,127, 24,244,251,175,160,227,143, 35,253,194, 14,120,219, 83,216,188,120, 1, -156,143,192,174,225,211,235, 67,230,151, 53,137, 85,172,236, 7,188,118,163, 51,168,235, 17,164, 13, 23,200,249, 58, 25, 64, 26, - 8, 56, 77,224,251, 10,250, 32, 3, 95,254,239, 89,197,180,255,187,192,254, 87,128,195, 5,244, 49,123,164,234, 8,185,191,135, - 92,142,214,104,231,214,237,176, 15, 48, 34,104,134,114,140, 90, 13, 96,131, 59,185, 37, 98, 60,113,182,193,100, 23,187,204,102, - 99, 67, 20,110,226,104, 7,245,145,213,222, 85, 93, 91, 0,123, 2, 46,142,246, 30, 3, 54,126,247, 21, 16,254,223,199,192, 95, -254, 60,228,165, 39, 24,183,179,219,219,155, 88, 16,171,195,113,132,253,189,235,240,145, 69,103,161,122,109,229,184,228, 23, 70, -255, 0, 0, 32, 0, 73, 68, 65, 84,210, 28, 53,188,174, 31,198,228, 2,178,226,133,142,189,230, 14,165,209,230,129, 71,231,135, -166, 4, 80,105, 94,247,232, 32,147,182, 61,229, 28,180,176, 32, 14,122, 92,113,158, 61, 63,158, 9,217,255,174, 65, 98,251, 65, -152,252, 48, 18,215, 85,136,175, 14, 68,151,235,129,120,125, 6,247, 69, 31, 0,100, 31, 53,199,222,177,231,160,199, 81, 48,107, - 20, 29,230,168, 40,220,104,135,117,127,219, 11,166,186,101,108,251,175,122,163,176,109,209,119,174,186, 59,186,246,158,208, 2, - 64,147,212,125,251, 78,118, 75, 4,236,153,141,119,209, 29,208,241, 51,196,212,177, 21,129, 90, 31,117, 19, 85,218,243,181,117, -197,251, 33, 50, 4, 86,176, 81,238,148,253, 67, 39, 28,142, 93,252, 12,155,202,140,221,239, 45, 94,255,174, 74,233,245, 15, 17, -166,243, 68,129,123,170,216,135, 26,223, 63,163,250, 58, 54, 53, 90,119,228, 43, 47,217,235,241,216, 35,224, 72, 87,234,131,182, -250, 37, 95,195,104,189,180,248, 6,193,223,250,217,161,170, 47,137,142, 61,168,111, 29,220,217,255,160, 72, 8,112, 25, 74,102, - 81, 99,255, 84,132, 29, 59, 98, 45,227,162, 79,196, 78, 61,181,215,121,158,205,118,150,114,118,203,108,105,239,189,195, 96,140, -131, 86, 58, 27,101,148, 58,220, 10, 29,234,167, 26, 95,130, 60, 25, 84,108,238, 45, 98, 90,227,150, 65,214,120,139,118, 43, 48, -181, 34,176, 62,240,203, 49, 75, 83, 55, 50, 47, 9, 75,236, 8,215, 16, 77, 84,146, 88,236,193, 61,110,149, 72, 91,167, 47,221, -222,163, 26,168,169,250, 37,169,250,209,109, 52,204,148,192,100,161,239,148, 76, 17, 15, 9,207,180,174, 34,248, 26, 25,169,207, -170, 69,103,221,241,115, 31, 91,238, 42,156, 48,245,147,217,220,230, 42,178, 74,192,227,189,237,129,177, 3, 54, 47, 0,155,167, -236,132, 67, 19, 66, 97,114,218, 72,113, 83,143,120,185, 28, 49,105, 57, 3,167, 25,184,179,113, 44, 20,128,125, 2, 29,179, 41, -226,103,105,158, 27, 88,187,107,232,248,118, 4, 41,122, 97,150,161,111,249, 80,204, 51,239,115,242,244,247, 79,161,233,211,160, -175,253,207,129,179, 31, 0,182,239, 3, 78,190, 7,244, 29,167, 80,124, 24,233, 23, 6,224, 45,183,176,249, 60,192, 87, 35,166, -220,235, 8,204,134, 36, 21,233,168, 93, 74, 19, 53,208, 3,199,235,140,154,154, 22, 67,137, 4, 69,218, 24, 14,152,166, 25,244, -237,111, 5,242, 55, 2,227,139,192,213,175, 3,101, 52,100,235, 67, 6, 30, 78,208,251, 7,200,131, 3,230,253,140, 9,240,238, -171,225, 76,107, 81,182,105,196, 54,218, 50,232,204, 69,114, 57, 59,231,125,110,239, 65,180, 78,208, 74, 44,212,248,240,219,220, - 23,122, 33,160,113, 2,182, 27,203, 38, 56,122,229, 16,175,127, 41, 64,154, 1, 18,232,217,140,233,214,132,227,209, 68,114,234, -124,115,197, 82,253, 61,105,111,172,209,107,192,137,133,249,121, 65,205, 90, 30,157,212, 61,124,210,205, 24,109,108,109,159,175, -112, 46,148,234, 71,215,182,183,243,216,202, 48, 29, 7,121,203, 3,139, 45, 97,206,215, 86, 97,227,108, 59,118,170,149,212,160, -190,223,238,242,190,217,119,212,129, 9, 21, 34, 47,114,122,149,247, 50,168,102,205,110, 23,109,160,163,222, 11,158,252,210, 22, -183,232,137,175, 32,102,255,253,224,207,199, 8,223,128, 86,228,151,152,214,157,125, 43,212, 59,122, 93,255,234,170, 46,198,227, - 1,128, 41,175,115,129,101,183,106,134, 90,127,232,214, 81,170,234, 4, 55, 67, 77, 79, 98,235,149,126, 28,221, 94,143,126, 88, -221, 10, 60,248, 56,253,212,191,255,201, 73, 81,125,144, 79,138, 98, 32,240,172, 85,248,101,133,210, 92, 37,198,126, 33,119,219, - 59, 10,173, 6, 26,195, 96,246, 63,187, 7,240, 80,129, 71,218,255,189,215, 89,239,132,215,191,224, 95,239,207,172,135,241,180, - 50,183,105,231,247,167,170,181,160,234,143, 15,189, 17,223,112,153,247,205,102,234,247,240,125,113,135, 6,250,169,236, 20,159, - 42, 82, 88,118, 65, 22, 96,196, 98, 16, 26, 0, 27, 7,208,204,197,226,189,133,138,219,160,129, 73, 4,179,122,196,170, 79,145, -173, 91,215, 58,245,181,123, 55, 1,172, 16,245,130,129,185,174,107,105,245,106, 69,209,135,222,214, 74, 84,109,214, 93,181,224, - 32,169, 30, 55,188, 68,254, 80,247,185, 38, 32,216,239, 90, 35, 79,227, 33,173,118, 3,114, 74, 82, 8,229, 86,102,156,228, 25, -174,232,222, 68, 20, 11,207,224,148,186, 93, 45,183,144, 16,138, 78,159, 91, 64,188,143, 22, 73, 45, 93, 75,217, 98,228, 56,101, - 59,164,217,105, 63,153,189,244, 22, 55,233,115, 87,241,105,203, 94,215,235, 21,228,236, 42,217, 56,100, 40,246,122,234, 90,171, -248, 36,109, 9,250,234, 37, 80,206,253, 82,120, 14,216,189, 27,216,254,127,192,110,182, 11, 59,212, 92, 97,107, 67,129,102,155, - 72,224,145,119,252,187, 64, 59,145,249,163,239, 20,224, 50,217, 5,181, 79,166,138,244,184, 88, 83,110,251, 46,254, 40, 77,197, - 92, 71, 46,237, 48,228,108, 16,159,116, 57, 3,229, 18,152,128,244,183, 78,160,227, 75,160,247,127, 24,184,243, 39,128,221, 7, -129,147,127, 30,244, 29, 27,104,249, 97,164,255,103, 11,188,229, 20,244, 26,128,199,118, 61,149,193,119,205,125, 37, 77, 77,196, - 13,182,175,197,196, 38,126,202, 90,197, 85, 82, 98,114,227, 93,227,134, 65,143, 1,122,129,128,183,189,207,110,187,253,111, 2, -211,139,208,195, 99,224, 66,172,179,190,152,161, 15, 14, 40,231, 35, 38, 17, 28, 19, 87,142,188, 82,168, 76,131, 80,152,252,251, -240,185,236, 54,128, 51, 98,251,241,209,198, 44,122,112,214,251,140,234,115, 15, 33,165,198, 84,104,240, 41,206,229, 12,236, 12, -198,105,159,177, 55,250,233, 62,185,248,209,170, 92,161, 25,101,158,172,242,166,138,241,175,106,221,224, 88,151,197, 1,214,230, -241, 13,230, 97, 2,190, 27,189, 81, 55,128, 51, 8,180,216,199,153, 24,145,205,123, 76, 75, 13,109,196,103, 82,143, 94,101,191, - 68, 74, 99,100,115, 87, 38,146,155,189, 19, 90, 87,102,202,117, 66, 97, 31, 13,250,205, 82,164,185, 34,184,227,120, 7,195, 98, - 16,131,147,192, 71,211,165,235, 24,215, 7,126,245,197, 67, 59,150,120,235,178,226,128, 86,106, 69,122, 4,174,204,157,143, 89, -253, 57,239, 3,137, 34,140,101,115, 67,142,125, 37,238,173, 73,115,218, 46,236,254,222,231, 78,212, 23, 93,114,252, 57,162,150, - 95,111,235, 10, 83, 26, 23,166, 26,121,203, 93,199, 40, 55, 20, 55,138,158, 30, 71,216,185, 82,241,138,129, 25,140,209, 95,127, -170,226, 65,155,112,136,119,246, 45, 85,147,106,145, 39,157,215,190, 63,161,171,162, 62, 34, 80,253,159, 93,194,114,218,195,142, -217, 7, 8, 9,214,162,205,155,193, 50,116,173,111,199,151,180,151,181,255,161, 11, 61, 73,205,102, 15, 61,148, 59,107, 4,215, -227, 94,105,229, 56, 33, 90,105, 33,186,162, 58,194, 91, 90,120,146,214, 0,170, 40, 52, 98,180, 45,201, 62, 37,165,204,254, 76, - 16,198, 34,152,167, 17, 74, 84, 1, 63, 80,159, 56,167,100,141,166,154,151, 92, 35,124,140, 93,127, 70,221, 78,202, 71,108, 53, -208,139,121,241, 26,104, 47,213, 15, 26, 97, 21, 19,117,233,134,212, 86, 69, 11,240,167, 58, 88,170,211,166,229,240, 46,199, 87, - 73,213,103,167,254,159,173, 51,177,228,170,230, 79,175, 94,244,240,165,219,156, 3,234,163, 13, 94,236, 8,219,135, 85,212,246, - 39, 49,214,215, 58,191,243, 31, 68, 92, 62, 11,216,168, 35,101, 19,220,185,255, 79,184,249,187,235,115,170,237, 0, 66,135, 17, -228, 10,152, 33,204,162, 30, 17, 75,208, 98, 30,107,174, 74, 99, 69,137, 52,181, 93, 6, 94, 62,130,246,159, 5,110,253,147,150, -159,190,251, 10,224,244, 14,112,242,170,207,133,219,108, 95, 75, 76, 33,164,138, 37,232, 53,106,151,250,157,108,145, 65,183,217, -124,238,167, 9, 56, 20, 80, 33,232,145,150, 80,106,114,245,207,212,118,117, 90,137,101,214,165, 20,239,188, 84, 10,112,225,162, -187,164, 72,191,116, 10,197, 67,208,215,255,101,227,153, 15,223, 0,108,190, 19,244,161,223,134,158,255,239,224, 95,219, 0, 47, - 40,114, 1,112, 57, 90, 44, 45, 58,225,106, 66, 85,200, 27,205, 34, 16,190,246,189,133,186,184, 72, 4, 62,152,243, 32,101,247, - 15,159, 43,232,143,156, 0,219,119, 1,135, 87,129,253, 47, 2,135,207, 0, 15, 20,184,175,192,197, 4,125,124, 68,121,120, 68, -185,156,113,100,178,176,130,154, 2,232, 81,150,108, 54,147,214, 78,145, 81,222,110, 51, 48, 12,118,195,158,187, 64, 78, 44,200, - 69,103,255, 85,252, 1,146,149, 1,124,240, 35,100, 15,187,216, 15,197, 57,160,113,242, 91,149,173, 83,105, 34, 59, 47,182, 52, - 19,102, 49,247,128,176, 29,144,202,192, 60, 95,199, 37,172,113,169,212,237,176, 67,173, 91,104,181,119,212,235,104,179,122, 96, -121,117,144, 83, 51, 89,244, 24,214,216, 59, 6, 52, 8,157, 64,201,146,216, 90,119, 25,206, 5, 74,181, 46, 94,170,144,137,161, - 89,236,115,233, 44, 5,245,228,185, 74,189,227,118,123,115, 38,112, 49, 81,224, 20, 24, 82, 93,130, 88, 24,138,169,187,176, 43, - 69, 43,114, 26,170, 56,110, 89, 32,233, 13,157, 31,176,236,202,121,213,189, 17,154, 7, 92,213,133, 75,234,144, 36,146,250, 81, -136,203, 55,225, 6,198,187, 23, 65, 76, 75,202, 98,241,169, 76,234,136,126,161,141,141,215,165, 72, 28,200, 13,163,219,176,180, -198, 32, 79,186, 84,183, 39, 38,220,242, 29,242, 35,109,221,218,164,150,133,174, 62, 37, 8, 81, 96,181,175, 81,123,189,162,219, -157,189, 64, 80, 16, 70, 63, 91, 83,119, 21,132, 93,242,216,197,160,214, 60,249,174,104, 91, 20,138,175,211,161,235, 13, 94,127, -220,208,233,211,181, 97,187, 94,143, 26, 14,212,184,234,245,231,103, 69,252,187,105,100, 93,187,122, 63,147,215, 95, 87,187, 48, - 45, 84,189,137, 88,130,104,232, 82, 72,234,180, 3,228,224, 53,191, 92,179,163, 98,197,157, 95, 44,230,111, 87,103, 6,216,103, - 89, 22, 47, 70,124,190,169,118,156,188,180,223,233, 53,174,174,255,252, 22,235,170,244,250,133, 82,235,202,169, 90,161, 67,107, - 65,213,170,232, 24,215,228,151,120,186,198,120,215,106,172,143,202, 32,229,228, 99,135, 14, 66,227,112,139,154,214, 85,230,110, - 71,175,149,248, 73, 53,161,200,235, 53,181, 3,147,108, 25,224, 86,161, 25, 50,155, 23, 39,229,236,140,173,226,233, 98,102,123, - 9, 4,106,132, 99, 48,181, 55,172,127,225,194,234,102,135,154, 98, 96,211, 0,212, 45,128,218, 3, 95,216,158, 92, 58, 77,192, -200,208,251,191, 9,122,174, 0,186, 1,134, 23,140, 91,126,251,229, 70,114,153,220, 62, 87,164, 58,248, 56,249, 71,236,156,128, -151,124,129,149,217,189, 35,100,161, 33, 91, 6,109,200,172,110,147, 88,106, 27,100,233,163,153, 1, 34,113,162, 30,170,152, 39, -224, 12,147, 43, 90,139, 0,155,253,209,194, 86,102, 65,250,133, 91,208,227, 35,208, 55,252, 48,112,247,219, 0,254, 67, 64,254, - 46,208,135,126, 21,184,255, 34,248,213, 13,228,169, 17,188, 7,134,163,162,108, 60,132, 34,160, 38,131, 5,210,105,169,128,106, -228, 29, 97,251,149, 59, 28,239, 77, 56,124, 97, 90,104, 2,205,172, 64,254,186,101,224,221,103, 64,121, 14,152, 62, 9, 28, 62, - 1,125,181, 0, 15, 8,120, 92,160,143, 39,200,171, 87, 40, 15,143,166, 51,164,198,170,103,136, 11,198,188, 0, 36, 11,113,161, - 68,224, 76,118,161,223,102, 32,139,181, 26, 71,231,188,239,197, 46,115, 9,230,123,105, 40, 94,238,144,199,148,236,247,231, 98, - 28,121, 36,128,199, 46, 89, 36,162,115, 93, 13,229,102,107,114, 70,168,248,231, 99,227,197,246, 88, 86,251,207, 21, 91, 35, 45, - 84,209,173,189,144,110,151, 86, 15,172,132,101,128,117, 20,210, 97, 91,235, 97, 76,113, 33,178,143,154, 67, 13,223,157,128, 86, - 7,233,226, 84, 84,223,191, 65,154, 46,130,250,175,231,207,143,106,194, 20, 11,224, 4,179,180,117,231, 0,119, 17,166,129, 27, - 29,224,184,104, 44,233,120,212, 93,192,189, 99, 32, 14,244, 41, 70,240,145, 59, 79,215, 47,134,168,245,103, 89,238, 80,231,238, -114, 56,106,203, 7,143, 93,115,133,163,116, 59,199,212,177, 0, 66,246,146,180,159,128,180, 81,119,175,157,239, 83,191,234,100, - 35,132,166,161, 27,242, 3,211,234, 73,170,230,101,238, 24,230,179, 3,127,224,227,114,192,206, 74, 86,197,142,128, 19, 53,113, -225, 72,228,197,128,113,235, 51, 20,165,203,160, 47,129, 10, 69,248,182, 9, 59,163,122,184,189, 45,240,195, 84,115, 51,162,144, -236,127,159,171, 96,177,195,151,214,158,183,157,249,170, 95,202,106,246,165,187,116, 93,119,248,215, 19, 90, 42, 91, 93,181,125, -237,228, 94,110, 93,105, 38,234, 46, 61, 46,103,194,194,129,181, 96, 5, 4,218, 92,122, 24, 81,151,200, 39,237, 25, 13,103, 74, -157, 70,145,193,209,214, 69,138,101,142, 21, 16, 89, 50, 41,177,180,221,183, 83, 47,137,150,133,235,178,217,108,254,121,186, 9, -162,235,119, 48, 92, 92, 87, 95,199,170,121,107,163,122,187,234,186, 72,111,255, 90, 57,178,203,147, 87,167,138,181,120,199,241, -156,107,178, 91,221,230,184, 80,142, 9,156,125,156, 94,189,184,113, 97,248, 91, 85, 12,255, 74,145, 58,133,142,235, 30, 94,246, -154,194, 6,191, 44, 45, 83,136,216, 70, 30, 80,177,177, 7, 90,162, 91, 36,224,196, 36, 96,157,207, 87,247,138, 94,161, 14,209, - 53,177,118,234, 68,135, 98,136, 34,179,128,230, 12,124,246,147,192,187, 30, 0,252,188,197,160,238,190, 26,116,251,163,208, 77, -105, 39,175,103,202,235,104,136, 81,241,253,138,238,253,199,126,149, 13,233,116, 55,217,105,114,151,129,243, 12,202, 51,148, 11, -104,199,160,131, 93,236,117, 27, 68,189,242, 81, 59,179,107,219,213, 73,176,198, 61, 88,101,115, 60, 2, 15, 11,100,156,145,127, -254, 22,240,202, 30,120,255,255, 13,122,203, 63,180, 81,252,237,111, 6, 62,248,179,160,255,229, 33,210,110, 7,188, 65,128,135, - 19,184, 20,168,159, 60, 82,108, 2, 80, 52, 68, 87,118,136, 83, 1,240, 96,194,197,171, 51,246,179,214, 92,241, 29,155, 6,128, - 78, 9,116,197,160,223,123, 10,122,211,115, 64,153,129,227,223,129,190,118, 1,124, 97, 11, 60, 60, 2,143, 39,219,163,191,188, -199,248,100,196, 33, 51,142,165,211,123, 6,175, 94,235, 56,192,192,235,202,160, 77, 2,221,202,198,123, 87, 24,231,125,223,161, - 97, 39,133, 30, 20,178,159,161, 71,159, 92, 12,238,107, 47, 0,111, 24,180,181,255,110,144,108,182, 89, 38,147,125,190,212,175, -153,228, 33,204, 27, 24,193,142, 24, 12, 27,201, 77,197, 95, 11,183,252,181,209, 52,215, 49,109, 85,179,251,134,136, 74, 11, 71, -146, 14,206, 17, 54,152,224,110,107, 99, 57,213,200,207,184,208,213,112,244,214, 33,122, 93, 34,253,254,218, 5, 70, 77, 60,230, -138,245,210, 35, 99,125,231, 22, 30,250,200,206, 22, 93,100,141,199, 62, 47,226, 63,213,191, 86, 78,230, 79, 19,135, 66,145,235, - 40,138,134,168, 79,107,177, 82,191,218, 42,121,142,125, 42, 35,157, 91,101, 88,236,223,181,139,221, 92,238, 96, 85,232, 90,135, - 24,245,200,216,133,213,100,162,150, 72,215,253, 26,252, 57, 65,135,130,221,186,143, 62, 0, 71,225, 34,152, 98,255,172, 75,197, -117, 79,145,107, 99,234,200, 97,111,183, 75, 80,242,138, 87, 77,228,137,145,165, 27, 19,251,233, 85, 35,107, 99,228,127,215,139, -151,135, 98,255,174,185, 4, 4, 7,109,154,218, 40,238,234, 20,175,131,199, 8,140, 96, 93,188, 5,210, 5, 8,199,125,237, 74, -216,185, 56,175, 26,129,253, 80, 9, 20,114,209,155,179,210,251,223,227, 27, 58,243,215,219,127,119,181,227,226, 47,109, 84, 66, - 93, 68,223, 74,115,100,131,169, 81,230,250, 32, 35,189, 1,108,163,171,194,154,233,186, 48,175, 77,103,216,255,191, 96,170,249, - 36, 49,225,113,142,191, 68, 81,214,126, 26,209, 2, 42, 38,236,206, 41,119,107,170, 46,106, 55,180, 72,221,228, 64, 87,118,221, -197, 40,189,183,151,241, 42,238,208,149,114,150,235, 66, 45, 33, 49,214, 73,125, 94,124,104, 53,226,133,163,107,240,186, 62,102, - 18, 21, 71,151, 22,194, 54, 50,100, 44,115,243, 47,182,214,203,109,106, 84, 95, 48,174, 23,184,184,247,189, 75,237,241,194, 2, -157,168,164,150, 86, 53,196, 55,217,158,149, 77, 20,164,197,222,148, 89, 5,204,169,218,178,156, 33,212, 69,225,105,221,141,204, - 98, 37,123,124,128,171, 29, 95, 60,221, 74, 92,128,117,107, 7,252,206, 19,224,240, 41,224,244,121,251, 40,108,222, 9,108,111, - 1,219,243,142,105, 79,208,217,119,227, 14,233, 22,144,169,182, 47,103,208,189, 88,160, 13,192,217,198,160, 41,103, 0,206, 25, -116, 72,141, 55,234,185,145, 90, 74,135,124,212, 5, 70, 84,187,241, 81,104,162, 10,128, 34,100, 98,191,177, 96, 83,174, 0,153, -145,254,193, 41,232,119,183,192,251, 30, 2,239,249, 89,208,155,222, 14,122,231,155,161,223, 86,192,127,251, 2,120, 14,192,238, - 0,121, 56, 65,142,179, 63,165,234,182,111,155, 98,176, 40,230, 4, 28,175, 20,227,163,201,124,181,126,184,108, 7,155, 36,164, -228,134,196,153, 65,239,223, 0,195, 91,140,210,118,249,162, 9,227,206,103,224,201,136,242,218, 30,229,229, 61,166,251, 19,206, -137,219,223,165, 38,118,138,181,115,188,221,217,127, 88, 74, 0,221, 74,192, 29,159,118,204, 98, 43,135,163,216,216,125,180,238, - 92,199,201,225, 64,102, 95, 35, 1, 56,101,228,103,119,224,119,238, 32,159, 57,122, 96,183,199,178,130, 12, 64, 51,189,232,175, -240, 96,183,102, 78, 86,245,109,168,222,212,226, 39, 68,114,175, 88, 47,142, 99,191,128,235, 33,195, 90,179,234,235, 46,122, 33, - 62,181, 98, 41,245, 9, 93,171,118,128,169,169,176, 77, 32,166,216,116, 11,217,234, 20,224,128,129,116,118, 50,191,108,213, 11, - 66,113, 74, 96, 5,135,112,219,163, 22,174,102,145,197,197,198, 93, 33, 18, 10,238, 56, 3,184,179, 10, 38,210, 5,155, 93, 52, - 18, 26,215, 97,154,141, 2,201,193,148, 32,120, 16, 20, 85,186, 28,186, 61, 42,117,211,128,198,255,198, 53, 31,111,188, 30, 7, - 7, 32, 69,178, 30,119, 99,107,243,122,219,139,181,131,226,148, 2,186,226,151,152, 56,173,175, 19,106,114, 71,123,211,174, 91, - 95,159,143,189,129, 37,206,179,236,197, 86,129, 11, 10,125, 18,161,218, 60,239,189, 55, 41,200,113, 3, 1,119,200, 20,241, 79, -212, 10, 70, 37,198, 36,197, 24,224,110,173,227, 53, 14, 53,192, 92,176,142, 63,107,155, 90,246,249,242,179,127,135,183, 59,245, - 59,200,215,121,205, 86,191, 24,171, 7,140,136, 86, 30,248,215, 27,201,223,212,177,215,224, 22,255,220, 44, 46,249, 40, 45, 92, - 83, 37,184,249,235,172,217,238,139,187,131,156,113,177, 2, 56,209, 10, 14,132, 78,115, 33, 90, 0, 98,204,165,120,231,205, 85, - 67, 22, 5,170,168,184, 12,220,222, 67,213, 98, 54, 53,181,116,198, 33, 39, 28, 60,128, 69,231,210,105,211,204,115, 30,214,237, - 94, 23,181, 12,198,105, 33,105,186,250,112,171,234, 2, 8, 23, 86,239, 5, 67,160,183,215,118,226,136,220, 95,222, 11, 43, 69, -215,181,171,239,108,134,196, 93,229,205, 72,217, 46,116, 18,133, 56,101,103, 65,161,163,190, 3,247, 23,183,120, 71, 47, 22, 29, - 70, 29,216,161, 97, 8,189, 43,170,163,127,243,252,177,179, 41,153, 18,204,212,102, 3,168,172,108, 59, 67, 54,145, 2,117,187, -196,120,136,106,101, 44,132,145, 21, 3, 45, 71, 65, 10, 96, 2, 97, 26, 5,219, 39, 51,244, 41, 0, 47, 23,208,131,127, 8,156, -125,192, 46,221,252, 20,112,114, 23, 56,125,140,106,226, 71,228,216,250,104,100, 38, 43, 42, 84,173, 8,185,240,241,244,206, 23, -163, 27, 0,119, 1, 92,100,208,149, 9,188,120, 16, 72, 41, 54,242,214,235,130,105,149,182, 63,237, 33, 21,161,143, 40,158,168, - 53,123, 58,214,246,201, 1,121, 63, 33, 29,182,200, 15, 79, 64, 47, 19,244,247,125, 1,244,182,167, 65,223,240, 12,244,188,128, -127, 67, 65, 59,167,123,157, 43,228,114, 70, 81, 96,156, 20,199, 66, 11,143,173, 56,228, 98,164, 38,100,225,122, 88, 2,184, 2, -248, 93,183,128,183,109, 1,121, 6,192,185,155,104,147,229,207,191, 58,162,124,113,143,233,254, 1, 79, 70, 96,239,194,162,210, -209, 85, 19, 55,114,176,166, 21,248,154,201, 4,114,196,192,147, 17, 56,159, 0,177,203, 92,198,217, 58,245, 89,128, 99,177,131, - 83,140,194,151,158,201,224, 63,254, 38,224,168,160, 79,222, 51,237,195, 35, 1,222,154,128,111,217, 1,211, 30,184,250,152,249, -233,161,150,124,115,178, 74,238,112,227,108,124,126, 39, 68,148,102, 75,150,170, 33, 72, 21,226,228, 69,133,218,207, 34,101,181, -251,149,128,213,248,123,156,154,102, 65,168,159,136, 53, 23, 71, 4,118,204,107,100, 42, 26, 99, 54,249, 8, 54,190, 7, 13, 27, - 39,119,151, 15,147,137, 28,181, 41,164,251, 28,241,224,138,135,144,172,196,254,152, 21, 92,150, 59, 76,210,166, 56, 7,217, 0, -100, 46, 77,137, 22, 48, 29,234, 24,227,234, 99,228, 44,237,178,184,150,138,230,226, 51,146, 54,129, 8, 82, 94,205, 15,143, 38, - 65,123, 14,185,214, 21,197, 16,138,245,216,128, 57,249,112, 19,170,246, 14, 66, 51,119, 84,182, 62, 87,189, 58, 79,168,105, 40, -215, 23,133, 84, 94,128,221,164, 19, 8, 91,106, 66, 56, 37,211, 25, 69,220,110,184, 8, 82, 45,128,216,255, 14,155,184,100, 54, -254,250,222, 33, 81,129,150,157,203,140, 89,230, 58,246, 79,157,238,172,208,178, 43,182,129,147,107, 10, 58,249, 88,238,126,182, -187,254,135,207,197,146,221,116,101,125,147,158, 97,161,171,120, 94,220,156,163,190,206, 26,232,221, 16,116,237,146,239,189,236, - 88,169,185,151,127, 22,171, 34,224,154,181, 78,227,190,106,109, 49,215,176,161,229, 61, 0, 38, 23,126, 39,204,170,152, 74, 65, - 82,173,233, 66,169, 91, 55, 36, 15,226,153,165, 56,103,189,205, 23, 44,122, 85,145, 83, 66, 73, 25,101, 46,109,246, 17, 14,176, -133, 37,184, 41, 41,235,190,189,254,115,170,218,153,126, 53, 87,109,145, 62,247, 87, 18, 44,205,200,254,222, 74,139, 62, 87,102, -243,169, 83,181,174, 81, 21,140,244,187,194,196,140,156,216,187, 8, 70,206, 25,156,147,121,104,231,217, 41, 87, 33, 46,241, 81, -187, 56,218,115, 81,165,249, 7, 93,164,230,206,114,141,175,236, 55, 12, 90,191, 31,138, 25, 98,177,165, 95, 8,221,108, 20,202, - 0,101, 16, 44,197,134, 96, 33, 46, 66, 12,114, 97, 76,237, 44, 84,160,106,160,254, 18,177,137,157, 30,138,184,137, 72,110, 93, - 58,121,108,206,208, 23,127, 13,244,214,189,213,200,124, 98,214,182,211,207,181, 36, 20, 54,130,144, 42, 42,250,149,130,245,152, - 93, 29,127, 14,208,203, 62,235,123,118,107,229,246,211,217,196,114,158, 1,142, 98, 99, 29,157,157, 15,223,193, 9,122,152, 70, -139,150,109, 67,145,232,231,139,211,190, 70, 34,108, 39,193,246,201, 30,122,156,145, 14,179,135,116,100,208,219,206, 64, 31,184, - 11, 61, 8,232, 11, 64,122,214, 22,142,186, 47, 40,123,207,114, 22, 64,192, 21, 0,163, 2,140,213,163,109, 16, 12, 48, 76,104, -152, 0, 62, 2,252,245, 59,208, 16,201,107, 23,118, 67,157, 37, 96,231, 76,247,243, 25,135,163,224, 64, 9,135, 82, 3,235,236, -107,144,219,154,130,192, 43,106, 23,123, 60,184, 91,216,132, 67, 11,112, 25,204,125,177, 14,116, 20, 72,237,216,255,127,198,222, - 45,214,186, 44,187,239,250,141, 49,231, 90,123,159,115,190,239,171, 75,119,117,117,181,187,221,118,219,177, 29,108, 18, 59,177, -157,155, 29,146, 16, 64, 40, 79, 33, 68, 81,128,135, 4,164, 16, 9,129,120, 8,239, 65, 32, 16,215, 7,224, 33, 40,188,192, 19, - 10, 2, 9, 41, 70, 74, 32,196, 36, 16,133, 64, 18, 39,142,113,220,238,118,187,219, 93,221,213,117,253,110,231,156,189,215,154, -115, 14, 30,198,152,107,205,125,170, 58,144,168,228,170,254, 46,103, 95,214, 90, 99,142, 49,254,255,223,191,109,118, 48, 81,113, - 83,241, 87,239,176,191,125, 71,187, 45,126, 45, 93, 37,248,210,236,175,237, 27, 2,245,180, 47,182,147,238,214,136,117,168,176, - 38, 81,119,119,160,133, 12,234,104, 19,208,100,100,243, 3, 16,205, 46, 70,110,250, 32, 80, 37,169,132,170,222,208, 7, 39, 97, -189,160, 45,246,233,152,109,154,193,126,198,209, 7, 15,212, 20, 98, 45,237,215,160,250, 24, 86, 59, 76,100, 56, 8, 20,113,112, -203, 50, 82,204,228,210, 55,222,163,100, 83,116,212,246,160, 93,147,173,127,240, 14,217, 2,232, 39,189, 57, 48,127,166,148,113, - 4, 31, 98,188, 50, 48,222,215, 22, 98,213, 33, 93,172,201,206,208,238,191, 38,131, 24,118, 76, 69,235, 5,186, 79,249,242, 48, - 57,232,221,120,119,188,108,170,246,193,130,215,226,160, 86, 54, 62,254, 94,236,107, 28,244,237, 98,159,126,105, 53, 45,131, 54, - 64, 90, 80,136, 17,159, 6,244,160, 22, 81,154,212,109,220,190,154,119, 83,115,208, 51,251, 99,115, 59, 88, 8, 28,195,215,239, - 78,164,180, 1, 76, 74, 93,247,156,140, 88,125, 20,219, 73,110, 53,254,220, 14,247,186, 68,180, 90,199,246,138,175, 89,102,133, -167,230,124,130, 58,236,228,245, 1, 32,233,130, 14,103,151, 99,239, 81, 32,122, 81,184,135,206, 83,185,204,101, 31,133,114, 31, -215,212,127,130,189,250, 19,211,225, 46,251,125, 29,212,152,194,190,126,234,255,187,108, 33, 50, 26,250, 7, 15, 24,219,109,134, -157, 70,232,127, 71,109, 70,109,213,181, 97,145, 23, 66, 36,128,214, 90,161, 86, 14, 57, 83,115,166, 46,203,160, 84,237,141,222, - 30,191,219, 68, 55,163,229, 37, 88,134, 45, 36,201, 66,173, 63,102, 65,192,238, 65,255,216,126, 62,180, 44,194,110, 87,218, 26, -173,126, 52, 72,114,121, 10,245,184,186, 68,206,126,230,201, 41,145,167,217,111,242, 90,247, 93,222,166,164,216,227, 88, 85,186, -221,109, 15,214, 27, 71, 86, 4,172,166, 35, 94,251,254,184,159,198, 71,101,171, 10,113,106,175, 36, 75, 30,105, 24,163,246,166, -234,224,148,174,174,143,211, 47, 10,137, 11, 79,216, 32,104,150, 93, 0, 56, 4,157,136,193, 57, 65,185,171,232,243, 21,121,116, -128,175,188, 11, 63,249, 54, 76, 63, 4,233, 10,242,247,192,205, 47,186,133, 11, 13,143,164,186, 95, 90,109,112, 74,198, 72, 41, - 27,122,231,186, 3, 14,103,127, 10, 61, 14,255,250,107, 13, 57, 53,184,173,232, 57,209,104, 97,135,169, 99,102,142,255,109, 50, -140,220,251,248,125,195, 58,198,124,163,249, 94,113, 85, 71, 32, 22,140,235,187, 51, 83, 49,248, 7, 74, 58, 42,150, 64,190,231, - 6,126,215, 19,248, 95, 27,170,110, 33,108, 31,158,177,231,141,146,166,136,165,245,207,116, 83, 76,203, 62, 82, 22,133,137, 40, - 52, 77, 32,207,240,197, 43, 44,221, 32,245, 29, 40,223,118,208, 75, 82, 47,172, 55,254,225, 23, 81,135, 56, 52,134, 14,172,143, -133,119,247,182, 89,196,156, 87, 65,102, 69, 30, 37,111, 3,215,230,187,244, 90,177,197,104,119, 43,237,222,211,236,108,173,251, - 67, 49,108,113,235,251,247,216,127,191, 4, 60, 61,161,175, 95,195,143,100,228,149, 43,176,199,208,190, 1,211,167, 65,174, 92, - 52, 39, 2,231, 21, 78,234, 35,253,184,198, 71, 79,121,227,242,115,232,187,241,238,215,215,161,155,126,136,193,244,149,153,109, -194,183, 54,140,194, 68, 46, 28, 63, 91,244,166,138,175, 39,242, 32,255, 61, 74,247, 32, 59,161,173,231, 37,148, 16,122,109,106, -225,100,212,234, 93, 91, 11,141, 73, 7,185,172,178,147,238, 76,119,110,120,181, 93, 65, 91, 6,156,170, 60,200, 50,207,178,191, -207,113,199,175,195,238,216,134,226,144,128, 41, 41,214, 4, 93,140, 22, 81,176, 23, 29,157,141,107,132,253, 64,128,108,209, 10, -241,235,126, 40,185, 22,119,142,106,240,203,117, 40,238,189,240,204,161, 79,245,113,188, 31,232,235,112, 95,149, 65, 81, 95,135, -169, 65, 31,183,143, 92,117,196,134, 60,123,255,188, 78,241,185,245,201,100,137,239,193, 26, 28,213, 2,147,171, 17,107,219,182, -238,235, 62, 14, 12,115,136,138, 25, 28, 8, 34,112,101,198, 25,227, 44, 29,203,236,182,133,148,140,220,124, 12,156, 98, 28,255, -188, 99, 98, 7,240,237, 39, 97, 85, 71, 69,249, 20,248,216, 3,240,170,248,159,127,106,254,119,209,184, 16,104,217, 39,116,216, -246, 96, 74,242, 73, 49,171,227,218,169, 31, 42,251,225, 32,125,146, 16,220, 46, 27,202, 11,246,195,240, 35, 26,123,124, 44,193, -126,239,153,236,109, 16,152,118, 91,143, 88,136,102,187,112, 78, 28,217, 44, 67,168, 82, 11,187,154,201,110, 23,221,142,114, 54, -116,202,219,228,162, 81, 91, 37,155,215,200, 53,197, 51,163, 61,220,255, 71,231,190, 5,178,216,158, 99, 60, 28, 93, 68,190,139, -129,208, 62,225,127, 29,214,107, 61, 81,179,119, 4,210,105,160,200,104,235,136, 81,158,122,234, 75,202, 19, 42, 48,165,228,169, - 52,165, 96,181,184,234, 54,167, 61,166,117, 16,248,104,223,187, 15, 86,158,189, 11,217, 25,243,180,134, 73, 10,200,130,207,227, -198,174,158,190,235,232,179,159,152, 8,152,164, 77, 49, 44,177, 92, 76,129, 13,109,214, 80,177,205,111,232,210,199, 97,227,101, -182,185,118, 91,220,173,146,252,102, 95, 13,150, 38,172,107, 99,250,112,197, 94, 57,194, 55,238,145, 15,255, 38,188,245, 35, 80, -103, 56,252, 38,228,201, 95,193,166, 53,210,195, 4, 73, 13, 59,143, 75, 40,245,180, 51, 51,172,130,205, 70,187, 19,244,125,129, -195,226, 10,179, 43,133, 87,147,251,214, 75, 70,175, 93,189, 45,197,144, 82, 47, 18,212, 90, 40,224,123,129,237,227,223,106,178, - 41,117,187,181,105,141, 12,224,170,208, 84, 48, 21,110,150,130,124,248, 18,249, 37, 65,143,134, 77,138,188, 57, 99, 63,253, 4, -254, 90, 69,175, 27,114,179, 48,127,180,146,172,208,204, 85,195,155,176,164,139,103,162,203,153,155,243,222,147,250,232, 61,253, -200, 12,175,205, 72,170,176,126, 21,158, 47,216,123, 13,238, 23, 56,175,113, 98,110,152,122,145,217, 60,170,109, 31, 51,183, 7, -196, 53,233,208,161, 89,124,159,158, 92, 65,207,157,139,227,218,253, 74,187, 43, 78,118, 90, 43,245,108,145,179,220,173, 66, 70, - 43,149, 85,141,212, 38,242,205, 1,126,230, 0, 63, 32,112,252, 45,206,231,124,244,127,186, 93,177,171,219,106,241,133,230,210, -176,151,149,182,238,126,217, 58, 88, 62, 91,218,187,207, 52,176,199,183,180, 51,251,132, 16,146, 17, 12,209,117, 4, 35,254, 49, -108,139, 93, 68,170, 98,155,105, 98,138,207, 93,163,221,153,227,254,220,167,113, 29,149,233,226, 79,171, 67, 16, 96, 12, 56,212, - 70,110,183, 95,186,107, 40,171,187,205,205,234,142,141,221,114,161,183, 7,169,108, 29,222,106,195,238,115, 0, 97, 72, 29,112, -208,114, 25, 69, 74, 20,222, 47,228,196, 15,253,233,215, 56,253,218,202,207,255, 79, 47, 88,180,110,185,240, 34,187, 55,125,204, -207,110, 31, 43, 25,141, 73,125, 35,115,140, 29,250, 33, 58,246,195,224, 61, 47,195, 33, 97, 14,183, 76,141,233,192,194,254, 93, -241, 9,133, 47,109, 5,209,182,247, 62,160,187,221, 34,187,117,233, 62,182,173,155, 23,168,139,224,124, 20,223,209,164, 30, 88, -211, 11,155,110, 19,130,110,255,237,105,135, 26,118, 56, 84, 67, 87,208,168,230, 35,252,132,112,147,179,143,119, 91,221, 2,160, - 22,115,241,219,102, 53, 30, 62,187,244, 64, 96,120,148,125,125,145,250,103, 38,240,174, 25, 95,110,178,225,127,215,161, 32,247, -107,185,125, 12,129, 40,223, 85,241,254,208, 87,126, 97,249,250, 46, 52,191,209,197,253,208,223,223,203,192,212,143, 46, 50,122, -210,173, 27,187, 46,184,240, 12, 53,173, 79,138, 26,144, 74,101, 74, 74,155, 18,101,141, 48,175,176,172, 89,232,197, 58,201,109, -139, 56,189, 96, 68, 64,173,149, 82, 11,146, 60,103,189,172,235, 62,102,231, 50,215,100,131,196,116,191,185,236,159,128,141, 29, -248, 54, 95,177,253,122,219,141, 72,241,190,122,188, 97,219,185, 21,131, 48, 47, 51, 60,152, 70,116, 93, 74,137,249,112,140,204, -102,239,212,235,178,108,180,174,113, 28,214,187,100, 21,245,135,141,237,227, 57, 29,200,114,189,208,111,167, 50,147,176,132,196, -120, 36, 58,119,207,136,238,127,191, 99, 62, 83,192,107, 90, 51, 68, 42,154, 52,190,196,120, 88,137,239,213,173, 4,127,217,243, - 75,221, 46, 23,199,202,142, 63, 85,118, 85,124,231,199,247, 81,218, 25,225,100,141,171,219, 51,172, 87, 32, 87,216,215,254, 26, -242,214, 31,243, 39,223,244, 37,120,244, 58, 60,249, 22,124, 71,246,150, 77,234,222,210,230,234, 92,247,136,254,172, 40, 58, 23, -228, 37,200,119, 98, 4,252,153,131,255,223, 79,185,239, 90,106, 67,215,176,117, 88,130,243,128,100,221, 66,225,194,198, 22, 94, -245, 58,140, 10,155,237,161,136,219,174, 51, 32, 33, 96,112, 90,224, 91,183,228,100,232,141, 96,250, 8, 62,115,132, 31,187, 70, -254,247,149,244,202,204,244,209,137, 71,207, 43, 77,109,139,214,236, 87, 69,177,184,217,197,200, 41, 56,222,193,193,151,159,188, -114,170,222,169,120,200,202,211, 21, 62, 90,225,105,161,125,176,210,158,158,169,167,194, 34,187,224, 40,244,128, 27,112, 38,201, -131,174, 44, 43, 50,137,115,222,175,162,226,220, 45,112, 46,212, 82,105,167, 74, 91,156,202,103,167,230, 73, 69,253,230,173,248, -159,157, 4,121,169,164,215, 15,200,207, 94, 33,191, 45,193,107,223, 15,135,159, 5,251,187,240,248, 10, 30,253, 33, 79, 59, 97, -129,245, 12,207,103, 56,249,123,105,193,106,110,131,235, 35,133,229,176,213, 88, 89,109,247,207, 78,112,179,225,193,218,134, 29, -120,191,207, 90,252, 55,131,208,173,197,110,116,251, 59,163,160, 31,196, 41,136,185, 19,228, 34, 67,189,239,254,182, 60,244,200, - 56, 0,241, 49,188,121,241,213,176,207,140, 99,250,115,172,138,114, 40,249,123, 71,166, 49,146,181, 40,248,173,249,195,114,137, -247,144,135,177,234, 22,192,216,125,230,106, 14,111,106, 59,161,178, 92, 76,232, 4, 45,198,231,127,112,230, 83,127,234,179,124, -231,223,125, 59, 44,100,186, 17, 40,221,158,231,175,127,244,208, 39,118,133,123,127,228,215, 10,171, 6,139, 61, 62,199, 28,121, -240,121,155, 20, 94, 10,255,186,176, 49,197,251, 28,133,124,187,132,218, 6,145,217,131, 76,249, 49,161, 79, 60,181,176,170,231, - 74,180,177,131,141, 66,127, 6,212,132,169, 55, 58,106, 78,245,139,233, 94,137,213,200, 58, 0,121,196,218,246,185, 46, 64,221, -158,183,190,210,172,145, 24, 54,171, 70,132,109,227,208,140,123,115,189, 64,137, 9, 0,230,107,178,113, 85,209, 15, 61,115, 92, - 87, 19,194, 1,227,213, 16,170,126, 20,135,236,105,216,239, 86,219,225, 64, 29, 73,108, 3,195,236, 99,180,188, 79,240,168, 63, -220,185,203, 39, 2,107,228,193,129, 96,224, 52, 6,169, 84,135, 73,212, 40,251, 22,121,200, 55,176, 75,229,189,236, 1, 65, 18, -153,227,158,175,145, 72, 8, 53,188,109,210,247,225,253, 61,181, 29,242, 42,195,200,193,164,139, 63, 43,173, 22, 44,133, 83, 70, -118,135,217,199,135, 23, 97, 27, 31,222,153,116,177,182,141,244,184, 75,101,193,197,103,170, 67,117, 31, 79,204,162,177,234, 22, -154, 53,239,212,181, 83,225,162, 70, 77, 41, 49, 29, 15,190, 55, 87,197, 90,161, 45,107,100, 53,142,175,115,143,147, 75,227,130, -127,179, 39,200, 38,102,209, 62,254,136, 27,184,191, 72, 29, 80, 12,210,153,238, 12, 62, 19, 11, 96,140, 73, 88,218,162,179,219, -104,114,187,186, 64, 52,147,181,120,102,238,134, 55, 77,180,230, 9, 57,157,102,183,239, 88, 90,252,247,136,118,244,132,170,114, -106,200,179, 21,125,243, 6,254,254,219,200, 79,124, 21, 14, 63, 10,211,235,112,253,121,120,229,155,142, 43,213,206,236, 12,238, -120, 53,247,160, 7, 75,222,215, 48, 70, 43, 6,147,145,146, 56,152,230, 74,225,149, 12,175,206,126, 92,191,173,200,148,144, 67, - 69,170, 98, 75, 95,137,184, 0,168,218, 3,161, 92,221,213,193, 45,212,146, 59,220,223,127, 61,137,231, 97, 91, 92, 12,122,119, -130,183,141,233, 23, 50,146,179, 43,137,126,248, 10,222, 61,145,254,110,193,222,186,230, 81,121, 9,247,198,253, 72,136,136,182, -167, 4, 24, 38,107, 24, 17, 42,104,155,224,211, 71,191,251,159, 23,231,203,191, 40,240,188, 97, 79,207,180,119,238,168,239,156, - 57,173, 94, 76, 74,187, 84, 92,111,240, 37,219, 39, 47,106,230,142,138,163, 34, 61, 24,103,109,240, 34,138,248, 82,177,123,215, - 61, 88,169,212,210,252, 80, 19,123,232, 52, 59,121, 80, 94, 10,249,250,128,254,204, 53,242, 59, 21, 94,255, 18, 28,127, 7, 60, -250, 97,104,191,232, 18,254,252,134,115, 72, 85, 93, 0, 0, 32, 0, 73, 68, 65, 84,223,250,245, 4,167, 2, 47, 38,184, 95,105, -247,171,103,168,199, 94,183, 67,153, 44, 68,130, 45, 78,220, 73,205, 31,218,195,216,118,203,188,139, 40,223, 60, 20, 17,141, 81, - 92, 69, 46,246,145, 41,212,236,155,142, 37, 30,188,199,188, 25, 19,252, 48, 5,148,102, 14, 58,209,216, 1,246,131,127,219,145, -171, 23, 65, 50,253,220,105,126,224,233,211,191,201,220,221,176, 70, 92,234, 20, 42,226,142, 65, 61,197,132, 70,101,232,214, 69, - 54, 55, 74,221,198,235,182, 17, 26, 77, 46, 19,198,198, 17,235, 57, 11,191,248,246,153,175,252,142, 47,243,206,169, 81,242,160, -180,111,123, 23,165, 54,132,214,236,228,219,173, 67, 86,204,187,210,104, 2, 90,136, 46,171,250,123,201, 15, 8,115, 41,246,215, -141,198, 57, 26,146,212,181, 41, 24, 41,104,149,107, 32,114,203, 16, 94,147,135, 17,189, 61, 40, 64, 61,188,165, 13, 10,103, 17, - 15, 70,233,175, 97, 17, 35, 53, 97,214, 93, 44,136, 53,154,213, 77, 85,191,142, 97, 44, 18,223,175,217,214,165, 75,240,188,187, -206, 66, 27,220,168,176,138,146,178,178,214,198,201,154, 31,228, 6,157, 71,126,160,148,159, 6, 58,222, 97,136,170,189, 53,191, - 55,207,248, 65, 69,255, 81,133,119,176,120,201,102,177,147, 61,206,214,246,231,127, 26, 86, 40,233, 19,236,111, 23, 42,240,255, -207,162,127,169,253,224, 31,137,175, 29,138,228, 32,156, 67,253,117,106,107,241,217, 23,212, 52, 82, 22, 53, 38,101,117, 72, 82, -220,201,115, 26,240, 24,179, 65,148,230, 32,127,102, 81, 74,210,143, 71,250,142, 25, 5, 49,126, 55,227, 1, 65,199,235, 27, 49, -173,186, 32, 1, 92,188, 87,217, 18, 4,205, 46,231, 28, 35,243,130, 62, 13, 84,118,110,123, 18, 97, 58, 30,200,121,114,243,253, -186,210,150,101, 51,196,143,126,112,137,211,189,198,194, 80, 6, 99,188,196,155, 87,235,102,122,219, 82,216,186,165, 67,182,227, -190,108,226, 56,137, 83,148, 14,129, 48, 18, 66, 55,105,145,187,206, 78, 31,186,200,207, 85,104,154,209,182,110, 97, 36,116,113, - 68, 43,174,218, 86,139, 8,203,222, 17,201, 54, 89,232,236,229, 5, 88,170,146,111,213, 49, 8,223, 17,236,237,255, 14,249,193, -223, 28, 32,154,239, 67, 30,255,173,128, 85, 93,178, 41, 77,125,207,220,106, 48,225,107,116, 32,217,104,201,124, 92,253, 29, 65, -166,228,119,217,227, 12,175, 39,120, 49, 35,165,185,111,124,109,200, 65,161, 42,170,141,244, 80,144,189,183, 12, 91, 81,111, 35, - 55,112,120, 0,166,234,163,185,151, 49, 98,189,185, 59,163, 95,123, 65, 62, 38, 56, 26,252,224, 53,252,212,171,240,110, 33,189, -231, 21,247,250,237, 91,210,226,147,232,206,121,111,125, 12,220, 15, 70,102,112,111,232,167, 50,242,102,134,251,213, 69,108,239, -173,240,108,197, 94, 20,234,123,247,180,119,110, 57, 61,175,188,192,155,248, 90,247,211,127,239, 96, 71, 94,245, 22, 5, 60, 43, -122,157,145, 39, 49,143,190,109,112, 50,218,185, 98,119,149,182, 84, 90,105,180,210,188,139,139,167,134, 22, 33, 29, 18,106, 9, -101, 34,253,236, 19,228,167,129, 79,125, 1,110,254, 41,184,250, 41, 79,222, 75, 97, 97,179,219,120, 1,247,216,121,133,187, 35, -237,174,210,238, 43, 69,246,232,210,222,221,173,163, 88, 77, 26, 71, 21,166,201, 11,156, 68, 18,108, 22,219,114,177, 51,123,199, - 36,195,200,119, 79,180,178,205,186,214, 39,104, 89,118,254,205,228,146, 17,166, 8, 20,233,157,185,198,153,186, 14,237,144,137, -109,215,159, 14,254,172,120,246, 92,104, 1,164,237,153,240, 50, 20,209,222,149,118,139,149,170,176,110,129, 49,251, 3,210,226, -243,104,195, 92, 52, 17,168,229, 46, 26, 77, 46,220,235, 35,102, 17,227,221, 72,204, 35,251,103, 35,173,131, 82,246, 70,160,155, -226,114,116,251, 15, 65, 58,189,251,190,183, 61,142,225, 44,126,125,245,177,249, 33, 10,215,213, 54, 94,222,119,179, 59,244,134, - 77, 23,116,148,189,211, 61, 5, 22, 56, 43,204,205, 29, 37, 13, 15,214,185,136, 92, 21,219,184, 1,237,129, 13,171, 14, 44,250, -210,237,117,157, 5,208, 44, 4, 90,126, 72,234,180,178, 46,158,244, 8,137, 78, 48,219,249, 29, 19,178,137,239, 92,160,232,211, -200, 87, 85,169,147,240,172, 26,169,213, 13,125,173, 92, 38, 2,110,126,123, 51,238,205, 11, 92,143,201,205,230,177, 10,175,170, -112,107, 54,232, 34, 46, 15,102, 15,197,108,124, 2,150,119,196,192,238,184,100,249,255, 5,173,185, 40,238,221, 49,241, 96,124, -255,241, 0,158,125,226, 85,135,189,143,134,199,123,211, 3,217,160, 12,176,248,118,154, 55,180,118, 33,110,145,139,156,248,174, -117, 32,116, 76, 94,136,117, 83,181, 39,129,156, 50, 69, 19,180,117,143,151, 29, 87,205, 92, 38, 59, 94, 88, 56,101,176,183,198, -184,199, 62, 86,172, 71, 55,201, 78, 46, 20,233, 41,111,251,100, 55,239,187,239,230,113,134,135,153,124,188, 34,231, 68, 59,159, -105,181, 92,188, 16,177, 75,190,110, 47,212,105,195, 70,201,198,235,238,170,248,144, 21,122, 40,252,118,234,105, 23, 56, 6, 98, -143,216, 57,242,253, 82, 81,188,107,115, 50, 80,195, 84, 54, 46, 61,244, 3,133, 51,120, 83,200,117, 37,130, 96,104, 1,212, 81, - 37,137, 71,178,118, 84,167,199,123,122,130,156, 13,240,189, 42,194,170,202,189,192,225,233, 9,125,166,112,117,196,254,254,223, - 65,190,248, 27, 32,111,130,188, 10, 87, 25,142,134,204,186,181, 82, 22,119,178,117,175, 82, 11, 90, 92,143,131, 43,134, 93, 11, -237,110, 33,189,167,112, 35,158,226,118,152, 28, 6,115,154,144,165,160,167,134, 29,156, 97, 46, 39,127, 95,170,251,133,121, 73, - 80,218, 31, 10,151,227,155,253, 33,223,173,240, 32, 72, 49,210,135,247,240,171, 66,190,137,133,223,247, 63,130,223,243, 24,249, -249, 70,154, 3, 10,242,173, 91,244, 92, 57,171, 68,142, 65, 15,249,136,194, 30, 64, 54,253,109, 87, 48, 37,120,247, 4,239, 23, -248,176, 98, 79, 23,234, 71, 39,202, 59,119,156,158, 87,158, 54,120, 81, 61, 63,186,180, 61,193,204,199, 97,187, 74,215,245,141, -222,137,104, 86,228, 70, 93,165, 46, 2,119,133,118,183, 14, 54,182,234,187,245, 98,155, 42, 61, 37,225,240,138, 34,166,232, 71, -202,244,123,158,192,239, 86,120,227, 51,112,243, 71,225,250,183, 67,122,205,203,133,253, 26, 76,143,156, 31, 64,117, 8,205,189, - 23, 40, 91, 10,182,182, 13,194, 65,108, 87, 84,108, 27,231,117,240,220, 85,246,215,188,244, 2, 43,206,197,239,132, 51, 77,254, - 17,155, 93,210,209,210, 0,183,238,153, 5,157, 1, 49,169,187,235,166, 96,170,107,222, 59, 44, 27, 70,244, 77,217,196, 62, 22, -124,239,162,157, 26,108,172,131, 72, 85,185,132,126,116,216, 76, 71, 63,183,225,129, 57,169,123,115,171,117, 47,249, 46,166,235, - 22,170,132, 68,199,214,194,110, 25,159, 73,243,137,142, 4, 70, 53,133,210,184, 63, 88,167,176, 71,166, 16, 76,246, 14, 63,133, -114, 59,162,145, 28,207,178,141, 93,119, 17, 37,114, 41,202,187,141, 67,120,239, 58,167,240,105, 47,195,196, 96, 18, 23,118,246, -248,212,145,145,158,250,225, 50, 10,246, 42, 67, 42,156,176,129, 99,232,124,252, 14,113,161, 99, 97, 47, 11,155, 92,252,251, 62, - 34,214,136, 92,213,176, 95,245,103, 99,194,152,172, 81,194, 93,178, 91,233,236, 99,214,174,106, 70,193, 56, 53, 97, 73,209, 85, - 55, 99,166,241, 24,223,217, 44, 42, 44, 45,128, 42, 67,183,105,155,109,215, 63, 47, 98, 10,213, 15, 79,136,235, 14, 94, 65,120, - 79,132,151,151,219,243,139,240,145,203, 49,187,241,113, 42,249, 88, 47, 2, 64,246, 9, 44,130, 11, 42,229, 39, 40,222,101,236, - 94, 47,244, 12,131,148, 99,176,226, 61, 44,244, 91,126,187,236,113,214,163,134,204, 34,196,203,137, 2,186,231, 55,116,146, 92, - 36, 22, 73,136, 29, 77,221,181,142,133, 91,203,246,231,109,202, 57, 26,206,117,211, 76,140,209,213,221,171, 79, 28, 6,250, 74, -120, 44,174, 54, 40,227, 62, 17,191, 59,172,102, 68, 46,167, 39,163,184, 47,239, 66, 55, 15, 96,153,175,174, 56,222, 60, 66, 13, -214, 82, 49, 89, 54, 30, 50, 54,224, 96,199,209,206,112, 44,219, 22,251,125,116, 46, 50,124,113, 93, 16, 23, 31,148, 10,153,206, -185, 13,220,234,166,126,207,155,100, 6,243,215,230, 22,161, 72,136,139, 14,187, 43,130, 84,117, 51,247,183,148,227, 20, 94, 7, - 64,155,143,239, 69,133, 89,125, 84,149, 69, 93,104, 21,187, 61, 83,165,102,199,100,158,109, 97, 61, 11,249, 37,216,103, 30,193, - 55,159, 97, 31,252, 37,228,181, 63, 14,114,240,167,114,210,253,248, 61, 68, 36,153,183, 75,126,114,138,163,188, 53,193,146,250, -136,183, 1,207,238, 73,239,167, 24,193, 11, 60,158,224,117, 67,238,162,168,227,105, 65, 84, 69,215,186,141, 41,229, 99, 8, 82, -219, 18,201,218, 5,220,146, 13,133,216,247,160,247,236,170,183,199,239,222, 33,191,148, 72,143,131,212,246,249, 43,248,241,138, -252,125,200,159,143, 86,229,131, 59,218,125,243,142, 43,126,198, 5, 73,234, 4,242,165,217, 91,164,119, 87,120,231, 76,187, 47, -212, 15, 78,212,247,238,185,127, 86,121, 86,133,167,213,184, 47,134, 85,185, 16,196,169,218,118, 0,236, 74,105,237,236,247, 89, -209, 87, 39,127, 10,159, 10, 60,107,216, 18, 97, 63,231,138,157, 42,165, 52,106,140,196,105, 62, 10,151, 44,200,251,144, 62,117, -133,252,222, 25,222,184,134,171, 63, 0, 55, 63, 13, 50,131, 62,130,122, 15,167, 95,129,116, 19,173,223, 45,172, 95,246, 15,232, - 84,225, 84,169,181, 5, 19,168,167,145,237,174,140,254,136,243, 61,185,109, 58,146, 37, 62,235,154,246,128,162, 67,238,122,221, - 93, 24,168, 92, 38,177,233,224, 62,201, 2,179, 26, 7,132, 89, 93,144,168,182,187, 53, 82,188, 38,213,157, 61,190, 67, 90,188, -160, 53, 31,161,237,116,190, 40,138, 73,135, 84,174, 7, 10,101, 29,198, 94,169,249,123,104,197,167, 52,105,219, 37,126,188,235, -235,157, 84, 27, 12, 59,221, 51,124,165, 78,194,234,118,157, 37, 14, 9,217,130,129,207,158,220,216,215, 14,125,228, 93, 59,107, -162, 55, 78,245,242, 64,178, 29, 12,163,219,236, 31,231,201,188, 51, 31, 5, 98, 41, 62,156, 49,109,210, 6,165,180, 70,150, 68, -199,176,118,238,144,176, 49,161,252,121, 40,193,178, 24,124,245, 50, 88, 12,235,224, 20,105, 3,176,166,110, 10,106,247, 72,247, -200,212,214, 53, 68,253, 61,119,101,181,217, 37,183,195,220,239,222,197,188, 69,140,181,117, 26,158, 95, 23,199,232,252, 23, 81, -214,156, 57,181,198, 82, 43, 45,136,151,122,129,184,253, 56, 91,125, 9,173, 78, 18,225,177, 24,207,251, 65,244, 1, 31,227,227, -133,134,125,138,123,241,252,145,193,138, 43,219,161,201, 46,214,225,114, 33,132,227, 19,121,242,118, 17,169, 59,162,130, 31,172, -214, 47,166,182,163, 83, 52,199,180,100,200,117,219,242,206,205,122,236,170,215,170,108,221, 85,149,176, 0,203,140, 2,242,237, -136, 35,234, 17,225, 49, 73,158, 82, 34,205, 19,165, 44,113, 61, 63,160, 42,110,127, 71, 28,114,205,134,116,188,161,155, 55,185, -108,205,226, 90,223,119, 15,163,221, 80,246, 67, 65,219,185, 34, 89, 6, 27,219,124, 60,114,245,248, 21,242,225,192,249,131,247, - 40,167,123, 31, 51,200,195, 14,209, 30,124,248, 59, 61,106,159, 96,200, 0,222, 31,113,173,251,254, 93,163, 43,239,161, 43,158, -165,221, 16,139,164,155, 36, 23, 9, 52, 26, 65, 49, 27, 86,182, 43, 50,107,137,240,145, 20, 10, 97,143,198,147,240,195,170,169, -147,207,180,109,235,130, 89, 93,156, 86, 55, 98,195,228, 96,142,174,140,159,175, 89, 21,230, 23, 2,247,130,220, 63,193,126,225, -231,145,159,253,253,160,175, 70,250, 78, 60, 77,102,245,153,221, 54, 19,143, 95, 43,182, 17,177,164, 25, 90, 26,173,234,230,151, -209, 15,207,200,147,104,229,110, 50,188, 38,240,114, 66, 78, 21,213, 70,171,174,136,215,185,146,150, 30, 77,250,144,216, 53,192, -106,236, 65, 0,134,109, 3,146,109,223,182,169, 66,139,241,248, 91, 47,145,127,144,208, 39, 17,105,250,155,174,225,100,200,215, - 32,127,111,131, 12,243,219,183,222, 13,203,112, 93,137, 63, 61,229,160,232, 15, 93,193,211, 5,222, 59, 83,223, 61, 83,159,157, -168, 79, 23,238,111, 43,207, 26, 60, 43,198,237,234, 15,229, 58,100,124,107,116, 68,132, 31,125,180, 81,106, 22,228, 38, 33,143, -226,105,185, 86,236, 28, 59,244,147,239,212,203,218, 28, 26, 18,226,161, 41,246, 38,246,162,162,118, 36,253,190,107,248,172,192, -213,143,195,227, 63, 18,237,193, 11,224,173, 40,224,207,224,250, 71,233,137,232,180,251,120,106,155,179,228, 67, 36,103, 38, 23, - 29, 79,191,137, 59, 73,174,131, 80, 38,221, 69,244,214,132,163, 42,143, 94,203,220,222, 22,238, 79, 49, 94,237,154,152, 1, 82, -211, 49,159, 83,116,234, 7,109, 28,146,112,200,198,193,134, 34,221, 25,240, 93,203,208,115,160, 85, 28,112, 19,123,129,181,237, -248,224,169,238, 59,238, 62,157,234, 32,156,180,209,235,252,201, 82, 91, 15,156, 9, 10, 93, 27,138, 94, 20, 12,135,203,216, 86, -252, 54, 46,184,236,140,241,237, 59, 84,245, 12,136,197, 56,100,119, 49,220, 53, 99,109,126, 8,107,181,243,187, 45, 16,175,187, - 53,172, 61,120,176, 79,230, 22,188, 49,253, 76,147,131,110,182,247, 38,123,102,121, 25,196,109, 26,157,105,223,163,223,196,247, -181, 12,200,229,126, 48, 40, 15, 15,196,241,123,231, 88, 33,230,152,108, 60, 84,201,111,106,247, 11, 38,254, 30,122,196,246,222, -124,196,111, 3, 6,116,140,123,232,222,248, 62, 66,110, 23,196,181, 29,155,112, 68,220,166, 55, 92,151, 77, 60,179,126,109,198, - 65,132, 43, 77, 44, 41,113, 42,133, 86,203,118,253,245,255,215, 39, 25, 45, 80, 26,121,179, 5, 10,111, 8,220,137,240, 65,172, - 61,234,128,223,181, 7, 48,154,109,170,208,131,187,100,111,252, 54,193,219, 39,140,222,117, 80,183,203, 3,240,144, 12,204,253, -139, 38,197,134, 12, 4,216, 84,250, 99,226,218,229, 78,122,239,126, 45,116, 27,253,154, 32, 56, 39, 93,159,165, 61,153, 16,113, -155, 90,132,176,116,228,107, 74,137, 98, 30,250,226, 35,123,191,198,179, 42, 73,149,148,148, 60,205,212,116,218,109,108,181,125, -204,137,223,177,234,150, 98, 12,212,227,202,217,195,159, 44,104,130, 66,231,226,219,197,228, 99,163,181,246,207,224, 1,109, 47, -111, 31,164, 8, 87,175, 60,225,240,232, 17,119,239,190,203,249,233, 71,126,114, 57,206,190,119,174,109, 43,232, 23,123,141, 22, - 30,242,180,199,220,165, 17, 26, 32,125,252,210, 87,253,178,117,253,180,126,243, 15, 75,255, 48,238, 75,210,125,236, 30,106,211, - 36,138, 78, 93, 26,235, 93,188,106,192,108,226, 68,154,114, 70,146, 4, 75,221, 89,213, 41, 37,180, 70,152, 97, 50, 82,242, 81, - 19,154,144, 57, 83, 83, 70, 34,124, 70, 85,209, 57, 33,182, 82,234, 74, 57, 41,250, 66,145,207,222, 96, 95,121, 15,251,241,191, -130, 92,255, 65,152, 31,131,125,228,130,172, 28,147,131,214, 47,246,186,157,194,182,116,159,184, 33, 82, 11,161, 87, 18,218, 82, -208,119,206,254, 69,125, 17,143, 22,253, 28,176, 22,228,157,134,166,134,205, 9, 43,149, 92, 42,107,227, 19,191, 3,121,168, 54, - 29,191,225,158,191, 45,193,139, 55,243, 60, 19,133,116, 46,200,215,111,153, 63, 61, 35,175,101, 47,236, 63,114, 5,181, 32, 7, - 23,231,180,251,194,244,238,125, 32, 47,135,179,243,169, 34,143,102,239,242,191,118, 79,123,127,165,190,127,166, 60, 63,113,186, -107, 60, 67,120,182, 56,166,125, 41, 59, 79,154, 65,255,240, 48,141, 84, 35,220, 67,115, 70, 31,101, 15,112, 49,188, 75,127,233, -222, 92,107,141,118,170,148, 98,172, 58, 28,109, 36,114, 5,238,148,252,133,107,248, 97,156,254,119,243, 47,248, 33,108,253, 57, -200, 63, 1,182,192,179, 63, 31,145, 91,223, 27,109, 85,129,250,190,119,233,173, 97,165,243,176, 47, 52,184,254, 80,172, 46,108, -209,208, 27,180,120,210,206,201, 5, 81,147,249,195,241,205, 63,242, 58,135,127,252,154,119,254,163,111,177,158,171,119, 97,109, - 87,185,247,142, 61,199, 67,112, 22, 99, 82,227,144, 60, 25,246,208,131, 94,218, 37, 58, 53,137, 96, 57,206,147, 53,214, 46, 45, -196,144,177,166, 41, 65,146, 43, 33,172,147, 0,140, 39, 49, 86,241,137, 86, 23,191,101,213, 96,102,216,214, 33, 62, 20, 55,141, - 15,194, 44,123,183, 39,109,119,143,244, 7,177,178,231,185,191,218, 18, 63,250,251,175,121,252, 86,230,151,255,226, 75,168,149, -151,129,140,197, 42, 41,251, 52,128, 56,108,168,143, 5,250,237,189,117, 44, 45,124,233,133,125,167,223, 6,192, 79, 29, 56, 20, - 58,168,221,115,220, 11,157,228,150,187,147,128,125, 35,216,133,141, 43,182,137,213,212, 46, 9,115, 58, 48, 5,186,127,127,212, -243,104,216,172,250,129, 98,215,136,236,133,162, 35,114,243, 54, 29,240, 61,137,217, 64,223, 28,145,189,177,107, 87,118, 16,209, -136, 14, 85,196, 85,234,236,233,207,253,190, 55, 51,180, 25, 7, 77, 72, 78,156, 85,184,175,149, 18, 66,231,142,165,173, 49,144, -219, 33, 74,254, 30,102,224,179, 98,220,197,116,207, 98,218, 32, 23,134, 43, 63,108, 62,124,175,250, 93, 68,108,198,101, 70,250, - 5,156,230,193,234, 34,141, 43, 12,217,247,206,227,248, 93, 47,208,203,253, 51,116,155, 47,210,182, 67,131,154, 11, 89,221,158, - 45,204,121, 98, 78,153,148, 53,108,133,198,221,186,114, 94,150, 40,236,141, 82, 93,232,168, 41,109, 7, 8,149,152, 42,167,180, -117,206,190, 89,210,168, 97,137, 41,103,214, 52, 97, 1,181, 25, 11,178,116,135, 86, 63,204, 4,241,172,239,195,183,137, 68,172, -140,233,124,130,152, 76,143,228,169, 77,159,208, 63,144, 90,183,160,165,102, 70,206,170,136, 53,166,121,230,250,149,215,169,203, -202,249,217, 71,187, 24,160,214, 77, 36, 48, 18, 9, 58, 36,134,192,178,118,159,142, 14,251, 14,137,238, 96, 19, 27,168, 70,135, - 32, 91, 40,132, 14,251,133,125,180,153, 3, 54,177,211,230,146,166, 0, 51, 40,170, 57, 10,167,111, 83,147,122,102,168, 89,133, -214, 85,240,182,229, 75,251,168, 36, 88, 96,234, 10,244, 60, 37,208,188,133,209, 88,155,252,131,233,106,131,249,136,233, 53,205, - 42,237, 30,100,173,112,186,194,222,254, 91,200, 15,253, 62,120,242, 57,184,249, 0,158, 38,223,171,231,184,251,171,245,133,233, - 86, 0, 91, 0, 16, 90,216, 82,178, 85, 90, 21,184, 95,247,143,245, 70,225,179,147,231,174,191,113, 64,150,134,182,138,181,236, - 40,217, 83, 35, 75,243,157,223, 56, 14, 26, 10, 4, 23, 65, 15,195,141,110,123,158,112, 75, 65,194, 74,110,105,202, 47, 78,164, - 47,191, 32,191, 49,195,147, 9,222,186,130, 31,186,129, 89,144, 73,200,167, 66,123, 94, 40, 47, 22,202,188,255, 32, 59, 27,250, -195, 19,162, 9,251,176,210, 94,172,212,211,194,122,106,188,140,100,212,251, 2,167, 98, 30, 91,218, 46, 79,243, 26, 0, 5,123, - 16,252,160, 13, 15,185,121, 53,121,146,201,185,193,139,117,207, 73, 95, 10,237,220, 92,224, 19, 95,149,171,151, 45,212,248, 25, -249,169, 4,159, 1,174,255, 0, 28,126, 4,150,255, 27,110,255, 2,188,242,187,225,252, 53,248,234,207,193,147,207,134,210,172, -184, 56, 96,253, 0,206, 96,119,254,148,148, 42,164,201, 79,237,162, 66, 43,254,218,214,236,135,157,164, 61,242,120,239,192, 83, -246,209,242, 49, 11,105, 53,206,127,249, 41,229,220,200, 17,105,219,185,235,157,212, 54, 73,223, 97,155,239,209,213,199,245,199, -208, 44,108,216,220, 58, 78,191,100, 19,150,238, 88,207,248,255, 25, 82,141,123,173,117, 27, 82,240,243,155, 23,211,221,222, 37, -177, 87,180,109, 55, 44,234, 66,198,109, 79,152,118,235, 97,211, 30, 80, 35,219,100,173,127,111,235,192,138, 63, 35, 28,129,207, -136,240,227, 63,113,228,213, 63,251, 22,207,255,139, 15,184, 93,140, 41, 11, 95,122, 34, 92, 63, 86,190,252,109,227,229,185, 49, -137,120,134,184,244,195,254,195, 88, 89,118,201, 86,127, 13, 3,167,189, 63,204,100, 24,185, 78, 33,142,139,212, 94,150,232, 94, -206,192,157,193,213,131, 29,120,177, 29,130,212,199,237,149, 49, 54,245, 1, 36, 37,186,197,142,142,237, 57, 64,109, 3,246,216, -133, 90,191,178,107,141, 82,128, 95, 68, 19,102,141,181,219,218,108,199,213,122,190,189,109,175,227, 48,192,136, 42,198,179,102, -172,102,220,136,112, 80,223,245,223,197,251,235,175,249,100, 70,181, 66,149,152,233,164,140,137, 58,106,182,218, 86,208,235, 48, - 46,239,253,244,106, 14,181,121, 75,224,237, 33,108,187, 12,123,155,135,246,181,110,137,188,212,180, 95, 98, 95,237, 1,135,221, - 30,144, 9,101,224,216,203,240,186,218,131, 70,230,227, 94,120, 25,208,170,241, 89,199,207,154, 68,152,231, 25, 81,229,160,202, - 33,254,189,198, 84, 35, 11, 60, 57, 30,184, 21,225,188, 44, 1,156,106,172,197,208, 86,201,154, 72, 57, 83,171, 11, 60, 53,128, -103, 42,194, 60, 77,204,121,242,102, 34,108,224,170,234,161, 47,146,144,109, 39, 31,112, 53,213,203,168,191, 56,208,111, 66,185, -168,185,200, 16, 23, 59, 0,115,250, 73, 92, 58,251,165,167, 46, 90,187,248,172,115, 47, 16,211,213, 53, 34,202,249,195,247,177, - 86, 73, 49,234,182,230, 1, 20,219,152,183,141,187, 45,187,136,147,235,129, 15, 50,228,225, 89,219,173, 58, 59, 80,120,143, 94, - 53,177, 75, 11, 69,196,112,138,166, 16, 4,197, 62, 49,101, 68,213,243,129,251, 95,106,178,143,101, 84,125, 92, 29,159,152,166, -228, 16, 22,171,219,233,162,219, 45,242,148, 73,243,140,106, 34,139,255,156, 86,154,103,229,138,208,242, 68, 17,104,234, 65,142, -182, 86,236,121, 65, 30, 77,216, 47, 60,133, 47,254, 26, 60,250, 61,240,195,255, 0,222, 87,164, 30,144,171,130,220, 23,135,208, -212,225, 65,180,141,193,219, 32,234, 48,244, 84,177,164,148, 21,210,210, 72, 61,180,228, 83,192, 27, 9,214,140,190,172,216,109, -197, 84,105, 42,228,192, 80,246, 24,198,214, 62, 94,212,251, 15,113, 79,187,109,206,195,174,158, 95,171, 63,128,170,193, 11,132, - 9, 99,122,247, 30,253,198, 75,244,205, 9, 30, 39,228,213, 35,246, 5, 71,215,166,231, 71,242,119,206, 76,183, 11,231, 26, 98, - 30,241, 39, 72,250,173, 71, 79, 73, 59, 87,108, 41,212,219,194, 73,125,197,126,110, 91, 58, 42,181,250,131, 43,119,110,252,176, - 23,221, 31,226, 94,236,179,129, 94, 37,164,199,172, 62, 55,236, 46,118,233,203, 74,123, 89, 57,135, 29, 30,237, 15, 84,191, 57, -245,165,146,127,246, 10,249, 25,131,199, 95,132,155,127, 30,218,115,120,250,231,160, 28,225,230,125,248,234,191,135,253,124, 67, -254,153, 21,202,119,160,188,112,107,226,122,139,156, 58,223,160,145,102,229, 40,153,169, 56,194, 94,196, 56,215,202, 20,136,226, -121,240,214,247,110, 37,197,237, 80, 90,229,163,255,229, 67,172, 64,206,198, 77, 51,206,145, 69,211, 98,164, 62, 77,151,178,140, - 94,208,181,119,101,113, 16,242,137,211, 80,180, 58,119,160,236, 11, 68, 17,217, 3,157,194,251,170,125,160, 21,254,121,146,175, - 42,188,232,105,164,159, 93,238,253,146,169,131,117,194,179,219, 6, 38,168, 12, 55,104, 31,101,143, 93,171, 13,251,232,163, 40, -143,111, 18,203, 2,191,242, 47,125,131, 95,255,230, 25,142, 62,193,120,114,149, 88,171,112,223,217,255,227,142, 48,152,237,231, - 17,244,210, 71,188,136, 71,101,110, 9,145,251,186,198, 6,176, 84, 30,186,245, 14,140, 89,227, 78, 60, 15,196,191,137, 97,234, -240, 32,103,162,171,215, 11,151,118,186,135, 10,237, 49,100, 68,113, 29,196,210, 99, 79,195,106,184, 69,208,198,250, 43,111,207, - 71,161,104,102,105,133, 37,210, 38,235, 64,181,235, 5, 61,110,181,120, 95, 18, 44, 13, 47,250, 39, 51,142,182, 79, 78, 12,184, - 55,225,212,191,187, 77,136, 90,157,133, 46, 66,211, 41,172, 9,118, 49,254, 39, 2,175,122,242, 92,197,157, 3,111, 0,223, 30, -150,214, 77,118, 17, 95,226,227, 80, 25,249, 46,126,245,241, 23,210, 72,103,124, 16,190,178,233,133,162,144,183,225,226,146,143, -129,110,236,162,248,251, 33,207,127, 80,238,135,224,128, 24,204,170, 78,126,179,176,154, 86,219,234, 11, 8,215,243,140,136,176, -156,207, 62,245,141,212,202,181, 57,248, 71,123, 81,166, 23,244,204, 52,249, 1, 33,135,114, 85,194,182,184, 29, 56,181,139, 73, -251,159, 29, 35, 89, 7,173,205, 40, 69, 84, 15,241,233,246,241,109, 58, 34, 26,153, 12,109,111,134,154,131,202,198,252,217,200, -108,240, 14,238,112, 56, 96,101,101,185,125,177,239, 55, 25, 58,146,202,150,235,189, 73, 13, 98,124,176,157, 73,173,133, 77,104, - 80,207,137, 12, 40,200, 22, 2,162,174, 53,220, 97, 15,253, 43, 75,236,130, 58,149,180,219,232,196, 51,220,181,245, 55, 57, 90, - 23, 64,152,104,211,238,239, 52, 81, 87,104, 71,106,154,166,196,156,148, 89, 3, 76,146,149,164, 25,116,242,177,208,212, 3, 89, - 10,181, 54, 86,171, 84,170,127,192,171, 97, 47,110,189,139,126, 87,176,111,253, 60,242,165,127, 21,249,210,247, 97, 31,126, 29, -249,135, 9, 93,103,236, 84,145,114,142,194,240,192,110, 55,140,157, 22,224, 80, 27,237, 92,208,212,124,207,249,222, 9,189, 81, - 56, 28,225, 58,160, 52, 47,162,248, 83,177, 50,161, 47, 27, 89, 93, 36, 19, 43,159, 13, 50,163,253, 59,130,216,199,199, 13,210, - 6, 97, 83,183,204,244,221, 82,133,231,147,112,188,175,164,175,220, 50,127,238, 8,111,100, 56, 36,228,181, 71,190,199,126, 94, - 73,111, 29,152,158,159,152, 63, 44,156,230,254,176, 85,228, 11, 51,118, 42,216,203, 70,123, 89,176,106, 59, 71,187, 26,107,101, - 75, 99, 75,195, 67,106, 76,127,178,237, 70, 15, 22,127, 18,244, 73,114,232, 12,158,116,215,238, 35,137,237,222, 71,239,139, 25, - 75,235,211,159,184,129,138,248, 65,244, 79,190, 1,159,250,157, 48,255, 49,152,222,128,167,127, 30,158,253, 58,188,242,187,224, -254, 47,194,127,242, 11,112,243, 4,251,104, 69,222,248, 8,202, 45,200, 17,150,123, 88, 61,156, 72, 87, 33,201,196,141, 78,164, -183,142, 44,182,242,193,251,103, 82,114, 30,180, 6,216,163,167, 74, 69,102, 7, 53, 84,214,102,198,169,143,188, 67, 89,125,115, -244,110,189, 87, 9,213,125,188,154,197,187,216,237,144,208, 15, 79,246,128,110,221,175,169, 18,197,221,100,115,121,244, 15, 56, -137,119,236,210,161, 50, 33, 0,235, 93,134,163,228,216,216,195, 45,130, 43,208,228, 15,175, 22,105,137,114,233,155,149,102,212, -136,218,181,145,229, 30, 34,186,202, 14, 46,153, 50,124, 88,225,221, 95, 57,113, 90, 43,105,246,142,250, 84,141,191,247,237,133, -115,219,229, 40,213, 46,109, 98,163,112,175, 7,232,200,199,210,186,100,139, 18,221,195,235,108, 75,173,235,136,217, 50,226,119, -101,136,106, 53, 47, 88,155, 56, 45,174,191,177, 19,111,118,121, 96,233,130,177, 54, 92,191, 57, 38, 22,123, 96,138,127,118,182, - 89, 80,213, 15, 14, 97, 31,107, 6,247,213,173,173, 41, 92, 57,146, 18, 82,108, 83,213,111, 49,209, 92, 54,117,155,252,164,147, -253,226,247, 85,235,148, 63,225,206,224, 30,219,112,191,102, 59, 68, 42,137, 33, 45,214,152,120,150, 71,193, 40,165,239,219,133, - 81,164,222, 51,233, 39,241, 80,201,219,176, 65, 54, 60, 59,160,223,184,163,120,242,187,121,204,211,102, 69,148, 77,227, 49,254, -190,244, 64,180, 55,198,139,242, 0, 79, 60,166, 26,118,123,180,245, 70, 9,221, 82, 14,251, 10,163,103, 53,168,250,180,130,208, - 55,229, 16, 91,247,224, 50, 21, 31,205,183, 90,169,107, 27, 54,224, 30,222,226,186, 1, 69,163, 27, 79,154,226, 30,236,209,227, -138, 53,219,130,135,182, 87,168,186,217,207,122, 82,219,229,218,177,141,121,115,113, 16,145,224, 54,196,113, 53,103,255,253,181, -110,212, 57, 19,243, 70,180,121,103, 48,240,107, 28, 41, 45, 2,109, 93, 56, 61,251, 0, 43, 5, 85,137,209, 96, 87,221,202,102, -146,183,118,233,127, 28, 61,130,221,226,214,195, 26,122,164,107, 31,207,247, 81,225, 22,231, 55, 96,253, 44,126,221, 85,237,213, -197,114,216, 46,204,107, 30,120,226,187,246,200,217,238,118,163, 96, 90, 39,149, 45,173,216, 68,156, 20,166, 57, 0, 19, 19,135, - 57,197, 14,113, 9, 42, 93,242, 49,137, 37,207,124, 43, 11, 22,178,228,138,112,110,194, 25, 35,151,123,148, 10,247, 7,228,201, - 12, 95,254, 50,124,113,133, 87,254, 36,252,214,255, 24,202, 61,250, 75, 51,118, 88,177,121,193,206, 50,140, 78,108,195,229,142, -118,156,130,145,207,197,217,245, 87,130,188, 80,228,189, 16,206, 29, 20, 30, 77,240, 61, 13, 89,103,244, 93,207,162,183, 86,153, -111, 87,150,136,195,237,157,146,251, 51,219, 38,212,234, 57,222,163,136,194,194, 74,214,113,175, 29, 17,128,192, 85, 54, 14, 31, -156,200,255,240, 5,250,169, 25,187, 81,100,158,145,215,174,177, 79,175,232,103,102,210,251, 71, 14,207,111, 61, 59,120, 49,166, - 89,145,207, 29,225, 89,241, 36,182,115,219,198,145, 37, 52, 34,173,123,148, 35,183,219, 70,229,170, 93,166, 56,117,149,178, 94, - 41,242, 56,195, 44,216,125,133,151, 5, 91,188,123,110,119,133,117, 53, 78,230, 83,128, 20, 15, 29, 5,228, 30,210,111,203,240, -250, 15,193,213,159,130,252, 38, 44, 95,133,167,255, 35, 76,103,120,235, 26,254,231,191, 12,255,143, 32,127, 80,177, 91,243, 42, - 91, 79,174, 40, 91, 94,192,115, 65,238,253, 53,206,249,136,254,137,183,224,247,126, 31,249,231,126,149, 23,255,237,219, 76, 89, -209,115,221, 73,120, 3,247,157, 1,188,210,177,174,125,132,234,144, 65,225,224, 27,159, 56, 4,244,220, 1,127,192, 75, 44,239, -172,140,236,244, 93, 81,188,249,247,211, 94,137,100, 82,180,122,213,238,124,233,150,118,149,188, 5, 27,190,197, 31,105,170,123, -209,139,184, 97,205,137,154,179,119, 46,141,141,165,173, 13,215,125,152, 7, 47,245,112, 26,217, 73,200,126, 24,141, 80,154, 20, - 29, 82, 1,150,210, 40,197,255, 93,147,113,182,240,171,211, 3, 51,188,163, 95, 30,200,169, 55, 88,201,246, 44,113, 62,121, 25, - 14,197, 91, 7, 46,186,177, 48, 54, 1,227,144, 52, 82, 7,245, 80,142,239,105,142, 29,193, 26,180,189,218, 97, 44,225,135,110, - 1, 25, 42,109, 31, 77,143, 68,180, 78,163, 76,182, 91,236, 26, 66,141,168, 77, 53,227, 96,141,151,205,239,111,217, 52, 69,193, -127,143,235, 33, 85, 95, 1,170,184,128,215, 90, 76,162,182,130,238, 33, 45, 54,132,109,141, 14,174, 26,123,250, 37, 38, 14,218, -140, 59,220,123,190, 6,222,181, 4,227,126,233, 62,104,219,227,173,175, 5, 30,137, 32, 41,145,179,178,182, 18, 78,137,221, 27, -159, 7,183,213,163,248,236,239,245,242,128,110,195, 52,164,141,106,182, 40,224, 50,136, 73, 63,201,186,246, 73, 88,217, 49,126, -102, 51,100, 14,146,246,190,251,135, 75,102, 65,138,233, 71, 26,232,124,125,159, 62,231,204,164,153,166,123,250,103,214, 20,159, -181,120, 97,196,255,183,148, 18,117, 29,243, 24, 36, 4,143, 14, 12,114, 30,195, 52,172, 29,188,232,175,165,112, 62,159,246,125, - 85, 47,214,162, 81,216, 99, 50, 50,178,225,187, 63,222,218,112,205,219,230,145, 23, 77,144,252,184,105, 53,186,234,176,202, 89, - 4,202,108,235,240, 97, 39,149,189,219, 19,150, 23,207, 99,148,199, 94,140, 67, 41,222, 51, 75,164,237, 84,254,109, 7,208,125, -176,155, 2, 54,132,115,106, 23, 35,117, 25,114,217,181, 95, 5, 18,103,238,142,146,181,253,103,123,235,211,144, 41,145,196,247, -254, 82,107,188,158,136,124, 29,148, 22,162,126,186,202,105,194, 52,251,216, 35, 79,126, 58,107,141, 84, 11,185,174,126, 27,204, -215, 30,202, 37, 13,105, 37, 50,217,129,150,168, 65,189,195,217, 42,104,105,204,210, 72, 77,105,119,134,188, 34,200,251, 43,220, -253, 29,120,245,159, 67, 62,253, 39,176, 31,251,243,240, 62,200,203, 9, 57, 77,200,121, 55,151,105,218, 71,167,125,159,170, 3, -232, 99, 90, 26,118,172,212, 86,144,143, 22,210, 87,194, 59,254,217, 25, 94,157,224,243,134,174,206, 59, 55,105,112, 94,209,123, -219, 44, 80,163,250,180,200,101,190, 51,219,110,210, 46, 58,157,190, 59, 92,155,239,161,159,171,112, 93,141,249,155,247,204, 95, -191,131, 79, 37,184,190,135,199,215,200,167, 39,236,245,153,252,217, 35,237, 69,225,234,195,123,202,210,200, 79, 38,228,149, 9, -222,190,195,110, 27,173,122, 44,100,107,194,186, 70, 65, 11,121,109,103,138,247, 19,170, 93,156, 84,101,219,181, 37,112,224,204, -167, 34,211,252,133, 97,119, 94,208,157, 34, 87,125,180, 95,221,186, 52, 53,227,216,161, 51,162,200, 19,131,114, 15,122,140, 27, -224, 8,239,124, 7,126,236, 7,224,244, 62,252,185,167,158,208,118, 29, 0,236, 52,197, 7,120, 11,235,135, 91, 59,167,139,194, -143, 92,195,111,255, 52,188,253, 33,203, 95,253,144, 90, 27, 89,140, 26, 64,149,238, 21, 31,133, 89, 58,236, 10,219, 39,196, 83, - 54,131, 41,137,199,174, 86,187, 12,158,216, 86, 41, 35, 53, 97,223, 25,106,216,245, 46,158,136, 37,148,180,178,175,195, 52, 78, -114, 54, 27,156,186,141, 75, 40, 37, 30,180,213, 88, 66,237, 62,205,217,173, 59,165,110,215, 77,149,232,127,196,187,153,146,161, -157,135,196, 52, 25, 14, 24, 23, 22, 57,219,216,244, 75, 8, 58, 20, 99,137,174,186,198,137, 39,165,192,108,118, 69,222,158, 31, -187,117,163,235,134,247,188, 28,195,187,168,183, 3,129,188,251,221, 35, 72,109, 19,234,245,168,212, 78,238,115,112,203, 30,109, -171,120,150,248,135, 13, 14,209,181, 31, 4,110, 68,184, 18,227,118, 16,198,173,157,138, 57,116,229,105, 56,110,173,131, 23,165, -231,157, 79,248, 65, 70,104, 84,243,226, 57,245,149, 99,196,177,182, 45, 53,206,187, 63,107,142,136,110, 56,236,167,109,233,116, -131, 15,124, 83,209,239,249,225,125,219,183,154, 31, 86,150, 88, 1,172,155, 32,206,226, 85,235, 6, 46,170, 13, 42, 53, 98,105, -133, 67,154,168,102, 44,173,114, 54,219,120,248, 50, 28,108,110,100,136, 30, 30, 58,244, 98,151,161, 56,123,167, 61,136, 0, 31, -104, 24, 46, 16,174, 99, 71,223,181, 41, 67, 34,226, 30,246,181, 23,253, 61,238,119,228,188, 15, 52,205,254,247,105, 98,202, 19, - 57, 79,126,152,214, 60,208,233,108, 43,252,253, 26, 81,140,115, 74,225,168,104, 33,232,213,193,162,183,199,170,246,105,192,106, -141,211,233,158,245,174, 81, 75,217,236, 20, 93, 8, 71, 76, 4, 58, 79,196,185, 18, 3,191,101,176, 1, 42,130,230, 20,161, 84, -234,148, 76,139, 3,159, 57,120,173, 9,180, 18,201,113, 99,131, 20,112, 39, 33,117,248,204,238,237, 16,217,115,162, 53, 4, 1, -163, 54, 81, 31, 36,202,136,250, 30, 67, 30,230, 59, 52, 11,172,171, 93, 38,191,117, 53,109,236, 6,205,218, 54, 42,212,129,190, -211, 3, 11,114,139,145, 7,169,115,122,182, 81,155,198, 29,111,146, 34,130, 53, 78, 63, 41,185, 48,196,124,207, 46, 20,178, 52, - 38, 51,180,174, 8,179,183, 76,156,125,239, 81, 28,142,223, 90,115,111,123, 92,158, 42,226, 44,248,166, 28,214,226, 9, 97,103, - 64, 50,246,141,191,130,124,250, 15,195,213, 63,129,188,249,247,176,239,255,235,232, 59, 19,237,148,144, 91,193,206, 27,135,242, -130,122,100,131,250,187,198,193, 43,175, 21,206, 66,109, 62,122,209,183,197,213, 60,175, 31,225,205,217, 47,162,197,125,198,118, - 87,152, 94,156, 72, 27,242,112, 87,188, 39,221,253,188, 29, 70, 48, 2, 50, 30,142,178, 44,150,135,103,133,231, 9,142,207, 22, -244,107,119,228,207,206,216,107, 25,153, 19,188,126, 3,159, 62, 33,119, 7,242, 93,113, 63,231,243, 19,250, 36,111,214, 54, 43, - 45, 28,124,110, 89, 90,205, 40,205, 73,118,173,231,139,219,254, 96,218, 78,171,186,143,231, 82,115,224, 74,122, 37, 33,143, 34, - 7,247,105,120,211,173,209,150, 70, 57, 25,103,224, 92,124, 63, 76, 26, 85,245, 2,223, 94,160, 78,238, 71,151, 5, 94,252, 60, - 60, 21, 56, 37,236,143,255,111,176, 20,228, 39,175,176,215, 20, 94, 83,208, 79, 7, 45,232,153,179,241,107,168,211, 14, 10,185, -210,254,203,175,176,252,157, 91,158, 47,103,150,107,176, 83, 40,214,181,143,184, 98, 74, 16, 32,163, 1, 70,181,237, 43, 85,118, - 97,153,246,144, 8,193,221, 34,179,250,205, 95,119, 22,170,204,138,148,134, 84,223,233,181, 16, 22,166,126, 3,173, 33,122, 20, -193,170, 57,164,103,245, 20, 22, 75, 46,197, 54,240,140,121,226,231,212,128,230,152,177, 6,149,108,186,154, 96, 62, 80,207,197, -247,129,214,227,131,157, 31, 42,109,191, 88, 53,117, 49,142,108,157,122,178, 93, 4, 11,161, 79,159, 0, 0, 32, 0, 73, 68, 65, - 84,218,119,254,181,107, 86,226, 33,185,118,190, 69,127, 24, 70, 65,219,125,207,187, 53,213,198,209,178,237, 22, 88, 27,188,185, -186,141,194,101, 19, 65,141,224,151,141,182, 21,146, 3, 29, 20,213,182, 29,190,132, 89,225,101,137, 0,167, 16,207,245,115,222, - 85,124, 4, 79,217,227, 90,123,166,250,238,248,191, 92, 7, 48,216,166, 68,140, 99,168,198,155,249, 88,157,234,197, 65, 3,195, -186, 39, 91,249,148,102, 78,217, 57,240,107,217, 26,164, 17, 62, 83,227,103,106, 76, 74,138,236,170,253, 14,254,177, 56, 20, 45, -113,160, 40,246, 48,153,173, 33,161,207, 40,192, 18, 14,130, 85, 96,150,198,181, 42,105,154, 41,235,194,210,124,234,214,115,225, -123,209, 62,196,189, 90, 6,145, 96,150, 62,129, 12, 48,143, 13,140,128,161,208,202, 39,224, 93,199,181,203,244,224,247, 43,151, -180, 68,100,183,113, 93, 10,233,252, 59, 77, 26,246,179,152, 20, 95,105,230,230,120,224,120, 56,122,224,138,106,236,184, 97, 41, - 37,226,191,247,134, 32,247,196,197,136, 22,111,117,136, 81, 29,174,196,205, 18, 88, 27,118, 62,179,134,101,176,139, 88, 69,117, - 56,148,135, 35, 76, 6, 72,140, 74, 88,221,118,207,177, 4, 66, 86, 83,222,190,251, 62, 29,176, 90,220,205,160,201,233,131,181, - 68, 65,127,160,242, 80, 54, 91,119,102,243,141,239,234,204, 78,153, 75,125,116,228,179, 27, 87,192,142,128,123,145,109, 44,181, -205,228, 6, 70, 49, 22, 96, 14, 46,253,133, 58,140,215, 82, 20,231, 62,218,218,176,136,219,127,183, 24,153,168,143,222,123,146, - 81,107, 27,222, 79,106,245, 17,191,102,127,120,148,213, 95,163, 18, 7, 17,223,129, 38,205, 62,156, 47, 11,102, 5,180, 4,121, -203, 93, 77, 37,212,138,104,194,154, 80,214, 91, 88,207,220, 82,184, 90, 23,174,164, 96, 79, 10,246,228, 6,249,229,223,128, 31, -250, 27,240,232,159,134,249,119,192,155,127, 19, 30,173,200, 71, 17, 95,214, 60,158,207, 58,115, 59,152,220,125, 18,223, 6,238, -171, 86, 67,239, 42,109,242,116, 53,126, 67,209,171,236,187,245, 39,179, 7,175,220, 6, 94,242,118, 98,154,207, 28,151,253, 20, - 45,131, 95,115,156, 83,118, 38, 54, 17, 6,115, 97, 3,209,126, 34,246,145,252,189,192, 93, 53,230,111,223,145,190,126,240, 14, -253, 42, 35, 79,110,144,239,123,140,157, 26,169,197,204,251,215, 43,233, 7,143, 94,205, 22,159,168,180,210, 35, 45, 29,186, 83, -154,251,136,229, 34, 69, 40, 30, 46, 50, 90, 81,188, 64, 77,106,228,172,232, 43,147,199,111, 85,131,219, 16, 41, 90,195,238,220, -210,231,255, 56,178,115,238,118,156,102,200,169, 32,127,248, 77,120,245,223,244, 61,121,249,171,240,115,255, 1,188,249, 58,245, -223,254, 85,202,219,207,209,159,188, 33, 29, 28, 8, 40,175, 92,185,165, 77,143,192,215,225,105,241, 39,188, 25, 77, 10,235, 87, -110, 41,119, 43,119, 90,185,191, 17, 87,175, 75,115, 48, 73,132,218,244,107, 61, 39,182,160,142,141, 3, 80,217,114, 5,246, 52, - 55,223,107, 70, 14,104,252,225,120, 82,174, 97,231, 82, 55, 17,123, 86,129,197,131, 60,190,176,138,199,243, 70,197,115, 55, 73, - 66, 14, 19,124, 54,211, 62, 58, 83,111, 87, 90,169,206,173,239, 37,167,249,131, 34,153,184, 82,247,234,138, 38, 19,117,219,209, -249,225, 33, 73,218, 50,163,201, 96,107, 37,181,134,170, 58, 9,144, 22,211,180, 80, 1, 87,217,166, 19,157,110,231, 69, 32, 94, -165, 92,174, 89,250, 8,191,239,172,107,140,150,183,220, 2, 51, 46,229, 80,182, 69,212, 78, 61,111, 60, 40, 94, 83,172, 57,122, -209, 47, 12, 76,242, 56,155,117, 2,224,180, 41,184,109,235, 78, 83, 20,164,147,121, 33,186, 13, 10, 93,223,177,107, 0,100,166, - 0,218,116,159,255,204, 62,222,183,129,251, 96, 3, 24,234,198,195, 11,185,239,244,185, 64, 92, 39,205, 91, 16, 72,128, 55, 16, -224, 32, 66, 77,153, 22, 99,248,174,110,182,209,150, 58, 20,232, 98, 22, 62,123,219,194, 98,170, 8,103,219,229, 18,123, 65,183, -139, 67, 61, 3,111,190,191,238, 53,124,218, 51,120, 80, 76, 82,106,109, 44, 49,225, 24,133,129, 83,232, 15,214, 97,218,168,155, - 94, 38, 14,182,182,163,143,219,131, 88, 54,249, 46,136,216,198,152, 6,103,152,126,188,128, 63, 60, 8,140,133,212,226,161,146, - 36,113,147, 18, 55,243,236, 58,177, 16, 84,211, 26, 21,165,212, 74, 45,101,215, 44, 52,115, 59,170, 78, 20,145,184, 79,213, 65, - 97,181,238, 19, 79,219,167,103, 77, 60,104,167, 69, 4,249, 38,250, 86, 63,104,123,131,154, 6, 75,119, 76, 83,205,127, 79,132, - 54, 68,234,232,222,209,183,230,225,101,173,131,216, 58, 5,175,119, 63,165, 68,248,145,108,107,157,126,212,208, 24,243,107,206, -100, 25,136,114,253,100, 65,236,201, 68,245,162, 16,168, 61, 32,247,200, 62,154,178,139,184, 68,217,184,184,210,197, 11,129,141, -237, 85, 77,104, 36,113,139,155, 36,221, 72,113,238, 49, 84, 87, 18,183, 26,233,109,186,193, 62, 82,206,254, 6, 54, 75, 79,247, -181, 68,146,145,102,191,149, 90, 69,242, 76,158, 31,147,165,160,231, 91,223,127,154, 33,231,151, 52, 10, 54, 79, 88,154,105,154, -105,214,147,223,192,202,194,114,186, 71,207,119, 52, 86,212, 10,119,245,196,177,173,216,115,131, 55,142, 80,143,240,171,255, 53, -252,150,159, 6,249, 28,204, 71, 56, 84,247,172,207,193, 9, 94,161,101, 48,181,205, 91,216,253,205, 99, 84,111,105,144, 82, 35, -173, 43,245, 62, 30,108,223, 16,228, 21,245, 68,143, 27,133, 47, 28,144, 83, 67,239, 87,242,107, 7,174, 62, 56, 81,240, 98,211, -207, 34,205,188,112,248,158,168,143,180,109, 27,249,111,135,165,100, 27,139, 58, 69,210, 21, 17,184,177,222,173,228,111,158,200, -223,211, 69,115, 10,143, 30,193,231,207,174, 10,111,192,113, 69,191, 24, 33, 46,107,236,251,235,206, 34,239,225, 51,136,219,109, - 50,184,165,176, 93, 10,127,186,208, 45,137,113, 48, 35, 29, 5,121, 45,121,149,252,168,210,206, 22,251, 70, 79, 98, 91, 49, 22, - 83,106, 28, 72,114, 18, 14,147,161,103, 67,222,173,200, 23,127, 4,236, 10,218,207,195, 95,255, 79,177,191, 1,235,250, 17,167, -255,235, 41,233,173, 76,174, 43,201, 14,158,241,158,143,120,127,150,252, 17,252,124,141,236,119,197,158,195,242,116,225, 20, 94, -221,186,218,150,158,149,115,212,188,208,221,244,207, 89, 99,175, 33, 9, 74, 17, 90,218,235,182,141,163,249,108, 72,100,197,155, - 52, 44,123,113, 14, 89, 52, 29, 26,191,241,218,133, 11,120,135, 54,221, 1, 47,147, 32, 83,134,127,229, 83,240,217, 3,250, 31, -126,155, 90,206,209, 33,250,248,142, 16, 75, 9, 74,158, 50,109, 58,210, 52, 99,203,234,121, 8,230, 10,221,174, 34,119, 34, 76, -220, 95, 73, 60,199, 64,149,140, 4, 86,179,186,194, 56, 64, 25, 93, 9,223,237,163, 27,246,181,119,120, 50,186,216,227, 97,148, -148,220,252,190,232, 59, 92,186, 14,166, 23,180,232,224,147, 5,146,182,107, 24,108, 23, 85,150,232, 30,189,122, 72,164,209,185, -224,203,109,142,251,216, 60, 61, 56, 0,116,133,119,138,193,106,142,115,213, 93,180,111,147,200,214,141,246,131,207,129,221, 5, -176,196,159,207,221,246, 54, 8,149,166,112,100,200, 24,211, 73, 35, 91,219, 58,185, 53,158,119, 41,190, 91, 47,166, 57, 24,240, - 53, 58, 94,217,180, 18,140, 89,239, 3,225,173, 4, 95,160,138,196,107,186,156, 37, 92,166,125,217, 22, 37,219,189,215,206, 45, - 40,220, 33,156,106, 29, 92, 58,145, 11, 63, 56, 10,122,241, 61,117,221,204, 96,161,179, 49,196, 75,228, 65,158,123, 80, 31,237, -227, 43, 41, 99,156,184, 94,234,108, 24,179, 46,198,157,251,198, 60,215,141,141, 34,102, 28, 82,226, 38,103, 14,243,129,150,148, -165,181, 93, 81, 30, 7, 38, 66, 24,106,102,155,202,125, 19, 99,143, 8, 86,213, 13, 45,251,177,180,181,139,148,180, 33,252,165, -219, 78,194,107, 43,131, 13, 45,245,218,106,230,254,254,222,221,105,119,174,236,194,195, 86,155,119,153,189,224, 3,181,182, 13, - 3,155, 84,145,148, 99, 50,177,187,170, 36, 80,222, 89, 31,208,124,210, 86, 0,132,172,222, 49,212, 56,161,203,192,187, 87,185, - 68,245,245,140, 88,221, 0, 51,177, 87,136,108,224, 52, 18,132,122,129, 27, 99, 25, 69, 34, 69, 77,162,115,151, 29, 43, 27, 69, - 90,215,197,127,125,158, 64, 83,172, 2,116,179, 26, 32, 62, 98, 17, 19,106,109,176,158,152,144, 24,173, 24,106,133,105, 58,160, -201,123,212,146, 19, 77, 60,197,205, 90,117, 98,217,249,142,118,127,199,178, 44,110,255,201,141,180, 20,238,109,101,181,194,225, -217,138,125,180, 32,159,187,194,126,225, 61,228, 11,255, 3, 60,250,189,254,180,111,241,137,206, 62, 70,103,245, 44,116,170, 92, - 38,235,244,200,189,182,231,138, 87,115,134,115, 58, 25, 53, 36,193,249,107, 33, 26,251,236, 1, 94,205,240,189, 7,210,237,138, -189, 92,201,167,202,241,197,202, 26,184,208, 62,230,222, 34,108, 59,113,108,244,135,198,200,184, 19,208,146,185, 23,121,246,151, -140,102,163, 90,163,189, 56, 99,223, 57, 33,159,155,176, 71,138,228,140,124,230, 53,236,124,134, 50,163,175, 77,200,103, 15,108, - 56, 53, 1,157,140, 52,240, 51, 83,191,184, 2,166,160,241,179,219, 40, 78,138,127, 38, 60, 69, 75, 94,155,224,117,215, 64,240, -188, 97, 47,156,245,110, 75,165, 46,141,181,121,130,149,138,211,205, 14,201,121,222,233,235,149,233, 95,255, 34,124,223,207,192, -242,239,211,254,143, 95,164,252,217,247, 40,175, 43, 79,223, 95,169,175, 43,143,154,145,238,171,183, 40, 93,236,208,112, 47, 66, -249, 22,156, 86,120,114,128,183, 23,206,207, 10,167,218, 56,103,161, 54,227, 92,155, 31, 62,205,109,102, 26,216,210, 22,130,208, -139, 67, 83, 88,201, 44,198,148, 26, 63,202, 74, 8, 23, 75,207, 65,119, 37,189,220, 25,121, 54,183, 52,166,228, 54,190,178, 35, - 35, 21,115, 71, 64,168, 98,233, 43, 42, 9,107,202,181,194,219, 39,248,171,183,180,231, 43, 45, 9,182, 70,215, 26,160,120, 83, - 33, 77, 9,201, 19,150, 39,214,197, 71,143, 85, 50, 83,134,156,101,179,175,105, 41, 20,109,216,234, 7,195, 22, 49,200, 22,113, -198, 34, 50,196,146,238,225, 43,227,126,148, 36,180,234, 83, 9, 85, 33, 37,161, 52,143,133,244, 7, 72,194,164,109, 90,147, 26, -220,130,145,142,168,177,219,223, 16,210, 67,129,157,162, 8,183,182,139,167, 82,138,243, 80,181, 11, 17,203,212,113,190, 67,151, - 55,133,108,133,225,191,143, 93, 91,100,123,179, 98,145, 83, 94,204,187,123, 17, 23, 16, 55,177,109, 95,205,192,228,144,200,152, - 72, 50, 52, 72,157,157, 47,194, 74,115, 61, 70, 74,174,254, 15,118, 68,127, 50, 76,154,104,201,182,233, 99,217,112,179,118,177, -179,174,131,118,102, 51, 50, 68,113,242,169,171,186,216,113,179,208,170,251,210, 99,111,223, 45,164, 85, 52,182, 62,254,190, 59, -224,166,181,182,163,110, 5, 22,179, 77,148, 86,135, 3,145,217,199,107, 94, 79, 48,235,135,137, 29, 56, 35,151,108,118,123,160, -104,223,101,113,251,245,100,151,201,124,219, 36, 64,252,154,106, 65, 42,154,128, 67,158,152,210,228,147, 7,129,108,131,191,123, -195, 17,251,169, 80,209, 13,180, 84, 99,105,211,237,191,147, 40, 45,103, 50,194, 89,148, 90, 86,135,161,141, 19,199, 49,224, 53, - 10,184,201, 16, 39,168,186,143,222,187, 58, 90, 34,123, 52,224, 53,214, 6,213, 77, 76,114,144, 20, 43,176, 26, 71, 47,191,203, - 90, 43,219,129, 88, 73,190, 70, 32, 72,170, 61, 41, 53,154,113,171,149,156,162,235,117, 1,155,108, 2,183,142,235,179, 45,224, -192,250,148, 0, 21,121,128, 83,220,232,234, 67,231,190, 71, 62,105,156,110,250, 27,149, 7,194,162,174,114,223, 79,226,123, 70, -187, 52, 23,179,137, 26, 82, 26,180, 21, 59,199,206,124,158,144, 52,185,135, 93, 4,210, 76,210, 41,252,183, 11,186, 44,100,169, -232,225, 49,114,120, 66,182,194,148, 82, 88,105, 86,150,218, 72,117, 37, 89,193,202,153,118,190,141,194, 85,200, 42,152, 40, 38, -141,214, 10, 43,141,251,214,152, 94,156,225,163,123,228,205, 25,185, 61, 98,191,246,151,145, 31,123, 29, 14,175,192,244,220, 47, -199,236,237,175, 46,126,145, 86,147, 45,219,220,189,199,131,191,179,251,143,155,209, 84,152,107, 35,175,171,239,226,191,149,200, -175, 6,233,237,149,201,211,220,190,112,133,190, 88, 73,231,194,241,180,178,172, 70,233, 93,200,168, 6,102,207,229,182,234, 15, -206, 45, 80,174, 7,188,196,119,187, 11,215,124,236,213,206, 70,123,111, 37,125,112,118,209,220,225, 57,204, 95,128, 79, 63,135, -151,207,145, 31,156,225,115,115, 60, 69,187, 23,180,187, 16,100,251,185, 7,219, 89,233,157,105,172,145,230,149, 98,122,147,122, -146,214, 81, 72,159,202, 14,225, 41,134,189,112, 52,172,105, 11,101,189,133,136,203,233,109,135,100, 92, 41,228,175, 22, 14,191, -249, 9,250,167,255, 48,180,175,194, 55,127,149,243,191,241,117,238,175, 26,207,158, 43,167, 43, 33, 39, 56, 84, 56,158,138,175, - 11,172, 47,250, 15, 96, 79,225,244, 45,120, 23,248,112,165,252,234,137,178, 86,202, 12, 53, 11,247, 47,161,172, 46,193,184,146, - 80, 82,235, 5,253, 56,210,155, 66, 56,180, 4,186,118, 0, 65, 72,140,226, 39,221,169,114,152, 79, 49, 76, 64, 86, 67,151,230, - 26, 6,113,211,186,158,131,152,152, 18,122, 76,129, 72,139,252, 85, 9,156,237,210,176,251, 5,249,159, 10,237,206,168,186,250, -212, 36, 46, 46,205,208, 44,199, 62, 46,147,166, 76, 42,161, 27, 17, 65, 38, 31, 77, 90,144,180,106, 35,198,142,141,166, 33, 30, - 13, 30,128,180,182,175, 55,119,251,202,238,100,217,144, 21, 97,141,154,148,137, 68,163, 97,166,148, 13,228, 62,144,187,123, 48, - 14, 26,116, 50,127,148,229,224,117, 71, 3, 78, 9, 22,108, 70, 73, 52, 50, 70,177,230,163,112,177, 16, 28,183, 45, 54,180,196, -129, 9, 60, 91,125,142,103,203, 93,140,241,175, 4,158,168,112,109,112, 10,246,195, 49, 58,236,243, 70,161,243,251,170,167,152, -117,113,218, 36, 66, 22,183,175,217,208, 53,215,216,199, 79, 2, 47,251,245,109,187,245, 20,122, 42,154, 59,117,178, 8,107,140, - 53,250,190,217,175, 17,165, 90,114,107,110,107,219,238,124, 3,226,244, 2,223,187, 97,187, 84,232, 35,158,223,110, 81,176,251, -110,126, 22,193,242, 52,240,224,123,112,137,108,164,185,190, 43,209,141,208,231, 95,106, 21, 7,207,108, 93,185, 13, 69,157,143, - 91,218,122, 83,214,223,243, 88, 4,229, 65, 72,184, 92, 68,109,126, 18,152,102,215,163,116,252,240,134, 46,111, 45,154, 79,223, -131,123,168,147, 50, 69,195,215, 84, 88, 90,193,106,219,159,137,150,182, 58, 54,133,102,204, 6,209,165, 69,125, 75, 57, 51, 29, -103,238,238,149,243,253,125,104, 67,100, 23, 46,198, 33,175,141, 17,225, 67, 78,137, 6,156,101,231, 39,117, 55,148,110, 78, 13, -209, 20,182,187, 18,127, 69, 36, 24, 70,184, 26,170,174,155,137, 21, 67, 39,212,149, 97, 45,208,231, 39,170, 1, 2,243, 64,151, -125, 95, 34, 3, 31, 62,233, 30, 63,183, 77,238,101,207, 72,239,191,177,251, 4,183, 40, 86,141,168,209, 17, 27,185, 65, 38, 98, -200, 31, 97,241, 27,242, 48, 50,211,117, 80,179, 74, 23,119,152, 43,180, 37,132, 14,130,159, 54,165, 84,172, 45, 52,156,248, 35, - 57, 35,185, 32, 92,193,116,100,150, 35,201, 26,233,248, 10,114, 56,162,173,162,166,225,217,172, 44,171,113, 62,159, 56,148,133, -163,174,200,122, 66,150, 83, 60,235, 51, 18, 74, 19,169,133,110,250, 94, 69, 56,175,149,227,187,103,236,205, 5,121,114, 5,191, -112, 7, 95,252, 75,200,117,198,222,152,145, 95, 59, 35, 77,221,110, 52,123, 24, 75,137, 56,197, 14,251, 96, 80,128, 91,140,207, - 20,217, 92, 1,102,198,116,191, 80, 95, 42,242, 53, 37, 61,202,222, 78, 31, 21, 62, 51,161, 31, 30, 73,207, 86,218,205,196,213, -243, 53,132, 49, 62,102, 29, 17,164, 91,162, 26,251, 73,187, 71,157,174,198, 22,182,209, 85,164,214,101, 17,147, 97,119,158,184, -198,109,133, 87, 23,247, 72, 62,250, 65,236, 83,191, 8,223,223, 60,136,166,196,245,177,198,202, 37,137, 39,202,201,174,221,216, -188,215,116,254,121,140, 89,213,152,213, 56, 38,113, 33,250,213,132,126,102,242, 23,248,180,209, 94, 44,180, 82,105, 75,195,238, - 43,181,238,190,227, 99, 96,126, 15,239, 84,142, 73,200,255,213, 63,235, 67,193,242,235,172,127,230, 55,184, 79,133,219, 55, 39, - 78,109,128,135,116,195,248,105,204,172, 45, 94,212, 95,188, 3,239, 24,237,246, 76, 89, 79, 44,217,184, 59, 9,119, 75,163, 86, -139,117,133, 79,124, 14,129, 25,222, 66, 94, 82, 0, 98,100,127,208,117,156,175,196,238,178,117,184, 76, 40,198,123, 75,219, 25, -205,210, 97, 32,173,185, 54, 36,118, 34, 58, 41,114, 29,106,192,106,187, 90, 60, 78,206,118,223,168, 90,209,121,162,229, 74, 91, -188,123,151, 52,163,150,162, 7,201, 17, 97,170, 78,148,107,177, 3, 76,130,213,234,133, 42, 9,199,199,137,229,108,220,190,104, -126,244,146, 26,221,183,161,213, 15,244,190,207, 86,215,165, 12,166, 98, 25, 14, 43, 18,213, 93,213, 61,191,107,243, 81,163, 63, -227,211, 54,195,109, 67,186, 84,138,110,178,137,143,122, 19,251,222,162,197,206,210,129, 63,141,220, 26,171, 53, 23,211,185, 88, - 36, 28, 29,230, 59,116, 97,219,251, 75,168,209,231, 7, 42,109, 17, 56,102,225, 81,172, 0,102, 92,245, 62,197,234,232,212, 59, -217, 22,118,181, 65, 92, 54, 13,141, 72,143,144,238,135,180, 24,210,109,187,126,217,226, 86,117, 43,106, 5,139,231, 73,242,236, -117,107, 36, 75,219,110,187,196,206,197,215,136, 21,107, 45,120,240,145,106,215,131, 98, 46,118,230,114, 49,206,150,176,114,105, -206,172, 49, 86,151, 86,185, 81, 37, 77,137,186,174,100, 85,102, 77,241,153, 8,117, 72, 49, 83, 27,211,230,108,171, 0, 93,127, - 83,237, 19, 40,123,246,176,235,230, 19, 98, 91, 47,169,114,194, 3, 58,230,229,241,100, 3, 5,117, 91,181, 38,231,172,247, 6, - 70,163, 19, 46,214,208, 90,120, 52, 31,152,231,153, 36,194, 9, 56, 45, 43,247,235,226,171,220,172,204, 6,115,118,194,129, 70, -231,155, 85, 31,184,112,196,153, 13,165,144, 74,229, 56,207,212, 90,105,203,178,249, 86,229, 65, 83,187,129,198,182,131, 81, 26, - 98, 87, 29, 99, 46,195,193,165,131,108,188,187,175,219, 24, 94,100,248,189,234,135,119, 77, 62,234,107,197, 17,217,182, 37,214, -201,230,164,144, 97,125, 64, 10,161, 92, 22,241, 34,187,169,145,247,124,116, 6,128, 67, 15,161,232,153,204, 61,178,112,200,146, -243,223,151,186, 96,192, 6,245,124,139,241,248, 14, 15,216, 24,190, 49,122, 79, 15,144,143,186, 61,191, 26,201, 90,144,233, 52, - 14, 13, 1,178, 49, 67,214,157, 5, 47,226,172,247,252,248, 13,180, 9,106, 5,106,217, 78,143,102,149, 82, 87,218,114,166,214, -133,181,173,174,138,111, 5, 53, 39,217,137, 42, 45,180,164, 82, 87, 18,174, 64, 92, 12,238, 17,242,237,138, 62, 93,177,199, 19, -242,109,195,126,249, 41,242, 91, 95,133, 47, 92, 33,255,240,228, 7,132, 99, 66,107, 65,138, 56, 75,124,176, 58, 49,142,150, 58, - 6, 63,188,193, 77,216,176,136,114,187, 80,179, 32, 95,141, 76,250,239, 61, 56, 31,254,123,103,244,249, 76,186, 47,228,251,202, - 85,171,180, 96,126, 91,172,116, 82,236,238, 37,254,219,162,136,212,193,118,210, 71, 79,253, 6,110,221,184, 43, 6, 7,195, 78, - 5,121,214,176,215, 22,100,126, 10,250,143, 33,175,127, 14,251,220,215,144,227, 17,206, 11, 76, 9,185, 6, 61, 10,243, 29,187, - 48,178,231,144, 91,143,163, 29,252,232,106, 27, 69,237, 42,195, 85,138, 46,253,181,236, 79,148, 23, 94,200,237,212,176, 82, 89, -207,141,115,236,146,115,130,131, 26,215,207,141,235,247, 27,135,191,240, 59,225,181,239,131,250,183,105,255,205,175,115,255,203, -207,185,251,129,196,125,136,245, 54, 81, 38, 3, 46,183,198,206,163,189, 15,229,171,216,183,111,225,214,168,207, 23,214, 83,229, - 14,225,188, 6,253, 45,118,179, 73, 96,158,247,245,212,164, 67, 38,250,228,154,130,108,226, 33, 35,137, 13,130, 68, 4, 68, 28, -212,161, 44, 86,119, 52,103,210, 56,133, 75,132,252, 20,131, 99,114,172,235,117,232, 25, 68,161,149,184,103,186, 90,222,224, 62, -188,197,139, 33,147, 97,211,236, 31,206,148,193, 20, 61,133,143,176, 21,106, 43, 36,102,144,138,152,211,197, 74, 13,161, 79, 60, -137,143,215, 74, 89, 45,242,220, 91, 20,141, 22, 22, 59, 11, 62,133, 23, 46,107, 59,155,194,146,132,227, 98, 39, 40, 90, 18,106, -171,155,109,104, 23,110,218, 6,157,234,249,237,210, 31, 32,205, 59,118,149,202, 18,226, 50, 34,184,166, 90,115,239,127, 51,154, -181,173,251,222,233,109,238, 65,151,104, 40, 52,200, 90, 41, 50,213, 43, 66, 49, 99,138,208,154, 42,158,147,254, 40, 68, 66, 55, - 24,143, 66, 76,123, 14,245,253,125,147,109, 59, 93,163, 43, 94,204,191, 99,141,226,118, 97,233,165,179,225, 29, 38,212,243,229, -109,244, 85,119,220,170, 25, 90, 11,154,178, 71,211, 70, 87,219, 66,112, 88, 91,159,138,250, 29, 91, 91,163,152, 79, 14, 90, 95, - 67, 12,225, 54,109, 40,132, 98, 70, 13, 79,188,150,178,117,181,103,132, 84, 11,211, 52,123, 23, 26, 64, 22,217,152,239, 35, 25, -225,178, 88,239, 98,187,189, 32,136,109, 81, 50,151,177,170, 23,249,114, 50, 28, 57,118, 70,133, 13,107,215, 20, 35,242, 50,116, -187, 35, 17, 80,251,103,170,238,169,239, 19,177,141,170, 22,211,201, 89,132, 73,149,220, 29, 75,235, 66, 41, 43,143, 83,246, 64, - 33, 77,155, 48, 17,221,179, 70, 69, 98,234, 17,171,146, 20,130,183,165, 53, 78,203, 25, 13,203, 97, 75,142, 76,255, 88,186,172, -202,142,243,147,135, 0, 30,217, 14, 9, 61, 21,110, 43,200, 41,111, 68, 77,215,175, 57, 79, 69,165, 33, 41, 15,127,198,175,121, - 11,143,188,196,122,101, 19, 30,251,206,218,127, 95, 88,190,115,146, 94,196, 7,191, 92, 87, 21,142, 24,190, 30,152, 16, 70,122, -177,221,155,238,169, 52,122,153,166,163,151,244, 48,185,176, 53, 92,142, 91,236, 65, 84, 94, 15,150,215,126,160, 48,115,163,125, - 50, 52, 77,152,212,232,110,186,186,216, 80,107,104, 91,209,150, 72,229, 68, 62,223,146,174, 95,113, 59, 79, 4,206, 52,204, 85, -218,205, 48, 10,218,140,165, 24, 42, 43, 55, 52,116,242,113, 72, 46,133, 66,245, 29,162, 85, 68,252,193,178,152,144, 84, 40, 84, -166,151, 11,118,154,125,156,248, 43, 11,246,249, 59,248,204, 4, 95, 58, 34,207, 3, 66,160,201, 17,141,186,147,179,236,129,208, -133, 14,153, 8,167, 67,233,227,204,228, 76,215,249,197, 61,124, 27,242, 98,232, 1,223,175,223,100,228,139, 87,164,143, 86,210, -237,202,213,234,194,154, 83, 20,102,139,170, 58, 69,231, 94,213, 17,231,171,236, 69,174,119, 24,107, 53,230, 0,162,228,201,255, - 33,187, 77,141,219,234, 2,178,115,134,250, 2,202,123, 48,127, 30,121,243, 27, 48,205,158,212,114,173,164,155,153, 41, 47,208, -224,145, 54, 78, 83,140, 10,207, 70, 75, 59,225,169,169,167,169,165,216, 97,206, 73,184, 50, 72,179,122,151,126, 61,249,232,253, -174, 96, 75, 88, 6,106,165,174,230,123, 61, 17,142,201,184,169,112,245, 27, 43,215,255,214,247, 34, 63,245,135,160,254, 93,248, -165,239,176,252,103,223,102,249,158,196,162,176,174,238,147, 79, 41, 20,173,253, 3, 63,168,135,208,144, 97,253,154,255,243, 94, -197, 14,126, 83,148,210, 40,230, 55,125,138,148, 45, 11,237,129,180, 16, 29, 70,173,213, 14, 0,103,183,118,164, 9,210,226,221, -122, 45,126, 17, 79, 73,252, 51,142,162, 30,231, 91,159,148, 76, 61, 20, 41,238,185,158, 66,146, 35,189,239,190, 33,209, 36,200, - 33, 78,104,247,133,214,247,230,243, 68,187,186, 70,152,253,128,107, 32,101,161, 74,133, 86, 60, 92, 34,207, 80,205,173, 55,161, - 83,217,227, 33,149,151,167,198,139,175,159, 41,171,145,115,127, 16,245,123,175,109,185, 1,169, 99, 69,101, 55,151, 98,227,248, - 56, 96, 53,109,223, 53,118, 85,187, 53,118,165,182,238, 34,192,109,108,169,196,129, 59,236,164,205, 11,167, 2, 55, 98,204, 41, -108,178, 81, 80,196, 60,141,108,238,252,252,120,170, 46,209,121, 37, 13, 81,108, 56, 64,102,220, 50,121, 37,198,141, 65,214, 70, - 50, 15, 28,138,109, 89, 60, 23,124,152,115, 14, 54,184, 19,121, 53,148,213,221,183,174, 91, 23, 75,216,169, 82,232,130,146, 40, -215,129, 45,182, 45,122, 90, 6, 94,157, 11,165, 22, 51,164,214, 16, 11,123, 33,209, 13,124,101,219,107,233, 98,186, 66,172,238, - 34,205,178, 62,200,133, 87,131, 41, 5, 25, 48,246,253,165,249,207,152,187,176,170, 85,178,121, 76,117, 63, 20, 16,116, 53,213, -208, 22, 89,123,144,189,185, 79, 5,182, 67,224, 69,124,237,174, 81,223,145,166, 18, 62,243,113, 29, 40,157,155, 18, 94,255,189, - 32, 84,187,204, 87,235, 5, 49,117,141, 85,242,155,171, 95, 82,125,197,210, 35,193, 15, 41,115, 61, 31,152,166,137, 69,132,181, - 84, 82, 51,174,231,153, 73,117, 32,245,133,117, 46,234,193,214,188,118, 33, 95,252,251,100, 80, 83, 98,137,157,186,104, 66,163, - 8,167,160,196,245, 28,143,113,207,190, 43,229,189,187, 74,219, 97, 45,242,220,219, 30,236,226, 3,183, 70,211,208,141,116,209, -185, 78,238,226,194,168, 45,212,199,107, 25,178,212,195,198,217,239, 75, 42, 86,195, 21, 54,101,242,116,240,162, 46,221, 99, 25, - 93,250, 88, 84,115,156, 3,251,169, 96,227,229,110,233, 51, 67,118,174, 61, 0,250,199,131,163,143,242,253,130,244, 11,127, 31, - 89,200,198,148, 47, 33,154,146,160,206, 73, 31,247, 7,227, 84,106, 65,114, 70,167,201, 71,167, 33, 96,240,177,125, 35,203,180, - 37, 89,229,186,144,150, 19, 58, 77, 33,250,240,130,190,134,247, 55, 77, 71, 82,169,148,213, 56, 47,149, 99,134,156, 39,214,101, -197, 20,180, 86, 39,204,217, 46, 5,170,166, 20,171,126, 48,123,185, 96,167,234, 47,248,195,130,188, 91,224,179, 71,248,129, 43, -244,155, 39,236,219,133,118,181,146,238, 61,220, 99, 29, 68, 37,109, 96, 70,111,105,193, 67,144, 70, 1,172, 68, 26,215,189,113, -144,123,184,111,228,217,208,171, 87,225, 21,133,215, 51,250,197, 35,233,101,161, 45,149,235,211, 26,116,171, 62,234,222, 39, 41, - 83,160, 93, 79, 65,249,202,189,195,244,160, 58,146,121, 50,216,156,118, 50,154,157, 27,246,172, 33,183, 6,207, 43, 60,186, 7, -249, 22,200, 91,240,228,245, 8, 66, 89,163,147, 20,178,206,232, 79, 28,121,242,141, 59,206, 31, 22, 22, 51, 7,158,196,107,104, -178,239,232,102, 53, 30,101,229, 38,195,181, 24,249,241,132,190, 53,123,165,127, 81,220,227, 31, 48,161, 13, 35, 43,238,150, 56, - 34,220,124, 99,229,234,159,252, 20,250,167,254, 69,168, 95,129,167,191,193,250,175,125,149,245,181,198,250, 88, 40, 75,140, 89, -213, 34,159, 28,242, 44,232, 49, 35,175, 39,143,185, 77, 25,234,219,216,203, 2,183,130, 61, 50,135,251,100,183,202,117,228,173, -245,135, 11, 46, 96,156,122,104, 81,236, 24, 58,201,184,143,157, 36, 41, 51, 70,142,208,140,102, 30,216,162,215, 26,137,107, 70, -214,240,143, 7,171, 65, 82,140,190, 38,233,150,129, 56,208,164, 93,169, 98, 65,144, 58,227, 91,229, 99,114, 61,246, 60,251, 53, - 88, 22,228,182,248,228,100, 58, 96,156,225,254, 76, 59, 36, 40, 46, 18,213,161, 19, 18,141, 71,238, 82,188,152,171,112,152, 92, -136,216, 12,114,147,144,234, 4, 9, 43, 86, 60,151, 15, 95,183,224,136, 64,233,194, 67,149,205,122,227,173,243, 8, 81,209, 45, -106,150, 80,206,203, 64, 50,171,190,163,218, 82,186,174, 98, 61,116, 29, 98,189,206,166, 80,243, 85,207, 78,147,219,131, 89, 52, -108,115, 41, 32, 87,130,241, 72,140,163,134,157, 13,120, 36,198, 85,242,209,252, 83,217, 61,237,247, 1,156,186, 53, 47,236,247, -225, 99,239,212,198, 98, 18, 49,165, 18, 65, 41,225,194,136,231, 91,147, 68, 82,229, 17,112, 85,205, 25,236,209,173,237,132,224, - 40,120, 98, 44,120,104,136, 84, 65,226, 73,219, 6,149,187,197,201,167, 99,181,183, 92,141, 78, 66, 27, 60,222,143, 82,226,234, -112,160, 73,226,108,141,218, 92,135, 82,204,208,214,200,234,150,224, 28, 66,197,132,175, 19,155,213,173, 67, 77,193, 23,175,173, -109,220,117, 25,236,102, 15, 49,176,250,192,189,173, 97,173,234,148, 61, 25,208,182, 91,212,234, 32,163,223,119,242,151, 60,127, - 17,225,144,156,213,222, 15, 7,205,204, 41,125,182,103, 6,136,193,181, 40,143,230, 3,215,199,153, 98,110, 11, 43,117,197,172, -113, 94,171,167,204,137, 79,129,114, 82, 74,206,254, 51,154, 81,117,159, 73,244,235,184,198,122, 55,139,135,191,156,154, 91,203, -146, 42,150,220,121, 69, 78, 46,196,142, 52,209,206, 16,222,210,215,182, 32, 50,221, 14,161, 61,144,193,194,217,225,159, 19, 33, -248,219,237,141, 93, 4, 87,171,255, 76,119, 65, 52,184, 8,180, 29,184, 39,157,114,152,103,242, 97,118, 74,160, 88, 88, 87,122, -250,146, 74,248, 95,141, 36,251,120, 96,191,184, 2,201, 23, 71, 53, 13,244,100,139,236,114,122,135, 30,194,168,141,248,164, 67, - 18,141,236,169, 64,187, 27,113, 23,120, 73, 87,253,234,238, 99, 86, 12, 41, 11, 36, 69, 15, 71, 36,103, 39,206,181,182,137,175, - 84,253, 20, 53,165,196,148, 5,105,103,100,173, 52,157, 41,129,237,236, 76,102, 13, 63, 87,170, 43,181, 44,156, 16,174,167, 22, -239,185,251, 4,125,132,216,237, 62,221, 67, 89, 68,169,119, 13,121, 94, 92,149,254,116, 69,190,181,192, 77, 48,203,191,255, 26, -121,122,130, 37, 35,199, 66, 90, 27, 97,123,220,160, 16, 18,113,134,102,251,158,189,217, 16, 9, 41,134, 85,113,255,239,217,200, - 47, 78,208, 26,249, 58,161, 63,250,200,237, 87,111, 29,200, 31,172,216,217, 35, 67,231,165, 58, 73,106,208, 70, 72, 4,136, 28, - 38, 31, 91,175,129,146, 76,120,129,186, 74,177, 3,236, 93,123, 63,168, 95,137, 63,245,238, 11,188,200,216,203,132, 76,207,189, - 21,205,175,130,156, 65,110,247,157,204,191,252, 26,250,227,143, 56,252, 59,223, 68,191,245,130, 44, 70,202,205, 87, 32, 98, 17, -239, 27,254,226, 4,215,185,241, 24, 99, 62, 78,164,207,207,240,218,236, 77,221, 51,224,189,234,106,163,190, 14,154,225,170,130, -170, 49,127,171, 49,191,117,133,254,231,127, 20,236, 67, 40, 95,165,254,153, 95,163,220,159, 56,125,175,112, 90, 59, 10,221, 59, -144,131,250,168, 54, 29, 18,250, 74, 70,222,200, 94,212,173,193,253, 61, 60, 51,120,182,208,158, 47,212,151,197, 21,237,177,255, -206,225, 97,238,158,230,156,136,247,165,200, 33,102,165,159,196,186,188,241, 56,225,180, 24,118, 10,171,207,148,134,104,225,160, -100,217,126, 51,115,136, 49,252, 41,204,248,115, 66, 87,131,165, 33, 57,193,245,140,149,105,131,247, 52,245, 17, 29,107,129,219, - 6,215,205, 11,181,202,255, 75,215,187,198,218,150,101,247, 93,191, 49,230, 92,107,239,125,206,185,239,186,245,174,174,174,114, - 87,187, 95,238,216,198,118, 28, 36, 68, 94, 8, 41, 33, 65, 68, 40, 49, 8,137, 15, 17,144, 8,129,136,248, 18, 66, 4,124, 32, - 10,124,228, 67,132, 0, 5, 41, 34, 18,137, 18, 18, 57, 74, 8, 81,162, 32,199,177, 99, 76,251, 17,219,221,233,118, 63,171,186, -222,117,235,190,206, 99,239,189,214,154,115,240, 97,140,185,214, 58,213,198, 82,169,219,213,247,158,199,222,123,205, 57, 30,255, -255,239,143,217,132, 92, 29, 66,104,174,238,161, 47, 70, 74,134, 78, 26,100,171,224, 11, 4,154,204, 45,116,186, 36,194,133,237, -180,145,227, 28,227,108, 51, 19, 93,215, 99,223, 48, 36,123, 70, 68, 93, 44, 98, 81, 16,215, 54, 41,105,207,127,112,251,179,250, -207,165,113, 96,167,168,228, 45, 70,224,187, 16,176, 53, 36,114, 31, 45,253, 28,247,218, 20,228,213, 24,196,187,251,109, 53, 54, - 24,155,152,225,102, 51,127, 47,155, 67,193, 55, 28,108,146,143,201,235,136,175,106, 90,202, 92,187,200, 87,148,179, 41, 38, 19, - 37,136,110, 53,110, 39, 93,197,225, 74,179,147, 69,150,249,221, 84,216, 35, 12,243, 9,167,179,127,123, 46, 98, 48,174,106, 97, - 50,119,113,136, 38,191,116,155,128,173,117,210,234, 40,235, 36, 53, 16,178,161,188,143,247,225, 68,133, 27,253, 22, 82,102, 31, - 10,247,100, 70,175, 9, 83,165,212, 8,171,210, 37, 58,203,163, 3, 92, 40,214, 4,120, 77,185,174,162,113, 54,213, 89, 39,114, -141, 24,247,137,139,220, 86, 24,216, 18,107, 27,189, 6,230, 89,121,188,171,204,208, 33, 93,197,250,182,198,177, 71, 56, 73,137, - 77,191,225, 40,194, 52, 77,115,119, 95,205,102, 17,117, 1, 78, 68,184,185,221,176,219,245, 20,131,171, 50,113,113, 56, 80,198, - 66,210,134, 28,110, 59,231, 74, 53,245, 53, 13,194,104, 21, 43, 50,147, 78, 97,137, 52,157, 67, 90, 36, 99,253,134, 50,142, 62, - 49,233, 58, 76,149,161, 20,108, 58,206,238,134,182, 14,152, 87,198, 49,189,105, 59,255,164,134,106,142,149,156,107,138,106,153, -144, 41,244, 69,184,189,206,112,215, 86,109,191,115, 78,212,113,188,238,156, 90, 79,211, 53,185, 29,188,235,125,239,110,134, 78, - 35,185,209,110,146, 88,252, 48, 13,251,186,188, 41,105, 22,207,173, 2, 88,108, 81,175, 54,118,132, 10,171,172,216, 54,198, 95, -109, 90,196,171,108, 23, 4,233,108, 99, 19,107,187,188, 37, 36, 97,238, 98,194,139,167, 81,226,217,112,240,175,189, 57,129,148, - 17, 70,143,112, 77, 41,236, 41, 70,103, 5,173, 6, 82,220,246, 33, 27,175, 74,169,241,245, 12,246, 7,216, 95,160, 86, 48, 77, - 28, 20,100,156, 56,209, 26,118, 17, 39, 48,165,198,171,196,211,142, 42, 49,206, 54, 72, 79,134, 24,147, 42,245, 27, 71,244,165, -141, 43,213, 63,181, 65,223,222, 98, 99,161,142, 19,249, 48,146, 71, 99,140,162,168,169,207,215,226,145, 89,197, 26, 7, 76,198, -119,144,213,252, 98,207, 90,217, 61, 60,194,215, 47,232,118,130,124,118, 7, 39, 9,121,109, 67, 26, 38,236, 56,209, 31, 11, 35, - 49,102, 15, 98,157,197,195,211,169,199, 52, 86, 60, 16,166,226,108,155, 77,110, 41,110,174, 36,146,236,163,127,233,241,194, 33, -197, 50,113, 12,227,116,154, 32,221,129,238, 4,248,216, 47,127,128, 95, 61,192, 47, 92,113,124,115,160,244,126, 66,246,147,143, -242,187,184,212, 53,116, 19,189,192, 89,129, 93,175,164,155, 29,122,167, 71, 78, 51,100,144, 27, 9,249,209, 45,250, 0,236,109, -239, 76, 21, 79, 53,211,143, 42,221,101,162,251,235, 63, 1,105, 15,229,155,212,255,249,251, 28,126,233, 49, 23,175, 43, 23, 71, - 31,167,150, 54,161,104,187,251, 4,218,169, 83,240,158,237,252, 84,183, 61,118, 81,224,195, 3,245,205, 3,211, 59,123,142, 79, - 39,246,189, 95, 66,225, 6, 35,169,197, 78, 47,190,102,167,232,205,206, 33, 49,182, 36,136, 72, 9, 91,209,228,221,187, 24, 88, -175,115, 39, 47,185,241,130, 99, 15,110,235,232, 92, 9, 79,120,109,202, 32,215,139,140,130,222,190, 9, 63,114, 11, 6,165,126, -235, 10, 27, 14, 78, 80,196,224,120, 5,135, 1,203,201,139,220,228, 11,111,187, 26, 40, 67,133,109,239,232,200, 18, 62, 58,131, -100, 19,211,116,221,127,155,128,105,138, 52,198,134,100,166, 6, 79,123, 57,112,167,249, 32, 95,248,218, 9, 15,238,105,235, 54, - 31, 41,250,225, 45, 17, 67,170,248, 33,183, 22,221,106,251,194,169, 93,226,204, 77, 67, 75, 60,219, 38,143,178, 77, 10,155,176, -137,165, 86, 8,151, 74,103,117,158, 62, 72,117,161,220,214, 99, 3,226,185,181,217,249,215,244, 13, 38, 53,104,150,139,157,237, - 18,175,165, 26,188,133, 85, 62, 56,234,249, 16,230,179, 15,199,235,134,160,175, 29,178, 85,220,254,155, 76, 24,129, 93, 82,238, - 3, 15, 98,234,209, 37, 15,185, 26,163,123,254,100,146,217,100,149, 99,153,232, 85, 81, 73,116, 98,177,178, 75, 76,181,206,235, -201,169,250,153, 80, 26,247, 82,124, 34,209, 73, 98, 82,229,106, 26, 25,166,137,222,224,164,235,208,156, 29, 37,145, 36,194,184, -116,241,130,199, 51,178,209, 68, 73,142, 10, 46,120, 1,208, 70,176,134,206,226,214,235, 29, 98,109, 50,102,111,220, 86,184,227, - 58, 47,102,214,177,202,205, 41, 16,103,122,156, 73,149,235,107,215,132,115,218,181,239,184, 52,152,166, 17,177, 58,143,248, 83, - 43,136,128, 83, 21,238,108, 54,156,156,156,112,196,216, 15, 19,231,227,145, 50,142, 97,135, 91,241, 87, 26, 15,164,184,214, 67, - 83,132,126,155,145, 34, 12, 5, 19,114, 78, 46,198,171,222,201,214,184,179,186,156,200, 57,163, 57,177,159, 38,234,126,152,195, -142, 70, 98, 12, 82, 0, 0, 32, 0, 73, 68, 65, 84,100, 61,177,142,238, 60,229, 20,223, 35, 68,109,154,130, 0, 89,252, 66, 87, -161,142, 81,148,118,201, 87, 33, 17, 6,227, 90, 52,241,206, 39,172,214, 51,223, 97, 94,109, 11,218,117,104,234,144,228, 36, 61, -139, 17,143,249, 61, 26,129, 12,113,161,187,197,173,141, 82,108,222,165,251, 47,111,115, 50,206,236,213, 8,218, 92, 90,177,198, -175,133, 74,173,197,117,171,218,205,137, 89, 30,163,144, 84,220,163, 45,159, 64,206,174,162, 25,197, 19, 38,252,191,143, 7,191, -156,251, 29, 41,119,179,192, 45,165, 52, 71,238,121, 84, 93, 98, 40, 19,133, 35,208, 35,177,208,116, 64,254, 68, 46,197, 83,209, -106, 97,154, 38, 46,199,209,173, 75, 86,232,196, 40,105,237,173,176, 25, 5, 89, 13,166, 82,232,175, 10,182, 29,253, 34,255,184, - 98,223, 72,200, 23,207,252, 20,121,227, 12,189, 24,168,135, 14,221, 78, 1, 62,241,241,102,147, 20,213,232,210,235, 10, 29,219, -130, 23,166,128, 79,148,160, 17, 13,225,191,188,245,209, 21,124, 85,232, 78, 4,249,212, 9, 60,211,161,251, 13,250,100,162,187, - 42,236,246, 19, 99,136,230,202,234, 61, 81,241,105, 65, 19,109,137,192, 73,246,142,170,101,147,159,116,208, 63,151, 73,187, 4, -123,195,158, 76, 88, 82,100,175,112, 72, 80, 50,108,134, 88,153,220, 3,253, 62,236, 70,143,140,253,213,115,234,229,196,208, 85, -232, 96,115,244, 2, 33,137,103,133,111,213, 65, 33, 93,251,172,117, 74,186,223,147, 94,219, 33, 63,116,226,254,244,139, 10,187, -138,222,239, 96, 55, 81,190,191, 28,190,250,212,208,183, 10,253, 95,124, 13, 94,126, 17,134,223,134,175,124,204,241, 47,189,199, -229, 11,194, 83,131, 97, 50,134, 41, 54,124,137,217,146,101,120,112,137,220,202,112,214, 33,155,228,183,255,177,194,199, 3,245, -225,192,244,112,100,175,206, 21, 47,171, 24,211, 28,192,152, 90,133,205, 70, 72, 55,178,239,223, 6,107, 33,210,126,116,180,185, -105,245, 86,207,250,152, 67,237,146, 87,104,166,158,112,150, 13,180, 32, 99,228,131,155, 3,101,100, 20,164, 38,140, 66,213, 4, -121,139,228, 45,242,133,219,240,233, 29,124,237, 17,114, 12,242,119, 49, 24,143,179, 87, 78,108, 5, 81,221, 79,110,253,236, 58, -167, 87,237, 27,133,202,144,105,154, 45,140,204,211, 52,127,230, 58, 13, 57,148, 22,116,114,177, 85,242,164, 24,223, 97,202, 90, -229, 28,227,230, 16,177, 57,110, 88, 22, 16, 77,219,237,199, 65,221, 5,230, 54,205,200,100,175,152, 70,241,237,180, 0, 82,204, - 99,109, 81,122, 42,167,169,210,155,119, 57, 89,133,190,198,184, 51,198,201,106,190, 71,239,108, 97, 34, 52,199, 9, 26,137,120, -106, 43, 86,108, 3, 37, 41, 83,177, 25,161, 60, 69,177, 50,196, 20,111,190,104, 37,113, 72,137,130,172,228,164, 50, 59,128,150, -151,161,169,194, 23, 38,185,161,220,204,194,157, 82,157,172, 40,145,135,209, 32, 56,226,239,117,155,110,182,250,106, 50,159, 86, -172, 87,154, 35, 30,229,123, 52,207, 80, 47, 33, 22,172, 43,127,122, 1,134, 90,217, 79, 19,157, 21, 54,185, 39,165,124,221, 78, - 53,131,197, 90,231, 93, 99, 21, 36,228,148,221,243, 95, 67, 46, 87, 22,176, 87, 35,141, 54, 16,139,217,114, 46,175, 19,211,248, - 4,179,192, 86, 75,121,227, 19, 57,186,171,228,187,101,223,238,121,231,169,203,238,131, 95,173, 87, 45,206,221,214,160,108, 85, -185,209,247,244,253,142,139,105,226,106,154,152,202,228,116,183,150,146,214,242,215, 87,191,179,198, 24,159, 82,189,240, 22, 13, -202,160,206,113,164, 54, 67,149,108,229, 76,114, 96,205, 4,179,230, 67, 86, 48, 47,211,180,248,243,163,186, 45,181,132, 30, 34, - 45,235,138, 0,218,248, 42, 73,208,212,161, 93,231,133,218, 52,185, 69, 47,231,248,125,149, 58,121, 46, 59,215, 0, 84,113,161, -119,157,107, 13, 34,166,181, 80,103,222, 74,150,192, 87, 58,136, 36,199, 51, 16,192,144,160, 57,181,156, 88, 89, 91, 22,164,117, -210,139,162,213,154, 78, 82,100,137,212, 91,147,122,140, 25,153,233, 85,185, 95,228,206, 24,110,227,169, 37,115,220, 43,240, 69, -149,223, 10, 16, 49, 96, 60,186,122,180,219, 32,217,129, 50, 93, 74, 33,126, 80, 38,212,195, 7, 74,129,114, 9,226, 57,185,146, -178,123,177, 49, 87,130, 6,129,173,214,137, 90, 43,135,201, 15,146, 19,117,161, 84,153,194, 75, 58,115,152,226,124, 16,168,211, -132,158, 39,108,116, 89,182,253, 11, 69, 62,123,234,106,181,187, 9,121,225, 4,189, 26,169,251,145,124, 53,145,165, 48,182,137, - 67,120,114,219,254,219,194,233,178,142, 34,156, 9, 82, 85,226,242, 53,108,130, 59,239, 94,162, 95, 85,242, 89,130,231, 54,200, -243, 27,210,147,138, 93, 76,228,177,176, 25, 11, 99, 8, 52, 90, 70,114,139,222,148,128,151,109, 49,118, 59, 65,122, 33, 63,246, -110,160, 59, 83,244, 70, 66, 78, 19, 92,196,110,247,178,192, 69,129,167, 19,118, 43, 33,155, 61,228,167,192, 13,255, 66,201, 96, -107,112, 35,118, 67,131,119, 76, 57,138,177, 28,126,245, 19, 96,115,166,200,221,140,156, 40, 88, 38,223,233,209, 31, 62,129,231, - 59,159,109, 94, 84,236,219, 71,234,135, 71,170, 76, 62,134,142, 0, 21,222, 44,244,191,247, 30,250,199,222,128,195,155,240,232, -192,240,103,222, 97,184, 47,140,119, 18,245,202, 69,143,174, 19,104,192,155, 80,218, 91, 66,183, 29,242, 92, 7, 55, 60, 97,201, - 46, 39, 24, 10,118, 94,195, 15,236,227, 17, 53, 15,186,105, 62,254, 17, 97,168,222, 1,230,248, 25, 37,132, 17, 94,176, 46,237, -174,133,220, 94,178, 46, 97, 14,130,143, 67,170, 11, 39, 92,121,175, 81,164, 86, 82,205,232,233, 22,254,216, 11,254, 26,252,181, - 39, 72, 45,216,118, 3,247, 51,182,221,195,215,174,176, 55, 71,108,179, 65,108, 32, 93, 14, 62,109, 32,251,154,104,147,225, 94, -239, 54, 68, 5,170,162, 71, 79, 94,180,134,163,148, 58, 91, 28,115,245, 75,168,117, 76, 62,154,140, 67,170,113,133, 67,189,222, -114,213,211, 42, 6, 85, 34,202, 19,107, 44, 31,187,198,165,104,149,112,167,174,153,192, 92,132, 54,177, 32,217,124, 12, 95, 60, - 57,204,140, 94,161,163,178,203,198,137, 25,189, 88,232,100, 42,105,178, 57, 18,182,171,204,154, 4, 77,126,137,203,182,141,249, -252, 61, 52,109, 56,218,216, 21, 92, 78,112, 48,198,193, 24,173, 54, 66, 39, 67,248,212, 75, 60,103, 87, 6, 7, 83,174, 52, 81, - 77,200,237, 54, 88, 97, 79,155,248,169,185,127,170,197, 68, 35,132,114,168,114,196,232, 49,238,102,227,114,132, 75, 81,178, 86, -166,178,116, 90,110,255,108, 81,164,110, 87,115, 81, 86, 9,237,146,206,112,152,169,165,167,205,177,157, 45,242,211, 47,222, 81, -148, 82, 38,183,239,229,206, 99, 65,215,128, 48, 91, 58,234, 34, 11,156,162, 70,115,213,139, 96, 17,100, 66, 89,244, 85,173, 67, - 87,105,132,137, 5, 94, 51,195,195, 68, 87,138,246,197,143,110, 43,118,189,179, 11,236,218,212,246,147,220,246,134, 85,157,170, -133,240,122,217,119,183,180,201, 12,108, 83,162,203,153,162,153,115, 43,236,199, 1,105,226,202,217, 42,108,139, 18,223, 22, 4, -250,218,251,222, 52, 26,196, 5, 43,171,253,125,219,217,183, 66,189,121,196,169, 49,117,233,250, 85,120,139,251,230,153, 3, 86, -154,138, 95,230,132, 57, 23,171,118, 94, 96,148,202, 38, 37, 58,221,206,130,200,105, 28, 40,165,248,179, 92, 11,168,250,125, 84, -166,216,213,199, 94, 62,185, 18,223,125,227,205, 38, 61, 49,141, 35,101,114, 81,172,133,181,114,166, 33,229, 80, 69,206, 56,213, -230,121, 14,165,110, 83,232,206,113,111, 49, 64,153,247, 42, 81,249,172, 7, 76,178,234,216,219,161,226, 74,209, 22,137, 56,167, -179,207,204,248,197,202,182, 88, 30, 48,255, 59,218, 2,235,235,228,221,138,129,110,149,156, 55,164,228, 7,246, 84, 43,227, 56, - 96,157, 7,223,215,241,136,217, 49,126,164, 62, 58, 27,255, 32,187, 98,126, 36, 89, 13, 5,100, 88, 96,170,209,213, 66,166, 50, -181,204,160,216,145,212, 16,205,236,199,194,166,236, 73, 99,134, 83,168,211, 17,249,246, 21,242,229, 19,120,111,132,151, 54,232, -199, 61,118,121, 68,247,137,124,152, 72,161,130,100, 78,253, 89,108, 42,165, 46,108,225,107, 49, 58,141,126, 36,158, 46,149, 71, - 35,189,123,133,124, 51,147, 78, 4, 78, 59,244, 83, 27,242,121,161,150,194,201, 71,133,146,124, 95,105,173, 0, 97, 41,168, 54, -163,113,114, 91, 73, 47,119,176,201,232,217, 72,125, 80,208, 93,242, 67, 82, 4,185, 25,149,107, 50,120, 92,145,179, 2,119,138, - 19, 54, 78, 30, 67,221,185,120,107, 10,185,240,165,161, 7, 71, 24, 38,169,140, 42, 36, 42, 39, 25, 78,179,120,177,112,183, 39, - 61,223, 33,197,105, 7,114,175,131, 27, 25,134,248, 4, 13, 30,179,106, 67,161,166,226,118,207, 78,168,111, 87,186,215,110,208, -253,165,207,195,241, 28, 46, 6,234,127,248, 38,165, 76,112,187, 35, 87, 69, 58, 63,168,164, 84,180,214,153,148,183,153,140,116, - 75,209, 23, 58,120,182,119, 66, 95,173,126,154, 31, 10,236,253,123, 73, 31, 58, 53,112,236,108, 13,113,147,152,211,208,162, 72, -234, 70,159, 44,117, 40,253,105,162, 30, 42,146,234,117, 74, 86,246,238, 55, 50, 61,253, 54,220,184,216, 65,102,242, 12, 72,238, -161,219,193,139,183,224,245, 23,224,159, 63, 66,166,228, 10,248,103, 43,246,170, 97, 39,138,188,237,251, 53, 59, 76,144,139,175, - 60,162,210, 21, 83,172, 83, 56, 53,184,161,112,186,243, 61,252,211, 3,105, 16,236, 32, 14,223, 48,168,154, 72,181,132, 47,220, -174, 81, 31,101,197, 19,104, 71,159,202,146,106,214,148,224, 22,241,157,115, 50,151, 44, 97, 46,237, 83,157,212, 45, 99,205,250, -213,148,218,199,226, 57, 7, 41, 45, 7,110,159, 96, 23,174,134,173,193,137, 86,250, 90,232,173,178,105,221,109, 76, 20,146,170, - 11, 14,183,201,157, 0,219, 16, 27,206, 4, 35,159, 81,203,177, 98, 79, 39,120, 50, 49, 94, 85,142, 67,229, 88,224, 74, 96,180, - 37,139,189, 21,211,163,193, 30,229, 42,176,169, 73,213, 83, 45,219,142,117,150,123, 89,136,192,154, 45,207, 60,101, 77,117, 53, -176, 55,143, 16, 16,225,166, 8,119,181, 50, 33, 84, 81, 58,113,212,113,138,253,249, 36, 30, 34,229,144,150,130, 21,167,185,169, - 36, 84,109, 41, 78, 85,209, 90,231,233,145,138,239,132,107, 49,122, 21,186,228, 23,107,142,152, 81, 85,117,133,124,248,224,137, - 51, 83, 26,146,148, 21,136,170, 17,228,204, 47,253,172,194, 72,195, 34, 54, 94,191,175, 63, 77,212,145,215, 86,127, 64, 74,194, -117,211,219,181, 0,151,181,224,100, 33,136, 6,124, 74,163, 96,152, 39,150,203,184,191,157,133,105, 30,205, 43,170,221,236,245, - 31,135, 8, 55,177, 69,127,211,172,105,242,131,230,179,101,119,222,194,127, 44,144,171, 45,241,115,149,133, 94,106,101, 42,197, - 31,225, 6,146,105, 59,253,190, 99, 76,202,116, 28,194,206,162, 75, 60, 50, 66,210, 24,191,207,150,209, 64,218,154, 83, 30,114, -151, 57,212,202,120,181,103, 26, 71,191, 7,106,197,198, 33,166,193, 29,101, 26, 34, 90, 85, 80,241,221,185, 38,127,111,253, 18, - 77,212, 50, 57,199,190, 70,151, 94,252,147,153, 9,155, 73, 10,149,184,136, 43,127,173,145,191, 84, 2,189, 26,151,130,206,193, -216,177,167,105,241,172,109, 76, 35,243, 88,121,237, 57, 71,150, 74,183,141,161,116,133, 14,154,185,207, 51,140, 98,153,240,203, -106,151,183,142, 90,148, 50,130, 36,180, 78,174,168,239,182, 76,213,152, 38,183, 2,204,222,222, 90, 60, 98, 85, 20,155, 92,241, - 36,145,189,158, 39,131, 50, 33, 86, 73, 41,194, 1,202,196, 97,172, 94,120, 40,228, 18,225,133, 77, 19,148, 18,135, 82, 41,166, -212,108,236, 14,131,167, 21,221, 76,212,175, 94,145,222,216,121,107,122, 41,200, 43, 59,228, 98, 64, 46, 71,186, 99,242, 7, 91, -130,240, 22,192,142,186, 60, 67,115, 23, 33, 1, 25,145,186,160, 37, 90, 19,116,149,133,221,213,132,126,231, 10, 57, 83,244,135, - 21,110,103,228,141, 45,121, 63, 98,151,133,211,203, 17,203, 45,213, 43,124,234,201, 19,164, 54, 9,244,153, 14,189,215,185,215, -103,183, 65,243,136, 13,206,112,145,157, 34,219,132, 29, 98,199,123,172,240,164,132,167,100, 3,117,128,242,158,127,160,115,246, -101,228,105, 70,255,232, 13,182,191,126,201,254, 55, 39, 14, 81,180,157,221, 16,210,203, 61,122,163, 35,221,238,144,187, 91,111, -137, 30, 84,164,207, 1,106,136,209,223,227, 56,140,183,113,201,236, 5,222,129, 60,109,232,255,242,103,137,136, 37,234,127,249, - 38,211,119,174,232, 62,123, 66,255,217,158,124, 20,158,126,247, 10,100,244, 11, 55,246,158, 59,131,126,147, 72,119, 55,232,203, - 61,220,237, 97, 11,118, 89,124, 63,241,120,164, 62, 25,176, 99,133,228,233, 98, 0,150,161,143,145,171, 69, 17, 46, 57,176,161, - 8,118, 5,247,222,232,217,124, 97,199,254,231,159, 80,167, 64,228,138, 63, 43,154, 19,100,245,142, 61,133,176,235,170,169,177, -212,211,224,250,140,229, 30,235, 51,246,209,132,252,247,223,130,243, 17,187,161,216,231,123,184,215,193,243, 59,120,167, 82, 47, - 46,224,252,232,109,180,134,242,177,165,170, 5, 85,197,206,179,155,254,115,245, 64,163,222,176,152, 6,200, 20,203, 98,117,165, -151,172, 58, 45,141,164, 53,109, 34,190, 40,100,218,122, 72, 89, 58,217, 18, 49,158, 35,194,168,161,208,229,122, 28,172, 70,151, -172,226, 23,250,184, 2, 91,101, 93,254, 96, 39,198, 38, 9,155,208, 62,156, 88,229, 84, 10, 39,165,210, 71, 66,216, 76,224,234, - 19,178, 75, 62,225,185,145,144, 27,177,210,216, 5,252,189, 55,108, 50,120,107,194,222, 29,168, 79, 38,134, 67,225,105, 49, 46, -204, 47,243,171,234,255, 84, 96, 23,215,180,138,112, 18, 15,245, 52, 45,250,161,106, 50,243, 52, 52,110, 11,155, 67,170, 36,138, -238,184,238,213,173, 81,173, 64,119, 21,188,139,207,182, 34,220, 87,184, 50, 99,164,250,235, 28, 13,129, 91,148,108,190,100, 85, -132, 73,112, 76,179,249,233,155,227,210, 81, 81,191,228,235,146,227,222,137, 3,107, 54, 97, 71,107,194, 38, 51,119, 36, 76,248, -160,107, 95, 10,105, 26,233,187, 46, 84,248,118, 77,212,217, 4,104,196,165,110,113,224, 78, 97,205,146,153,201, 31,246, 61,145, -134,110,153,187,241,202, 15, 78, 99,249,129,156,116,215, 95, 88,216,185, 18,171,188, 1, 91,220, 24, 51, 78,103, 21, 22,211,183, -194, 73, 96,180,137,132, 50, 74,165,150, 50,143,217,181,202,170, 63,151,235, 13,101,184,186,108, 21,243, 75, 8,149, 83,245, 34, -162,125, 30,108,165,254,207, 81, 80,185,112,145, 69,204, 29,147,156, 34, 19, 86,167, 57,132,172,169,215, 83,140,197, 91,164,146, -198,228, 36,171,159, 7, 19,194,112, 28, 92,128,215, 30,154,176,155,146,242,226,227,207,157,127,254,115, 10,248, 90, 66,179,199, -131, 79,199, 1,155, 70,127,207, 91, 80, 68,220,179,158,114, 24,135,145, 69, 58,140, 71, 58, 58,105, 74, 98, 12,175, 43,171,219, - 92,193, 53, 81, 93,243,237,198, 11, 53, 67,246, 35, 86,206,116, 5,176, 97,149, 4,183, 6,246,155,255, 12, 57,118,100,109, 60, -178,192, 8,108,222,193,164, 32, 90,165,248,185, 5,163,150, 49, 2, 69, 90, 32,125, 69,166,227, 76, 88,210, 90,150,111,222, 76, -217, 5, 7,203,120, 2, 68, 76,218,108,222,221,141, 82,103, 21, 62, 1, 32, 27,195, 83, 97,146,232,204,144, 58,209,245,160, 99, - 65,143, 19,232,145,250,115, 79,208, 63,116, 23,158, 94,193, 89,135, 62,183,193,158,140,164, 99,161,191, 58, 50,168,112,108,187, -205,182,227,250,132,143,125,102, 82,196,135,176,173, 8,179,186,170,248, 28,208, 15,247,240, 53,200, 55, 21,253,244, 9,114,191, - 35,253,240, 14,187, 42,216, 59,149,147,171, 9, 73,194, 73, 32,162,114,245, 67, 32,223, 75,190,183, 22,133,167,174,182,150,109, -116,136, 17,106, 36, 2,210,139,251,122,106,129,190,243,150,166, 4, 98,178, 14,222,161,159, 36,152, 20,126, 87, 15, 63,117, 74, -250,202,185, 71,135, 70,151, 55, 94, 26,185,130, 62,147,145,179,141,163, 73,159, 3, 78, 59, 55,127,111,212, 47,219,247, 15,158, - 15,222,131,157,155, 7, 56, 95, 26,242, 64,216,252,229,215,224,246, 22,142, 21,251,251,239, 51,252,210, 83,242,167,119,228,127, -231, 89,248, 55, 63,207,238,255,250, 22,219,111,126,207, 39, 18, 82,233, 58,255,157,183, 34,116, 55, 18,233,165, 13,188,184, 69, -110, 6,159,255,220,253,239, 60, 41,216,197,132,237,189,186, 50, 53,196,148, 62, 53, 97,186, 95,244,150,108, 86,246, 14,230, 25, -227,251,247, 6,134,119,221,144,222,249, 0, 8,233,196, 81,175,125,246,223, 83, 98, 60, 60, 40,212, 30, 54,209, 41,245, 57,212, -226,142,166,179,113,240, 23,252,133,140,125,241, 20, 94,238,225,214, 41, 60, 29,224,205, 71,240,120,239, 0,154,182,147, 55,139, -156,231,234,221,251,113,114,150,192,137,139, 41,204, 12,142,145,112, 87, 66, 45, 63, 57, 39,160, 61,116,205,102,152,231, 85, 87, -179,246, 48, 91,217, 36, 69,112, 73,105, 25,218, 50, 71,107,106,203,176, 15,241,171,204,193, 28, 1, 80, 10, 65,237,166,105,112, - 48,138, 46, 0,155, 77,130,157, 85,122, 42, 39,165,112,130,171,221, 19,226, 36,189,118,153,223,202,200,115, 25,158, 81,228, 86, -176, 88,123,223,254, 48, 26,246,208,224,205, 1,190, 53, 80, 62, 24,184, 58, 20, 30, 2, 79,170, 3, 87, 46,205, 56,196, 20,126, -108,207, 89, 82,182, 34, 76,193,165, 79,209, 29, 78,215,206,167,166, 16,111,231,154,204, 59,230, 54, 50, 47, 1, 58, 73, 22,218, - 11,149, 25, 12, 83,112,209,220,137,192, 93, 17,246, 38,179,232,109,161, 44, 74,232,150,150,166,129,152, 18,106,173,212, 44, 36, -171,228,232,146, 81, 91, 49,213,101,209, 14,181, 38,167, 77, 18, 67,200, 38,225, 24,200, 41,209,137, 50, 97,241,191,217,181, 0, - 46, 2, 62, 67,235, 68,213,139,207,162,182,226,187, 47, 9,154,105,165, 22,175,181, 46, 17, 50,171, 81,177,201,239, 20,204,210, -104,106,139,162,254, 90,216, 78,243,115,179,172, 33,179, 38, 36,137,163,130,131,148, 39, 34,140,165, 46, 23,250, 39,114,217,215, -223, 91, 90,134,192,234,207, 53, 71,189, 6,136, 72,107,197,212,139,154,186, 74,224,211,176,158,205,162,184,249,103, 12, 17,109, -151,168, 99, 13,101,241,114,169,207,150,182, 6,163,176,133, 89,128,122, 46,130, 85,135,164,213,185,120, 82,180,235,145,174,167, -212, 66,210, 76, 74, 46,128,149,118, 17,168,227,131,203,225,128, 77, 83, 36,254, 69,113,223,118,238, 34,100,139,209, 80,169, 1, -123, 41, 94, 37,117,234, 30,186,214,105,119, 73,219, 86,197,243,150,227,135,112, 16,240,212,244,114, 94, 17,181,238, 91, 29, 9, -219,120,186,106, 62,146,101,221,109,135,247,212,253,196,238,159,108,255,158, 21, 85, 46,107, 27,217,217, 50,234,176, 16, 64, 37, -165, 76, 19,101,216, 35,221, 54,118,105,163,239,213, 52,207, 98, 0,207,151, 14, 73,159,116, 80, 70,176,137, 46, 57, 40,191,148, - 33, 0, 12, 54,231, 82, 79,213,149,174,197,188, 97, 45, 53,188,221,201, 75,210, 99,245, 81, 99, 46, 21, 61,140,176,203,216,135, -123,248,104,128,151,119,240,141, 61,114,239, 4,125,118, 4, 70,186,177,208, 29, 10,189, 44, 34,157, 57,189, 96,101, 29, 97,242, -110,103,253,137,173, 97,169, 27, 90, 65, 96,194,157,119,246,200,111,248, 30, 92,158,221, 32,207,246,228,207,237, 96, 52,228,163, - 61, 93,173,206, 11, 6,236, 10,100, 43,164,103, 59,127,253,223, 45,243, 2, 95,182,138,188,164,158, 66,119,238,193, 0,114, 51, - 33,183,179, 99,182, 0,246, 96,147,249,133,165,119, 96,247,216, 97,231,207,103,248,205, 11,120,255, 67,202, 55,247, 88, 54,202, - 16, 98,164, 17,234,247, 39, 84, 38,236,108, 64,110,119,200,235, 59,248,236,206, 47,160,168,224,108,244,184, 79, 94,234,144,239, - 87,228,201, 4, 95, 55,242,127,246, 2,124,241, 25, 56, 31,176,255,247,125, 14,127,225, 29,236,126, 70,191,176,133, 63,248, 18, - 92, 12,140,255,231, 3,135,148,244, 48,142,142,144, 61, 21,232, 79, 18,122,127,135,126,106, 7,119, 59, 56,203,161, 10,244,177, -187, 61, 29,177,125, 13, 48,132, 5,170,209, 72, 49, 47, 86,133,148,205, 21,170,157, 98,147,177,153,194,223,186,119, 21,117,218, - 40,218,139, 23, 69,189,248,244,161,207, 72,151, 80, 50,169,116,158,180,119, 67, 60,119, 62,197,129, 90, 28, 17, 41,150,144,103, -182,240,194, 6,123,101, 11,247, 54,200, 78,252,178,254,214, 83,120,116,128,174, 66,111,212, 41,194,129,178, 32, 83,197,246,174, -106, 55, 4,174, 6,159,202, 84,111,209,172, 84, 10,149,105,117,101, 91,169,254, 92,233,178, 63,151, 25,146,210, 84,110, 97, 95, -139,145,186, 7,100,248,243,137,185,247,190, 68,102, 58,218,226, 87,151,231,181, 29,120,173,123,203,210,164,169, 65,229, 83, 99, -107,213, 49,191,165,114,106,198, 46, 59, 96, 68, 52,185,149,111,151,144,251, 29,242, 74,134, 79,101,184,105,193,123,141, 31,234, - 80,225,253,130,253,214,128,125,123,160, 60, 30,185,220, 23, 30,152,241,200,101, 15,222,149,135, 61,173, 90,195, 89,235,162, 82, - 14,193,207, 80,195, 42, 23,254, 97, 11,220,177,152,143,176,107, 16,189, 90, 22,252,250,154, 26,173,101,168, 11, 59,243, 61,186, - 69,248, 77,193,139,111, 5, 54, 42,156, 90, 98, 84, 95, 3, 24, 45,252, 69, 81,173,140,101, 90, 40,154, 40, 69,234,188,211,157, - 68,230,102,166, 9,227, 82, 28,140,170, 50,251,157,139,234,188,251,183, 88,137,102,220, 14,151, 2, 57, 58, 89,120,223,109,105, -167, 91,138, 96, 13, 40, 75,155, 26,116,113,177,215,182,150,156,247,226,178,140,185,227, 18,171,149,165,163,255, 68, 94,186,173, - 98, 91, 85,210, 2, 35, 90, 69, 66,219,130,123,156, 47,233, 36,206,112,183,184,192, 75,208, 1, 69, 18,147,249, 51,107,115,144, -205,226,180, 90, 3, 90,180, 17,215,104,201,127,139,219,164, 89,183, 85, 21,117, 91, 87, 56, 11,162,128,137,104,111,230,100,205, - 40,120, 99,223,239,171,204, 20, 32, 52,115,125,215,204,221,158,131, 16,102, 65,120,139,220, 85, 73,241,247,253, 65,209,200,155, -149,216,151, 23,195,207, 94, 85, 82,246,188, 6, 11,253, 67,173,149, 50,140,254, 53,115,166, 78, 83, 76, 75,234, 42, 44,206,200, - 37, 46,117, 68, 80,243,110, 54,169, 99, 23,243, 60, 54,243, 11,221,218, 14,124,101, 79,149, 85,133,104, 44, 17,138, 18, 35,245, -198,166,109,221,118, 35, 25,249, 7,210, 47,174,142,240,255, 6,251, 90,114,176,125,103, 40,194, 53,164, 77, 64,108, 28, 2,144, -146, 98,184,117,195,198,176,187,229,157,255, 18,101,136, 49,142,181,156, 69,183,190,168, 91, 21,132, 9, 43,230,223, 59, 65,169, - 66, 77,254,230, 54,226,218,241, 8, 23, 19,212, 28,168, 73,129, 13, 5,180,167,152,143,210, 71,107, 49,140, 2,163,239, 60,235, -207, 63, 70,255,232,125,120, 33,195,247, 38,228,217, 13, 92,140,232,105, 97, 51, 78,140,147, 19,182,138,254, 78,214, 54, 79, 13, - 74,182,140, 68,155, 99, 96,148,101, 28,106, 49,210,186,245,214, 21,178, 17,210, 79, 10,114,179,131,151,183,228,131,191,150, 42, - 19,245, 48,145,206,139,191,127,247, 50,122, 47,183, 40, 35,183,145,245,130,220, 76,110, 97,219, 23,175,254, 46,194,163,156,197, -133, 88, 27, 89, 90, 54, 49,176, 27, 94,249,109,222,133, 47,108,225,231,207,169,239,236, 49,171,116,251,194,174, 86,183,180,103, -153, 81, 78,114, 55, 68, 37, 99,208,134,212,145,168, 54, 24, 92, 21,167,167,221, 21,120,166, 67,126,126, 32,253,225, 59,232,191, -253, 18,156, 31,224,131,115,246,127,238,109,134,155, 5,238,119,116,119, 13,249,197,119, 25,254,214, 19, 46, 63,184, 32,109, 11, -194, 68,234,220,171,156, 59, 37,221,234, 72, 47,237,224,197, 30,185,157, 32,157,225, 6,166, 10, 15, 39,236,131,129,122,238,241, -105, 18, 99,123,201,130,156,168,163,151, 53, 98,116,147,179,252, 91,214,164,181, 92, 0,109,234,246, 60, 79,128,164, 79, 72,159, -145, 41,163,251, 30, 94, 61,133, 63,246, 34,188,187, 71,254,206,199,112, 3, 76,139,219, 92,110,119,200,167,122,120,105, 3,253, - 14,145,201,129, 67, 71,224,235, 23,240,230, 1, 58, 67,212, 99,104,209, 58,167,251, 89, 68,131, 89, 54, 56, 19,108, 76, 48, 77, -126, 48, 23, 11, 91,153,215, 47, 85,108, 6, 19, 73, 89, 2,132,214, 86, 47, 13, 17,150, 7, 82, 44,161, 29, 50, 45, 98,170,150, -161, 93,139,135,228,156,152,115,251,109,171, 60, 25, 61, 0,166,206, 17,155, 66, 63,119, 97,174, 84,223,137,145,205,232,171,179, - 3, 54, 93,116,227, 57, 33, 93, 70,111, 37,127, 61,190,160,240, 98,242,105,205,104,208, 69,139,189, 7,222,169,216,175, 12,216, - 55, 14,148, 71, 3, 87, 67,225, 67,131,119,128, 39,109, 63, 85,151,226,184,160, 51, 57,172,161,146, 83, 76, 26,146,194,161,250, -101,222,197, 78,250, 72,140, 22,211, 10,230, 47,173,107,111,140,109,157,247,182, 38,194, 33, 10, 6,204,216, 97,215,252,236, 41, -254,220, 86, 92, 59,128,250, 62,127,170, 54,251,151, 83, 8,122, 45, 4,113,109,171,146,107, 33, 39, 79,252,234,197,129, 53, 14, -147,177,136,183, 14,122,158,180,203,221,226,156, 93, 64, 21,235,168,227, 74, 93,159,210, 43, 38, 72,200,186, 66, 48, 89, 98,202, -210,194, 78,174, 57,155,214,209,168,179,170,126,161,211,124,210,174,167, 43, 40, 77,155,114,204, 65, 72,107,117,252,108,199, 18, -122, 77,104, 86,166,226, 42,114,157,131,116, 52,222,146, 37, 76, 71, 87,169,159,203, 42,168,217,209,100,165,196, 95, 46,255,164, - 66, 78, 77,156, 39, 51, 32,166,173,152,234, 42, 31, 65, 85,231,157,185, 89, 89,105,171,124,215,158,115,246, 53, 76, 78, 46,112, - 4,186,156, 33,103,198,105,140, 70,215, 39, 45,174, 78,111,154, 4,185,246, 90,182, 76,248, 50, 28, 61,199, 93,148,113,156, 24, -142,199, 57, 82,188,148,137, 58, 77,115,218,165, 77,211, 53, 4,241,172,141,227, 90, 12,170, 63,208, 27,117, 95,179,243,129,151, -168, 71, 89,237, 97, 18,130, 78,227, 42,169, 42,198, 42, 43,187, 86, 90,193,253,155,114,147,153,145, 28,197,195, 60,138, 55, 71, -178, 18, 59,164,248,160,165,213,135, 69,172, 85,212, 45,102, 85, 65,210, 66, 60, 42, 5,134, 3,104, 70,180,199,202, 56,239,210, -125,102,228,227,114,145,142,206, 38,170,133,130, 49, 9, 41, 11,221, 84, 93, 4,167, 78, 64, 61, 31,220, 34,117, 12, 28,212,105, - 32, 79, 83,112,187,173,122, 14,251,100,133, 50, 85, 63,172, 81,172,102,100, 28,177,175, 60, 65,126,223, 61,120, 90,145,143, 38, -244,185, 45, 28, 70,186,195, 64,127, 89, 24, 5, 6,177,136,226, 92,176,139,141,192, 85,108,141,218,181,107,174, 16,137,240,140, -243, 44,164,253,196,205,111, 95,193,153,146,126,228,204,197, 96,111,156,144,206, 18,242,222,145,250, 80,169, 54, 33,157,160,207, -119,232, 46,218,243,187,218,192, 0,200, 29,193,158, 26, 54, 86,232,139,199,119, 62, 42,216, 78,209, 19,129, 59,217,125,105,147, - 57,243,125,243, 49,112, 6, 39, 27,248,148,193,239, 59,129, 95,157,144, 42,236,222,133, 77, 41, 62,182,238,133,244,122, 66,118, -134,108, 99, 15,170, 5, 30, 76, 46,238,186,211,195,126,116, 37,250, 69,241, 66,227, 59, 35,250,165, 83,244,207,188, 22,240,155, -129,225, 79,125,151, 3, 19,251,103, 51,106,198,241, 55, 47,201,191,116, 69, 46, 35,249,212, 11,210, 82,220, 55,218,137,144,182, -153,244,236, 6,121,165,135,103,179, 11,200,234, 9,240,216,223,243,125,133, 98,200, 86,208,211,212,160,176, 62,177, 72, 26, 59, -113,153,217,186,218, 39,183,250,152,239,220, 37,105,116,253,241,217, 74,206,120,214,146,225,216, 35,187,130,188, 54,194,143,157, -195,115,223,133,116,132,159, 25,131,207, 16,211,142,231,182,112,231, 5,247,122, 93, 61,134,203, 91,238, 52,248,245,167,240,207, -158, 98,251, 35,232,136, 93, 14,212, 67,137, 46,186,186, 54, 39, 69,199, 99,134,102, 79, 17,145,179,228, 35,105, 41,200,224,221, -118,138,176,115,139, 92,251,166, 82, 78,234, 97, 38,109, 45,169,107,113, 83, 84,151, 57, 78,101, 7, 24, 5, 80, 38,102,239, 61, -194,253, 62,113,251,191,120, 1,123,103,224,251,255,227,135, 92,198,100,201, 98,237,223,114,197,251,208, 55,228,166,137,233,179, - 79, 55,250, 30,217,101,244, 94, 15, 95,204,240,133, 4,207, 69,202,161,212,224,135, 86,159, 20,125,187, 96,255,244,136,125,109, -207,244,240,200,213, 88,120, 32,240,145, 9, 31, 1, 23, 53, 34,139,195,173,179, 19,137, 61,180,255, 74, 35, 11, 11, 62,205,222, -123, 97, 34,197,142,186,178, 9, 5,124, 11,159,146, 85, 67,226,137,141,203, 69,213,180, 72,109,236,123,136, 21,229, 54, 0, 75, - 67,216, 82,197,218, 42,194,245, 3,110, 91, 21,246, 8, 99,117, 27, 83, 82,165, 79, 57, 40,130, 53,136,143,144,172, 9,223,210, -194, 59,111,209,169,159, 24, 57,167,182,155,101,161,119,206, 58, 8, 51,142,102, 28,235,132, 20,167,203,169,164,121,181,103,171, -150, 76,126, 32,198,117,233,112,203, 44,238,189,238, 53,215, 8,173, 17,179,107, 87,122, 3,149,201, 44, 36,180, 31,184,208, 63, -121, 39,100, 81,247,113, 87,155,119,246,142, 1,150,101,154, 18,255, 62,175,130,115,218,123, 97, 13, 5,187, 66,220,182,213, 68, - 19, 29,118,177,159,174,226,154,153,180,122, 77,231, 46, 93, 3,115, 19,159,247,246,171,173,247,245,170, 74,146,206, 99,189, 53, -251,164, 47,116, 38, 41,231,160, 37, 70,212,238, 10,197, 46,230, 63,199, 84, 74, 4,184,120, 16,203, 20, 83, 20, 19,160, 76,140, -227, 24, 25,240,190,139,182,208,180,216, 60,145, 89,154, 62,105,200, 91, 21,178, 56, 46, 42,118, 72,254,224,122, 85, 36,116,129, - 1,107,223, 56,233,122, 81,226,187, 52,139, 93, 55,186, 84, 91,179, 9, 49,142,202, 82, 87,190, 62,245,175, 19,134,156, 85,252, -234,178,151,107,187,140,217, 98,186, 66, 8,154, 53,177, 74,162,180, 89, 98,163,182, 80,145,209,117,185,218,157, 69,252, 96,137, -241, 96, 19,165, 20,146, 9, 88, 70, 74,241, 3, 81,179, 79, 9,178, 3,186, 46, 38,184, 60,194, 16,120, 87, 34, 55,187,148, 74, -205, 62,166, 76,211,132,100, 65, 45,251, 79,168, 17,124, 79,124, 8, 78, 18,242,120,132,183, 14,240,198, 41,236, 7,228,208, 35, -183, 55,164,171,194,118,184,100, 28, 35,121, 41, 86, 12,195, 39,196,162,182,210,117, 92, 11,193, 41, 94,120,136,194,161, 24, 23, - 42,116,151, 19,187,111, 92,162,183, 19,242,185, 27,112, 43, 47, 36,190,206, 17,169,220, 84,116,167,126, 2, 25,126, 73, 39,247, -255,114, 20,236,162, 80,175,138,135,169,236,131,154,181, 55,120, 65,225,182,194,141,222,253,235,143, 65,110, 63,129,211,201,119, - 17, 93,129,159, 56, 67,198,129,244,124,239,135,224,113,164,252,220, 30,123,234, 35,254,250,107, 3,233,142,192,191,183,131, 91, - 27,151,241,183, 10,169,138, 91,231, 30, 86,248,229, 9,121,189, 71,255,252, 15,121,145,182, 63, 50,253,119,223,167,158, 15,232, -179, 14, 34, 58, 28, 11,114, 89, 56, 21, 33,159,248,129, 89,139,239,238,169,130, 72, 66,251,140,222,222,192,253, 62,148,252,119, -160, 30,177, 97,242, 11, 29, 67,238, 37,100,215,147,164, 58,154,182, 4,152, 72,213,209,173, 57, 4, 90,157,193, 86,231,100, 36, -114,236, 78, 34,115,211, 16,100, 76,112,165,240, 76, 65,126,252, 17,188,190,131,103,159,135,221,179,144, 94,131, 87,110,194, 75, -226, 43, 31, 20,210,109,232,182,192,235,192, 57,116,191, 0,242,219,240,181, 75,236, 23, 31, 98, 79, 15, 14,154,153, 70, 31,167, - 31, 29, 79, 60, 8, 30, 26, 83,150,241, 56, 21, 78,122,216,245,161,141,184,153,224, 10,244, 98,241, 13,231,100,243, 7,202,204, -199,240,141, 30,183,160, 58, 27,167,223,230, 56,213, 28,155,130,174, 50,143,170, 37, 40,182,218, 65,253,198,145,253, 47, 94, 32, - 98,108,179, 69, 30,144, 79,153, 54,209,145,247,169,229, 96,119,190,150, 56,235,144, 91, 61, 60, 47,240,147, 25, 94, 79,240,140, - 11,131,168,145, 59, 80,213, 89, 2,239, 21,248,133, 9,251,197, 11,166,247,143, 92,150,145,135, 10, 31, 36,225,178,192, 57,112, - 48,135, 52,109,114, 98,241,228, 64,103, 70,149, 58,139,180, 90,163,160,225, 5, 79, 49,145,155, 16,182, 73,185, 97,198,121,129, - 99,156,109,218, 46,238,192,128, 74,220, 96, 75, 40,211, 50, 46, 54, 17,174,226, 24,220, 90,116,221, 24,135,213,110, 55,137,178, -177, 58,167,107, 77, 85, 40,181,210, 25,244,169, 35,145, 16,117,239,191, 52, 43,214, 60, 74,110,103,175,206,158,118, 93, 34,133, - 98, 77,233, 14, 13,247,205,123, 87,111,230,103,216,222, 42,135,113,164,175,149,148, 59,191,104,155, 66,190,214,200,247, 94,243, - 69,150,139,176,196,101,154,227, 83, 82,100,249,243,218, 32, 52,178,104, 50,218,103, 41, 53,129,218, 15,156,225, 92,211,112,180, - 75, 57,171, 99,145,215,145,174, 26, 49,188,104,186,126,161,207,220,249, 69,155,213, 46,245,209,150, 48,157, 6, 65, 75,226, 2, -214,164,201, 95, 75,241,187,166,214,128, 77, 69,154,226,188,158,136,117, 64,109,130,230, 90,103, 98, 65,109, 43, 4, 3, 77, 77, -189, 31, 64,169,107, 97, 43, 14, 60, 86,105,160, 30,157,253,242, 57,103, 95,103, 69,242, 98,181,234, 15,118,131, 36,197,207, 48, -103,167,183,132,182, 85,174,187,243,175,116,145, 7, 70, 68,107,214,121,100, 83,231, 11,189, 23,101,163,158,122, 83,130,152, 51, - 43,220,237, 19,113,115, 49, 70,159, 13,242,178,140, 71, 90,153,223,242,179,197,156,147,156, 98,245,208,198, 5, 18, 33, 5,109, - 7, 65, 41,136, 26, 41,118, 42,106,139, 26,114, 78,251, 74, 14,151,241,113,186,147,165, 44,128,194, 58, 1, 92, 65,248,214,117, - 93,177,213, 58, 51, 35, 85,253, 82,150, 90, 24, 74, 97, 42,198, 85, 17, 46,139, 50,212, 26,249,238, 54,103, 24, 23,188,130,172, - 5, 76, 43,185, 22, 82,246,194,101, 38,200,180, 56,205,155,201,105, 89,191,113,142, 60,211,193,231,110, 34,191,252, 8, 57,235, -144,155, 29,221,126,195,174, 28, 40, 89, 60,252,195, 66,184,220,198, 99,178, 90, 51,217, 50,106, 42,109,236,212, 64, 16, 49,149, -212, 4,250,232,136,254,198, 37,249, 76,209, 23, 78,188,114,188,179,245,255,236,131, 83,127, 47,185, 56, 78,162,109,153, 12,158, -184, 40,205,198,138,125, 20,194,177, 27, 17, 32,241,116,130,115,139,181, 66,124,240,158, 52,139,230,165,171, 53, 15, 6, 83,165, -190, 85,177,243, 2,159,205, 78,178,217, 28,224,188, 96,239, 87,100,111,212,103, 50,105,112,224, 11,131,192,125,239,130,165, 86, -172, 40,156, 11,242, 76,143,254,231,175,248, 7,230, 98,162,254,215,239, 97, 95,185, 32,255, 27,167,200, 55,143,216,187, 3,185, - 51,250, 36,244,183, 28, 96, 99,183, 4,125, 28, 32,150, 62,161,154, 72, 93,143,188,188,113, 81,222,230, 6,200, 45,168,223,241, -125,236,211, 40, 92, 38,127, 16,109, 12,133,122, 23, 98, 80,151, 21, 35,103,217,167, 11,237, 56,186, 12, 43,154,198, 85,217, 59, - 71, 94, 70,129, 50,192,231, 31,192, 31,184, 13, 47,252,105,232,254, 45,224,121,207,108,151, 46, 88,232, 65,228,171, 71,144, 3, -212,115,159,111,151,103,225,240,119,177,175,125,140,253,147,131,179,211,111,185, 19,129,171, 52, 23,118, 58, 86,210, 80, 29,130, - 17,248,210,166, 93,188,186, 18, 54,135,202,217,101,229,244, 78,135,158,184, 66, 87,198,176,128,154,204,147, 6, 49,135, 96, 88, -117,139, 25,230,132, 71,196,150,223,127, 21,201, 75,195, 22, 71,167, 94, 42,140,201,184,184, 26,185,250, 43, 31,120, 80,207,198, -216, 82,201,117,233,210,211, 54, 35, 39, 49, 5, 49, 69, 78, 50,242,106, 7, 95, 20,248,172,192,203,138,156,158, 65,218,250, 37, - 94, 47,161,142,238, 14,120, 48,193, 47,143,216, 63,186,160,188,189,231,184, 31,120,164,240,113, 39, 60,173,254, 18,141,209,193, -245, 41, 99,125,239,170,226,232, 70, 59,170, 79, 26,155,247, 56,246,235, 45,206,115, 11,140,234,191,191,171, 93,156, 5,113, 43, - 25,143, 45,128, 49, 22,135,102,195,123,198,218, 79, 67, 16,103,230, 22, 91, 68,231,177,243,227,226, 86,216, 83,140, 46, 41,163, -233, 34,100,138,127,250, 56,124,173, 10,135,201, 41,233, 83,224, 98, 27,125,111, 18, 97, 50,119,156, 44,216,209,153,160, 30,124, -124,185, 70,101,211,101,250, 76, 49,153,181, 34,237, 76,174, 86,153,226,159, 84,151,203,166, 52,113,240, 58, 88,132,101,154,193, - 58,109, 79,150,181,131,205,222,121,167,233, 89,114,166, 6, 53, 76,127,162,215,246,236,242,131, 46,179,153,125,146,219,159,181, - 31,156,225,155,224,175,197,234,252,159, 0,147, 70,213,134,169,213, 0, 0, 32, 0, 73, 68, 65, 84,219,243,216, 94,230,232,156, -229,117, 81, 34,189, 45, 37, 71,169,182,163,186,169,145, 87, 29, 58,161,189,160,121,193,215,197,155,217,181, 21,115,173,205, 29, -226,186,136, 38,244,158,181, 91,179, 15, 62,220, 9,145,116,216, 88, 46, 42,194, 38,103,106,238, 56, 76, 19,101,127, 21, 94,247, -186,160, 17, 26, 44,103, 70,168,235, 98, 9,211,104, 64, 98, 37, 33,171,220,149,156,212, 33, 48,126, 57,250,222,162,235, 28,126, -239, 31, 88, 91,184,239,114,253, 47, 55,193, 1,107, 5,109,187,212, 91,118,114, 68,166,170,168,219,227,176, 89, 37, 43,241, 48, -172,195,219,136,110, 61,215,226,187, 48,117,170,211,252, 1, 66,230,136,171, 42,110, 87,107,244,187,166,184,165, 86,106, 25, 16, -237,253,227,159, 82, 68,109, 78, 48, 77,232,102,231,220,209, 38,224,195, 56, 86,115, 6,116,129, 94, 42, 53,169, 11, 22, 98,196, -227, 85,177,131, 98,199,234,232, 83,195,133, 15,218,210,214,170,127,218,228, 52,193,105,194,246,193,227,254,229,167,200,191,122, - 7, 62,127,130,124,101, 66,238, 22,228, 80,216, 49, 81, 47, 29,242, 81,164, 37,131,213,107, 84, 62, 20,234,180, 8, 75, 52, 38, -224, 98,254,193, 98, 21, 0, 1,130,188,179,103,251,255, 64,254,145,138,222,223, 64,206,200,105, 12,244, 6,115, 92,233,189, 4, - 27, 23, 78,241,113,136,128,202,228, 2,200, 27,234,218,131, 59,138, 22,151,194,219,183, 71,228, 94,204,181,178,250,133,124,225, -151, 34,125,137,156,242, 9,180, 80,127,241, 10,121,148,144,151, 51,114, 38,212,201, 24, 62,172,164,141, 32, 54,192,207, 61, 65, -106,135,220,223,248,248, 59, 11,156, 40,242,108,143,252,161, 14,249,201, 59,112,214,123, 58,220,111, 60, 69,191, 62,160,255,238, - 61,236,203, 25,185,115,197,201,223, 59,199,198,130,126,170, 67, 94,223,192,171, 9,123,175, 80, 59,245, 58,110,147,157, 82,119, -127, 7, 47,103,184,221, 65,126, 45,218,218,163,119,233, 79,221,162,103,143,152,215, 47,162, 32, 39,177,227,109,227,244, 11,131, -239, 71, 20,236, 16, 64,147,123, 61,220,203,112,191,131,103, 50, 60,179,129,179, 11,184, 11,188,242, 71,224,230,159, 3,121, 41, - 14, 35, 69, 2, 40,106,172, 96,216,186,195,108,239,119,230,240, 45,184,250,111,224, 43,223,130,191,123, 3,121,207,224, 86, 20, -158,210,193,198, 47, 92,219, 86,247,224, 95, 78,116, 67,101, 26, 3, 90, 34,194,216, 30, 53, 19,198,201,168, 79, 99,196,218,132, -129,173, 74, 28,205, 63,224, 18, 2, 86,107,201, 26,159, 56, 72, 87, 49,202,243,129, 30, 0,163,126,170,148, 99,245,120,119, 51, -172,103,129, 13,149,184,244,118, 29,122,218, 33,157, 11, 6,229,134,194, 27, 10, 63, 90,225,211,138,220, 62,133,254, 14,216, 45, - 40, 91,183, 23,118, 31,131,156, 99, 15, 43,252,194,128,253,131, 75,234,119,174, 24, 14, 3,231, 98,124,156,133, 39,184,244,162, - 70, 55,147, 82, 34,145, 24,147,131,166,106,241,255, 49, 5,204, 42,169, 81,138, 70, 81, 94, 87, 23,137,132,146, 60,176,201, 6, - 99, 21, 87,234,139,113, 10, 92,218,178, 59,157,130,209,191,140,225,101,161,101, 70,130,155, 2, 67,169, 12,101,138,125,185,175, - 47, 83,114, 16, 22, 34,228, 16, 3,154,248,104,189, 72,165,168,139,245, 26, 60,101,136, 8,205,150,206,134, 46, 23,185,172,246, -199,204, 96,153, 6,178, 90,198,204,178, 18,167, 21, 26, 94,215, 71,225, 89,252,220,172,113,190, 90,112,171,173, 69, 89,207,231, - 78,203,244, 88,160, 50, 33, 77, 91,130, 71, 90,228,174, 45,194, 48,239, 30,211, 53,122,220,245,224, 89, 89,208,200, 43,104,143, -173, 26,198,182,178,224,154, 59,106, 65,202,216, 74,104, 87,131, 23, 48,179, 81,218, 20, 64,150, 11, 93,147,219,192, 26,114,213, - 77, 3, 41,138,159,152,254, 94, 83,175,199,253,210, 22,247,171, 95,100,206, 82,151,181,189,122,121,110, 26,174, 28,187, 94,185, - 52, 16,205,172,197,104,147, 24, 77,216, 56, 56,132,172,148,120, 31, 63, 25,128,187, 48,219,219,152,189, 70, 6,132,181, 98, 39, -214, 1,104, 34,167, 80, 26, 54, 79,122,206,201, 89,183, 86,188,203,142, 28,227, 6,167,111, 54, 54,154,146,180, 77,156,117, 5, - 21,142, 56, 57,135, 22, 52,128,194,194,149, 95,239,240,172,182,177,150,205, 74,195, 20, 44,232,218, 80,123, 44, 94,238, 22,205, -218,144,126,181, 86, 23,195,232,226,221, 53, 83,204, 70,175,108,251, 46,194,232,189,197, 80,138, 31,218,147, 43, 35,154, 69, 35, -169,144, 10, 76, 84,127,248,114,199,200, 68,157,196,163, 91,101, 17, 15,149,234, 85,254,134,234, 36,188, 36,238, 5,158,189, 24, -201, 91, 26,137, 95,228,195, 43,236, 31, 22,228, 95,123, 6,249,124, 69,127,163,192,179,133, 42,198, 73,189, 66,174,202,156,226, -116, 40, 62, 13,152,234,242,192,174,247, 67, 83, 89,141,252,108, 53,162, 7,158, 4, 30,243,254,247, 92, 48,216,253, 46,224,150, -231,243,202,253,236, 63,188, 6, 5,110,140, 11,253,227,137,250,212,187, 72,233, 4,189,149, 32, 11,178, 83,244, 52, 56,233,147, -186,244,255,129,193,157,120, 17, 46,195, 51,125,244,139,222,142, 21,158, 23,236,215, 39,236,235, 35,122,123,139, 60,231,201, 40, -195,165, 79, 59, 78,223, 26,217, 94, 8,246,156, 33, 87, 6,255,124, 66,222, 29,208, 55, 78,144,207,236,224,133,157,139,239,206, - 71,120,114,240,116,184, 63,255, 60,156, 10, 98,133,252,147, 91,244,133, 51,236,241,136,156, 41,220, 21,236,124, 96,250,222, 17, -206,139,207,137,239,246, 72,233,225,197, 14, 94, 76, 72,247, 50,112, 31,236, 55,176,195,209,131, 98,246,147, 95,108, 55, 64,246, - 41,172, 13,130,140,234,209, 96, 59,117,144,203, 11, 9, 94, 2,121,190, 67,238,168, 71,217,157, 37,231, 50,119, 29,108, 59, 36, -159,123, 64,204,201,223,132,252, 67, 96, 7,252,155,156,198,144,112,189, 59, 92,119, 60, 27,255,185,116, 15,246, 25,236, 70, 15, -191,255, 33,236,207,145,247, 11,242,254, 1,222, 29,176,144,114,219, 20,123,201, 65,177, 81,200, 17,220,225, 68, 59,239,226, 40, -201, 57, 12, 71,247,111,201,109,215, 66, 72, 17, 56,138,171,199,219, 65, 81, 2, 19, 55,185,223,203,142,129, 2,157,220,179, 63, - 35, 86,187,198,202,117,103, 12, 83, 37,111, 42,233,106,162, 55, 9, 33,159,139, 8,165,203,200, 89,143,222,200,200,221, 14, 94, -168,240, 70, 69, 62, 83, 93, 63,176,187, 7,250, 50,216, 11,174,199,168,151,160, 79, 97,251,109,216,127,136,253,218, 8,255,251, -129,250, 91, 79, 25, 46,143, 60, 81,120,148,224, 41,202,165,197,206, 92,124,245,102,125,162,144, 24,131, 6, 88,235, 98, 11,173, -225,199,238, 90,160, 71,235,192,102, 11,149,119,229, 86, 23, 36, 74,141,189,120,138, 67, 63, 71,215,213,198,224,211, 42,199,187, - 1,119, 8,251,108,173,149,169, 86, 74, 83,177,171, 50,168,114,133, 43,220,219, 4, 51,209,130, 95,252, 60, 57, 11, 86,198, 85, -236,171, 75,228, 82, 28,195,177,210,226, 74, 91, 90,187,239, 83,151,152,207, 54,181,107,151, 89, 35,200,217, 28, 44,162,115,126, -117, 70,217,197,200,119,140,179,217, 21,252, 49,250,173, 17,101,208,162,117, 87,163,110,107,251,234, 21, 77,206, 47, 70,153,109, -192,173,246,107, 54, 64, 51, 89,165,170,203,130, 9,151,117,244,248, 66,140, 55, 18, 41,186,254,250,137, 26, 83, 35,164,234, 90, -108,227,156, 75, 34,171, 8, 95,153, 47,230, 44, 74,151,148, 28,107,218, 98,117,190,115,154,160,173,113,248, 87,154,181,184,124, -101,101, 17,188, 62, 89,208, 54, 94,215, 8,253,194,174, 79,176,195,182,214,146,229,148,235,174, 16,107,247,104,236,162,199, 82, -152,198, 1,155,202,220,184, 54,123,159, 3,215, 22,225,223,124,130,212, 58,175,162,175,197,165,167, 72,226,203,186,228, 9,103, -241,127,145,196, 51,151,211,156, 90, 35,159, 24,191,200,146,161, 28,168, 88,105,114,248,168, 74, 93,108,192,188,155,202, 45,155, -121,189, 7,170,126,216,183,230,123, 86,165, 54,250, 25,209, 93, 7, 66,176,174, 94, 12, 52, 33,165, 98, 26,138,219, 98, 75,254, - 37, 62,147, 76, 12,152, 36, 76,195,122, 87,195, 2,100, 78,164,107,193, 49,105,138,208,135, 24,111, 53, 59, 72,171, 82,221,169, -224,113,130,181,217,122, 66, 76,100, 54,162, 83,136,240, 84,252, 66,200,213, 41,105, 10,182,137, 41,193,175, 63,129,187, 32, 63, -253, 44,114, 57, 34,223, 50,228,190,223,255, 39, 15,174,176,125,153,157, 1,173,198,169, 43, 38,192,114,193, 7, 56, 33, 14,150, -186,202,103,239, 12,158, 36, 72, 86,185,247,206, 21,114, 75,201,159,109, 28,222,236,106,226,171,234, 62,237,161,192, 59, 19,246, -177,143,248,228, 52,222,183,187, 29,114, 43,102, 92,247,123, 7,125, 28, 35, 21,227,213,173, 47, 86, 63,246, 17, 54, 59,247,228, -217,195, 1,182, 21,238,184, 80,171,124, 52,192,183, 5,253,169, 45,233, 86,162,255,120,226, 88, 52,154,229,130,156,184, 69, 73, - 48,236,171, 71,234, 87, 38,244,207,158,249, 7,241,209,232, 85,214, 51, 27,248,153, 31, 3,158,194,111,127,215,147,200, 78, 39, -244,139, 91,224, 20,123,162,240,193, 17,251,213, 3,188,239, 2, 59,189,211,145,158,239,224,229,206,119,180,155,231,192,222,136, -177,238, 3, 56,132,223,233, 2,120,108,200,211, 16,152, 61,215,195,171,217,157, 10,207,116,176,235,130, 5, 29, 50,234,193,124, - 18, 49, 21,255,221,199, 2,169, 64,189,194,110,191,139,124,225,207, 2,207,192,248,115,241,193,253,162, 91, 41, 63,153,147,136, - 93,199,206, 49,184,114,176,255, 79,144, 47, 30,224, 71, 0,221,196, 31, 63,135,242, 17, 82,222,134,171,127, 1, 79, 63,134,143, -223,135, 15, 62,194,158, 94,194,135, 35,246,142, 33, 79, 42,156,251,186,138,223, 43,240,211, 55,224,191,189,192,222, 44, 88,144, -241,216,182,168,173,234,130,140, 62,140,219,146,252,193, 63, 77, 46, 97,235,182,110, 49,212,248, 20,214,240,113,182,104, 54, 19, -191,244,179, 91, 30, 73,113,161,107, 8, 11, 95,234,144, 47, 41,188,106,240, 66, 65,110, 3, 55,110, 67,255, 58,232,143, 1, 47, -248,243, 57,137,175,199, 54,191, 9,245,171,240,214,199,216, 95, 27,176,255,251,130,233,225,129, 39, 76, 60,232,132,199, 8,251, -234,186,145, 42,226,199,126,206, 78,167,171, 44,155,218, 18,211,123, 91, 68,165,251,144,217,108, 88,118,211, 54, 71,207,198,152, - 27,239,134, 55,205,162, 21,193, 39, 21,241, 12,114, 81,247, 19,199,122,171,145,228,166,150, 32, 97, 48,213, 41, 18, 29,189, 88, -232, 82,162,170, 35, 71, 47,195, 37,152,163,113,232,162, 70, 42, 65,121, 20,132,211,152, 0, 28, 35,209,205,226, 28, 25,165,197, - 39,219, 34,101, 51, 16,169,215, 46, 29, 89,141,143,107,236,227,230,169,158, 56,146,184,134,251, 32,167,224,170,151, 50, 55, 86, -172,144,172,149, 5, 22,182, 14,209, 54,187,174,110, 23,214,105, 44,114,237,251,137, 74, 32,135,109,190, 64,215, 95,207,184, 62, -150,149,185, 75,142, 56,217, 38, 20, 91, 53,140,245,255,199, 40, 39,235, 78, 89,184,246,253,100,134, 38,249,138, 36,205,190,126, -153,199,243,105,245,107,148, 64,233, 74, 48, 22, 26, 66,215,102, 77,153,223, 45,147,212, 89,135, 50, 77, 5, 49,111, 2,105, 4, -185, 90,175,249,247, 85, 82,120,221,203, 60, 97,105,130,231,169, 26,195,112,164, 14, 67,228, 51,172,108,119,117, 73, 73,186,206, -240, 95, 23, 25, 50,223, 25, 77,151,160,170,228, 20, 21,109, 78,121,190,208, 83,140,143,242,250,235,124, 2, 93,170, 18,152,201, -150,139,220,162,234, 0,173, 83,112,221,151, 61,131, 4,100,161, 37, 55, 49, 91,178,196,141,255, 45,123,221,150,168,214,212, 0, -251,177,255,209, 24,125,153,102,175,174,109,106,132, 93,175, 44,219,104,205,138,243,179, 11,212, 58, 33, 37,249,215, 8,238,165, -213, 35, 73,179, 71, 75,214, 37, 80, 48,135,221, 36, 69,151,162,171,143, 81, 99,209,143,204, 25, 54,222,236,104,117,130, 86, 96, -114, 57,137, 8,183, 41, 72, 49, 49,190,177, 51,193,126,238, 9,250,220, 22,249,242, 61,116, 4,190,103,216, 29,255,218,167, 31, - 95, 81,169,243, 95,173, 6, 71, 91, 72, 8,117,165, 26, 45,174,247,155, 43,225,118,230,246,234,213,231,195, 14,242,193,184,243, -157, 75,228, 76, 73,175,135,134, 55,103,207, 90,109, 85,193, 14, 23,139, 73,134,251,234, 93,232,211, 58, 47,231,164,198,222,248, -134,122, 65,240,194,214,255,238,253,226,127,110, 35, 62, 38,255,230,232,251,241, 91, 61,250,233, 13,245, 43, 3,246,173, 9, 94, - 49,228,249,158,221,135,149,109,137, 4,184, 27, 14,102, 17,245, 5,173,124,191, 32, 63,115, 11,238,237,224,209,224, 47,228, 78, -225,254, 77,191,112, 14,111,195,221,143,225, 62,208,191, 8,249,167, 64, 7,100,247,107,216,163,131, 35,108, 79,157, 89,159, 62, -117,130,124,238, 4, 62,147,144,155, 55,193, 94, 3,185, 15,246, 43, 46,190,186, 48,120, 88, 96, 20,228, 51, 91,120,181,247, 2, -224,102, 92,226, 67,117,113,214,249,224, 58,130,171, 10, 23, 99, 24,159,109,102,237, 26, 9,217, 11,156, 61, 66,254,196,151,160, -255, 9,168, 63, 11,233, 11,144,190, 12,114,242, 59, 34, 50,103, 57, 79,189,128,242, 16,198,223,134,195,223,131,171,127, 14,199, -209,197,115,253,103, 97,247,123,225,236, 71, 97,247,101,191,120,111, 43,188,216, 76, 90, 83,132,114,142, 72,189, 4,123, 4,245, - 41,232, 99, 72, 39,192,247,225,175,254, 77,228,195,115,228,234, 42,242,110, 55,144,183,254,143,246,208,159, 46,237, 86, 29,192, - 46,144,178,135,195, 17,251,184,194, 91,192,219, 21, 62, 44, 62, 1, 25,218, 92, 53,136,116,187,166,234, 44,112, 91,224,229, 10, -159, 6, 94, 50,184, 9,108, 79,160,127, 30,242,151, 32,255, 75,144,158,245, 3,170, 28, 96, 58, 64,247, 4,228, 31,195,197,215, -176,127,120,133,253,111, 71,234,187, 87,236,199,129, 7, 73,248, 72,213, 35, 80, 43, 92, 85,191, 40, 69,124,207,108,205, 63,111, -174, 63, 73, 11, 31,116, 57, 20,227,130, 24, 34,213,173,111,209,152,178, 64,176, 8, 81, 83, 22,245, 51, 72, 22,232,158,219,139, - 82,116,114,161,201,145,121,152,232,234,246, 72, 87,163, 46,212,183, 44,206, 16,159, 86, 97, 77,197, 96, 66,231,232,217, 13,149, -141,250,247, 26, 2, 41,187, 77,126,214,106, 93,198,219,134, 56, 27, 28, 23,135,174, 47, 66,189,182,111,150,217, 10,219, 34,117, - 77,100, 86,180,139,174, 24,255, 77,241,175,138,153,135,141,232,202,119,110, 51, 8, 37, 56,246,232,204, 50, 95, 39,167,219, 39, -138,213, 70, 98, 99,181,151, 22, 89, 26,191, 38,140,187, 14,139, 93,161,101,101, 9,225, 86, 22, 21,251,156,238, 38,215, 87, 65, -178, 90, 69, 40, 77,200,184, 32,237,106, 60, 33,217,152,117, 3,105,206,118, 95,170,139,102,243, 43,198,108, 53,107, 99,255,164, -193, 77, 88,133,206,172,147,210,220,250,173, 43, 55, 82, 3,245, 84, 74,248, 73,125, 61, 29, 94,126,147,153,217,223,190,196,100, -238, 59,111,169,165, 86, 27,159,192, 63, 87, 42, 21, 82,154,153,249,213, 86, 32,231,185, 88, 10,215,152, 36, 84, 59, 82,238,200, - 77,114,191,217,116, 51,198, 85,165,144,195, 24,191,238,173, 53,164,234,201,236, 26,237, 77,108, 5,143,152, 6,239,244,105,227, - 31, 89,249, 4, 67,121,186, 94,213,173,108, 34,178,178,112, 37, 93,254,255,118,105,163,130,229,140,165,236, 47,112, 90,152,187, - 85,193,138, 82,169, 81, 93,199,200,172, 20,180, 20,114, 25,155,219,208,253,188,125,118,241, 95,169,136, 84,103, 98, 87,247,239, - 26,197, 61,164,210,242,205,109,245,102,187, 38,170, 82, 41, 90,177, 24, 36, 36, 85,116,171, 72,191,202, 80,149, 4, 79, 35,246, -242,134,131, 91,234, 95,255,128,244,167, 55,240,163,119,208, 82,169,111,181, 7,195,184,241,193,149, 19,138,146,240, 52,128,253, -199,218, 42, 73,155, 31,222,107,235,150,102, 27,143,232,207, 18,202,232,143, 54,160, 15, 43,183,127,235, 10,233,149,244, 25, 7, -123,112,171,135, 33, 67, 55,120, 44,232, 24, 48,143, 83,117, 64,203, 11,241,130,190, 95,225,142,194,153,250, 30,250,253, 10, 87, -151,158,166,118, 43,193,115,157, 75,174,159,139,247,243,209,209, 11,141, 47,111, 73,223, 60,192,169,162, 47,111,225, 83, 91,228, - 75, 3,250, 96,130,183, 39,159,146,220, 72,216,133, 98,239, 86,244, 79,222, 67,126,207,125,248,248, 16,193, 27, 46,160,226,248, - 1, 12, 95,117,255,216,157, 87, 64,254, 21,168, 63,237,225, 60,245,171,254, 75, 63, 28,224, 82,208, 91,189, 19,242,126,104, 7, -175,109,145,123, 10,242, 58,232, 75, 80, 63,242,203,115,127,132,205, 9,242,211, 59,184,165,176, 81, 31,191, 30, 10,156, 79,177, -103, 31,253,253,122, 28,246,186, 67,157,105,115,140,192,133, 33, 31, 2,151, 21,235, 14,200, 95,248, 44, 60,247, 23,221,179,159, -255, 4,232, 41,252, 14,204,233, 69,109,246, 1,140,127, 23,246,255, 0,198, 39, 48,156, 71,215, 93,225, 34,123, 80,206,243,223, - 71,238,252, 54,240, 71,224,236,247, 67,122,198, 71,245, 54, 45,125,133,244, 46,245,210, 91,192, 43,145, 51,202, 34, 3, 59,253, -227,240,218, 99, 15,167, 47, 87, 32,167, 32,103,113, 27,111, 99, 74, 16, 26, 3,187,128,241,187,112,245, 79,192,126, 5,185,253, - 33,232, 30,187, 1,188, 26,168,222, 42, 78,204,219,154, 35,210,110, 87,184, 49,132,158, 98,227, 63, 79,222,130, 62, 11,221,231, - 33,255, 36,228, 79,129,222, 92,174,128,186, 7,219,131,126, 13,166,191, 15,223,120,143,250, 63, 13,216,175,236, 25,247, 7,158, - 36,227, 65, 47, 60, 9,242,155, 43,251,149,174,239,226,130,115,124,117, 13, 33, 81,105,112, 72, 42, 57,185, 87,120,196, 60, 19, - 30,155,213,238,132, 0, 46,199,136, 59, 1, 91, 49, 54, 89, 49,201, 8,137,177,194,113,154,188,171,195,249,252, 85, 28, 0, 34, -171, 11, 67,227,119,153, 98,154,151,196,133,116, 26,170,237, 38,188,202, 77, 88, 43,115,204, 3, 5, 97, 31,159,135,147, 0,210, -244, 38, 12, 6, 23, 49, 2, 63,137, 61,237,133,153,239,214,155,165,107,181,127, 94,152,237,204, 29,246, 58,137,172, 89,162,106, -227,124,132,205,184,138,255, 35, 86,233,196, 39,119,226,109,233,210,237,175,244, 19,237, 27,213,149, 51, 98,181,225, 93, 21, 14, -173,249,209,217,253, 35,200, 53, 1,154,172,110,210,165, 52,168,215, 60,109, 77,112, 55, 95,160,216, 15, 20, 0,242,137, 11, 86, -227,194,111, 34,226,220, 20,244,234,197,154,139,184,151, 75, 93, 34,160,169,214, 74,169,133, 49, 84,255, 98,139,255, 35,169,144, - 82, 14,225, 40,139,142, 34,252,235,165,150, 80,200,175,130,107, 12, 82, 78,244,125, 79,206,137,220,229,121,229, 43,179, 71, 63, - 18,240,172,204, 83, 93,141,232,230,165,131, 15,100,111,245, 59,183,189, 95, 13, 85, 44,154, 22,188,112,107,188,204,167, 49, 41, - 39,210,166, 67, 82, 34,119, 73,217,110, 55,164, 44,104,141,144, 2, 77,193, 62, 46,238,243,156,133,109,204, 41,105, 26,242,177, -132,146,146, 6, 78,182,196,108,191, 71,202, 20, 99,148,136, 97, 76, 33,112,168,203,104,217, 52,154,194, 57,175, 60,186,119,149, - 57,242,117, 22,125, 88,165,162, 88, 74, 30, 7, 90, 42,166, 1,125,152, 21,131,193, 39,142,159,173,138,161,117,242,157,240, 84, -124, 23,170, 2,195,209, 63,132,147, 87,103,201, 10,181, 76, 14,206, 39, 4, 73, 76, 51,206, 17, 98, 77, 16,227,255,212,185,210, -190,134, 40,252, 84,253, 16,113,144,117, 14,127,173,192, 73,113,218,222,100, 46, 6,163, 96,111, 23,202, 95,125,139,244, 31,125, - 26,126,252,182,215,165,239,184, 30, 64,171,113,147, 3,245,178, 56, 38, 60,158,140,163, 57,244,100, 8, 94, 12,182,140,227, 89, - 9, 70,172, 5, 27, 84, 79,135,122,144, 32,127, 60,114,243,235, 87,200, 46,161,157, 58,158,245,102,130,220, 59, 36, 96, 95,151, -123,231,194,124, 87,252, 98,246,221,185,138,119,170, 35,126,233,215,138,189,125, 68,190, 93, 96,151,176,231, 21,121,238, 12, 94, - 59, 69, 94,216, 33, 31, 94, 82,119,134,254,112,128,180,207,122, 36,101,244,217, 4, 47, 11, 60, 59, 34, 79, 38,108, 35,112,150, -208,223,183, 67, 94, 63,131, 15, 47,189, 27,124, 55,148,246, 55, 30,194,243,103,208,253, 97,144,223, 13,124, 17,236,204, 47, 33, -121, 31,236, 39,160,252, 83,236,106,132,219, 29,122, 59,195,203, 27,244,213, 13, 60, 43,208,191, 12,188, 28, 47,222,175,129,222, - 68,238,124, 10,158,185, 2,121, 2,199, 11,236,145, 7,126,240,120,132,199,145, 68,247,168, 96,231, 5, 27, 70,191,239,142, 14, -225,225,129, 33, 15, 42,178, 73,200,231, 78,144, 63,117, 23,249,242,151,224,238,127, 12,233,243, 33,115,109,186,234,244,137, 75, -125, 0,123, 27, 14,255, 11,246,224,103,145,183, 46,176,243, 14,116, 7, 99, 7, 79, 51, 60, 10, 54,124,238,224, 92,177,215,223, - 70,244,103,125, 68,189,251, 61,208,189, 24, 23,115, 23, 66,138, 97, 37,112,107,160, 17, 93, 57,150, 51,240, 44,200,243,110, 89, - 92, 59,155,109,117,160,178,241,175,219, 63, 3,233, 21,232,222,128,252,243,176,123, 31,185,255, 16,198, 67, 44,158, 99,234,180, - 81,159,244,156,108,160,251, 12,240, 98,168,213, 95,134,242, 10,200,203,160,119,125, 36, 51,127,191,201, 39, 19,211,155, 96, 63, - 11,143,190,130,253, 31, 23,216,223,152, 40, 15,247, 92,216,196,195, 14, 30,198,168,125, 40, 62,178,164,235, 24, 45, 5,203,220, -102, 72, 14, 56,154,182,159,247,137,158,185, 46,201,123,188, 17,193,202, 34, 78, 34,216, 27,189, 72, 64,165, 92, 96, 39,157, 82, -138, 48, 77,222,169,149, 22,153,105,203, 94,121,238, 32,163,211,213,224,209,180, 81,115, 86, 31,181,175, 59,191,166, 25, 90, 70, -217,203,158,212, 48,246,209,185,159, 86,225, 44,106,102,173,198,211,234,112,171,141,192, 72,101, 95, 38, 95,157, 70, 97,161,145, -220,134,234,236, 61,111,180,178, 58,239,210, 35, 33, 44, 84,244, 22,194,230, 28, 76,247, 49, 2, 38,100,222, 93,203,156,188, 6, -215,115,222,235,138, 84,246, 59,148,167,222,169, 26,115, 26, 89,224,219,174, 21, 27, 63,168,119,151, 31,184,218,215, 93,119,138, -174, 91, 44,118,212, 65, 17, 77,235,192, 47,145, 85, 42,104,176,225,213,129, 53,224,107,160,100,174,253, 42, 2, 67, 41,243, 26, -163, 90,101,170,230,233,103, 13,218, 19,129, 46,235, 88,221, 38,134,115,213,187,119,239, 99, 45,158,132, 86,150, 53,105,179,144, - 9, 66, 29, 38,255, 89,250,126, 22,139,207,138, 1, 51,166, 90, 3,209,235, 36, 58, 82,192,162, 98,100,127,125,125, 93,231,160, -165,106,174,242,119,242, 93, 76,195, 67,227, 85,103, 65, 96,135,118, 27,239,246,173,146,187,205,134,254,244,148,178,223, 71, 46, -121,144,114,146, 5, 38,176,128,133,241, 93, 90,101,225,123,105, 69,209, 46,121,188,101,236,149, 60,141,166,206,170,120,153, 63, - 13,178,132,146,204,232,189,182,149,247,175, 55,103,236,202, 2, 87,153,213,134,104, 88, 39,194, 35,217,186,104,153, 69,246, 49, -222,119,155,193,236, 25, 47, 21,177,209, 45, 0,154,124, 12, 59,140,200,166,247, 85,253,228,157,122, 91,213,251, 7,172,186,146, -151, 69, 89, 58, 91, 51, 42,115,158,252,228,161, 80,254,160,116,145,165, 91, 88, 80,129, 13,234, 62,198,133,127,154, 97,119,196, - 30, 12,148,191,242,125,210,159,124, 21,249,242,109,127,131,222,241, 7, 33, 77,198, 45,142,110,185, 10, 53, 76, 73,144,171, 43, -201, 11,203, 36,116,109,121,107,123,174, 41, 42, 90, 45,190, 58,126,154, 97,251,224,136,124,219,119,153, 42, 2,175,158,192,173, -236, 0,238,227,232,139,190,193,224, 81,248, 36,139,186, 17,121, 8,206,251, 78,225, 86,196,124, 62,184,164,126,247,128,189, 83, -176,193,208, 47, 63, 65,126,215, 25, 60,187, 69, 94,217, 34,210, 35, 39, 9,123,127,132, 62, 33,231, 81,157, 28, 60,130,212,196, -176, 11,144,159, 56, 67,158,219,192,219, 71, 31,251,107,130, 77,129,231, 30,194,107, 2,249,223, 7,253, 67,113, 73,156, 70,226, -205, 30,228, 6,148,247, 97, 56,247, 46,227,115,157, 19,232, 94,232, 29, 92,114,186,133,250,252,210, 53,111,126, 36, 12,168,223, -133,241,125,184, 24,177, 71, 5, 30,140,240,104,194, 30,150,185, 91,175, 87,158, 71,108, 79, 11,246,110,133,135, 46, 50,212,151, -183,232,159,185,131,254,158,123,240,236, 43,208,189,228, 29,175,253, 44,156,255, 53,236,209,119,224,193, 19,120,174, 67,238,220, -133,252, 47,131,117,254, 61,247,191,130,189,243, 93,248,202, 21,252,218,142,122, 56,117,225,223,109, 3, 29,176,209,176,115, 63, -108,117,167,112,209,193,101,194,222,120, 23,121,254,111,192,254,159,193,230,115,190,151,238,223,128,252, 42,200,205, 21,181, 67, - 86,216,207,166,174, 28,227, 63,235,234, 2,255,228,241,188, 62,120, 51,164,231,225,228, 95,135,237,143, 67,121, 23,166, 15,192, - 46,221,126, 71,129,116, 3,250,155,144,111,129,190, 30,109, 60,160, 23,110, 88,239,108,245, 61,197,255, 94,189,132,250, 8,134, -127, 12,195,223,134,223,122, 23,251, 31, 10,245,171, 7, 46,167,129,135, 25, 62,238,148,167,213,152, 38, 95, 44,164,212, 65,191, -137,156,104, 67, 73,145, 65,109,115,112,133,103, 96,183,209, 54, 84,153, 72,116, 75,102,130, 45, 29,223,132,123,193,253, 92,203, - 88,206, 76, 98,140,165, 64,241,115,167,152,139, 93,205,165,212,243,206,213, 59, 50,157,169,159,197,100,241, 91, 95, 19,166, 53, -255,155,205, 35,210,165,131,149,107, 29,107,109, 10,247, 8, 92, 57,195,216, 70, 20,235,185, 9,131, 85, 54,110, 8, 9,136,158, -231,127,155,120,113, 50, 75,254, 86,137, 99,115,119,221,190,191,249,122,212,240, 66,129,153, 53,183,232,232,155, 64,120,134,150, -204,187,217,213,213,109,215, 69,100,215, 18,207, 2,168, 51, 39,191,253, 78, 68, 57, 91,186,235, 31,252, 63,157, 99,188,117,102, -194,235, 66,128,139,247,177,217,249,186, 70, 45, 85, 13, 81,100,241, 34, 45, 2, 88,142,213, 47,190,110,140,194,103,170, 46,162, -140, 66,166,129,208, 84,160, 15,122, 27,179, 7,220,155, 59, 13,150,190, 52,143,122,116,244,165, 86,191, 7,139, 93,195,225, 46, - 58, 21,159, 25,149, 90,152,166, 9, 82,231,151,171,248, 4,123,178, 74, 45,109,164,238, 77,240, 8, 28,143, 7,108,104,201,108, - 54, 23,157,182,210,172,181,119,172,154,161,165,248, 68,188,115,224,154, 76,174,230,215,148,253,125, 8, 1, 93,238, 54, 27, 44, - 5,253, 70, 12, 73,222,202, 99,101,246, 45, 90,178,101, 31,216, 36,215,226, 41, 84, 57, 41, 93, 45,241,176, 69,151,172, 75,162, - 13, 51,153, 41, 70, 54,213, 13,251,213, 42,165,122,199, 43,193,137,111,185,191, 13,229,170,115,122, 20,148,172, 94,225, 76,213, - 19,197,114, 63,143,113,102,128, 65,168,243,173, 44,161, 36,169, 20,218, 64,174, 69, 12, 82, 6, 24, 58,196,170, 11,250, 40,241, -168,232,252,115,107, 27,225,229, 32,137,133,245,133, 85, 53,222, 62,189,131,193,201,100,110,153,168, 5,114,242, 39,250,104,238, -225,110,138,197,211, 4,167,138, 29, 6,236, 27,231,240,191,190, 69,250, 15, 94,133, 47,223, 65, 53, 83,223,242,215, 39, 99,220, - 26, 15,243,244, 66,134,120,102, 90,246,115, 89, 18,172,109,245, 51,213,120, 16,199, 58, 3,254, 56, 23, 56, 25, 13,253,254, 1, -106, 66, 78, 5,185,147,224,238, 14, 78,178, 43,137,174,226, 50,191, 29,202,110, 12,246,129, 26,203, 9,187, 28,124,215,220, 9, -246,193,145,250,205, 3,118, 82,160,135,250,235, 71,248,165, 11,120,117,131,124,170, 71, 94, 76, 46, 54,123, 53, 35, 99, 14, 48, -139,193,183, 6,255,248, 92, 84,228,139, 59,228, 78,143,189,115,112,213,249, 85, 0,244,127,248, 9,188,120, 3,186,255, 10,244, - 15,196,229,213, 55,229, 72,140,161, 5,234, 55,225,248, 0,166, 12,187,206, 35, 92,159,243,177, 62,242, 67, 32, 47, 68, 33,240, - 0,244, 28,236, 91,112,120, 12, 31, 11,124, 84,144,183, 7,236,193,232,124,117, 49,234,177, 96, 15, 11,246,222,136,125, 80,144, -154,208,251, 27,210,127,122, 11,249,221,183,144, 23,206, 96,211, 65,237,224,240, 33,188,247, 13,234,191,120, 76,253,123,143,225, -235, 7,236,194,227, 31,229,134, 34,247, 19,188,252,143,252,198,233, 5,222, 83,236, 42, 83,199, 12,249,128,157, 30, 97,175, 46, -210,155,119,236,161,112,189,236,208,203,130, 78, 29, 92,244,216,167, 15,240,252, 55,145,179, 55, 97,123, 6,221,125,216,126, 22, -250, 31,135,252,162,119,251,146, 22, 3,147, 18, 35,246, 28,169, 39,233,250,168,243, 19, 6,163,235,189, 87, 1,217,122,209,144, - 94, 9, 32,122,157,243,207, 67,232, 50,227, 64,150, 80,130,109, 40, 77, 74,196, 80,118,241, 30, 29,160,188, 5,227, 95,198, 62, -252, 37,248,219, 7,236,111, 21,134, 15,175,120, 40,149,247, 54,194, 5,190, 55, 79,197, 87,128, 57,119,254,137,175,149, 74,245, - 67, 78,149, 12, 76,146,168, 9, 36,249,250,172,214,226,218, 61, 96, 44, 70,169,147,159, 33,101, 57,152, 27, 68,101, 68,153,178, -146, 52, 81,106, 97, 63, 20,178,154, 83,202, 88,180, 58, 37,197,247,142, 67, 88,100,189, 31,118,213,123,173,182, 34,139,249, 37, -209,246,231,134,163, 92, 91,145,221,118,193,237,252,171, 43,155, 96,169,198, 85, 32,101,219,197,126,150,224,188, 58,163,253, 68, -132,162,198, 80, 74, 48,230,109, 57,161, 86, 2,185, 53,239,189,174,222,235,201,184,166,188,110,231,236, 18,111, 18,201,141, 97, -251, 42,164,217,143,125, 93, 15,178,254, 94,204, 28,122,137, 11,253,218,118,221,214,187,112, 91,177,165,116, 14,198,177,133,112, -194,122,190,180, 14,252,106, 59,232,182,183, 78, 73,188,128,171, 54,171,196, 91,240,203,156, 64, 41,202, 70,124, 21, 82, 98,231, -172,234,175,121, 10,167, 66,109, 34,233,153, 96,186, 56, 17,210,252, 57,119,200, 88,177,226,220,251, 32,184,105,117,138,100, 69, -174,241,243,125, 58, 82,188,161, 11,171,113, 78,186,228, 13,168, 80, 75,241,152,232, 40,102, 38, 51,142,227,192, 52, 28,195, 54, - 29, 13,225, 28,147, 27, 39,255, 39, 8,125,213, 28,104,162, 34,142, 86,206,105,150,213,207,179, 32, 19,114,234,187,200, 19,169, -164,156,200,187, 29, 89,171, 39,142,197, 40,220,125,141,214,138, 81, 87,170, 39,175,158,196,204,125,153, 45, 47, 61, 40, 51,201, -150, 48, 24,109, 96, 26,243,164,205,106, 94,133,205, 9, 64,178,108, 97,196, 22,122,146, 52, 17, 70, 82,239,190,109,194,180,247, -170,170, 76, 88,118,248, 76,173, 37, 42,191, 28, 63, 92,248, 85, 17,196, 38,116,170,164,188,161,150,228,219,185, 58, 33,195, 33, -126,166, 18, 74, 75, 91, 60,245,197,189,242,189, 24, 35, 30,191,170, 1,115,104,108,235,130, 6,204, 33,128, 28,147, 57,210, 54, -235,210, 53,197, 7,147,205, 18, 12, 44,119, 50,246,209, 1,186, 66,253,234, 83,228,175,191,131,254,204,203,240,165, 51,164, 55, -210,119,124,172,223, 85,184,245,241, 62,188,220, 54,251, 98,143,133,120,205,155, 55,125,113, 37,180,236, 97, 86, 89,209, 37,214, -181,253, 97, 66,222,219, 35, 91, 37,223, 8, 97,216,189,141,175, 11,186, 50,123, 51,103,101,222,105,130,171,201, 67, 67, 30, 77, -240, 65,133, 23, 5,158, 73, 62, 69,120, 58, 96,155, 8, 54,153,128,223,218, 99,223,240, 16,115, 41,226, 17,174,127,248, 22,250, - 83, 55,177,179, 30,126, 8,120,119, 68, 63,123,138,221,234,176,119,246,254,195,137,250,222,246,228,145,219,158,182,127,213,199, -237,178,249,132,218,181,149,239,125, 92,234, 7,144, 91, 72,151,224,134, 32,103, 29,228, 31,243, 17,112, 25,192,190,231,151,249, -244,158, 71,118,189, 43,240,193, 4, 31,141,240,209, 64,189, 56, 82,135, 9,158, 26,246,176, 32,143,196, 73,103,127,252, 14,250, - 7,239,192, 43,103, 17, 13,171,176, 63, 96,111, 62,161,254,220, 35,166,127,112,206,240,189, 43, 31,205,111,160,222, 16,210,173, -140,116,160,147,160, 31,128,188, 55,198,231, 80,188, 88,233,253,194,177,106,240, 36, 56,248,125, 94, 70, 46, 18, 62,249,174, 96, -214, 97,181,146,174, 12,206,123,248,190, 96,119, 39,184,255, 8,185,253, 24, 78,222,130,237,255, 71,215,187,198,106,150,165,119, -125,191,103,173,181,247,251,158,107, 85, 87, 85,223,123, 60, 61,211,227, 25, 27, 15, 54, 54, 54, 25,108, 19, 18, 8, 96, 72, 72, - 36,164, 68, 10,136, 64, 72, 66, 4, 81, 34,132, 20, 69,185, 8, 72, 20, 62, 68,202, 7, 4, 9, 81, 66, 20, 43, 16, 66, 32, 22, -118,226, 27, 96, 99, 25, 12,182, 99,123,152,177,103, 60,198,115,233,238,153,158,190, 85,117,215,237,156,243, 94,246, 94,107, 61, -249,240, 60,107,239,253,158,106,143,212, 83,125,169, 58,239,109,191,123, 61,151,255,255,247,255,167,198,177,143, 71,254,217, 39, -187,200,194, 17,116,223, 0,171,143, 67,255, 50,200, 51,254, 62,118, 79,190,143,135,136,145, 73,132, 55,237,112, 14,212,182, 58, - 83, 63, 36, 47, 96,156,145, 37, 37,193, 14,244, 0,229, 17,228,127, 4, 87,255, 3,250,185,183,224,251,133,250,217, 29, 87,187, - 61,111, 39,184, 27,133, 93,101,186, 89,210,245,118,176, 86,181,239,184,107, 72,178, 66, 40,194,190,157, 53, 49,152,255, 62,118, - 12, 49, 81,115, 65, 60, 53,176, 58,241, 45, 37,247, 87,187,216, 72, 5,134,152,216, 81,185,145, 71, 11, 73,241,123, 78,144, 64, -212, 72,145, 72, 13,230, 99,206,181,113,115,195,180,175, 69,196, 89, 25, 62, 49,208, 22,254,195,148, 92,214,102, 34,205,219,220, - 68,196,180,113,177,204, 59, 80, 21,161,136,129,143,182,110,213,203,190,103, 63, 10, 80,106,160, 70, 56,166, 80, 84,184, 82,235, -238,135,146, 73,181, 90, 40, 85,179,202, 45,242,193, 85,235,181,132,243, 25,119, 59,128,117,139,112, 96,227, 10,158,237, 33, 64, -174,101,242,187, 79,179,133, 73, 11, 53,215,128,211, 21, 83, 23, 2,188, 57, 32,122, 78,145, 91,136,217,104,215,255,181, 57, 81, -219,133, 91,148, 77, 99,220, 91,214,188,197,208, 86,106,153, 31,184,221,161,218,121,146, 4, 82, 72,102,167, 84,139,180,174, 30, - 29, 94,125,223, 45, 11,101,252,196,196,247,207,177, 86, 27,203,207, 72,218,121,252, 78, 99,178,187,109, 17,130,219,254, 22,200, -238,182, 82, 14, 30,214,228,164, 63,137,209,138, 24, 85,198,156, 41,206, 60, 9,193,222,183,113, 24,166,206, 90, 26,120, 71,220, -103,169,243,185, 87,235, 92, 2, 77,218, 10,159,136, 55,212,104, 75,162, 19,183,153,167, 20,162,251,201,133,110,125, 76, 58,127, - 10,125,252,158, 37,132, 77, 21,154, 93, 60, 69,213, 32,247,206, 49, 22,172,170,201, 30, 48,144, 68, 38, 25, 78, 20, 27, 41, 77, - 52,184, 22, 54,239, 29,250, 20, 67, 55,117,189, 45, 36, 99,190,232, 68,162, 39,189,225,162, 3,235,216,170, 68,163, 22,101,143, -203, 43,217,246,141,169,237, 70, 34,168,101,221,106,181,200,173, 82, 11, 50, 14, 19, 30, 48,120,240,223,228,131, 81,243,176,167, -166,184,196,200,119,169,216, 7,152, 61, 91, 89,167, 11,192, 84,150,163,170, 5, 15, 56,204, 67, 58,177, 55,160, 89,128,206, 60, -160,251,162, 88,172,232,237,104,163,248,113,132,115,165,126,246, 33,114, 43, 33,127,224,121,228,155, 3,122, 20, 9,175, 61,166, - 70,161,139,112,243,254,142,180, 41,246,146, 4,210,104,249,208, 82, 32,143, 30, 13,233, 23, 89, 55, 97,120,125,189, 81,108,146, -158,139,146,163,165,132,213,109, 70, 95,219, 25, 39,252, 36,153,189, 41, 70,179,108, 61, 54,245,185,118,174,224,127,223,148,153, - 12, 35,250, 86, 49, 53,250, 43, 61,242,114,100,252,185,145,253,202,154,215,110,173,196, 34, 68, 41,176, 55, 77, 20,119, 43,221, -223, 28,173,113,252,228, 77,187, 48,111,218,161,207,221, 45,250,230, 8,199,150, 44, 71,205,240,209, 12, 71,255, 29,200,183, 58, -250,119,176,207,244, 16, 94,105, 59,218,242, 89,180, 70,228, 41, 87,243,223, 9, 54,158,150, 15,217,243,149, 43,208, 79,195,238, - 17,220, 15,240,134,192,251, 5, 86,142, 34,123, 48,194, 87,246,232,123,133,240, 76, 79,248,246,155,132, 63,120, 3,190,225, 24, - 78, 58,227, 38,108, 50,250,234,125,202, 79, 61,102,251, 19, 23,108,223,216, 49,230, 74, 57,129,122, 35, 80,142,226,212, 94,180, - 36,193,216, 43,253,202,109,153,110,125,145,216, 12,197,109,125, 35, 22,170,178,203,182, 7,246, 60,111, 55,247,130,100,235,252, - 70, 37,142, 5,185,136,112, 47,193, 59, 9,189, 17,224,198, 8,231, 91, 75,200,235,189, 24,238,177, 9, 75, 60,182,128,157,237, -171,176,126, 1,142,126, 51,164,151,125,133,225, 59,116,130,137,227, 24,141,104, 87,223,135,242,190,141,218,117, 99, 7,115, 88, -249,190,253, 24,194,218,121,178, 30, 15,155,206,205,107,206,173, 5,152, 83,236, 73,168,152, 48,113, 74, 85,137,214, 0, 0, 32, - 0, 73, 68, 65, 84,255, 87,224,238, 15,162, 63, 94,224,239, 66,126,251,138,251,101,228,173, 20,184, 47, 86,203, 37,223, 99,203, - 58, 81,107,245,137,154,211, 18, 3, 19, 78,115,234, 68, 69,201,165, 80,139, 97,128, 99,234, 88,117, 29,165, 51,226,158,142,197, -239, 45, 75,232, 71, 35,110, 85,114,182, 14,232, 40, 9,151,213,240,168,125,138,116, 4,114,181,100, 44,114,177,251,158, 52,111, -182, 44, 60, 83,122,144,113,113,120,128,169,219,152,102,107,152, 58, 42,183, 97,101,157, 11,104, 16, 20,236, 64, 47,254,218, 10, -138, 22,163,222,117,162, 28,185, 55,189,212,202,137, 59, 43, 55, 24,190,182,104,177,166, 35,122, 55, 39,184, 56,184, 30, 98, 16, -166,243,120,182, 16, 79,180, 79,153,253,252,209, 3, 71,144,121,172,172, 79, 56,201,213,139, 7,153,136,104, 77,207,163,194, 36, - 72,148,197,129, 57,163,191,229, 96,148, 47,173, 3,151,131,176, 56, 86,190,255,180, 18,209,116, 14,162, 70,229,211, 16,208,106, -199,249, 88,125,130, 35, 54,105, 73,193,198,209,197,155, 59, 69,167, 91,122,112, 87,150, 65,118,132, 82,148,170,217,227, 74,109, -157, 83, 23, 30,251, 24,230,233,195,236, 81,183,247,182,162,158,170,120, 61, 44,126, 30,197, 55,143,251, 80,172,216, 92,117,189, -189, 39, 46,156,110, 51,146,146,139, 33,199,181, 78,227,123,185,174, 89,240,107, 36,132, 89, 77, 62,137, 38, 39,218,221, 44,206, -108, 92, 2,149, 64, 18, 2,165, 22, 82,234, 73, 71, 39, 86, 97, 20,219, 7, 52, 75,198, 36, 16, 75,238,131,243, 71, 31,106, 37, -151,106, 95,206, 0,189,170, 69,183,166, 72,138,129, 72, 37, 77, 81,117,118,200, 83, 26,186,199,199, 31, 85, 80,169, 7,246, 6, - 22, 99,251, 16,131,141,181,101, 65, 83,242,192, 2,243,157,207,240, 3,145, 4,201, 14,175, 32,214,205,139, 58, 75, 89,138, 69, -236,169,229,231, 74, 35, 37,249,222, 81,171,113, 90,197,171,254,214,238, 6, 26,186, 85,102,107,129,255,251, 34,144,213,170,238, - 92,171, 97, 71,219,217, 83,176, 36,152,149,192, 90,109,167, 92,197,169,161, 9, 61, 90,155, 82, 62, 6,234,231,175, 8,183,223, - 67,126,251,179,200, 55, 10,172,133,208, 39,106, 23,136, 41,112,254,222,134,112, 89, 8, 98, 58, 50,196,148,190,120,218, 19,190, -163, 11,139,207,187, 49, 67, 86, 73, 89, 91,104,144, 77,164, 99,165,190,157, 9,221,222, 14,156, 19, 23, 95, 93,101,120, 35, 83, - 31,100,184,169,246,156, 95,207,104, 15,242, 82, 7, 55, 61,164,250,162, 32,223,210,193, 63,177,178,134,181, 48, 22, 24, 81,116, -132, 97,180, 26,166,127, 70, 56,189,200,132, 97,132,215, 55,222,198, 4,184,187,131,207,239,209,207,108,145,151, 87,200, 31,234, -224,198, 5,220,252, 70, 8,191,207,133,101, 23, 30,152,221, 63, 97,160,161, 60,128,242,203,166,224,191,221, 35, 47,172,224,104, - 15,229,194, 70,237,225, 4,198, 95,134,203, 7,112,127, 13, 15,170,105, 2,190,239,134,165,189,253,133,119,224,125, 37,124,252, -140,240,199,215,240,219,111,194,233,202,238,156,187,130,188,254,144,242, 11,143, 25,126,248, 49, 23,191,190,225,241, 88,184, 60, - 18,120, 42, 26,115, 96,122, 30,158, 17, 36, 86, 75, 38, 79,233, 43,105, 17, 23,172, 86,124, 33,115,210, 96, 8,205, 54,165, 7, - 52, 59, 79,191,176,235, 48,248, 1,181, 85, 66,169,200,182, 32,219, 12, 15, 83, 75, 91,178,241,248, 26,243,149, 31,251, 53,118, -126,137,220,186,128,211,135,144, 31,195,254, 49,172,191, 12,253, 43,144,110, 59,216,224,161, 29,188,245,109,216,191, 14,195,149, - 21, 80,165, 90, 17, 21,125,164, 31,130, 29,252,169,154, 5, 46,125, 7,196,223, 14,188,232, 93,122,235, 77,131, 21, 0, 53,155, - 91, 97,251,231,208, 47,255, 26,252, 47,137,250,207, 6,118,155, 29,119, 69,121, 43, 5,182, 14,110, 10,222, 1, 73,144,137,119, -221, 20,237, 97,233, 97,246, 27,107, 84,166,213,158,162,228, 98,223,200,174, 91,147, 98,178, 14,186,139,140,197,110,216,115, 55, -198,140,244,172,160,157,176, 74,129,203, 12, 67, 16,207, 22, 42,104, 41,118,159, 11, 62,221,155,212,226, 30,117,231,145,210,165, -161, 57,107, 59,216,120, 98,140, 76,163, 90,186,104,104, 82,166, 47, 50, 38,101,193, 59,173, 14, 25,217,250, 72,254, 72,140,151, -191, 14, 66,142,129,162,133,163, 86,247, 85, 27,221,182, 26,176,121,210,203,116,208,201, 19,163,240,209,133,126, 77,133, 95,151, -178, 7,108,109, 17,167,164,206,234,246, 57, 57,184, 31,107,187, 39, 30, 80,222,174, 67, 89,230, 61,120,153, 10, 3,109,137,198, - 51,244,101,209,109, 90,113,209, 80,187, 38, 96, 28,171, 33,191, 87, 33,206, 60,246,162, 20,205,182,223,246,142,186,199, 8,125, -218, 37,114, 81, 74,105,170,242, 38,101,170, 19,191, 99,116, 22,190, 44,232,112,243,218, 82,166,102, 50,132,198,100,145,137, 9, - 82,139,250,132,134,195,132,185,197, 27, 49,233,190,252,156,171, 77,251, 17,170,139, 38, 93,192,232,212,211,234,170,120,209, 37, -172,134,131,194, 76, 61,210,220,180, 96,179,181,112, 38,177,232,129,252, 80,196,192,113,164,142, 84, 74, 53,177, 91, 58,178, 23, - 50,152,226, 85,101, 6,243,182,157, 19,110, 21, 72,162,236, 75, 97,168, 58,171, 69,181, 13,108, 44,135, 56, 33,116,174, 84,149, -160, 68,204,207, 93, 99, 68,181,152, 48, 78,116,254,248,165,153,233,195,252, 3, 29, 97, 40,117, 54,237, 91,122,145,250,248,202, - 51,112,213, 58,184, 32,160,161, 35,116,130,196, 4,219,209, 46,198, 82, 76,252, 86,153, 47,220,106,129,217,177,165,165,120, 5, -179,220, 76, 77,158, 88, 89, 38,243,224,254,119,183,222, 86,200, 85, 24, 58,229,120, 83,224,225, 96,202,241,170,176,117,224,244, - 38,152, 61,234,212, 99,154,206,162, 77, 69,215,193, 82,193, 66,128, 47, 95,161,199,247,144,239,184, 13,175,156, 88,252,231,113, - 64, 58,187,193,156,197, 13,242, 56, 19, 86, 74, 26,109, 98,157, 60, 77,110, 26,251,133,153,177,191, 10,112,220, 41, 55,215,202, - 81,132,116,105,231,165,244,126, 34, 93,101,120,144, 12,163,229,222,122,189, 40,212,207, 95,152,232,233,165, 96,122,171, 71, 66, - 88, 87,219,147,191, 89,224,173, 17,190,183,163,255,151,142, 24,254,241, 21,229, 68,173,176,241,102,180, 4, 19,233,140,254,133, - 36, 96, 9, 57, 95,119,170,208,195, 10,247, 50,225, 60, 34, 87,152,234,252,197, 29,172,254,109, 59,213,202, 23, 77, 12, 23,158, -126,242,206,161, 3,148,207,192,238,158,237,127, 95, 88,217, 11,213, 8, 97, 15,241, 10,242,231,224,254, 59,240,110,178,105,200, -163, 0, 31,235,224,108, 5, 63,251, 0,126,239, 25,252,214, 99,228,153,181,137,162,134, 17,222,126,140,126,105, 67,249,193, 7, -236,126,101,195,230,114,100,119, 36, 92,222, 20,182,125,100, 91,124,127,154,231, 27, 84, 18,166,152,226,137,236,167,138, 22,153, - 50,170,139,123,138, 37, 96, 59,209, 22, 58,238,142, 15,233,197, 60,251,218,162,255,100,214,187, 69,108,210,164,106,218,129,157, - 65,111,100, 31,204,205,177,242,234,160, 11, 38,120,116, 71,129,222, 23,184,115,129,220,217,194,241, 21,228, 75, 67,176,246,183, - 77,224, 23, 86,110,146,117, 5,102, 13, 86,133, 21, 19,196, 50,110,237, 48,151,199,208, 93, 65,255,109,208,255, 81, 72,223,228, -163,252,236,217,176,109, 68,176, 54,117,251,246,111,193,213,255,140,254,202, 5,250,191,246,228, 47, 92,113, 57,236,120,167, 19, -238,138,161, 80,131, 19,219,136, 66, 9, 54,109, 91, 78,189, 90, 79,104,105, 85,243,184,177, 70,163,217,185,127,196,187, 60, 37, -103,115,162, 83,125,101, 23,163,133,201,184, 56,137,226, 55,201, 40, 12, 17,118,158, 75, 20, 5,246,165,146, 61,212, 37,250,148, -209, 10,119, 3, 91,101,135, 67,136,139,242,170,159, 22, 65,155, 19,230, 80, 86,118, 16, 12, 93, 77,149, 62,161,181, 91,239,171, - 79, 26,189,213, 79,223,236, 43,135, 73, 92,230, 81,173, 33, 38,118, 82, 9,197, 82, 29,119, 49,204, 96,148,133,194,125,210,249, - 44,159,153,204,121,240,178,160,235,181,195,182, 0, 99,173, 6,215,241,108,113,173,213,195, 89,194,194,230,182, 56,208,101,238, - 84,151, 56,107,117, 17,113, 59,100, 2,115, 86, 19,141, 90, 26,194, 92, 32,248,123,213,137, 16, 67, 7, 98, 41,101,117,114, 50, -217,189,219,168,109, 50, 29,230, 77,209, 17, 67, 36, 36,139,220, 46,101, 36,123,220, 96, 97,206,197,152,217, 42,115, 17,177, 76, -116, 91, 12, 16,102,222,160,206, 58,173,234,202,116, 14, 96, 56, 75,246,237,181,207,223,213,244,234,128,159,125, 25, 97, 15, 37, -231,197,246,171,253, 76,153,200,112,184,141,186,217,235,218,148, 69,155,208, 27, 19,220,233,129, 95,126, 94,219,197,224,147,171, -126,141,166,142,164, 81, 8,235, 35,200, 35,227, 48, 16,171, 93,140,237, 34,175,137, 57,227, 72,132, 40, 86, 81,218, 95, 21,245, - 69,110,179,156, 24,147,194,126, 95, 23,102, 36, 99,154,198, 79, 17, 77,130, 76, 86, 3, 27, 35, 53,219,129, 52,177,137,127, 25, -164,206, 22, 10, 7,220,122, 0,140,237, 30, 76, 85,232,240,131, 97, 11,169, 35,134, 8,171, 19,180,236,208,113,239, 39,141,137, -216,196, 43, 91, 25, 71,155, 48,250, 14,172,224, 55, 53, 15, 42, 40,234, 57,242, 90, 33, 55,251,136,241,173, 91,193,209, 38,236, - 99, 85,219,177,239, 43,225,190, 9,202,164,183, 19, 95, 7,117,143,113, 65, 30,244,126,242, 97,255,253, 78,135,164, 0,217, 88, -236,188,182, 69,211, 67,228,219,206,225, 27, 78, 44,171,251, 36, 16,142, 34,117, 21, 56,150, 13,225,241,224, 56, 69,187,120,227, -202,198,240,227,130, 60,215, 46,186, 20,149,152,160,223, 64,119,212,209,255,235, 55, 8, 47,244,118,243, 59,139,118, 24, 94,218, - 88, 93,111, 39, 27, 79,127, 45, 82,191,188,131, 13,134,121, 61, 14,232,133,227, 72,215,130,190, 54, 32,191, 10,225,251,206, 88, -127,110,224,242,225,136,158, 47,214,178,193,242,182, 79, 43,172,190,115,101,213,241, 47,109,225,249,158,240,189, 39, 70,127, 59, - 57, 50,159, 94,142,240,209, 4, 31,138, 16,191, 27,234, 93,168, 95,128,248,123, 22,160,244,197,222,183,188, 11,229, 47, 89, 55, -123,243,204,184,244,187,140,116,157, 29, 64,229,211,112,111, 15, 95, 19,120,119,240,215,182,182, 47,207,166,192,119,220, 48, 15, -145,102,184,220, 81,191,116, 65,249,233, 11,234, 47, 94,146,223,221,145, 99,229,209,177,176,187, 25, 24, 68,184,242,201,195, 80, -204, 23, 26,213,166,220, 41, 64,109, 43,241, 57, 57, 98, 50, 59, 20,153,101,100,141,179, 48,223,213,125, 2,213, 5, 66, 10, 83, -178,147,116,174, 45, 73, 62,229,161,117, 98, 21,173, 35,146,221,198,153, 61,124, 70,220, 75,219,196, 19,163,152,234,108,140, 48, - 88,200,142, 60,243, 46,156,108, 32,191, 8,101, 15,249, 2,186,231,236,175,244, 52,196, 79,192,234, 33,212, 71,246,222, 14, 95, - 51,135, 64,200,112,252,109,112,252,199,160,255,164,143,227,247,254, 87, 27,108,250,162,109,124, 13,182,255, 13,188,247,243,232, - 63, 9,232,143,118,148,215, 46,184, 40,123,222, 88, 5, 30,170,189,245,125,152,245,122,134,134, 46, 19,205,172,248,158,145,197, -120,183,101,190,183,155,103,136, 66, 41,198,116, 87,135, 52,170, 91,130, 36, 89,100,161, 20, 83, 40, 87,169,132, 24,109,160, 0, -164, 24,169, 57,179,203, 5, 77,214,249,151, 42,140, 81,233,146, 16, 75,160, 83,179, 83, 21,204,250,213, 40,113, 38,176, 2,117, - 86,122,110,222,101,157,221, 60,237,239, 99,179,133,133,198,135,119,174,249, 53,117,184, 89,231,116,154, 36,204,191, 26,140,166, -115,175,123,115,201, 70,255,121,235,162,142, 76,144,169,104,172, 94, 24, 45, 0,163,115,113,225, 75,198, 41,174, 85,219, 64, 89, - 60,205,172, 82,106,165, 80, 73, 26,233, 66, 36,164,206,114,187,151, 34, 45,213,107,135,215,225,252, 76,125,226,217, 94,179,133, -104,133,131, 88, 85, 59,152,151,172,120, 91,103,166, 96,247,220, 65,149, 82,203,100,251,154, 44,130,238,163,143,194, 98,223,111, -151,253,144, 51,185,152, 14, 66,155,142, 97,217, 68, 59, 14,182, 86,253, 64,137,232, 18,207,222,220, 90,234, 69,217,100,169,114, -241,153, 4, 62,200, 6,176,240,217, 7,155, 4, 59, 58, 56, 52, 70,123,153, 19,237,138,206, 63, 91,181,186, 61,110,241,100,106, -225, 9,173, 98, 59,252, 91,209,218, 8,142,106,194,108,243,133, 71, 86,125,207,106,125,196,160,149, 36, 33, 17,251, 35, 40,197, - 98,248,114, 54, 24, 75,106, 21,135, 78, 72, 84, 99, 92, 84,178, 4, 50, 62, 54,147, 73,103,106,157,179,139, 75,134,170,236, 67, -160, 23,103,238,186,113, 51,136,139,206, 38,168,131,206,201,107,237,255,155,130,180, 46,144,133,218,152,242,234, 54,181,234,123, - 20,245, 16, 7,161, 14, 35,116,123, 88, 37, 40,163,249,218, 67, 7,169,186, 7, 93, 9,193,199,103,121, 36,116,238,128, 12, 30, -203, 68,157, 5, 20,170, 84, 9,147, 82, 20,148, 80,149,197,196,196,118, 30,213, 88,202, 89,109,204, 19, 47, 71, 11,113,121,170, -243,145,110,181,187,116, 20,116, 55, 90, 73,142, 98, 51,113,151,132, 6,231,150,135, 2, 95,186,180,113,207,111,190, 1,207,244, - 72, 58, 71, 86, 1, 89, 9,146,132,163,183,149,244, 96, 36,105,229,162, 51,208,153,168, 29,236,197, 89, 50,102, 43,174,108, 71, -187, 95, 31, 21, 88,253,137,155,132,223,122, 3,222,202,232,107, 91,234,107,174, 50,201,198,110,151,151, 87,112,179, 35,254,171, -103,240, 51, 80,191,180,131,175,102,116,173,240,114,111,202,238,231, 18,114, 21,169,159,222,193, 42,209,255,190, 35, 86, 63, 80, -216,239, 21, 93, 51,141, 74,143, 3,156,127, 44, 34, 79, 7,248,197,193,172,110,191,255, 12,118, 22,201, 74, 16,228,102,178,209, -255,109,133,243,155, 16, 62,100, 93,120,184, 9,225,169, 39,187,244,122, 1,187, 63, 13, 15,190,108,190,232, 22, 26, 81,253, 96, - 31,130, 57, 10,190,224, 5, 73, 4, 62,126, 4,223,116, 2, 55, 79, 92,184, 56,194,171, 87,212,127,252,144,252, 19, 23,148,247, -246, 20, 10,122, 44, 12,207, 89, 23,180, 27,224,170, 8, 67, 54, 81, 98, 46, 77, 79,161,211,152, 76,174,145,226, 68,231,239,221, -193,223,135, 89, 43,201, 98, 52, 27,212, 86, 81,210, 71,226, 81, 34,220,233,168,247,178, 21,168,209, 44,161,166, 65, 83,116,112, -193,165,135,233, 72,115,123,104,157,226, 81, 29,131,232, 24, 66, 87,217,150,132,230,136, 60,243, 24, 78, 71,123,237,106, 28, 51, - 83, 71, 61,111, 35,249,240,146, 11,220,178,145,233, 16,251, 44,186,151,252,240,222, 64,189, 15,225,212, 14,113,241, 3,189,238, - 97,255,147,112,249, 23,209, 87,239,194,223,233,208, 95,175,148, 71, 27,246,101,207, 59,125,224,113, 49, 81, 90, 87,175,225,114, -181,137,184, 28,208, 82, 57,200,179,182,173,196, 98,188,216, 68,117,141, 75, 46,193, 18,186,130,143, 73,115,165, 76,119,199, 98, -252, 12, 17, 74, 8, 83, 20,166,196,142, 81,173, 64, 75,177,253,206, 74, 47,144,162, 48,146,168, 90, 25,198,226,147,130,106,102, -219, 73,143, 36,104,148,137,120,214,196, 82,234, 2, 91, 59,204,108,175,153,105,163,247, 67,251,211,212, 37,234,236, 5,111,112, -175,176,112, 39,142, 13,156, 35, 70,136, 11,170,142,180,181,217,136,184,112,175,168,146,107,246,149,103, 90,246,155,214, 43,235, -204,254, 40,205,119,221, 60,245,142, 63,181, 32, 23, 83, 2,152,191, 59, 80, 67,128,146,231, 0,173, 32, 7, 81,179,211, 89,182, -152,248, 79, 13,133,180,199,156,191, 43,213,133,216, 77,119, 21, 38, 40, 76,164,138,237,207,171,251,193, 39,128, 14,115, 74,153, - 46,166, 16, 19,112,198, 47,154,170,117, 18, 43,206,135,185, 28, 60, 47,185, 22, 19, 87, 93,144,221,180, 3,246,124,226, 12, 25, -107, 98, 72,173,211,107, 21,157, 3, 89, 38,157,153,179,118, 67, 48,103, 69,234,122, 98, 50,129,156,113,209,195,204,207,247, 21, -128,230,106,159, 69,206, 72,201,147,126, 99,186, 40, 22,232,220,131, 59, 77,173,132, 24, 38, 66,107,173, 94,120,186,142, 64,244, -152,152, 18,117,216,147, 82, 3,184,172, 86,200,214, 56,198,213,241,129,181, 56,131, 41, 4,106,173, 36, 42, 42,129, 18, 18,140, -197,184,234,178,172, 13,235,116,200, 23,183,122, 13, 26, 72,216,126,221,186,203, 74, 10,209, 88,187, 62, 22,210,108, 35,159,118, -129,183, 40,195, 57,185,196,165, 26,165,221, 49, 77,113,152,125, 60, 46,126,217,170,102, 24,118,232,234, 24, 66, 79, 25,242,132, - 45, 52,171,157, 3,105,220,207, 30,125, 7, 84,149,201,167,217, 10, 13, 27,171, 23,215,222, 69,255,146,251,151, 99,106,206,108, - 95,167,193,178,145,199, 4, 93,173,132,199,158, 6, 20, 65,119,131,141,184,143, 76,157,104, 82,122,236,228,243, 73,166, 4, 80, - 87,236, 75,172,240,203,143,208,199, 35,242,157,231, 70,112,147, 35,100, 5, 97,149, 44, 73,236,141, 13, 79,221,223,147,174, 70, - 86, 21,182,193,190,240,187, 98,194,190, 16,117, 2,101,108, 54, 74, 60, 75,132, 23,123,248,218,158,242,115, 27,234,171, 91,234, -222,118, 80,225,220,158, 83,120,184, 34,252,166, 99, 56, 10,132,223,113,138,124,234, 4,253,245, 45,250, 83, 87,232,175, 15,240, -116,178, 3,231, 27, 87,132,123, 10, 63,159,145,127,173,231,248,183,174, 24,126, 97,203,110, 29,136, 1,214, 43,225,164,171,232, -166,194, 47,110,145,231,142,144,239, 89,193,195, 66,109,201,110, 27, 69,198,140, 60, 4,121, 74, 29,170,178,247, 89,245,167,230, - 15,125,146,219,142,144,255, 11,244,205,159, 65,127,254, 41,216, 95,193, 75, 9,249,200,218, 90,192,161, 82, 63,243, 24,253,145, - 75,228,155, 59,228,119,156,193, 51,189, 21, 13,162,240,254, 99,120,235,138,250,163, 15, 25,254,209, 35,198,253,200,120,164,212, - 27,198,197, 47, 62, 97,106, 19, 15,116,206,176,143,190, 82,104, 73, 84, 50,225,141,231, 52,168, 70,172,122, 18, 11, 59, 31,232, - 77, 15, 39, 56,211, 32, 89,101,159,190,235,196, 24, 0, 63,125,105, 75,248,149,218, 3,150,122,200,239,144, 15,192,128,204,200, -197, 89,208, 94, 22, 23,233, 94,209,171,132,172, 55,144,238, 67, 93,249, 29,246,129, 29,210,113,109, 22,184,240, 28,112,195, 85, -244,209,160, 2,229,211, 80,223,128,240,113, 8, 31,118,209, 98,111, 7,123,125, 7,182,127, 17,222,255, 41,248,172,194,223,238, - 41,239, 12, 84,221, 83,135,145,247, 84,120, 80, 12,204, 20, 38,244,154, 78, 55,218,162, 51,155,187,202,161,227,174, 69,151, 4, - 87, 92,151, 3,221,190,225, 84,107,181,158,180,180,213, 71,227, 40,199, 64,223,117,212,216,145,165, 30,120,248, 99, 16, 84,122, -118, 73,145,154,161, 20, 6,133, 53, 66,167,176,209,226, 26,154,138,113, 41, 27, 62,180,250,152,211,198,199,227,242, 0,209,150, -222,216,196,124,206,218,104,236,240, 41,172,190,241, 54, 60, 75,162, 69,167, 10, 7, 8,214, 54,114,173, 30,117, 59,205, 45,170, - 31,136,106, 26,158, 70, 36,203,126, 31, 99,234,148,195,100,223,106,241,172, 58, 1,117,234,244, 24,149,153, 86,215, 16,185, 85, -109, 20, 47,238,215,174, 33, 24,154, 82, 14,125,246,211, 52, 64,229,112,188,189,236,128,213, 58,178,160, 97, 66,133, 79,238, 40, -153, 81,174,109, 74, 81,180, 26, 55, 96,194,204,206,241,163,117,242,207,207,128,247,150,174,215,212,231,162, 79, 82, 24,194, 18, -157, 35,215, 88,246,117,246,228, 91,164,184, 77, 52, 74, 91, 85,120,192,205, 65, 17, 26, 22,253,125, 43,102,166,244,210, 72,234, -123,186,174,119, 49,184, 18, 98, 71, 70,168,227,222, 14, 95,127, 14, 99,173,228, 60, 82,134,189,185,184, 66,242,247,184,248, 22, -120,214,115, 89,140, 74,123,205, 97,242,185,183,198,146, 20,209,156, 41,165,178,221, 94,145, 67, 96, 63, 12,164, 20, 59,111,241, -213,186,219,106,177,163,141,117,156,146, 1, 28, 98,176, 14, 66, 99, 68,170,197,217,213, 54,162,152, 30, 37,216, 27, 28,231, 10, -174,138,121, 32,155, 80,200,130, 94, 44,231,188,186,221, 65,163, 3,245, 75,157, 50,117, 39,133,102,157,191, 64,211, 93,209,237, - 46, 89,231,184,213,218, 72, 45,227,136,110, 47,225,252, 54,116, 61,100,131,229,215, 92,201, 49,146,212,137, 83, 65, 39,157,187, -150, 58,101,210,106,177,113, 75,117,197,163, 42,196, 46,162,163,117, 51, 86, 95,206,233,110,197, 59,175,236, 35,251,146,188,170, -186, 28,124,122,227,126,255, 65,141,202,214, 88,179,155,106,255,174,130, 30, 69,219,191,203, 96, 35,172, 46, 33, 95,188, 68,223, - 31,144,239,189, 1,183,122,171,218,215,230, 51,231, 40, 17,222,220,112,254,254,150,245, 85,102,179,169, 36,179,148, 51,250, 55, -180, 97, 52,143, 69,233, 95, 76, 48, 8,250,238, 72,189, 59, 80,182,153,242,104,160,236, 43,188, 5, 41, 6,210, 88,208,167, 42, - 18, 58,164,235,144,103, 34,225,251,158, 34,124,104,133,254,245, 7,232,207,239,145, 99, 75,253,138,223,217, 67,237,209, 87, 71, -194, 55,175,184,241, 78,134,119, 10,199, 47,219,106,100,247, 0,106, 81,228,161,114,186, 26,205, 74,182,142, 86,133,237, 44,204, - 69, 87,126,210,237, 18, 50,220,133,245,175, 64,252,148, 29, 46, 7, 55,138, 45,228,255, 26,238,253,159,240,206, 29, 8, 17,253, -226, 6,126, 13,228,247, 43,188,176, 66,223, 25,224, 65, 65,254,189,115,228,165, 35,187,216,135, 17,253,220, 35,244, 11, 27,244, -231,183,232,227,129,124, 57,176, 61, 86,118,119,132, 18, 13, 35, 28, 93,184,217,186,197, 36,126, 67, 13, 66,245, 21, 75,194,166, -219,105,113,107, 8,213,133,155, 81,231,200,202,131, 96,137,197, 89,219, 20,242, 78, 86,164, 11, 72,242, 17,234,231,183, 6, 24, -106, 15, 62,122,135,144,117, 78, 71,235, 13,156, 68,100,202, 61,111, 48, 37,250, 86, 40, 70, 88,123,194,220, 58,192, 13,129,155, -138,156, 84, 72,199,190, 15, 31, 93,252,182,130,248, 60,196,143,184,138, 29,251,247,186,247,101,254,235,160,239, 64,248, 46, 8, - 47,248,201,220,217, 62,189,252,125,120,240, 23,224,213,247,224, 31, 28,161, 63, 87, 40,247, 47,201, 12, 16,225, 74, 42, 27, 17, -122,175,100, 10,106,156,139, 50,231, 23,132,133,204,110,178,194,251,141, 50, 46,118,181,130,121,131,181,250,132,162,141,140, 29, -253, 42,205, 99,238,225, 43, 72, 36, 83,205,226, 26, 93,240, 80,237,251,152,213, 52, 29,251, 34, 28, 33,244, 65, 24, 71, 43,202, - 59,143,131, 78, 10,217,105,150,118,178,130,134,234,158,103,123,156,224, 66, 39, 60,189, 18, 9,212, 58, 31, 32, 19,208,117,154, -234,232,188,187,157,176,172, 58,105,121,116, 17,200, 52, 1,165, 60,123,155,150,139,238,247,196,222,239,153,123,135,158, 36,148, - 85, 8, 38, 82, 93, 36,142,225, 65, 38,202, 50, 3,124, 81, 28, 9, 7, 33, 46,147, 31,218,237,149,145, 22,121,141,211,206,230, - 63, 39, 58,239,150,155,186,125, 74, 86,211,217, 15, 97,112, 26, 83,124,183, 69, 90,157, 86, 17, 76, 35,166,230,181,111,106,248, -166, 15,154, 18,206,196, 83, 60, 23, 95, 48,245,184,213,170,242,129, 96, 27, 89,144,255,166,195,119, 9,196,241,209,188, 44, 2, -105, 74, 45,102, 9,212,185,234,156,106, 50,239,236, 9,130,106, 88, 92,180,243,234, 97,154, 34, 85, 53, 42,107, 12,204,177, 34, - 58,177,218,171, 86,234, 56,160,197, 10,181,144,226, 20, 26,163,186,180,142,250,160,192,195,196, 66,180,230,187,122,113, 28, 36, - 26,136,199, 63,151,113,204,236, 31, 61,162,106, 37,133,245, 17, 73, 34, 82, 50,101, 40, 86, 37,165, 96,254,237,104, 4, 31,138, -120, 60,106, 68, 37, 34, 82, 92,153,222,217, 94,203, 69, 64, 97,162,192, 57,213, 73,109,247, 93, 5,118, 85, 8, 42,244,209, 76, - 28, 34,145,168,193, 4, 2,190,139, 41,193, 71,253, 50,239,154,236, 12,143, 19,127, 94, 91, 23,189,192, 57,106,219,211,212,130, -146,209, 97,131, 12, 71,196,245,154,186,223, 88,112, 72,187,216,171, 17,228,168,205, 63, 25, 27, 56,221,110, 28,174, 19, 8, 14, -147,146,166,156, 12, 2, 53, 17, 53, 19,220,151, 27,131,117,233, 19, 39,190,141,140, 4,106,118,191,161,231,212,139,131,119, 44, - 30, 15, 24, 10,186,115, 11,156, 67,189,216,153,168, 79,131,143, 97,223, 82,244,199,222, 71,190,247, 28, 62,180,182,223,179, 62, - 37,156,119,200,121, 71,120,167, 35,222,221,177,186,187,101,253,190,169,100,183, 29,228, 44,148,193,178,175,207,179, 18,146,193, - 31,180,250,234, 98, 13,108,148, 77,134,161,135,117,174,156,189,177,183,130,225,134, 34,231,106,153,231,177, 67, 62,245, 52,116, -145,252,191,221, 71, 63, 55, 32, 47, 20,248,214, 53, 60,219, 35,143, 20,121, 92, 8,223,220,115,246,238,142,205,219,202, 24,141, - 91, 0,214, 8,174,223, 43,196, 95,218,192, 55,120,138,155,122,235,219,251,183,248,235,247,225,165, 45,220,124,121,113,160,183, -255,189, 11,143,126, 47,250,107,175,195,163, 59,104,238,225,217,130,252,174, 53, 60, 2,189, 28,225, 45,247,125,127,247, 49,218, - 43,245,253, 45,124,246,146,250, 75, 87,212,207, 95, 81,114, 65,215,166,252,223, 63, 5, 67,177,195,188, 22, 79, 5,140,246,249, - 44,181,220,173, 99, 10,206, 16,138,101,246,212, 78,117,165,216,181, 30,220,130,213,156, 78, 97,177, 71,159,226, 62,197,214,212, -161, 11,200, 73, 64, 86,173,184, 83,202,206, 15,160,233, 64,159,184,200,118,129, 37,207,183, 79,214,221,131, 32,235,232,225, 8, - 1,142,146, 77,125, 78, 35, 28, 3, 55, 4, 57, 83, 56, 21, 88, 29,217, 11, 79,183,236,195,232,111,154,205,173,255,152,113,218, - 57,245, 7,219, 45,138,168,106,214,192,248,145,197,171,233, 64,239,195,240, 87,224,241,223,129, 71, 61,124,246, 57,248,177,251, -148,225,130,139, 50,146, 83,165, 11,194, 85,181, 55,232,200,183, 79,251,114, 56, 60, 96,138, 71,101,130,184,168, 23,230,178, 56, - 56,166,184, 73, 13,196, 24, 45,118,213, 3, 84,130, 31,246, 34,129, 46, 68,136,137,189,239, 50,181,206, 4, 58,123, 45,205,141, - 34,148, 97,100, 19,224,184, 15,172,251,142, 34,133,172,133,149, 42,125,234,216,102, 83,194,219, 87,221,233,147,174,249,105, 54, -174, 66, 99,168,227,205, 4, 51,231,162,221,228, 61,134, 90,117, 30, 5,215, 41, 52,196, 44,104, 85,213, 59, 67, 31, 84, 47, 98, - 83,179,119,167,145,246, 62, 68,178, 39, 97,118, 46, 18, 30,171, 34,165,208,123,183, 57,122,217,179,220,173, 87, 14, 19,185,194, -193,129,207, 4,227, 82, 14, 61,218,226,186, 77,117, 59,224,148,131,206,161,248, 76, 88,118,146,203,213,138, 29,215,185, 90,166, - 69, 84, 87,170, 95,147, 23,182,169,193,116,152, 45, 60,255, 45,144, 85,150,113,109,141,132,215, 20,234, 11, 1, 31, 83, 97, 40, -147,198,225,218,208,108,154,194, 46, 48,250, 11,144,216, 34,179, 67, 23,133,166, 78,193,163,243,195,180,157,182,200,140, 43,111, -239,163,235, 27,198, 90, 25,114, 70,179,175, 49, 66, 56, 76,152,243,224, 32, 98, 68,115, 49,161,234,193,194, 64,124, 13,189,120, -237,237,222, 83,235, 36,142,211,206,184, 22,101,204, 30, 61,174,164,213,241, 9,186,189, 66,179, 7, 10, 6,191,168,170,219, 78, -166, 91,147,221,217, 74,173,232, 88, 38,104, 12, 33, 32,181, 26,115, 69,131,193, 94,124, 76,144,164, 41, 59,133, 93, 49, 59,217, -105, 80, 86,238,225, 84,196,246, 15, 98, 34,138,152,140, 24,167, 11,196,160, 86,183, 72,136, 39,224, 76, 41,102,117, 38, 55,233, -194,154, 80,179, 65,102, 54, 87,132,227, 99,143, 83,181, 74,168, 22,179, 60,164,201, 59, 99,193, 6, 85,198,137,241,107,182, 59, -199,220, 98, 17,136, 97,204, 62, 94, 51,156,100, 40, 77,188, 3, 71, 94,117, 71,247,139, 51,248, 23,187,200,196,218, 22, 92, 97, - 37, 9, 57, 78,230, 55,219,169,101,176, 55, 37,180, 10,172, 34,122,229,169, 88,158,217,203,152,209, 31,122, 96, 35,229, 79, 30, - 91,152, 74,232,224,230, 41,225, 78,143,124,245, 10,237, 18,221,217,192,201,253,145,171,135, 35,195, 94, 73, 43,161,127,161, 35, - 92, 65, 60,239, 77,160,246,110,153,124, 67,233,169,192,106, 95,216, 1, 67,103,112,139,248,245, 61, 50,122, 91,121,222, 89, 2, -218, 94,224, 83,183, 9,111, 12,232, 63,124,136, 94,140,212, 55, 6,194, 55,245,240,114, 7, 87, 2,151,145,213, 11, 9,121,144, - 25, 70,216,111,236, 61,232,147,216,254,114,155, 33, 20,180, 75,150,226,117,100,221,147,254,210,125,228,119,141,112,231, 71, 64, - 62,230, 95,231, 2, 92, 65,253, 73,120,244,159, 81,255,222, 61,244, 87,206,224,163, 32, 71, 14,188, 81,191,229, 5,177,160,132, -168,232,151,175,208,127,190, 67, 63,125, 69,253,250,158,172,149,253, 49,228, 83,161,246,126, 30,148, 25, 96, 17,188,190,136, 1, -186, 84,173, 35, 84,123,235,139,206,169,171,147,216,181, 66, 8, 11,210,161,219, 7,251,100,162, 80,170,219,214,220,131, 27,162, -185, 52,162,143,140,195, 81, 64,250, 72, 88,205,211, 44, 13, 62,150,109,126, 46, 89, 94,151,157,237,221, 99, 64, 66,180,239, 97, -114,241,215, 73,103,234,247,211, 8,103,201,186,242, 27,138,156, 0,235, 35, 72,103,166, 77,144, 51,243,153,167, 59,144,158,131, -245,135, 76, 5, 79, 0,125,108,246, 54, 81, 59,248, 57, 95, 20, 83, 14,162,105, 98,184,225,215, 96,243,231,224,237, 47,192,120, - 11, 62,249, 73,120,248, 14,250, 63,189,205,101, 44,188,151, 44,161,172, 43,202,174,161,226,125,147,144, 69,200, 69, 15,184, 55, -115, 7,211, 50, 31,116,194,216,212, 41, 0, 67,124, 59, 14, 65,170, 89,191, 8,196,100, 83,195,210,226,152,221,121,209, 2, 87, -138,183, 87,181,180, 67, 66,167, 81,116,136,145, 81,148, 44,182,211,237, 98,162,184, 37, 53,185, 79, 61, 54,215, 2, 66,141,201, - 83,207,124, 52, 91,171,169,224,253,167,230,101, 60,137, 28,118,235, 65,130,143,185,231, 40,147, 38, 62,171,126, 48,239,171,122, - 6,187,122, 34,152, 28,168,218,167,219,131,107,101,178, 90,119,110, 93, 95,157,126, 22, 46, 98,230,218, 39,200, 98,245,211,108, -175,109, 47,222, 92, 7, 34, 76, 74,247, 54, 54,168, 54, 82, 93,104,159,154,208, 78,184,182,158,158, 15,201,133,146,159,105, 74, -128, 35,198, 93,189,238,135,110, 8,243, 61, 92, 39,106,155,167,116,186,247,218,104,110,243,251, 49, 5,186,136,240, 27,129,103, -101,202, 65,208, 3,235,153,180,201,192,162,112,106,235, 52,245, 85, 7, 77, 27,225,110,149,133,202,117, 46,104,244, 80, 92,215, -188,255, 33, 70, 27,187,187,123,160,164, 72, 25, 51,227, 56, 82,115,182,255, 86, 50, 99,206,118,128, 79, 79,172,165,144,150,249, -249, 74,120, 34,158,182, 58, 69, 44,196,100, 76, 17,181,213,120,208,138, 44,180, 0, 37,103,219,169,215, 16, 32,143, 84, 7,181, -104, 72,211,158,202,200, 69, 62,250, 86,235, 94,165, 24, 11, 87, 9, 14,173,113,177,128,122,118,172,218,191,139, 2,201,131, 5, -134, 10,151,106, 30,203, 49, 11,103,181,114,220, 85, 58, 23,178,168, 86, 98, 52,251, 66,116,158,123, 45,150,201,158, 21, 36,216, - 7, 92,171,179,158,235, 60,158, 16,175,226,202, 34,115, 92, 90, 84,217,110,103,245,158, 68, 6,132, 84, 44,220, 64,156,158, 38, - 30,213, 18,180,237,173,156,192, 68, 0, 49,117,126,168,115,110,124,213, 66,209, 98,227,247,160,116, 10,171,160,164,150,149, 92, - 43,177,120,142,118,182,238, 42,164, 0,103, 9, 89,247,200, 89, 79,184,213,219, 73,242,200, 15,216,206,191,182, 33, 66, 18,164, -207, 86, 16, 36,133, 99,144,236,111,200, 23,247,246,154,190,249,196,232,105,157,125,192,210, 41,242,237,103,240,172, 16,254,242, -187,156,111,182,212,111,239,144,111,137,112, 30,208,183, 33,156,247,200,211, 43, 27,251,190, 57, 34,111, 14,240,116,199,209, 83, - 80,238,154, 85,102, 92, 65,218, 42,221,151,118,132, 43,129,103, 87, 30,107, 84,225,228,148,240, 61,167,148, 31,127,159,225, 94, -102, 4,250,183, 6, 86,159,236,145,111, 95,193,135, 35,220, 57,162,191,165,244,247, 10, 71,239,142, 48, 40,225, 56, 33, 47,184, - 5, 43, 86,194,169,199, 27,254,244, 30,254,233, 37,225, 63,137,200,239,249, 25,139,232,212,183,160,252,143,112,241,195,176,191, -132, 55, 31, 81, 95, 59, 66,223,191,141,202, 0, 95,221,216,238, 57, 26, 61,150,155, 25,221, 43,250,245,130,126,102,143,190,177, - 7, 45,232, 80, 24,110, 91,248,205, 85, 17, 6,231,166,148,169,203, 54, 81, 37,165,241,188,253, 35,192, 10,186, 58, 90, 45,213, - 71, 87,189, 86,216, 50, 31,214, 49,120,135,239, 81,183, 93,139,237,141, 11,158, 67,243,173, 7, 63,216,215, 17, 57,142, 72, 10, -150,111, 30,197,161, 29, 77, 5, 38, 83, 28,174, 4,239,196,171,255,254, 46,152, 83,226,168,141,215,163,225,112,111, 36, 11,230, -185, 89,145,227,206,186,112,185,227,201,109,167, 86,248,201,202,118,231, 97,109, 95,152,253,219,144,191,104,246,191,238,196,120, -239,241,195, 24,132, 64,175,233, 1,142,237, 34,222,254, 67,184,252,139,112,247, 61,248,251,103,240,106,129,151,127, 21,126,242, - 33,251,163,145,141, 10,161,216,186,103,159, 29, 81,188,192,133, 73,157, 53, 64,149, 3,151, 25,193, 15,152, 16, 26, 81,140,105, -181,213, 66,149,113, 59,109,139, 16,213, 24,168, 14,165,114,123,243,116,191,202, 42,140,213,116, 52,105, 33,178,147, 48,231,190, -103,132, 1,101,237,196,185,145, 96,156, 1,129,148, 28, 93, 45, 70,147,179, 78, 35,206,168,212,169,251,151,233,218, 97, 81,140, -232,162,167, 93, 56,162,167,169, 99, 11,129,106, 74,119, 93,140,127,171,205,250, 29, 84,237, 13, 99, 75,100, 19, 35,206, 53, 38, -134, 53, 40,149,229, 64, 90,150,121, 26, 11,205, 66, 83,113,215,101, 51,218, 16,178,110, 49,107,216, 85,213, 37, 36,102,142, 85, - 21,117,209,180,204, 14,165, 89,229,160,211, 6,246, 58,102,118, 58, 99,219,136, 58,196, 41, 30,183,141,155,117, 10,192,209, 73, -151, 34,110, 13,107,153,241,217,223, 12,113,168,153,203, 0,103, 24, 16, 51,235,126,122,253,122,189,250,144, 39,116, 27,211,140, -125,249,201,181,169,192,245,156,214,169,188, 10,215, 52, 4, 78,114, 11,134, 33,111,159, 75, 46,133, 60,142,144, 51, 37, 6,242, - 80,125,170, 45,211, 25, 37, 49,249,103,173, 31,152,204,176, 84,232,171,182, 41,114,227,196, 87,234,110,231,127,222,194,102,106, -206,214, 96,151,171, 43, 34, 80,134,189, 85,167,109, 23, 24, 45,103,120,168,130, 72, 66,130, 82, 69,209,209,222,224, 16,150, 11, -177, 64,168, 38,143, 75, 33,210, 7,165,147, 74,114, 17,218, 14, 97, 32, 80, 37,240,184,140,140,217,110,106,103,189,154,162, 47, - 87,131, 86, 77,193, 8,139, 16,248, 86, 14, 21,157, 2, 21,108,121,163,147, 14,198,200, 64, 50,121, 12,147,102,235,216, 71, 69, - 71, 47, 86,154,154,180,120,209,182,234, 8, 65, 72, 37,179,119, 37, 97,237, 92, 27,226, 31,125,169,133, 36, 74, 23,231,125, 79, - 42,150, 96,154, 4, 86,162, 28, 85,123,157, 93, 7,233,104,109,157,184, 84, 24,253,210,139, 17,233, 59,194,113,135,220, 94,193, -211, 61,220,116, 96,198, 17,112,190,114, 82,140,211, 74,210, 76,194,146,222,239,130, 21, 83, 39,143,126,154,172, 86,112,162,112, - 30,108, 79,159, 43,124,105, 15,223,120, 78,248,195,183, 8, 73,169,191,112, 65,249,185, 29,114, 59, 33,191,169,135, 59, 61,236, - 32,172,123,232, 71,116, 45,196, 79, 68,206,227, 72,125, 63, 83, 51,232,168,112,165,132,103, 10, 60,151,204,219, 93, 48,218, 92, - 16,234,174, 50,174, 97, 60,134,237, 80,233,126,105,207,234, 11, 35,171, 23, 35,225,153, 72, 40, 86, 69,134,103, 18,108, 10,114, - 81,208, 87, 43,250,213, 10,239, 85,194, 43, 91,120,170,135, 31,187, 36,252, 91, 71,200, 31,251, 69, 8, 47, 3,159,135,171, 63, - 3,175,125, 22,174,214,112,117,130,126,253,182, 17,212, 62, 86,224,215,246,102,200, 47,198,170,215, 17,244,211, 25,125, 59, 79, - 86, 16,206, 93,224, 56, 42, 57, 43, 67,129,161, 10,251,106, 10,246,216,108,103,136,173,161,219,247,182, 65, 95, 80,198, 97,206, -166,206,121, 70, 34,247,190,102,235,130,155, 59,163, 76,171,236,118,208, 55, 2, 99,240,206, 60, 85,136, 71,226,233,120,177, 45, -235,231, 4,176,150, 12,213,130, 45,130,229,204,227, 35,122,186, 56, 31,230,199,190, 39, 63,241,148,189,227, 0,103, 1, 57, 77, - 54, 90, 15, 47, 66,184,227, 29,119, 48,235,153, 14,160, 15, 77, 20,167, 91,211, 38,232, 8,113,231,123,248,223, 6,225,121,195, -234, 82,175, 29,232,103, 70,151,219,252, 8, 92,254, 85,120,253, 33,252,196, 26,253,149, 29,188,183,163,252,220, 72, 62, 42,108, -162, 82,139, 77, 48,182,197, 14,244,206,117, 90,131,241,115, 60, 35,188,137,102, 27, 22,148, 73,196, 5,134,156, 22,119, 17,132, - 96,123,100,170,131,155,238,211,161, 0, 0, 32, 0, 73, 68, 65, 84, 64,162,141, 83, 99, 20, 74, 13,211, 1, 32,110,239, 82, 31, - 25,183, 3, 52,250, 77, 62,133,214, 65, 51,219,145,252, 16, 41, 85, 61,167, 69,201,181, 48,168,208, 5, 33,117, 29,195, 62,219, -222, 59,248,190,179,206, 24,214,134,146, 86,149,169,145, 99,146,191,233, 34,203,125,217,214,233,148, 92, 86, 23, 89,218, 58, 69, -212,203, 19, 19,226,218,124,251,202,193,161,215,242,219,155,128,108, 57, 25, 72,162,140, 42, 19,244,165, 49,224,218,204,165, 89, -196,240,206,183,137,249,106,117, 13,194,188, 61,246,131, 59, 76, 66,191,233, 39, 42,215,152,103, 76,107,137,235,147,238,230, 4, -104,192,176,105,182,208,136,156,122,216,250,198,107,195,231, 40, 1,124, 29, 43, 83,244,173, 16,157, 35,175,147,150, 74, 38,106, - 30,215,222,247, 67,233,187, 30, 88,197,130, 44,156, 17,238, 94,208, 3,164,203, 82,137, 62,199,243,204,187,125, 47,112, 66, 32, -197, 8, 41,146,139,149,162, 20, 15,134,114, 7, 65, 85,165, 14,123, 7, 75, 89, 19, 27, 16, 72,105, 70,251,202,147,150,185, 58, -137,242,100,222,253, 23, 75, 20,109,137,164, 90,236,139,214,108,115,150,149, 48,108, 8, 88, 43,175, 97, 49,191,143,193,176,162, - 68,232, 19,253, 88, 24,181, 46,170, 47,231, 39, 43, 22,192, 42,133, 24,132, 30,101,133,135, 37, 68,171, 94, 70, 21,207, 50,182, - 96,149, 29,133, 71, 85,144, 26, 56,150, 66,172,206,203,245,177,199, 18,141, 23,189, 34,158,173,158,179, 88, 78,252,102, 91,180, -117, 0, 58, 5,179,212,113, 68, 58, 87,212,215, 98, 69,135,180,189,164, 95,196,238,151,213,226,226,151,209,146,233,218, 27, 29, -155,213,164, 42, 41, 84,122, 79,216, 89,229,194,170, 22,142,214,145,208,175,144, 62, 34, 39,157, 47, 18,131,135,198, 8,114, 35, - 34, 31,238,145,143,218, 14,154,147, 14, 57,238, 97, 45, 77,160,234,207, 35, 88,132,101,219, 1, 54, 16, 72, 12,254,247,213,246, -154,102,206,132,205,222,198,175,201,199,252,247, 7,120, 54,193,119, 61, 11, 99,134, 47,220, 71, 63,159, 77,124,119,183,160,191, -186, 71,190,123,109, 29,224, 71,143,136,157, 93, 12,102, 87,235,136, 31,170,200,251, 25,222,203,132,167, 35,242, 45,107,116, 23, -224, 67,182, 38,208, 55, 46,237,231, 70,227, 55, 23, 49,152,199,246,168, 18,179, 34, 95,206,244, 95,177,241,115,106, 14, 89,129, - 85,179,125,136,216, 77,246, 11, 35,250,222, 64,248,115, 79, 33,127,252,103,129,167,129, 31,128, 87,255, 43,248,220, 37,244, 47, - 66,159, 44,251,124,191, 71,190,190, 71,191,184,135,127,190, 67,206, 61,254,187,171,232,215,246,148, 77, 38,244, 98,182,185,211, - 96,231,216,227, 98,167,117,117,173,217,168,236,139,117,116, 37,205,234,172,208, 34, 2,188, 30, 24,124,250,211,196,114, 45, 94, -184,237,197, 59,177,115, 80,130,144,130,176,118,125, 90,195, 93, 6,207,155, 9,170,196,206, 22, 86,210, 7,130,195,133, 32,248, - 90, 71, 17, 49,163,123, 8, 29,114,228,122,149,147,104,127,127, 28,237, 16, 95,118,230,235,100,191,246,254, 36, 82,132, 35,207, -109,145,115,144,167, 45, 43,157, 0,122,215, 44,104,229, 93, 35,236,141,123,179,158, 9, 70, 29,234,206, 29, 88,243, 10,116,159, -130,240,177,165,100,205,111, 92, 39,230,131,188,252,126,184,250,187,232,219, 27,248,241, 21,245, 51,151,212,171, 29,101, 28, 25, -206, 96, 95,117,234,204, 7,204,194,154,125,234,209,182,180, 3,230,187,214,121, 51, 63,127,125,151, 93, 73, 85, 71,116, 54,157, -210,116,131,177, 34, 92, 22,126,104,177, 79,133,224, 98, 50, 79,121,100, 49, 30,174, 46, 20,109,123,226,168,129, 18,116,138, 11, -221,187,106,189, 96,130,224, 65,173,169, 72, 65,144,148,108, 69, 71,240,192, 24,235,142,100, 33,222, 42, 7,254,109,249, 13,204, -207,135, 29,151, 52,250, 91, 59,168,219,222,240, 3,216,233, 19,203,125,250,213, 10,145,166, 4, 87, 79,245,106,247, 67, 93,184, -113,116,214,185, 79, 63,190,177, 63,196,225, 44,142,120,153, 49,165, 28,250,184,229,122,152, 75, 19,184, 29, 72,238,158, 92, 87, -135,246,126,136,175,168,130,184,206,170,229,189,215,137,229,160, 7, 73,237,135, 23, 68, 59,135,163, 55,117, 65,227, 68, 26,204, - 45, 65,109, 49,234,111, 34, 23, 93, 76, 10,130, 3, 44, 89, 20, 36, 83, 16, 77, 43, 54,124, 69, 98,133,210,252,103,117, 17, 46, -131, 28, 34,129,151,239, 82, 16,211, 10,196,190,183,207, 40, 23,186, 46, 77,175,173,113,254,107,201, 76, 80, 22, 92,135,147,108, -106, 81,115, 93, 88,216,150, 27,141,230,168,104,246, 88,243,168, 87, 85,231, 51,148,195, 93,192,226,127,169,147, 64,221,109, 64, -173, 43, 13, 25, 74,159,108, 20, 93, 70,250,213, 26, 77, 9,169,153, 16,162,209,217, 16,247,202,154,242,155,104, 57,234, 17,179, -137,105,157, 43,194,170,129, 82,125,119, 62, 85,169,194, 88, 3, 23,163,237,195,142,129, 35,153, 25,241, 56, 74, 82, 83,176,189, -243,193, 84,199, 15, 99, 17, 23,154, 96,143, 97,206, 77,243, 62, 86, 8, 20,116, 8, 83,158,123,208,106, 86, 22, 77,118, 65,228, -108,157,145,152,167,187,226,226, 19, 45, 19, 23, 56,106,229, 40, 20, 86, 10,235, 82, 89, 69,219,159,166, 8,225,244, 24,185,177, -134,216, 25,187,247,118,130, 91, 43,228, 27, 18,242, 98,111,232,170,179,118,247,247, 86,193, 99, 35,101,111,109,160,142, 62,163, - 44,121,142,241,139, 97,170,215, 37,233, 34,218, 40, 79,156, 95,146,251,145,239,123, 23,255, 77,231, 70, 21,123,123, 3,111,109, -225,205,108,135,202, 55,174,224,202,231,199,167, 9,158, 62, 65, 62, 60,192, 93,179,152, 73, 86,244, 42, 19,200, 6,250,120,144, -237,241, 54, 88, 90,217,203,138,110, 7,216,102,120, 46, 18,110, 37,194,189,236,196, 44, 33, 38,140,227,223,195, 46, 40, 65,133, -152,161, 31,132, 94,160,123, 54, 18,110,122, 96,203,187,138,190, 85,144,191,252, 2,242, 7,126,220, 78,232,242,167,208,191,253, - 15,224,255,222, 35,127,248, 25,243,233, 63, 30,224,113, 65, 94, 29, 96,159,145, 80, 96, 45,240,187,142,209,143, 71,234, 95,123, -200,120, 53, 50,220, 48, 50,213,209,101, 33,186, 60, 93,179, 82,163,227,234,221,250, 63,125, 41, 42,132,100,116,178,236,133, 99, -241,183,122,159,231, 47,241,164,187,137,134,120, 21,119, 32, 70, 21,250, 40, 28,175,236,233,180, 80,165,246,179, 37, 6,130, 31, -188, 33, 69, 36,137,117,219, 94,156,137,128, 28, 91, 55, 46, 55,146, 21,151,167, 6, 23, 98, 21,225,212, 59,240,174,253, 21,109, -197,210,166, 55,147, 95,205,219,207,173, 64,122, 12,241,210, 57,237, 21,202, 6,198, 1, 46, 10,186, 43, 48,216, 40, 65,206,139, -105,226, 66,129,227,151,224,228,143, 64,252,168,247,112,121,113, 99, 56, 50, 46,252,229,247,195,197, 15,160, 95,223,195, 47,246, -232,215, 55,148,205,150,188, 29,216,139,133,177,236,178,125,246, 89,241,112, 33, 59, 72,246, 62,161,204, 24,191,161,168,255, 55, -209, 39, 18,185,166,219,165, 26,164, 35, 53,160,138, 50,167,162,249,216,181, 28,160, 85,156,161, 63,221,106,101, 78,134,244,174, - 94,170, 78,129, 32, 18, 70, 68, 83, 91,128, 50, 38,181,131, 34,152,226,187, 58,164,101,138, 34, 85,223,161, 59, 66,118,138, 95, -246,155,108,156,116,219, 50,251,167,221,115,190, 28,115,139, 28, 18,161,102,240,204,108, 93,178,135, 91,236,170, 23, 10,242,210, -188,205,181, 58, 55, 67,158,136, 56,106,244, 66,157,212,232, 44, 14, 54,239,240, 68,166,209,122,235,206,181,221,111,166,177,183, - 28,216,191,116,138,138, 17, 22,121,130,139,254,188, 77,170,101, 33, 5,145, 73, 48, 58,133,221, 72,176,176,156,101, 62, 56,122, -173, 45, 93,140,205, 49,113,157,106, 91,193,120,129,224, 13,133, 77,108,245,144,238,230,159,203,162,138, 57, 40, 20,230,195, 92, - 28, 85,235,100, 59, 42, 37,143,211, 7,166, 7, 66,192,112,232,115,215,229, 13,194, 95,103, 8,164,174, 7,223,161, 7, 47,168, - 74,173,148,113,116,189,128, 80,243, 56, 75,241, 91,113,209,220, 99, 13, 25,187,136,232, 93, 86, 19,203,231,222, 86, 41,234,186, -138, 22, 44, 52, 27, 24,212, 53,215,170,212,253, 30,138,146, 66, 64, 83, 48, 14,139, 42,132, 72, 8, 43, 56,185, 67,208,187,148, - 97, 55, 17,126,218,147,193,169,111, 33,136, 21, 5,142,127,173, 46,182,219, 18,201,152,133, 77, 69,193, 51, 96,107, 8, 12, 88, - 20, 98, 27,254,172,181,177,151,153, 42,203,118,187, 13,139,100, 28,255, 4, 91,160,141, 61,213,106,119,226,226,234,210,128, 16, -194, 72, 80, 3,200,180,162, 67, 74, 38,104,165, 75,133,168,149,160,149, 30,165,196,202,152,149,162,129,132,178, 14,149,163, 92, -184, 81, 43,171,163, 72, 56, 90, 33,171,222,158, 93,151,144,167, 79,145,231, 86,240,145,136, 60,223,153,159,252, 52,218, 77,184, - 6, 59, 41, 46, 10, 20,219, 47, 51,142,222,145, 59,250,176,168,117,151,142, 18,108, 74, 33,233,252, 74,236, 20,237,189, 67,139, - 98, 45,144, 20, 7,214,248, 88,190, 84,228,169,149,253,243, 59, 87,240,206,222,126,239,135, 87,182,211,127,127,128,247, 28, 9, -250,176,194, 29, 65,110,223,132,103, 51, 60,222,193, 38, 35,123, 69,182,197,114,213, 95, 24,225,178,160, 27,144, 91,105, 98, 2, -176,182,195, 33,124,228,152,254,245, 29,117,173, 28,221, 14,236, 71,243,193,135,106,231,146, 65, 67,149,254,165,142,240,241,206, -146,222,110,116,240,154,194, 29, 69,254,210, 43,240, 45,255, 57,232,143,194,246,111, 80,255,252,235,232,255,181,129,111, 91, 17, -175, 54,176,141,112,175,216, 57,115,166, 22,179,121,187,131,239,232,225,118, 15,175,218,245,151, 49,166, 79,241,208,176,147, 17, - 75,106,219, 11,236,117,194,184, 30,119,106, 43, 81, 13,104,181, 3, 61, 70,157, 10,204,232,137,128, 34,243,232, 52, 6, 19,109, -166, 22, 95,235,149,230,186,192,185, 40,199,119, 58,195,156, 62,214,217, 99, 29,133,176,142,200, 42, 90, 23,208,251,232,220,173, - 86,178,142,214,177,159, 5,179,246,157, 68, 43,178,250, 8,235,222,244,104, 93,178, 41,131, 0,213,145,105,237,203, 61,248,139, -205, 62, 77,106,157, 83,103,215, 9, 97, 99,187,250,171, 10, 15, 76,204, 46,131,133, 59,112, 11,184, 37,176, 90,195,233,199,224, -236, 79,248, 30,125, 92, 28,232, 13,249, 90, 96,247,163,112,245, 35,232,215,118,240,211, 61,188,177,163,198, 17, 58,235,242,118, - 98, 5, 83,187, 65, 55,193,126,112,223,145,122,209, 81, 23, 55, 74, 93, 8,182,162, 46, 51,162,231,214, 68,157,160,156, 75, 75, -205, 50,252,175,136,154,112,183,221,216,196,108,162, 45, 61, 45, 80, 41,132,201,113, 33,109,108, 93,161,235, 44,172, 74, 67, 52, -139,153,119,139,121,180,123, 88, 23,152, 20,214,131,206, 1,166,170, 24,178, 84,237,177,169,213,247,236, 54, 14,142,186, 84, 96, -205, 42,106, 89,208,219,100, 1,213,154,125, 92, 58, 17,213,230,103, 59,171,210,235, 98,124,111, 41,117,117, 26, 87, 47, 69,155, -186, 80, 67,183, 20,184,122, 45,204,101,182, 5, 55,220, 45,147,186,187,237,208, 91,228,168, 54, 36,236, 2, 12,212,120,231, 13, - 62, 19,100,217, 88,201,148,228, 46, 44,214, 0, 45, 42,155, 5, 77, 79,196,155, 52,109,154, 96,158,192,166,201,226, 39,202,100, -116, 59,140,133,115, 54, 65,144,249,196,174,203,179, 91,159,156, 30, 28,132, 18, 78, 5,100,157,130,116,170,187,158,224, 16,121, -123,192,232,127, 98,172, 63,251,243, 83, 8,132,174, 51,110, 66,173,134, 38,111,171, 17,143, 90, 53,135,129, 57, 9, 38, 5,125, - 8,166, 87, 27,243, 34, 58, 87, 63,176,235, 22, 79,113, 19,241,235,183, 44,102, 37, 97,177, 0,210,185, 34, 75,101,183, 53, 37, - 93,176,202, 72, 17,142, 17,164, 10, 49, 38,234,249, 29, 88,223, 66, 30,223,179,145,168,195, 9,230, 74,211,252,157,161, 88,104, - 72, 12, 66, 45,202, 88,237,195, 25, 67, 48,223,115,181,185,127,104, 87, 92, 8,212, 40,176, 11, 92,234,124,137,172,211, 92,245, - 81,236,201, 70, 53, 76,167, 20,187, 33, 87, 22, 42,197,210,206,121,177, 17, 85, 81, 74,178,157, 81, 95, 42, 81,140,200,148, 68, - 45,155,151,202, 42, 64,143,141,222, 67,201,160,153, 85, 54, 59,217,145, 22, 11, 84,168, 74,191, 74,132, 91, 29,114,163, 71, 82, - 15, 39, 17,121,182, 67, 94, 57,134,151,143,204,129,181, 42, 54,219,221, 87,120,188,135,203,106, 92,245,109,129,139,108, 54,181, -156,189, 43, 87,216, 87,116, 91,231, 32,153, 93, 99, 84,187, 2,218, 85, 88,178,138,102,119, 91,187, 80,106,237,203,221,163,100, - 11,195,155, 9,110,119, 22,141,250,181, 43, 27,193,159, 4,184,217,193,170, 71, 86, 1,125,216,193,173,193,238,196,185,218,172, - 52,121,238,117,178,139, 66,212,161,220, 69, 32, 71,116, 95,236,181,108,178,165,184,157,118,246,252, 70,144,223,125,131,244,197, - 29,199,239,239,204,191,175,176,206,208,157, 11,221,179,129, 48, 6,228, 78,130,127,249,200,112,165, 95,169,240, 83, 25,126,199, - 57,252,201,239, 50,228,104,249,235,112,239, 11,212,127,255, 77,244,215,182,240, 50, 68, 6,248,210, 6,237,162, 93,156,125, 64, -143, 3,178, 86,244,178, 32, 95, 85, 88,101,228, 41, 69,190,169,163,191, 28,185, 26,149,156,218,238, 91,145,143,175,144,231, 43, -241, 51, 91,130,216,217,153,196,182, 20,217, 45, 98,181,218,205, 47, 10,238, 88, 16, 63,244,103,146,161, 49, 7,230, 6,171,238, -148,190,194,250, 36,210, 63,211, 17,158,237,168, 91, 8,217, 87, 51,209,132,109,114,154, 76, 12,231,159,149, 28,119,118,232, 30, -123, 8,203, 81,176,131,187,247, 78,188,217,213,130,216,225, 94, 60, 82,175, 41,206, 6,181,195, 60, 55, 72,183,211,255,170,139, - 58,214, 30,109, 53,184,152,242,145,194, 99, 95,252,223,173,246,223,110, 40,156,101, 56, 57,133,227, 79,192,249, 31,181,212, 54, -221, 93,215, 71,219,120,126,124, 29,174,254, 95,120,255, 1,252,114, 7, 95,217, 81,134, 1, 93, 87,116, 45,112, 97, 69, 78,240, - 46, 90,101,166,189, 37, 21,130,216,193, 63,137,249,195,242, 97,230,206,218,172,164, 11,131,182, 51,172,115,209, 9, 97,170,158, - 15, 95,107,157,178,194, 67,240,124, 6,223, 47, 74,245,238, 85,172, 25,168,254,178, 63,242,220,138,155,159, 92,241,198,103,246, -188,127, 81,124,124, 94, 45, 79,187, 40,187, 90,217,150,204,154,202,202,173,113, 85,210,180,188,157, 4,103,190,174,211, 18,230, -116,178,234, 25,220,254,138,150,203, 11, 75, 74, 20, 70,173,243, 14, 30,174,165,148, 57, 37,206,111,238, 85,231, 48, 16,220,206, - 86, 23,157,189,253,252, 25, 56,210,196, 98,211,143, 13,139,181,228,181, 49,246,172, 70,247,240, 22, 85,191,127, 51, 1,190, 84, -100, 10, 25, 65,231,144,154, 73,211,196,161,157,140, 15, 96, 32, 5, 93, 28,172,142, 5,151,224, 42,246,197,107,251,128, 13,197, -204,117,208,182,226, 14,211,163,197,246,222, 46, 55, 28, 65, 8,213,223,121,109, 2,105,157,131,104,132, 5,253, 78, 38,139,234, -245,157,143,106,153,247,208,215,153, 81,139, 85, 67,235,138,175, 63,251,136, 16, 83,111,231, 88,206,166,217,137,174,218, 47,254, -179,131, 57,169, 90,246,188,101,164, 87, 23, 11, 54,204,235,172, 73, 16, 62,112,181,110,254,248,166,220,215,107, 80,170,195,122, - 6, 69, 73,101,220, 59, 30, 85, 38,123,129,136,197,126,118, 93, 79, 89,157, 0, 3, 50, 92, 17,114,153,222,184,192,124, 17, 88, - 32,130,195, 26, 84, 60,179,216, 20,242, 69,172, 51,149, 24,145,148,208,253,206,170,174, 90, 93,228, 96, 4,151,189,127,217, 85, -108, 20, 31,124, 44,215,234,152,160,173,153, 85, 31, 66,250, 56,175, 6, 68, 44,114,177,182, 84, 31,111, 78, 35,133,236, 48,145, -136, 16,170, 29,242,157, 84, 2,137,144, 51,253,104,214,141, 85,115,237,118,145,176,138, 70,111, 59, 75,240, 82,143, 60,219,219, - 65,254, 97,239,176,130,139,211,246, 5, 30, 20,184,220, 91, 39,124,127, 64, 31,143,240, 40,163,155,193, 14,111,247, 71,105,167, - 70,225,219,120,183,229,162, 29,180,162, 67, 70, 51, 19,164, 67,146,141, 9, 37,185,128,185,239,144, 51, 59, 4, 36, 5,228,212, -199,253,247,147,253,172,205, 8,131, 88,112,204,152, 77,140,118,106,138,107,238,172,236,141, 73,192,123, 25, 61,222,120,124,152, -115,199, 31, 87, 19, 63, 14, 94,132, 60,168,232, 87, 6,155,196,124, 34,195,183,158,218, 52, 64, 45,247, 35,252,233,167, 9,119, -119,144, 11,233, 34, 35, 59,243,129, 51, 2, 23,216,110,127,155, 44, 72,229,103, 51,172, 87,240,239,124,204, 38, 14,227, 79,195, -151,222,166,254,145,175,145, 47,183,140, 31, 9,232,169,176, 74, 74,247,246, 30,142, 34, 37, 6,203,108,223,248,205,110, 47,200, -168,132,167, 34,218, 7,116, 29, 73,207, 70,214,111,101,198, 98, 89, 39,245, 82,137,239, 90,148,107,240, 14,156,208,232, 85, 83, -138,131,237,205,247, 54,110,236,188, 99, 8,213,173,152,174,242,149, 98,213,112, 21,144,226,129, 9, 79,247,132,143,174, 9,119, - 86, 48,184, 32,250,134, 21, 31,156, 70,228, 36,218,161,125,106,212, 61,214,193, 42,220,206,219, 65,137, 11,127,204,194, 0, 91, - 21,246, 2,143, 71,247, 45,101,251,231,173,211,104,246, 83,204,148,147,113, 34,122, 22,108,218,190,242,169,208,101,133,187,217, - 96, 70,191,239,150,237,226,127,240,158,221,237,142, 11,114,187,194,241,211,112,246,125,144, 62,234,168,216,114,237,174,177,182, -117,200,246, 39, 96,243, 58,250,149, 14,190, 92,168,251,129,186,217,163,151,197, 44, 53,189, 16,139,103,160, 79, 70,173, 69, 42, -152,207, 97, 61,120,109,178,159, 54, 66,156,223,211,236,209,235, 44, 52, 86,171,212, 61, 60,201,186,154, 32,209, 59, 42,166,177, -178,137,113,173,101, 44,141,196,166, 50,229, 81,139,194,153, 4, 94,248,109, 43,226, 55,119,232, 47,108,169, 46, 86,106,229, 68, -187,125,238,213, 92, 46,189,219, 19,107, 40, 38,236,155,218,225,105, 14,237, 29,126, 59,216,235, 2, 58,194,129, 72,172,163,237, -234,231, 68,180, 57,192,211,254, 62,105,153,192,176, 7,242, 46,209,153,142,183,232,136,131,101,172, 30,218,168,218,125,238,186, -183, 95, 15,201,124,237, 94, 89,166,108,113,157,189,206,174, 69,170, 75,222,122,235,254,245, 73, 96,203, 12, 99,145,107,112,242, -107,105,103,115, 30,209,244,249, 76, 96, 63,230, 64,149,214,113, 87,153, 1, 54,210, 68, 84,117, 97, 61, 91, 38,238,137, 89,161, -171, 51,152, 13,161, 59,139,196,102, 8,217, 60, 46,175, 11, 7,128,180, 66,209,181, 4,242,100,190,206, 44, 76,107, 54, 73,105, -161, 57,126, 22,121,210, 92, 76, 29,161, 75, 94, 12, 85, 66,234, 38, 91, 95,235,210, 45,140,102,142,169,211,170, 72,169,208,165, - 73,201,190,124,252, 15, 68,203, 79,168, 99,215,140,232,194, 74, 34, 79,212,140,150, 49, 79,169,179,136,204,195, 15,146, 8,146, - 51,244,107, 98,201,144,214, 54, 50,240, 10,211,198,200,214,117, 55,178,154,165,176,153, 63,189,168,101,215,142, 84, 74, 53, 22, - 58, 37, 32,235, 21, 49,196,105, 52, 31, 22,251,188,172,129,193, 22, 41, 20, 81,207,107,159, 63,160, 56,141,232,132,218, 62,244, - 92,168,152, 53, 76, 39,133,169,221,148,109, 66,109, 55,207,147,104,142,177,158, 74, 71, 97, 85, 42,235,146,233, 99, 34,158,175, -144, 35, 11,253,178,120, 98,223,195, 63,171,200,119,174,225,195, 39,200,173, 35, 59,112,107,133,109,133,171, 61, 60, 84,120,111, -128, 7, 3,250,238,136,222,219,163,155,209, 14,243,161, 88,190,115,219, 93,165,134,215, 86,234, 88, 93,128,232, 23,187, 24,164, - 97,142,185,117,251, 20, 3, 49, 57, 77,168, 31, 8, 15, 77,124, 37,235, 64,216, 36,194,174,131, 55, 92, 46,140,237, 79,229, 44, - 34,251, 8,143, 21,185, 25,204,107,126,171,179,195,231, 81,134, 55,119,112,158,224, 70, 68, 78,131,117,225, 87, 25,222,202,112, - 97,156,113,233, 42,242,162,160, 23,138,222, 43,200, 91, 35,220, 62,130, 27, 29,242,160,162,253, 10,158,143,208, 41,242,104,132, - 7,131,141,250, 69,145, 91,197,172, 86, 23,192,223,218,194,247,158,194,127,249,113, 56,238, 97,115, 23,254,201,219,212,255,248, - 53,134, 52,178,125, 37, 48, 6,161,238, 97,119,161, 60, 69,241,179, 79,169, 95,119,245,218,157,136,222,138,132,211,128,174,133, -186, 41,232, 69, 57,232, 38,170,147, 5,211,253,138,110,108,215,223,149,198,233, 23, 66,178,200, 96,201,134, 61,175, 98,201,119, - 33,137,229,198, 71,103, 49, 4, 69,114, 32,156,118,200,211,137,250,110, 65, 99, 48,161,227, 75,107,228,233,206, 30,244,210,119, -220, 61,232,177,143, 3,130, 75,224,167,229, 98,103,191, 14, 98, 73,104,185,204,244,149,236,183,153,226,135,198,142,217,144,156, - 77,241,169, 69,172, 83,223, 57,223, 64, 43,114,218, 27,163,224, 76,140,236,151, 58,120,184,133,175,239,109,101,209, 9,188,185, -135,247,178, 5, 2,220, 8,246,121,156, 29,193,241,119,194,234,183,248,215,126,184,118,219, 88, 89,209,177,255, 60,236,126, 24, -189,183,135, 47,247,232,227, 29,249,222,150,178, 25, 28,126, 99, 45, 89,170, 48,202,194,251,221, 82, 11, 91,184,201, 2,202,165, - 11,130,220,146,197,221,178,210, 61,203,102, 49,142,158,168, 62, 62, 22,159,187,219,232,247, 26, 79, 8, 37,121,234, 99,113, 84, -165,136,109, 45, 54, 65,249,220,143, 95,176,251, 97,101, 47,141,141,109,227,236,136, 80,156, 64,215, 55,221,105, 16,142,164,161, - 67, 27,169,114,150,172,181,196,177, 6,108,105,217,202,193, 59,223, 50,185,188,197, 34,158,157, 35,149,181,129, 58,101, 49,250, - 85,146, 67, 69, 6,223, 11,183,177,118,110,141,138,204, 80,155,165, 27,235,176, 27, 91,132,253, 77, 52,186,121,188, 20, 16,167, -109, 46,138,132,198,253,152,148,224,117, 10,194, 20, 39,149, 29,100,177, 47,133,126,186, 32,104,126, 0,146, 85, 69,174, 53,239, -166,149,146,197,206,160, 97,113,163,139,218,170,151, 1, 9,139,145,150,134, 79, 43,115,241,193, 34,213,112,210,112,205,212,148, - 39, 78,194, 57,132, 38,120, 12, 44, 79, 8,251, 84,117, 1, 10,250,141,242, 89,218, 53,117,125, 57,223, 86, 17, 66,236,187,137, - 4, 23,155, 71, 93,157, 76,151,179,221,163, 92,143,129,204,133,141,189,223,209, 14,254,246,124, 15, 88, 57, 11,106,229,114,151, -222,214, 84, 58,123,250,209, 15, 24,216, 7, 33,229,106,136, 81, 45, 74,215, 7, 82, 76, 4, 81, 36,117,196,184, 66,227, 26, 73, -167,212,106, 67,176, 78, 93,109,170, 25,145,206,144,120,248,151,172, 24, 41,174,198,196,128, 65, 39, 2,197,224, 32, 68,194,144, -160,139,118, 64, 59,109,173, 46, 88,202,170,106, 80, 53,236,198,209,252,223,193,239, 14, 73, 60,159,183, 26,174, 47, 16,209, 80, -217,143,197, 94,100,246,225, 94, 47,136, 22,118, 57,179, 18, 56, 78,194, 73,138,172,168, 28,111, 11,125, 8,196, 27, 61,242,244, - 9,242, 66,111, 2,226,126, 68,184,132,167,247,200, 43, 43,184,243, 50,156,220, 52, 37,240,110,111,251,241,135,213,242,192,223, - 26,208,119,246,232,251, 25,221,236,169,155, 17,174, 70,234,174, 80,107, 33,123, 61, 95, 69,169, 81,144,193,191, 40,193,242,207, - 75,145, 86, 23, 77,228,172,226, 49,182, 13,157,153, 4,194, 8, 49, 40,105, 83,232,163, 18,163,146, 58, 33, 62, 20, 66,181,238, - 36, 28, 91,150,189,238,132,112, 20, 9, 47,174,144,211,106,104,185,149, 32,187, 8,131,162,143, 70,216, 23,164, 56,121,250,162, -192, 90,209, 62,194,105, 64, 7, 65, 71,179, 44,134,181,117,152, 82,176, 63,247,222,206,166, 22,231,107,232, 7,248,106,133, 51, -144,149,131,116,246, 3,218, 85,228,158,194, 15,111,224,215, 51,252,201,231,224,207,124,163, 93,113,239, 95,192,223,120,157,242, - 87,223,102,123, 86,216, 61, 39,236,131, 82,243,172, 31,169, 10, 49, 87, 52,249,170,119, 91,225, 45, 11,196,209,231, 19,117,175, -104, 22,100, 87, 25,223,203,108, 42,142, 23,182,115, 83,179, 39,149,157, 68,194, 0, 97,167, 48,186, 53,243,164, 67,142, 18, 58, - 66,237, 5, 61,241, 74,223,149,232,146, 32,196,222,246,222, 47,246,240,220,138,240,176,192,205,104, 83,143,243,100,171,139, 77, -134,219,106,207, 81,152, 91,129, 81,237,191,143,222, 31,141,217, 66,101,176,184, 84, 70,172, 3,223,249, 33,159,220,215,165,213, -146,234, 66,227, 75, 87,215, 99,248,216,105,133,209,231,238,244, 6,153, 89, 97, 34,187,130, 21, 98,175, 22,227, 29, 72,129, 13, -240,247, 30,216,168,255, 70,132,155, 5,238, 20, 88,191, 0,235,239, 54,255,250, 20,153,186, 16,198, 73,130,241, 85,184,250,239, -209,247,222,132,207,173,168, 95,186, 34,127,233,130,113,200,140,209, 1, 49,101,182,232,118,209,110,160,163,251,169, 7,153, 91, -211,202, 33,242,244,131,136, 40,181,109,224,220,139, 29, 43,139,108,182, 54,182,159,163, 50,147, 52,142,185,186,154,218,111,184, -157,117,199, 77, 17, 95,220,158,245,184,100,187, 79,232, 60, 5,168, 40, 35,202,190, 40,161,113, 47, 48,186, 32, 49,248,110, 94, -167,149,158,248,159,159, 32, 40,211,227,232,204,255,215,249,144,111, 62,237,226, 19,196,212,148,232,139,110, 81,197, 64, 44,201, -195, 88, 28, 9, 62, 29,226, 97, 41, 34,116,229,116, 89, 88,225,174,183,117,203,230, 92,171, 78,157,112, 27,179,183, 69,177, 30, -236,241,117,145,186,118,168,112, 23,102, 11,222, 97,116,209,172,111,138,174,164,215,133, 72,238, 48,241, 76, 14, 70,216, 19, 64, -133, 58,101,120,180, 71,175,174,113,152, 64, 79,190, 86,109,227,109, 9,205,214, 53,139,246,170, 43,166,150,225, 46, 70,146,170, -211,115, 84, 89, 18,224, 90,142,192,108,169, 19,253,128,116, 6,209, 67,181,192, 53, 82,157, 46, 44,110, 41,153, 56,186, 17,249, - 66, 76,102,171, 22,168,227,136, 22,215, 65,212,178,152, 50,184,222,160,235, 92, 18, 86, 93,171,113,232,226,230,137,207,101, 46, - 52,108,244, 94, 15,162,111, 15, 28, 11,126, 1,165, 90, 43, 59,131,252,210, 75, 79, 82,165,171, 35, 93,215, 19,211,218,190,171, -187,135,176,223,210, 21, 83,152, 27, 39,221,198,239, 41, 26,116,165,115,161,204, 94,139,147,210, 58,243,211, 73,165,247,175,122, -148,129,152, 86,212, 16,209, 82,166,106, 75,252,159,115,197,253,168,179, 32, 69,131,144,130,135,176,160, 88,238,201,108,107, 16, -194,172, 84, 22,151, 79,104,177,253, 92,133, 16, 42,235, 16,184, 81, 51,235, 42,164,243, 21,242,194, 25,242,202, 41,242,225, 0, -207,111,145, 27, 27,100,157,225,244, 14, 60,245,135, 32,126,151,205,117,203, 15,161,151, 95,133,215, 42,188,150,209,175,110,225, -253,129,122, 49, 82,119,131,249, 17,135, 66, 29, 70,114,174,100, 17, 70, 85, 70,103, 94,215, 98, 35,223,214,200,105,181,213,233, -232,107,244, 54, 85,240,168,102,178,152,158, 78,147,107,226, 26, 45, 84, 44,153, 53, 22,136, 89,137, 87, 74, 79,161,235,160,219, -184,216, 37, 4,180,239,224, 1,132, 75,181,113,253,168,232,101,134,119, 70, 83,182,223, 72,118, 51,236, 93, 3,240,254, 0,167, - 61,188,208,217,225,241, 32,160, 95, 46,232,221, 1,217,251,158,255,182,160,249,210,202,238,151, 78, 44, 87, 61, 87,203,247, 88, - 5, 56,173,200,235, 5,126,122, 15,255,223, 22,206,122,248,177,239,129, 79, 60, 13,219,119,225,157,135,240,231, 95, 99,248,199, -247,217, 62, 15,155, 51, 75, 64,171,213,181, 3,206, 60,144,216, 70,123,158, 80,118,132,141,148,239, 86,116,175,240,116,231,232, -211, 66,206,238, 63,246,223, 94, 70,195,222, 18, 2,114,158,108, 20,174, 1,185, 2, 25, 20,110,246,240,145, 53,114, 18, 9, 93, -107, 67,220, 54,214,153,151,156,211,222,185,233,213, 86, 5, 31, 63,118, 5,122,180, 67,249,129,143,173,163, 34, 67,245,192, 51, -117,237,132,162,123,191,137, 94, 96, 69,208,191, 48, 88,164,108,135, 31,248,106, 93,254,214,171, 16,162,117,219,219,206, 84,234, - 53, 33,197,219,139,216,153, 31,253,142,147,227,250, 96,202,189, 62, 34, 87, 5, 94, 31,225, 81,181,247,232, 65, 99,131, 87,251, - 61,157, 88,193,245,210, 0, 55,111,194,201,239,134,254,227,126,103, 41,179,185, 76, 86,246,103,246,191, 12,155,255, 22,238,189, - 10,191,208, 81,126,228, 49,227,155, 23,140,146, 25,250, 48,121,156,227, 33, 97,133, 62, 78, 43,195,233, 95, 47,119,232,203,236, -107, 28,158,210,254, 23, 15, 90,205,235,120, 81,143, 92,117, 6,123, 4,122,105,192,151, 89,108, 84, 93, 96, 22,220,165, 82, 68, -167,169, 65, 20, 83,223,151,228,221,147,119,168, 90, 33, 68, 63,132,253,126,178, 87, 8,165,176, 90,220,219, 83,180, 90,204,183, - 97,126,168, 86,115, 50, 48,243, 14,116, 49, 73, 92,246,170, 77,168, 89,188,121, 17,213, 5,144,198, 68,127, 9,241,235, 95, 23, - 99,105,251,190, 79,197,145,206, 86,171,249,140, 20,174,199,122, 31,168,225, 85,167, 67, 34,120, 19,164, 85, 39, 49,149, 48, 79, - 5, 88, 4,180,132, 5, 56, 39,200,108, 15, 92, 6,185,206,217,107, 79,214, 24,237,185,196,133,214, 96,145,240,242, 1, 61,177, -206, 37,129, 44,130, 96,154,102, 56,204,222,255, 6, 9,159, 34, 95,117, 54,238, 5,105,118,189,176, 88, 35, 60,177,246,159, 67, -109,244,240, 61,147,131,229,129, 78,123,235,105, 2,225,142,165, 22,170,210, 73, 32,244,189, 79,134,235,148,154,214, 68,113,154, -203, 4,138,145,133, 28, 82, 29,190, 19, 66,116, 33,168, 78, 83,168, 67, 73,158, 28,136, 13, 38,226,100,176,231,178, 32,230,114, - 61, 13,182,189,158, 20,125,238, 63,168,144,115, 33,239,246,116,235, 68,212, 64, 24,246,112, 60, 32,247,223, 36,212,140,132, 58, - 89,188,149, 74,162,176, 86, 33,105,153,112,138,150,164,102, 28,204, 20,196,141,241,150,126, 36, 8, 26, 19,132, 68, 13, 13,198, - 81,208, 96, 92,120, 10, 84, 15,187, 15, 94,225,110, 75,165,171, 74,239,222, 71, 81, 27,243,131,141,241,115, 41, 86, 45, 17, 12, -227, 89,139,165,203,185, 10,127, 45,112,179, 84,206, 82, 15,207,172,145, 79,156, 34,159,236,145,143, 14,200,237, 45,172,143, 97, -253, 59,161,251, 30,232,127, 27,132,103,161,108, 97,248,155,232, 59,255, 16,126,174,194,167, 51,245, 98, 75,221,143, 6,179,201, - 35,117,167,104,168,148, 82,173, 81, 11, 66,198,179,142,139,255,234,254,249, 36,190,135,108,122, 52,191,246,134, 10,181,202,228, - 40,104,118,158, 60,216,205,101,240,155,131,136,105,167, 58,177,149,104,136,112, 20,133,149, 42, 43,133,163,160, 68, 41, 72, 53, -197,179,158, 20,244,204, 10, 3, 94,223,161,247, 71, 99,221,223, 74,112,220, 77,221, 5, 67,133,221, 96,144,153,231, 59, 27,223, -247, 5,238, 68,228,237, 1,189,168,112, 92,209,251, 21,253,244, 99,100,183,183,131, 47, 10,250,214,158, 48, 84, 59, 48, 69,144, -109,132,255,232, 89,248, 15,255, 77, 88,127, 28,234,143,194,107,239,195,127,240, 37,118,239, 94,177,125, 89, 24, 79,204,113, 85, - 23,128,138, 62, 90, 82, 46,216,181, 99, 69,142,141,159, 21,172,123,206,106,218,133,125, 37,191, 58,178, 27,205, 15,142,219,139, -210, 70, 45,158,246,230, 10,238,244,246,235,145, 69,219,202,168,230,233,126,190,131, 91,106,246,174,228,115,227, 32, 51, 13,101, - 53,218,254, 63, 62, 99, 97,233,187, 75,123,162, 23, 21, 94,191,178, 2,104, 83, 97,168,232,174,160,219, 98,255,156, 21,221,121, - 39, 55, 8,220,221, 33,127,106,141,124,235,191, 11,235, 63, 52, 7,169,232, 61,224, 43, 80,190, 0,229, 61,208, 43,168, 27,243, -147,215,141, 85, 38, 57,216, 56, 60, 90,102,171,210, 65,233,124,108,175,200,155, 91,248,213,157, 49, 15,126,247, 45,248,226, 3, -120, 99,107,223,171, 36,246, 70,222, 22,248,196, 22, 94, 88,195,201,247,192,250,123,124,183, 52,206,135, 57, 21,202, 61,216,253, - 24,108,255,119,244,205, 7,232,255, 35,148,127,244,128,252, 96,203,238, 8,118, 41, 48, 44, 52, 57,141, 63, 16,253, 0,232,252, - 62, 51, 78, 22,214,153, 22,215,249,239, 25,125,239, 91, 29, 27,123,144,204, 22,150,221,251,162,111,108,128, 23,204, 46,155,130, -229, 69,104,139,171,245,181,156,184,141, 78,131, 77,185,130, 90,132,106,243,118,143, 10,251, 50,135, 50,129,216, 58,133,176, 80, -221,155,112, 50, 3,235, 96,163,241, 82,237, 16, 25,125,159, 27,131, 21,222,197,195, 56,100, 98,110,133, 5,252,253,154, 57,253, - 32,215,124,145,212,230, 97, 46,237, 30,221, 47,198,200, 73, 22, 30,246,230,197,174, 58,143,215, 15,211,203, 15,142,197,101,235, -214,186,253,220, 20,241,234,169,115, 50, 75, 21,101,241,185,134,131,194, 96,113, 8, 45,215, 37,139,193,112,253,141,230,214,204, - 84,185, 72, 53, 76,110,235,196,157, 12,215, 44,111,185, 33,106,213,227, 94,130,120,238,185, 23, 72, 65, 38,248, 78, 27,181, 7, - 76,196, 90,189, 18,140, 62,201,136, 11, 86,190, 4, 99,132,148,122,200,132, 87,157,139, 26,189,166,116, 95,190,155,141,250,231, -172,226,201, 41,208, 20,232, 1, 72, 93,239,104, 86, 59,180, 99, 76,190,110, 80,202,176,119,216,197, 98,247, 68, 43,186, 23, 25, - 32,238, 60, 88, 36,198, 60, 9,189,145, 57,215,100,161,244,152, 16,138,242, 65, 48, 4, 47,120, 82, 41,149, 40,202, 81, 17,143, -223,195,130, 60,134,129,176,238, 96,191, 37, 94,220,155,200, 67, 73, 76, 29,220, 41, 28,147, 73, 19, 53, 74,141,241, 92,133, 81, -161,200, 72, 12,105, 26, 11,165, 10,149,140, 14, 3, 28, 37, 59,124, 68,145,236, 59,228, 34,179, 2, 83, 32,212, 58,125, 0, 89, - 45,215, 56,149, 58, 67, 31, 52, 19, 67,180, 70,106,172, 68,242, 84, 37, 15, 62, 79, 56, 11,240, 66, 45,156,173,123,248,232, 41, -225,149, 53,242, 91, 64, 94,217,192,217, 57,116,255, 10,172,254, 32,164,143,248, 30, 52, 66,185, 11,251,191,134,190,254, 67,240, - 35, 17,253, 98,166,236,246,134,209,221, 13,212,161, 76,192,155,138,218, 33, 29,230,220,237,234,135,181, 78, 98, 20,133, 69,192, - 92,109,187,161,214,157,235,225, 40,173,197,248, 14,238,145,110, 97, 2, 69, 13,230,209,196, 16, 67,133, 85,134,163,106,137,154, -199, 40,221,163,193, 46,220,167, 2,172, 50,245,205, 75,184,178,116,183,112, 35, 33, 47,174, 12, 45,106,112,108,123,240,187,163, - 61,169, 23,214,112,123,109, 10,250, 59, 3,188,176, 69,182, 5,237, 11,220,219,193, 63,219, 82,127,230,190,237,128,111, 37,179, -225, 17, 8,191,121,109,177,156,127,246, 89,248,238,223,105, 63,123,252, 65,248,217,215,225, 63,253, 42,101,183, 97,248,136,144, -147, 50,248, 67, 5,177,142,169,247, 72,121,170,157,107, 65, 43,146,155, 13, 7,100,109,209,168,147,129,229,189,202,240,168,162, - 29, 30, 12,100,124,241,245, 51, 29,242,145, 99,228,229, 19,228,217, 53,242,204, 10,158, 2, 78,119,230, 78,232, 5,122,133,238, - 41, 72,207, 24,180, 69,143,156, 82, 19, 33,158, 66,119, 11,228, 55, 1, 47, 0,127, 7,134, 95,178, 9,199,167,175, 96, 63,192, -219, 35,188, 61,152, 23,121,168,168,157, 42,104, 39, 22,165,122, 63, 34,175,109, 8,127, 54, 34,159,250, 1,224, 21, 7, 10,173, - 32,172, 64, 62, 14,252,139,243, 11,214,193, 72,111,186,113,133,225, 99,144,199,246,247,245, 17,148, 47, 35,250,171,176, 11,232, -189, 17,253,252, 35,228,115, 27,187, 70, 63,220,193,151, 31,193,175,236, 32, 6,244, 52,152,150,225, 86,133, 15,239,144, 91, 79, -193,233,167,224,244,223,128,244,226,162,103, 22, 40, 15, 97,248, 89,216,253, 31,240,232,255,167,235, 93,131,109,203,174,251,174, -223,152,115,174,181,247,121,221,103,119,223,238, 86,235,237,150,228,182,172,216,178, 99, 89,118, 98, 59,113, 98,226, 56,113, 66, -133, 24, 19, 82, 36, 69, 2, 5, 36, 80, 20, 85, 64, 97, 10,202, 64,133, 47, 64, 65, 21, 36, 85,144,144,132, 36, 80, 9,224,138, -147, 24,236, 56,196,137,223,145, 45, 63,164, 88, 45,181, 30, 45,169, 91,253,186,239,199, 57,103,239,189,214,156,115,240, 97,140, -185,214,218,231,182, 63,180,125,213,125,239, 57,231,238,189,246, 28,115,140,241,255,255,254, 47,161,159,174,212,191, 93,109,220, - 46,133,237,229,192,166, 24,151,188,137,218,162, 90,231,219,162, 80, 87,113, 46,192, 93,180,188,244, 77,245, 14,205,211, 10,117, - 70, 60, 77,241, 28,121, 49,122, 37,136,173,223, 90,231,219,160, 1, 77, 71, 88,108,200,154,170,249,206,163, 71,144, 70,102,221, - 97,174, 70, 81,107,157,100,205,190,247,247,201, 69,198,200,130,101, 54,151, 91,132,102, 93,236,159, 5, 6, 21,182, 62,110, 15, -226,145,164,193, 32, 53,181,234,148, 30, 23, 69, 38,209,153,161, 87, 93,240, 37,139, 84,177,139,225,187, 50,235, 0,194, 98, 50, - 61,179,206,231,223, 29, 91,167,190, 76, 19,107,197, 91,116,143,233, 23, 91, 21, 98, 0, 0, 32, 0, 73, 68, 65, 84,190,196,195, -182, 60,131,122,129,136,166,203,142,118, 65,167,211, 54,106,214,165, 57,109,169,187,210, 69,239,186, 47,190,171,250,152,248,122, -175,227,213,169, 43,222,247,232,135,197, 42,162, 57, 7,194,197,191, 79,144,125,207,252,133,184,227,226,127,151, 37,217,174,168, - 62,230,126, 3,125, 12, 28, 35,139,164,188,139,194,184, 9, 56,113,113,234,162, 30, 76, 38,102,217,238, 83, 34,244, 43,203,134, - 87, 37, 46,128, 48,181,100,223,165,235,212,133,207,193, 44, 76, 40,217,101,118,250,194,133,246,182, 23, 37,109, 95,195, 3, 99, -168,245,241, 49,196, 66,111,208,236,135,137,146,233,162,129, 68, 14, 99, 79, 9,129, 97, 55, 80,210,142,116,114, 29, 57,191, 75, - 28, 55,150, 39, 60, 20, 83,101, 75, 32,105,225,160,190, 29, 61,201,104,114,165, 84, 6,231,170,183, 14, 53,146,169, 99,128, 52, - 66,114,239,104, 48,251, 28,238, 15,157, 2,239, 27,160,193,189,150,141, 24,215,169, 34,193,197, 2,213,148,235,113,113,112, 0, -116,162,156, 8, 60, 83, 50, 55, 18,196, 27, 7,200,251, 58,228, 91, 10,242, 65, 96,253, 65,232,254, 37, 56,248, 78,136,151, 13, -161, 57,126, 14,182, 63, 5,143,254, 17,250,153, 91,240, 83, 61,229,141,145, 58,238,168,187, 1,221,101,178, 26,139,190,248,144, -161,104,139,237,243,125,184,131, 56, 20,223,247, 90,108, 51, 33, 76,205,151,233,167,176,241, 94,219, 45, 54,108,101, 45,251,118, -200,106,182,126,107, 42,219,135,195, 79,142, 33, 67, 78,166, 91,208, 29, 12, 17, 14,138,114, 92, 6,226, 77,168,159, 24,225, 53, -181, 92,241, 15, 28,154, 5,174, 98, 10,247, 36, 45, 81, 1,185,181, 65, 95,181,220,119,121,246,208,105,120,246,131,232,249, 0, -255,228, 33,229,179, 91,134,123,153, 92, 13,179,123,184,141,132,143,172,209, 91,138,254,250,136,252,240, 9,188,255, 18, 60,122, -209,252,239,127,247, 77,248, 95,111,194,149, 29,229,105, 35,124, 85,103, 60,196,101,182,177,143,222, 87, 71,129,238,122, 52,152, - 78,176, 14,133, 65,205,210,135,160, 81,172, 48,103,241,113,172, 83,254,182,176, 74, 17,121,223, 17,242,190, 99,228,125,135,200, -179, 7,112,253, 12, 57,201,208,191, 7,194,135, 65, 62, 12,188, 27,228,138,207,245,197,230,180,205,171, 29,139, 23,214, 10,124, - 26,118,191, 97, 54,193, 31,127, 8, 95,222,194, 7,162, 81,236,238,143,212,228,118,152, 13,200, 70,144,115,236,226, 68, 38,252, - 87, 87,145,223,251,163,192, 19, 80, 63, 15,245, 31,128, 60, 3,250,141, 16,158, 3,185,106, 33, 43,178, 54, 11, 25,199,246,115, -200,214, 72,112, 13, 88, 16,111, 1, 95,129,123, 27,244,197, 17,253,212, 41,124,121,103,135,201, 73,130, 79, 84,123,208, 14, 4, -158,234,224,201, 12,207, 13,198,247, 63,124, 15,172,191, 7, 14,190, 7,186,119,187,255, 92, 65, 31,217,238,124,247,183,224,244, - 23,208,151, 7,248,105,161,124, 98, 36,223, 63,103, 88, 43,103, 49,176, 41, 86,228,218, 4,169,157, 53, 69,188, 59,119, 87,221, -232,207, 98,244,206,124, 43, 76, 99,226,226,191,191,214,185, 75,106, 26,246,169,168,142, 83,182,144, 77,232, 90,240,138, 39,230, - 5,148, 88,253,247, 47,246,173,117,218,117, 47,247,185,222,161,183, 17, 64, 16,170, 36,250,232,246,200,226,231,135, 40,181, 56, -223,162, 61,133,238, 1,223,170, 19, 17, 3,172,170,146, 92,218,208,192, 54,161, 46,213,209,179,216, 47,180,127,225, 44,250,134, - 47,157,124,217, 62,126, 15, 11, 62,123,245, 51, 68, 22,180, 23,161, 5, 0, 49, 9,250,130,171,189, 77, 4, 38,123, 19, 0,157, - 66, 89, 22,197,118, 9,167,209,102,134,147,233,156,105,187,249,160,251, 72,218,134,113,189, 56, 88,175, 23,108, 86,243,152,126, -191,207, 13, 11,200,186,250,109, 33, 92, 48, 77, 46,227,201,219,152,190,178, 39, 32,152, 11,174,200,111, 19,217, 50, 55,192,181, - 49,225,223,142,108,215, 58,166,197, 94, 95,228,241,145,251,108, 89,147,233,245,108,118,235, 37,204, 69, 98, 48, 59,116,191,114, -151,140,131,182,186,206,129, 67,234,176,153,165,192,110,201,149, 55, 45, 66,104, 81,169,191,221,168,131, 69,138,249,146,208,164, - 50,185,165,116, 41,242,211,249, 66,215,114, 4,140, 77,150, 11, 42,145, 85, 8,172,164, 50,212,145, 48, 22,186,206,226, 29,227, -253,123,132, 98, 10,238,164, 74,172,133,181, 64, 39,117, 98, 98, 91, 28, 29,148,234,177,119,181,206, 64, 24, 12,187, 90,105,182, -128, 2,187, 45, 34, 43,247, 74,218, 7,183,214, 72,168,131,139,137,171, 79,230,189, 27, 10, 45, 34, 47, 24,170,214,199, 88, 65, -237,103, 82, 15,189,140, 56,219,131,194,181,237,142, 75, 73,137, 79, 29, 35,239, 89,195,183,123, 16, 88,247,173, 16,127, 8, 86, - 31, 50,145, 80,254, 28,108,255, 50,220,254, 57,244,229, 13,252, 90, 68, 95,138,148, 71, 91,106, 25,208, 49, 83,182,153, 34,134, -188,108,190,212,218,232, 76, 52,170, 29,251,170,236,210, 62,104, 23,198, 86,109,183, 62,237, 34,237, 80, 40, 89,167,215,114,185, -159,242,201,171, 37,149,250,175, 59,139,228,118,175,163, 11,149,212, 50, 60, 34, 74,248,242,142,113, 7,241, 84, 57,122,125, 71, -220, 40, 74, 66,174, 41,196,100,222,189,147, 14,206, 6,120,121,139,126,173,194,173, 1,190, 97, 68,179,192, 39,207,209,223,122, - 4,111,109, 25, 67,102,123, 41, 80,174, 26, 48, 93, 70, 69, 15,125, 31,126, 41,194, 15, 93,129, 23,142,225,214, 41,220,189, 7, -175,141,240, 19,247,224,201,140, 30,214,153, 66,185, 80,245,234, 34, 75, 33,136,208, 63,159,144, 99,129,251, 62, 38,172, 13, 16, -238,135,250,177,195,218, 79, 18,221, 93, 69, 94, 29,140,152,119, 57, 66, 72,200,213, 53,242,145, 19,228,106, 7, 79,222, 70,142, - 46, 65,252,211, 16,255, 32,196,119,128, 28, 46,108,101,186, 56,102,182,214, 21,203, 93, 7,237,108, 32,255, 56,124,254, 45,248, - 63,182,148, 23, 79,169, 97,132, 95, 80, 27,185,111,173,128,235,185,105, 57,194,229, 68,120, 97,141,252,190, 43,200,199, 62,132, -188,247, 47,122, 56, 74,129,244, 46, 40, 87, 29, 77,247,140,113, 93, 37, 61,158, 48, 37,173, 44, 30,248,255,255, 44,236,126, 20, - 94,188,137,254,114,164,254,243,141, 1,155,142,237, 57,169, 67,181,232,226, 85, 68,159,142,240,174,140,188,171,192,229,231,160, -255, 56, 28,124, 28,210,243,126, 89,141, 80, 55, 54,125,218,254, 18,236,126, 12,189,245, 10,252, 42,232,255,171,228, 91,231,212, - 58,176, 61, 80, 30, 97,242,128, 93,101, 82,216,198, 6, 81,145,137,141,100,201,235,237, 96,246, 11,103,146,121, 39, 27, 29, 13, - 91,242,190,250, 71,226,140,239,149, 11,157,108, 83,167,155,199, 87,246, 98, 38, 39, 37,245,212, 37,202,156,112,229,197,116,130, -160,120,174,249, 56, 81,191,204,213,208, 43,156, 47,236, 96, 34, 1,209,185,175, 13,213,109, 78, 46,124,212, 54, 98,111, 2, 51, -157, 47, 1,193,187,238,185, 24,153, 40, 46, 54,179,195,124,125, 33,182, 68,182,229, 16,251, 66, 71, 47,147,168,176, 78, 10,243, -206, 19,234,170,202,133,210,184,152,234,121, 1, 42, 94,124,157,158,239,103, 83,157, 18,199,150, 99,241,165,214,161, 94,228,178, -188,205, 36,119,249,221,101, 31,163,126,161, 67,159, 27,221, 37, 61, 79,246, 44, 15,115, 65,111, 23,131, 40,226, 92, 2,153,255, -124,203, 3,240,236,120, 93, 88,241,166, 39, 66,218, 4, 73,166,221,114,101,145, 95, 47,238, 98,242,103,106,185, 10,145, 6,156, - 10, 50,171,235,125,188,174, 11, 76,175,182,149,129, 79, 20, 82,138,132,152,236,189, 84, 69, 82,178, 66, 91, 43,185, 20, 75, 95, -163,238,241,230,247,200,121, 33, 80, 67,160,148,108,161, 47, 19, 23,192, 52, 22, 42, 51,251,128, 69,158,193,164,198,208,178,135, -136, 23,185,128, 21, 92, 68,224, 38, 36, 52, 14, 10,161, 84,214,100, 86,154, 81, 57,129,221,134,114,250, 8,137, 38,213,142, 8, -157, 40, 93, 44,244,197, 30,223, 34, 66, 8, 38, 56, 41, 85,208, 26,201,213, 68,106,181,152, 77, 41,104,157,124,126,218,104, 49, - 91, 65,250,222, 14, 71,140,252, 37,163,119,164,181,129,115,117,142,189, 68, 40,154,247, 62, 72, 45,172, 33,214, 74,162,114, 88, - 11, 87, 74,225, 40, 64, 58,234,145, 43,107,228, 15,172,224,119,101,228,137, 75,208,125, 63,196,239,134,110,132,221,223,129,237, - 47,192,253,151,208,207,111,224,147, 9,125,185,167,158,141,212, 60,160,117,152, 72, 65, 53,217, 77,191,150,166,216,100,102, 24, -203,227,162,140, 61,239, 14,139,192,130,197,248,105,250,196, 92,136, 4, 94, 94, 71,155,186,177,113,140,165,206, 47, 75,251, 80, - 4,119, 9,172,215,118,184,158, 15,240, 96,103, 93,213,245,104,183, 76,182,160,103,138, 94, 18,228, 60,195, 67,108,102,250,176, -192, 65, 52,141,194,203, 5,121, 54,163,215, 59,248, 72,135, 92, 91,195,111, 41,241, 13, 88, 7, 33,171,192,202, 82,136,234,231, -171,169,142,255,253,235,200,147, 7,112,115, 99, 41,114,193,242,188,249,222,158,242,226,128,190, 57, 34, 81, 89,128,114,231,196, - 46,103,169, 4,224,252,165, 76, 95,252,113,182, 58,141, 30, 7, 83,187, 99,241,187,168, 88,113,255,112,164,187,218,193,135,123, -163,205,189, 41,200,251, 15,144, 67,224,224, 85,228,232, 67,208,253, 37,232, 62, 48,167,147,253,182,215,226,100, 72,186, 18,108, -215,156,255, 2,124,238, 37,248,107, 35,229,139,103,148,211,108, 81,184,143, 42, 82,132,112,220, 35, 31, 58, 38,252, 11,151,144, -111,190,140,188,243,253,112,244, 97, 72,223, 9,114,205, 11,248, 8, 53, 67,121,217,119, 39, 79,248,252, 53,188,253,207,162, 25, -228, 30,232, 79,194,238,111,194, 27,175,192,207,117,240,203, 1,221,157,195, 42, 27,227, 32, 6, 36,118,118,187, 91, 5,244, 70, -130,247,239,144,247, 6, 56,254, 14, 56,248,227,208,127, 3,132,195,197,237,241, 12,242, 87,224,252,255,134,243,159, 69,191,250, - 16,126,178,163,190,184,163, 12,231,148,152, 25, 68, 57, 43,182,238, 25, 90, 68,230, 66,223,212,208,205, 77, 76, 93, 44,112,207, - 30, 93,119,167, 36,148, 94,132, 97,121, 25, 93,136,154,132,101,178,214, 92,224,202, 66,225, 27, 38,234,153, 46,210, 18,141,174, -146, 11,148, 32, 70,236,242,206, 10,215,228,168, 23,232,246, 76, 21, 85, 52, 43, 69,139,243, 54,132, 21, 66,205,202, 80,235, 4, -231,147, 11, 99, 78,241, 11, 67,213,249, 66, 17,188,235, 44, 58,255, 90,177,207, 91,179, 35,137, 24,221, 55, 8,220, 45,243,120, - 58,136,208, 97,208,171,176,176,173,114, 65,212,214, 76,230,170, 50,141,211,219,247, 14,139,130,222, 14,241,186,136, 29,217,191, - 28,201,228,162,215, 61, 21,157, 46,211, 81,253,125,219,167,239,201,194,192,215,158,210, 42,179,149,109, 89,136,117, 49, 29,145, -199, 85,130,254,188,204,153,236,149,101, 22,138, 78, 32,161, 25,198, 42, 83,246, 89,149,253,142, 63, 46, 4,145,186,140, 87, 69, -167, 92,245, 54, 53,105, 77, 99, 27,225, 7,177, 73,176,248,229, 46, 68,235,148, 69,162,173, 76,130,236,121,224,165,121,231,221, - 19, 30, 93, 85,175,110,119, 20,135,244,140, 30,214, 18, 83,242,177,123, 65,199,209, 34,127,107,181, 41,227,130,224,143,175,109, -164,235,205,202, 93,234,196,154, 87,239,242,219, 67, 35, 81, 30,163,236, 77,160,154,162, 51,161,175, 77, 40,218, 11, 35,251, 50, -248,164,197,126,176, 65, 18, 53, 23,250, 80,233, 36, 32,169, 39,156, 62, 98,172,149, 34,145, 64,101,229,194,179,180, 8,125, 79, -193, 60,143,187,106, 34, 19, 3,203,204,190,235, 80,203, 20,191, 23, 53,184, 88,166, 16,242, 56,101, 68,119,238,223,212,152,168, -227,232,188,118,127,108,106,157,185, 29,117,113,227, 13, 16,171,221, 84,187, 90,185, 92, 50, 87, 68,232,143,215,200,165, 21,242, - 97,133,239, 79,200, 7,158,128,248, 93, 16,126, 31,240, 0,118,255, 19,188,246, 34,250,250, 25,124, 13,120, 41,162,175,245,212, -243, 76,213,173,169, 23,107,153, 33, 19, 50, 71, 11,234,226, 1,154,212,186,139,235,108, 27,211,237,125,136, 10,110,153,154, 3, -197,216, 67, 62,202,219,166,244,168, 94,184,132, 45,254, 99,235,148, 86, 81,233, 59, 39,200, 10,156,111,109,186,222,101,120, 74, -225,248,133, 3,248,214, 35,194,234, 0,174, 29,216,174,121,147, 93,142, 47,150,189,221, 85,228,219,119,112, 71,225,134,203,161, -142, 42,242,206, 35,248,214,142,244,185, 45,233,179, 35,171,175, 95, 81,127,229,156,241,203, 3,233,195,135,200,191,251,132,133, -141,124,225, 1,124,126, 11,175, 43,124,104, 5,215,122,244,201, 14,125,119,111,236,246,251,195,188, 55,146, 25,122, 33, 69, 41, -209,124,198, 53, 43,185,179,184,211, 85,198,210,231,214, 1,118,126,196,100, 39,183,109,130,217,204,158, 92, 25,237,238,174, 34, -151, 59,131,177,231,183,144, 39,191, 9,214,127, 11,210,117, 27,171,235,153,183,136,235,183,217, 2,250, 13, 66, 15, 64, 30,192, -240, 31,193, 47,255, 58,245,191,129,250,234,150, 58, 22,184,220, 19,223,125, 68,248,174, 35,228,187,174, 32,207, 29,195,225, 26, -186, 99,251,115,163,192,163, 79,160, 55,255, 30,250,217,219,232, 43, 3,225,247, 95, 67,158,255, 51,176,250, 30, 39,227,108,108, -132,194,193,133,154,126, 6,250, 5,216,253,117,184,255, 51,240,210,125,187, 88,254, 86,143,106, 70,201,212,206,189,141,213, 93, -225, 93, 48,160,208, 51, 17, 62,176, 67,222, 25,225,232,123,224,232, 79, 65,255,254, 57,161,205,114, 23, 97,252, 26,156,253,117, -120,248, 75,232,103, 51,250,143,123,244,230, 72,233,183,212,243,204, 80, 42,103,152, 32, 63,123, 62,120,104,123,215, 38, 46, 11, - 30,173, 60, 59,105,102,138,151,103, 15, 73,128,174,170, 91,219,108,224, 47,161, 49,225,103,222,187,138,238, 57,157,130,234,162, - 27,217,183,116,165,230,237, 13, 80, 26,160,164, 84,235,148,177,241,125, 13, 22,136, 81,151,118,173, 90,173,243,118,161,211, 80, -237,188, 90,251,104, 91, 20,206,202,156,115,158, 23, 99,255, 6,250, 16, 92,221,175,115,136, 72,155, 7,182,103, 39, 47,125,199, -218,252,237,226,150, 54, 59, 20,218,190,183, 42,123, 69, 78, 23,175, 95, 93, 4,175, 84,199,255, 46,127,239, 52, 90,175,139,221, -244, 36,121,171,123,103,200,236, 75,223,135, 2,161, 60,150, 63, 22,216, 23,141,181, 64, 24, 97, 57,109,120,188,147, 23,246,173, - 84,203,189,241,148, 64,216,150,161,178,223,157,207,246,182,139, 73,100,138,134,102, 44,191, 72,133,123,108,233,224,147, 15,217, -215, 45, 41,116, 49, 16, 83,164, 15,137, 24, 19, 33, 70,243,144,203, 68,206,113,226,161, 78,255, 84,173,190,218,173, 19, 43,191, -169,234, 83,215,209,197,142,212,119,196, 16, 38, 33, 94, 74,157, 79, 11,132,243, 97,199,176, 90, 51,148, 66,206, 35,165, 20, 74, - 85,198, 50, 82,198,129,154, 71, 68, 13,139,174,165,236, 65,111,150,186, 9, 9, 50,191,234, 77,192,235,211,134, 41,201,237,237, -116,253,178, 39,201, 68,204, 89,161, 84, 9, 12, 33,178, 11,129, 94, 34, 93,239, 55,233, 97, 75, 8,129, 24, 18, 41, 70,122,170, -225, 86,147,249, 58, 27,222,180, 86, 33,103,101, 91, 96,168, 25,213, 56,177,161,139, 42,181, 75, 70,254, 41,101,242,148,138,102, -187, 28,168, 5,204,135, 46,145, 83, 66,106,153, 70, 19, 97, 82,130,122, 8,135,191,201, 61, 66,168,153, 64,101,157, 43, 87, 75, -229,136, 68,184,118,128,124, 52, 16,126, 0,248,134, 15,192,193, 15,130,126, 39,212, 35, 24,127, 2,125,253,175,193, 47,158,193, - 75, 29, 60, 90,161,231,153,186,115,129, 67, 53,119,185, 58,111,185,169, 33,107, 35,213,213,253,220,228,233, 17, 43,115,236,227, - 18,210,208, 58, 25, 60,158,179,237,215,162, 52,177, 78,179,177,232, 20, 69,168, 11,161, 76,149, 9, 68, 52,141,169,219, 39,196, -223,255,233,235, 14, 21, 78,207,224,108, 52,149,241,115, 1,142,159, 95, 33,223,127,213,138,208, 46, 26,188,100,157,204,239,220, - 24,170,138, 21,196,163,222,198,229,219,130,190,248, 8,253,201,251, 4, 45,200,147, 98, 20,189, 63,127,221,114, 0,126,106,199, -234,251,143,224, 7, 47, 25,124,253,215,239,194, 63, 60,133,251, 5,190,227, 0, 46,245,182, 31, 88, 11,114,163, 55,143,251,205, -209,118,153, 46, 38, 44,101, 74, 32, 53,203, 80, 81,182,126,217,137, 10,114, 37, 32, 43,161, 12,190,115, 56,138, 70,165,234,163, - 41,218,123,215, 6,124,169, 90,168,201,251,128,243,219,200, 7,190, 17, 46,253, 24,232, 3,208,191,231, 84,151,111, 4,158,127, -251,130,222,110, 24,245, 77,184,247,175,162,127,251,139,212,191,210, 91,134,253,247, 95, 35,253,192, 37,194, 7, 46,193,165, 67, - 91,180,138, 39,228, 61, 56, 69, 95,121,131,250, 43, 15,169, 63,123, 74,125,109,139,222, 43, 6,175, 73, 80,255,230, 45,194,135, -126, 4,249,143, 63, 66,120,225, 47, 64,247,188,127,191, 7, 46,130,251, 77,216,254, 19,120,248,179,232,171,111,161,159,170,240, - 27,107,244,245, 14, 98,166,166,115,232, 21,237,188, 53,206,201, 58,140,131,136, 92,234,224,217, 21,242,117, 91,120,199,122, 46, -232,221,123, 93, 31,176,155,180,234,228, 91, 48,252, 61,120,244,139,232,175, 84,244,147, 9,221,141, 20,217,160,247,182,236,182, -112,234, 17,169,109,125, 20,151, 49,162,190,227, 93,238, 68,219,180,178, 4,115, 86, 68,204,157, 23,247,104, 97,179,184,142,104, -248,232,182,136,174,194,222,165, 92,203,133, 69, 41,182, 62,178,253,180, 81, 46, 41,173,147,174, 22,187,233, 23,133, 16,125, 87, -238,116, 57,251, 18,117, 6,212,104,219,237,234, 36, 66,139,106,160,191,222,141, 31, 59,223, 95,123, 42,182,239, 37,117,218, 47, - 71, 95, 5,166,226, 89, 22, 30,241, 89,246,118,195, 86,208,207,213,132,123, 54,222,173,123,148,175,101,231,220, 4,107,114,161, - 73,104, 83,172,246, 26, 38,167,198, 5,229,226,198,122,138,173, 21,239,229,151, 17,168,123,211,238, 58,219,196,248,109, 24,112, -178, 40,242,203, 79, 73, 81,221,179,123,233,126, 9, 95, 76,153,229, 49, 42,218, 98, 8,137, 59, 87,169, 75, 11,123, 99, 83, 52, -107,180,159,109, 77, 9,175, 11,191,127,184,168,190, 95,236,186,155,250,109, 21, 34,253,170,167, 79,189, 77, 38,101, 86,139,103, -247,139, 55,193,246,228,252,241,155,102,148,232,150,226, 64,173,126, 17,107,209,187, 37,163,209,242, 3, 36, 70,183,112,167, 41, -108,104,204,133, 92,202, 76, 11, 76,137, 46, 38, 42, 74, 87,123,198,213, 26,205,227,164,142,207, 11,161,247,180,142, 16, 22,163, -243,233,176,159,169, 63,211, 62,136,189, 36, 57, 31, 29,237,121,218,155,195, 32,165,100, 30,113,201,202, 86, 11,171,160, 22, 4, - 49,236, 40,187,115, 98, 54, 86,112, 18,251,144, 75, 4, 73, 29, 33, 85, 59,228, 20, 80, 27, 85,103,215,239, 84, 45, 83, 96,131, -229,164,103, 98,138,136, 99, 3, 82, 3, 17, 20,179,186,105, 13,140,181, 24, 35, 94,162,129,109, 88,176,139, 77,209,231, 99,124, - 37, 81,233,107,229, 68, 11,199,187, 64,234,214,132,247,118,200,159, 0,249,248,187,225,202,191, 6,225,247, 64,184,102,150,161, -179,191,128,126,225,167,225,199, 59,120, 45, 81,115, 54, 48, 64, 41,104,205,118,192, 4, 75, 77,211,176,175,236,208,197,195,180, - 55, 62,126, 27,143,160, 46, 88,198,161, 50,133,216,180, 67, 44,121,151,170,222, 44,215, 11,176, 34,163,183, 90,210, 93,187, 68, -168,103,186,136,168,177, 77, 60,200, 45,186,205,109,244, 67, 96,200,246,231,159, 70,185,244,142, 30,190,249,192,178,220, 31,130, -156,103,219, 1, 5, 87,191, 71, 93, 40,128,189, 19,222,217, 7, 76,207,171,161, 71,213, 41,104, 47, 13,240, 98,182,246,235, 15, -172,225, 27,162,113,218,255,241,134,242,202,104,241,173, 69,233, 62,179,133, 39, 2,188,223,101,233, 59,224, 41,231,161,223,207, -148,245, 62,199, 89, 27, 9,206,195,128,114, 86,202, 65, 64, 46, 1,119,213,186,232,203,193, 72,110, 87,123, 51,234,171,229, 22, - 79, 57,158,183, 10,242,234, 93,228,187, 34, 92,249,159,173,251,149, 53,240, 61,192,203,192, 7,125, 87,253, 54,142, 90,205, 48, -252, 99,120,240,231,208, 79, 63,128,235,207, 16,254,198, 49,188,243, 18,172,220, 15,189, 27,224,193, 67,244,107,231,212, 95,124, - 64,254,249,115,202,171, 27,242,131,209, 48,200, 43,208,163,136, 62, 3,161, 19, 58, 17,186, 26,136, 95, 1,249,215,127, 3,253, -221, 63,136,252,145,107,200,213,222,214, 29,247, 6,120,237, 12,125, 69,224,206, 1,122,247, 16, 54,138,134,140, 94,221, 77,221, -152,133,183, 40,172, 44, 8, 70,106, 68,142, 59,228,157, 9,190,225, 28,158,186, 12,135, 63, 0, 7,127, 12,210,115,166,164,183, -113,134,245,201,186,131,252, 51,112,231,239,163,191,148,209,127,190, 70,183, 91,202,253,115,202, 27, 27,206,179,114, 38, 98,153, -231, 42,115, 54,119,219, 31,239,229, 99,207, 71,186, 22,235, 80, 69,103,145, 21,227,140, 40, 77, 14,207, 11,139, 2, 86,131, 23, - 38,173, 38,158,243,162, 91,124, 15,149,252, 89,239,253, 86, 43,110, 81,203, 77,205,173,179,245,172,226,220,236,246, 51,121, 72, - 75, 93,164, 55, 6,143, 9,147,170,150,237,238,227, 93, 31,246, 76,135,121,138, 50, 55, 30, 4,106, 10,116, 77, 47, 83,161,102, - 27,116, 31, 68, 37,138,173, 19,243, 20,184, 34,123,126,251, 81,149, 17, 49, 79,126, 19,244, 77, 34,172, 38,172,155, 63,232,177, -101,128,235, 50,249,108,150,198,139, 66,148,234,129, 67, 77, 7,208,188,227,117,178,131, 70,183,208, 22,213,125, 4,220, 82,198, -182,224,179,215, 11,133,120, 41,154,187,168,100,159,123, 8, 93,128,105,228, 49,192,218,227, 10,248,133, 50,223, 45,118,211, 14, -152,118,249,114,174,251, 34, 14, 53, 74, 36,122,114,217, 88,171,101, 9,132, 54, 22,183, 12,245,177, 20,155,160,185,107, 33, 74, -160, 75, 29,169,235, 9, 41, 78,176, 30, 45,121, 47,223, 94, 38,207,119,152, 50,222, 67,176,175,107, 35,121,219,223,103,119,120, -149,106, 23,187, 20,125, 9, 36, 98,235, 28, 21, 6,169, 72, 45,140,170,108,135, 29, 99, 46, 20,167,195, 45,133,138,168, 61,127, -177, 95, 17,186,158, 93, 30,145, 16, 41,195, 72, 45, 6,168,153,128, 57, 23,111, 68, 58,135,181, 40, 51,183, 96,207,202,118,193, -235, 63, 9, 1,171,146,242, 80, 44,236, 32, 12,236, 42,156, 82,169, 49, 81,119,149,176,217, 17,164, 78,232, 84,170,239, 22,197, -195, 41,142,123, 24, 10,186,117,116,107,105,162, 49,117,209, 76,180, 34,165,149,190, 40,169, 55,254,186, 37, 48,153, 37, 68, 85, -169,238, 47, 55,250, 92,103,187,206, 90,136,213,110,223,154, 71,208, 74,196,194, 86, 86, 89,185, 50, 42,171,176, 34, 60,181, 34, -252,145,138,252,192,101,120,250,207, 66,247,135,129,107, 62,255,251, 10, 60,250, 81,244, 51,191, 9,255,160, 71, 95, 55,108,173, - 82,156,244,229, 4,179,184, 8, 83, 17,157,176,179,109,103, 94,203,252,122,199,199,200,217,186, 76,213,155, 62,148,102,127, 94, -140,213,235, 28, 92, 16,124,156, 25, 23, 23,129,230, 16, 16,223,147,247,189, 71,136,186,202,120,229,128,157, 92,140, 69,146,157, -123,146, 92, 28,184, 78,194, 81, 81,174,157, 4,228,235,122, 56, 11,240,178,229,163,211,139, 41,203,215,217,150,237, 71,222,174, -164, 96,150,177, 85,178, 47,184, 29,145, 15,154,255, 90,223,218, 34,247, 71,144, 1, 94, 29,224,155, 86,182, 43,254,177, 45,249, -179, 59, 54,219,204,112,100, 83,154,213,137, 32,247, 11,233,231,206,205, 7,255, 76, 15,135, 22, 16, 35,223,216,211,253, 82, 65, -182, 22,209,186, 87, 90,117,246,145,170, 8,227, 80, 25,190, 4,105, 29,225,122,176,164,184, 75, 78,125, 83,144, 65,224,190,213, -118,182,231, 72,127,142,124,223, 21,120,225,199, 49, 91, 67, 92,124,117,119, 53,224,222,239,229,199,161,110, 96,252, 77, 24,254, - 50,244,151,145,111,123, 7,196, 3,187,205,111,118,232,171,143, 40,191,250,128,242, 51,143,216,125,246,156,241,225,200, 80, 43, -185, 19,198, 99, 65,159, 17, 74,151, 88,202, 63, 66,177,184,217,117,172,172,175, 10,171, 49,194,175, 1,191,118,215, 46, 9,135, - 46, 22, 8,107,155, 58, 60, 33,112,185,160, 93, 65,183,217, 81,109,205,180, 12, 72, 66, 46, 37,194, 81, 71,168,157,141,220, 63, - 50,192,179,239,134,195, 63, 6,253,239, 51,149, 61,163,167,170, 36,187,208,232, 22, 54,127, 7,253,234, 95,132,159, 29,208,155, -135,212, 7,103,148, 55,207, 24,239, 13, 54,110, 23, 97,172,236,199, 97,182,255,221,198,204,139, 73, 80,172, 83, 48,226, 36, 26, - 83,109,177,165,115,164,106, 90, 36,131,181, 32,141,184, 88,253, 37,255,156,100,221,135,173, 20,153, 85,230,109, 93, 88, 23,163, -222,226,251,199,204, 92, 36,140,157, 45,143,133,119, 68, 22,185,234, 64,231,208,142, 34,182,182, 42, 42,148, 96,157, 86, 41,118, - 96,135,208,236,188,179,176, 73,189,226, 14, 84,122, 49, 61, 17,226,198, 89,245, 64, 40,255,187,108,105, 10,119,231, 74, 0,131, -234, 98,251,189,124,230,213, 35, 89,101, 66,207, 46, 3, 61,130, 95,122,218,142,125, 18,215, 79,141,132, 76,231,203, 76,135,243, -124,246,197, 94,126,207,211,188,112, 88,201,219,164,128, 45,235, 73,148, 89, 4,172,178,180,202,201, 50, 47,101,138, 62,213,133, - 61, 45,184,235, 97,210,134,225,129, 59, 58, 19,239,218, 42,184,177,223, 45,125,204, 60,237,181,214,133,216,205,117, 24,205,102, - 40, 17,237,172, 3,143,197,128,101,171,148, 8, 93, 15, 18,200,254,103,155,134, 35,180,191,140,119,105,109,188,173,126, 45,211, -150, 36, 40,197, 38,197, 33,152,102, 44, 38,194, 42, 18,137,211,100, 73, 28, 24, 19, 68,168,181, 48,162,108,119, 59, 74,206,211, -168,158, 16, 93,147,225,147, 94,199, 18,167,212,161, 33,208,197,104,206,142,110, 69,209, 66, 41,133, 90,178, 93,168,115,165,120, -161,159, 58,238, 16,125,151,206, 30,197,144, 32,147,166, 33, 44, 40, 52,138, 76,226,201, 68, 49, 2,206,224,235,187,141, 84,164, - 10, 33, 27, 10, 54, 52,177, 69,117,144,129, 8, 34,217, 89,215,214, 50, 86, 2, 37, 4, 98,200,172,198,106, 33, 42,192,202,183, - 31,198,136,175,200,232, 31, 10, 41,147,194,143, 26,220,152,143, 37,153,213, 64,151,162,141,195,199, 1,212,242,187, 87, 94,127, -142,134,202,241, 86,232, 47, 29, 34,223, 25, 8,127, 50,194,251,191, 23, 14,255, 67,144,119,216,155, 88,111,193,238,239,194,157, -191,129,254,198, 67,248,153, 21,245, 86,246, 27,146,119,232,158,184, 68, 85,164, 10,218,114, 19,202,156,198,212,110,237,203, 29, -121,184,144,142,163,236,135, 45, 44,133,113,234, 31,242,118,104,182,209,121, 10,179,216, 46,182, 81,188,119, 52, 77, 19,214, 69, - 56,232,108, 60, 58,250,215, 57, 58,180,236, 22,173, 48,238,102,110, 74,136,230, 20,184,210, 41,253, 19,189, 21,141, 51, 69, 98, -133,119,121, 46, 55, 61,220, 88, 27,228,100,187, 80, 63,117,142,171,235,128,212, 33,207, 95,182,221,251,237,173,177,196,239,110, -224,214,104, 56,210,223,170,112, 69,144, 94,201, 89, 25,130, 61,112,171, 67,168, 61,232,205,140,124,226, 12,126,175, 88, 49, 46, -192, 90,233,158,207, 28,189, 56, 24,116, 71, 22,169, 73,126, 44,212, 98, 44,237, 20, 33,174, 34, 60,149,224,106, 66,142, 2,156, - 11,122,223, 46,150, 6, 54,218, 32,223,164,240,245, 79,192, 59,127, 4,142,254, 48,112,228,163,129,193, 59,243,222,186,118, 10, -112,105,255, 2, 86,238, 67,249,103,192,255, 5,241, 14,148, 3, 11,177,249,226,215,168, 63,255,128,252,243,143,216,125,109,199, -102, 24,217,246,129,124, 24, 40, 55,160,244,145,170, 22,209,105,171,169, 89, 77, 29,130,144,212,120, 5, 69, 97, 68,201,177,208, - 95, 18, 18,129,208,249, 62,185,203, 72,231, 91,230, 18,141, 36,215, 18, 80,155,223,175,243, 78,179,139,132,117, 36, 28,216,202, - 68, 62, 88,224,153,103,225,210,159,131,240,113,143, 31,202,126,212,247, 86,208,235, 91,112,255, 63, 69,127,227,167,209, 79,159, -192,157, 3,234,171,143,200,175,159,115,186,203, 60, 20,177, 32,184, 58,219, 76,169,179,103, 90,155,142,197,171, 70, 83,129, 19, - 76, 68, 91, 36, 76,151,221, 41,251,154, 11, 4,185, 69,140,104,150, 5,240, 99, 49,197,234, 74,155, 43,168,101,109, 87,101, 25, -135,141,175,165,162,119,217,226, 29,105,235,216, 91, 33,105,187,116,243,146,219,119, 25,140, 45,138, 4, 83,144,219,175,211, 12, -180,114,235, 89,245, 27,122, 85, 65,181, 80,135,106,127,231, 69,251, 89, 34,108,137, 32,193,158, 77,183,175,138, 51, 93, 27,103, - 66, 84,167,184,231, 56, 81,217,116, 47, 55,125,222,161,234,100,169, 43, 83,131,224,182, 50,159, 75, 23,140,245, 81,117,129,133, -209,185, 36, 5,143, 91, 45,203,216,211,133,104,109, 46,184,179,200,172,157,195,203,166, 94,222, 38, 57,109,201,211,152,146,218, -150, 65, 11, 75,113,225,158,147,158, 61, 79,249,146, 31, 63, 71, 27, 47,244, 21,139, 75, 70, 20,153, 28, 69,139,235,220,100,235, - 85,239,156,251, 24, 72,171, 21, 99, 46,172, 17,250,126,133, 6,115, 68,209, 44,142,139,231,175, 46,198,221, 90,152, 46,225,203, - 85, 66, 16, 38, 12,112, 12, 66,138,137,149,246,196, 78,136, 18,168, 18, 76,221, 14, 20, 50, 21, 97, 44,153, 50,142,243, 36,203, -187,126,131,168, 25,217,174, 74,182, 29,189,197, 64, 18, 37, 16,131,173, 61,149,206,214,210,165, 80,171, 82,180,146, 75,166, 44, - 20,244, 85, 21, 29,199,169, 80, 52,128, 79, 99, 22, 72, 11,158,241, 55, 88, 23,102,247, 84,203,104, 35, 0,177, 15,206,161,152, - 0,173, 25,221, 27,106, 85,170, 16,131, 18,163,237, 60,109,214, 84, 97,151,237, 3, 65, 96,157,162,229, 18, 47,136, 62, 59, 23, -118,153,138,221,225,247, 45,161, 76,236,107, 35,193,114,216,181, 82,243,134,113, 51, 18,138,133,204,119, 33, 88, 24, 86, 80, 14, - 55,149,131,146,136,239, 57, 36,252,153,138,252,174,167,225,234,143, 64,252,221,216, 44,244, 28,134, 95,129, 71,255, 29,124,249, - 43,232, 63,235,225, 83, 7,212,179, 29,165,238, 12,155, 58, 65,246, 27, 1,102,225, 89,109, 81,174, 77,225,209, 48,143, 45,136, -128, 69,103, 22,108, 95,152,219,110,204, 79,181,198, 49,174, 11,192, 76,155,168,182, 93,159, 52,253,147, 43,137, 71,247,189,167, -133, 26, 37, 2, 71, 7,150,156,121, 54,216, 23, 57,232,172, 89, 62,117,131,111, 10,182, 38,239, 20, 46,103, 56,186,222, 89,238, -248,198, 69, 63, 87,147,125,147, 46,192,183, 94,131, 43,199,240,202, 29,187, 61,244, 2,125, 54,122, 75,116,108,108,131, 81, 95, - 90,219,254,250,114, 7,183, 18, 60,177, 67,223,218,193,121, 65,174, 42,241, 61,129,227,255,231,140,250, 96,164,174,172,209,143, -107,195,147,242, 32,195,231,183,132,119,173,108,157, 49, 40,250,129,158,131,219,153,237,173,202, 89,191, 63, 10, 20,236,185,143, -206,153, 9,215, 44,137, 77, 82, 64,118, 1,198, 64,184, 19,224, 16,248, 24,240, 29, 31,132,167,254, 51,144,223,225, 87,167, 87, - 97,247, 15,224, 19,127, 5, 62,247, 38,124,236,221,240,142, 63, 12, 39,223, 4,171,239, 53,168, 11, 5,244, 33,148, 95,135,252, -191,193,246, 11,232,131, 13,250, 98, 64,127,106,195,248,243, 15, 25,238,237,216, 69,101, 56, 20,118,215,133,177, 75, 12, 34,174, - 11,241,100, 84, 15, 79,107, 63,255, 44,236,178, 15, 92,244,223,155, 11,108,131,125, 48,147, 40,105,204, 46,168, 10, 72,177, 7, - 37,244, 78, 56,233, 60,237,173, 90, 90,161, 68,131, 84, 72, 31, 9, 99,176,142,253,134,194, 13,129,163, 63,228, 5,253, 10,243, - 83,117,226,192,159, 95, 67,191,244, 39,225, 87, 79,225,245, 39,208, 91,149,242,133,123,108,239,110,121, 20,148,211, 96,132,184, - 80, 61,217, 76,205, 18,170, 50,135,141,236, 73, 55,235, 60, 70,204,158, 73, 52,169,214,253,247,166, 69,119,231,122,251,137, 56, - 87, 2, 72,149,105,132,222, 10,203,116,206,138,135,207, 85,157, 71,249, 14,230,208,133,136, 42, 6,136,181,169,148, 43,227,172, -180,153,172, 90,211,168, 85, 26, 29, 28, 79, 7,243,160,146,226,121,214, 49, 46,186,233,202,206, 5, 51, 90,150,183,117,153, 80, -172, 21,211,130,156, 41,164, 81, 89, 75,157, 88,226,203, 0,166,224, 93,178,250,152, 46,136, 93,242, 26, 25,207,118,196, 46,109, -107,217, 22, 23, 35, 78, 23,211,190,234, 65, 49,117, 26,174,154,130,126, 18,221, 53,237, 64,235,116,167,232, 96,153,243,205,247, -242,213,231,225,121,185, 80,208,151,232,243,165, 30,232, 49,239,186, 46,236,119,111,115, 33,104, 25, 30,123, 49,167,178, 15, 78, -159,158,149,230, 4,241,213,155, 44, 64, 53,210, 28,242,238,150,106,148,247,166,198, 63, 73, 61, 97,157, 16, 2,185, 22,134, 90, - 38, 37, 57, 90,167, 75,128, 46, 0,183, 75,146,253,242,181,144,197, 37,132,134,107,245,207,118, 41,133, 56,137, 38, 35,136, 48, -214,202,152, 51,121, 28,231, 63, 31, 2, 81,194, 4, 16,209, 96,126,174, 64, 71,140,102,187,204,165, 64, 80, 15,126,137,182,106, -206, 6, 79, 91,247, 9, 73,145, 49, 23,198, 82, 24,134,157, 53,157, 2,163,215,167,170,185,233,228,155, 1, 16, 87,140, 78, 60, -151,229,223, 51,137,223, 22,186, 20, 72, 98, 56,214,136, 49,205,197,193,229,198, 85,175,182,127, 9,126, 8,197, 54,139,174,118, -163,144, 72,144, 72, 31,109,100, 98, 67,238,234,160,136, 6,139,176,244,182, 16,133, 80, 33, 68,143, 87,205, 35, 99, 19,210, 53, -202, 82,176,155,217, 90,148,147, 12,199, 69,233,226, 1,225,219, 86,132, 63, 39,240,254, 31,132,245,127, 0,242,164, 47,251,190, - 10,155,255, 1,222,250, 89,244,211, 25, 62,121,136,190, 81,168,155,115,223,159, 87,106,174,179,191,116, 17,125,164,137,249,218, -173,123, 27,242, 89,160,230,173,119,235,166,171,206, 69,122,138,140, 92, 20,171,184,192, 65,206,171,210,197,247,244, 59,132,191, -111,243, 77, 57, 48,141,178,250, 0,235, 35,123, 61, 74,113,140,120, 50,146,220,218, 79,212, 67,224,210, 78, 57,188,158,144, 27, -107, 88,117, 22,237,167, 66, 56, 15,134, 87, 93,117,240,214, 6,238,109,173,152, 95,139, 54, 30,239,122, 8, 79,128, 94,133,248, -121,200, 91,139,251,108,137, 98,193,178,192,245, 48, 82,159,235,145,179, 98,162,176, 35,161,251,174, 67,174,254,211,115,106, 41, -164,147, 54, 94, 16, 56, 16,228, 97,133,215, 70,228,190,137,139,234, 13, 33,188,167,231,202,102,135, 14,202,249,194, 31, 35,126, -152, 30, 6,232, 14,131,161, 60, 75, 64,206, 5,222,244,232,210,111, 63,128,223,127, 3,158,253, 62,144, 63,226,127,248,239,194, -253,255, 29,126,227, 37,248,171,103,240,115, 25,214, 61,172,191, 6, 31,251,139,240,111,119,240,194, 85,208, 39, 13, 87,183,219, -192,221, 51,120, 69,168,255, 60, 82,127,102,160,190,114, 78,201, 3, 15, 66,229,193, 59, 2,181, 11,214,105, 23, 19, 64, 86,103, -212,140,139,160,157,234,177,231,173,164, 38,241,226, 37,179,192,177, 86,203,121,151,232, 59, 95,177,125,115,200,214, 45, 74, 0, -221, 41,178,170,150,197,126,152,144, 28,145,222, 4,129, 82,130,253,129, 62,194,141, 10,239,221,194,209,215, 67,250, 54,239,208, - 23, 9,107,188, 1,183,255, 29,120,241, 19,240,171, 7,232,163, 27,212,219, 91,234,151, 79,217, 62,216,113,191, 19,118, 68,131, - 32, 45, 46,140,193,185,211,206,129,153,149,208,178,192,117, 98,197,223, 36, 50, 66, 23,236,215,203,238, 92, 22, 32, 56, 9, 74, -167,208, 5,101, 20,119,247, 85,123,189,180,204,119, 70,125, 27,241,147, 46,163,183,150,194, 94,181,110,115,237, 44,110, 93, 60, -158,178,176,137, 52,118,154,103,238, 89, 71,174,226, 54, 41, 11,161, 42,163, 53, 48,113,234, 98, 61, 17, 46,137,255, 61,100, 82, -196, 55,145,153,250,185,145, 17,106,132,181, 71,113, 54,162,164,250, 40,221, 86, 9,182,130, 9,173, 59,109,241,167, 50,143,245, -138,143,236,203,210, 98,172,115,215,186,180,247, 7, 47,230, 81,247, 98,233,109, 21, 48,249,206,245,130,162, 93,246, 34, 90,245, -194,170,182, 29,103,225, 2, 51,126, 63,135,116,182,138, 61,150,209,242,219,140,238,213,187,109, 89,196,172,182, 61,179,232,172, - 79, 91, 50,229,219,191,171,186, 79,152,175, 62,253, 8, 8, 41, 69,186,148, 72, 33,178,142,137,163,131, 3, 82,234,184, 95, 10, -219, 51, 27,129,215,150, 29,208, 38, 62,139,215, 69,101,150, 42,234,196,252,247, 61,254,130,250, 30,146,117,233, 49,118,123,183, -158,160, 74,234,146,231,206, 7,116, 28,253, 89, 45,134,169, 85,165,198,197, 7, 72,148, 16, 3,171, 16, 72,253,202,206,136, 80, - 40,181,184,246,161,210,135,136,174, 18,104,165,139, 9,237, 58, 42, 59, 74, 45,134,215, 85, 91,199,245, 93, 79, 77,206, 54, 16, -198, 0, 0, 32, 0, 73, 68, 65, 84, 29,121, 28, 40,195, 48, 17, 87,223, 86,247, 59, 73, 24, 43, 73,125,199,211,169,178, 70, 56, - 10, 16,171,221, 44, 2,115,192,253, 4, 0,104,172,140, 86, 8,147,189, 44, 53, 23,178,103, 9, 38, 7,209,107, 85, 6,212, 16, -167,158,234, 20, 68, 9,197, 68, 16, 49, 59,141,162, 40,154,236,192, 91,185, 40,111, 37,202, 97, 86,142, 11,172, 74, 36, 94, 57, - 32,252, 81, 65,126,232, 50, 60,253, 35, 16,191,207,126, 24,125, 0,219,159,134,135,127, 25,125,249, 13,248,100, 15, 47, 29,162, -219,145,146, 71, 84,109, 17, 93, 27,237, 37,212, 11,128,221,201,231, 96, 66,165, 9,123,102, 35,143, 24,230, 32, 1,149,249, 1, - 23,153,120,136,118, 3,150, 61,198,130,143, 44,231, 47, 23, 88, 48,165, 23,187, 43,113,144,204, 84,232, 23,142, 6,201,144, 78, - 2, 71,201,138, 64, 12,246, 62, 29,172,129,157,210,141,202, 74,132,116,117,133,124,203, 17, 28,186,250,243,106, 50, 31, 93, 39, -166, 72,127,114,101, 66,173, 85,180,157,247,170,194,106, 13,188, 7,248, 93, 32,191,229,239,107,178,255, 22,139,189, 47,181,122, - 14,112, 64, 66,135, 30, 5,216, 6,100, 20,184, 46,132,239, 14,132,135,174,208,219, 85,120,171,218,173,164,157,108,217, 46,132, -225, 77,168,125, 36, 62, 17, 57,188, 93, 24,243,226,254,228, 69,166, 79, 32, 7,222,169,222, 7,110, 3,223,122, 8,127,234, 89, -120,223,101, 72,239,180,181, 74,249,207, 97,247, 26,188,120, 19, 62,149,225,142,239,168,255,141, 30, 62,118, 12,239, 62,178,226, -206, 8, 95, 62,131, 7,119,224,213, 17,190, 34,112,119,109,240,152,113,160,202, 14,189,156, 57,143,112,175, 6, 30,141, 50,167, -146,234,140,181, 44, 45,255,219,253,170, 5,177,176,161,133,191,185, 11,211,144,103,154,232, 88,241,145,169, 3,170,213,138,158, -102, 87, 68, 38,139,210, 13, 41, 17, 14,220,153,112, 20,225,138,192,129,218,251,112, 56, 90, 30,250,181,119,155, 15, 61,220,240, -217, 87, 48, 2,221,248, 99,240,202,127, 13,191,242,144,250,202,147,232, 78,208,219, 27,202,203,167,108,206, 70, 30,174, 2, 91, -181,159,151,216, 58,107, 33, 6,123, 95,203,232, 89,219, 11,223,115,173,112, 33,146,122, 38,144,233,204, 91, 40,173,184,214,249, - 18, 90,171,109, 20, 90, 7,223,123, 67,182,115,119, 67, 90, 98, 66,167,184, 81,220,194, 42,147,127, 26,157,133, 63,182, 79,182, -162,107,176, 43,247, 53,123,145, 84,113, 53,122,176,228, 70,141, 97,206,234,198,184, 10,170,150, 25,190,155, 80,176, 22, 49, 29, - 68,232,163,208, 41,236, 90, 96, 72,211,211,212, 58,185,190, 9, 86, 34, 6, 31,139,118,190,131,159, 39, 27, 86, 52, 82, 16,122, - 95, 73, 13,101,145, 88,119, 65, 81, 43, 45, 6, 86,247,181, 58, 77, 0,183,212, 38, 72,109,107, 14,157,188,219,226, 10,124, 93, - 20, 66, 46,248,199, 3,198,173,175,174,123,216, 3,191,200, 99,246,242,125,182,251,194,163,190, 52, 39,232,219,216,219,150,202, -121,149,253, 92,111,120, 92, 80,215, 8,161,178, 72,190,155, 57, 62,246, 85, 83,128,195,144,136, 93, 71, 8,209,168,163, 34,100, -132, 77, 46, 83,180,172, 77,208,202,130, 90,184,164,234, 53, 87,124,251, 94, 97,159,196, 38,251, 34,197,189, 85, 66,245, 64,153, - 90, 33, 69,114,181,124,143, 97,216,161, 37, 19, 68, 40, 49,162, 57,147,107,133, 60, 58,232, 40, 16, 66, 36,106, 96, 72, 66,201, -163, 93, 50, 67, 32,164,206,197,129,117, 62,248, 67, 34, 11, 12,187, 29,195,176,163,148,108,245, 37,165,201,254, 22, 99, 32,172, -215,148,174,243, 41,115,245, 61,188,101,156, 32,198,128, 89, 86,248, 20,177,236,242, 75, 65, 57, 8,112, 37, 64,231,180,182,233, - 54, 40, 86,144, 68, 22,254, 44, 49,159,153,186,132, 81,213,118, 3,177, 6, 52, 65, 31, 13,138, 94,170,221, 52,211,146,216, 34, - 74,240,204,243,160, 74,151,108,148,124,160,202,186,192, 65,169,172,178,176, 42,129,120,184, 34,188,144,144, 63, 29,145,223,249, -117,112,252, 95, 66,248,128,237, 70,199, 79,193,249, 95, 69,111,125, 6, 62, 23,224,215, 14,225,150, 26,163,189,100, 83,150,213, -249,103,244,128,223,185, 42,199,253,228,169,105, 39,213, 12, 22,113,126, 80,100,162,255,204, 15,112, 88,136, 65,227,226, 80, 87, -157,199,241,141, 47, 66,116,129,141,204, 15, 84,239, 19,128, 84,109, 47,222,110,183, 73,236,223,165, 12,117, 35,196,171,201, 86, -195,143, 42,171, 92,233, 59, 67,229,134,152,144,247, 31, 34, 47,184, 15,253,176,183, 3,241,114,156,130, 87, 88, 39, 43,230,177, -206,109,228, 14, 72,231,208,191,110, 33, 35,250, 34,156,122,242, 87, 91,189,236, 42,228, 98,171,136,195, 54, 47, 13,240,132,162, - 15, 19,104, 68,222,233,121,236,247,138, 49,214,215,213,105,167,193,248,228,207, 39,248,212, 6,185, 7,210,249,216,119,227,163, -250,182,147,173,118, 71,140, 91,144,187, 1,217, 9, 60,119, 0, 63,250, 52,124,211,211,176,234, 45, 96,231,214,167,224,183,238, -194,235, 91,232, 59, 56,237,160, 91,193,135, 4, 62,186, 54,209, 38, 61,188, 54, 88, 34,206, 70,225, 81,128, 39,175,194,199,158, -133,119,221,134,127,244,150,241,209, 79, 21,118, 88,129,221,250,161, 84,103, 4,116, 85, 40, 65, 39,187,162, 52, 66, 32,243,238, - 79,253,240, 69, 46,228, 79, 87, 23, 60,122, 1,200, 75,120,134,216,100,194, 70,236,129,208,173, 8,151, 87,240, 68,180, 15,222, - 51,138, 60, 81,225,104, 13,209,255,233,190, 14,214,191, 23,186, 23, 76,184, 16, 6,168, 95,132,219,127, 22, 94,122, 21, 62,123, - 21,189,115, 3,125,144,169,119,118,228,215, 55,108, 54,133,211, 46,184,226,219,217,213, 58,219, 54,106,133,162,230,106, 9, 65, -137,121,127,215, 24, 22,182,166,101, 38, 1,133, 69, 39,180,176, 97, 57,251,124, 84,251, 62,237,210, 19,221,207, 77,158, 11, 87, -179, 40, 73,115,120,248,202, 74, 23, 59, 84,130,141,101,163,226,249,227, 54,245, 72, 2,169, 88, 49, 44, 65,125,183, 40, 11, 38, -121, 37,151,106, 1, 31, 69,167,156,113, 69, 24, 49,119, 66,136, 54,134, 23,153, 3, 59,130,127, 22,179,170,253,188,117, 46, 60, - 83, 76,168,143, 28,139,218, 14,223, 46,233,230,230,105,231, 64,223,246,250,106,178,149,140,238, 37,130,237, 45, 56, 26,148,103, -223, 43,102, 41,113, 50, 91,202,218,254,116, 54,146,249,120, 93,116,186,112,133, 61,106,165,206, 53, 3,153, 48,174, 75, 17,100, -185, 16,102,178,159, 0, 39,123, 5,253,109,140,160,139,209,251, 98,180,125,161,123,156,196, 92,141,131,180, 92, 53,248,207, 19, -131, 77, 66,131, 43,211,145, 64, 10,129, 36, 1, 77,137, 90, 43, 35,118,110,137, 42, 49, 70,134, 90,232,179,178,234, 87,108, 98, -152, 18,231,116, 47, 79, 46, 60,134,189,155,167, 14, 98,246, 83,153,125,238, 34,139, 14,163,148,233,123, 75, 20,106,169,148, 90, -217,141, 3, 37,231,105, 26, 16, 66, 64, 99,164,150,226,170,121, 99, 40,132, 16, 72, 53,161,170, 12, 46,164,107,187,250,148, 58, -186,104,226,140, 25,152,163,116, 34, 72,191, 34,151, 72, 41,133, 33,143,166, 31, 41, 54, 9,111, 96, 28,141, 9,173, 22, 96, 38, - 93,240,226,159,173,216,151,249, 54,158,174,138,114, 18,133, 46, 41,235, 8, 39, 46, 8, 9,117,126,203,165, 46,246,193,107,191, -242,143, 5,189,107, 25,154, 34, 86,168,179,143,233, 83, 21,186, 20, 73, 43, 99,126,111,115, 53,175,159,199, 42,118,190, 15,238, - 5,214,170, 28,231,202,122,132,131, 26,232, 37, 16, 82,143, 92, 23,228, 27, 2,242, 7, 35,242,209,103,224,218,159,128,240, 3, -182, 35,222,252,127,176,251, 63,225,193,231,208, 87,182,240,210, 26,190, 18,224,254, 72,221, 20,187,153,227,243,190,160,115,241, -110, 50,210, 86,185,235, 66,125,158, 4, 41,113,126,247,187,246,201,240,150,162,180,194,236, 99,245,186,255,228,215, 89, 56, 63, -143,222,252, 97, 78,209,126,236, 62,186,168,173,206,208, 47,201,222,165,122, 71, 79,163, 34, 37, 11, 10, 9, 93, 48,161,207, 81, -176, 14,206,211,138,100,140, 86,208,127,231,101,228, 82,111,127,137, 85,244, 46,208,179, 76,197,196, 22,242, 32,219, 15, 54,120, - 27,114,210, 89, 40,203,213, 71, 16,126,218, 68,226, 15,131,209,107, 54,174, 55,216,121, 83,120, 90,224, 97,177, 46, 42, 84,216, - 96,182,183,195,232,241,171, 98, 94,247,195, 8,231,254,154,175, 34,124,244,216, 78,167, 87, 11,156,237, 8, 7, 2,199,149, 85, -168, 12, 3, 72, 82,250, 32,164, 67,136,103, 32, 55, 5,186, 14,126,228, 25,248,222,119,194,149, 39, 96, 56,133, 55,239,192, 75, - 15,208,159,188, 71,189, 89,144, 39, 35,225,253, 10,215,253, 85, 63, 3,238,136,197,191,173, 51, 60, 29, 97,221,153,247,254, 93, - 21, 62,244, 78, 88,191, 31, 54,183,224, 36,192,189,140,222, 83,179,218, 61,145, 88,191, 81, 57, 42,202, 46,193,214,223,103,149, -121,160,211,194, 56,150,194, 72,145,153,188, 37,111,131,219,156,173, 40, 50, 29,248,161, 5, 46,244,193, 4,112,235, 72,184,214, -195,123,123,120, 78,145, 39, 43, 28,158,192,193, 11,208,127,135,165,197,133, 4, 28, 66,247, 36,200, 17,108,191, 2,103,255, 45, -188,246, 73,248,226, 10,253,210, 13,244, 65, 65,135, 29,245,246,142,242,198,150,237,160,156, 39, 60, 81, 45,184,178, 91,124,252, -183, 24,225, 78,228, 56,155,144,141,126,200,137,182,216, 79,155, 52, 4,157, 57,224,131,238, 39,123,197,198,205, 14,179,224,110, -172,179, 10, 90,196,185, 4, 75,218, 73,181,189, 39, 85, 38,222,185, 15,117, 76,175,224,175, 87, 82,245, 61,190,191,206, 69, 73, - 81, 88, 43, 12, 45,183, 96, 74, 64,210,249,148, 12,243, 56,120, 9,117,232,130, 32, 18, 73, 98,162, 54, 45,213,133,108, 86,156, -181,218,254, 94,125, 26, 48,248,152,123, 17, 75,190, 7, 78,137,173,115,246,170,157,100, 22,197,142,126,174,164, 22,106,179, 16, -135,202,130, 93,174,139,184,209,198,110,151,118, 17,241,135,109,154,130,200, 82, 59, 48,187, 11,154, 20,168,125,175,221, 66, 62, -201,222,158,219,214, 18,210,152,252,162,251, 68, 57,153,145,189,242, 54,204,119,189,160,168,147,133, 80,238, 34, 94,182,157,177, - 23,237,114,181, 9, 9,221,166, 22, 83, 98, 21, 19, 33, 90,134,103,241,142,123,212, 74, 29,243,100,228, 86,170,217, 19, 67, 71, - 46,133,206, 87, 40, 65,228,130, 13, 79, 46, 44, 36,246,163, 90, 13, 44,228, 83,161,133,114, 63,138, 93,180,181, 86, 52,206, 14, -154,234, 2,200,237,144, 25,119,219,233,245, 12,205,187, 30,130,191, 63, 70, 30,181, 21, 83,182, 77,174, 79, 57, 81, 53,242,103, -140,164,152,233,186, 68, 74,137, 24, 35, 41, 70,143,250,141, 38,142, 44,182,111,239, 82,154,160, 58,185, 20, 70,135,216,104, 67, -203, 54, 76,186, 8, 53, 38, 67,220, 6, 91, 95,215, 90, 73, 79,118,214,153,131, 5, 89,181,136,196,138, 78,196, 39, 17,143, 7, -237, 39,207, 8,250,198, 14, 61,205,200,165, 72, 76, 74, 26,117,250, 48, 73,173,196, 92, 57,192, 2, 20, 30,102,101,231,123,167, - 20,224, 48, 42,199, 69,185,146,149,163, 18,233,250, 21,225, 70, 36,188, 67,225,163, 32, 31, 89,193,251,142,224,218,215,193,193, - 15, 64,248, 54,168,199, 70,200, 58,255, 49,216,254, 18,122,235, 20,190,216,193, 87, 78,224, 86,134, 71,163,129,100,234,136, 90, - 48,251,158,164,115,202,199, 85,157, 37,189,109,165, 32,179,135,167,197, 24,180,225, 13,213, 80,183, 68,255,119, 90,237,146, 83, -152, 70, 98,101,202, 36,152,139,249,164,242,144, 57,117, 44,137, 53,204,211,135,194, 11,183,244, 16, 86,201, 14,124,196,210, 49, -143, 18,114,220,217,165,234, 56, 34, 81, 45, 87,252, 78,177, 91,194,183, 31, 19,190,254, 4,158, 58,180,219,209,232, 97,237,197, -105, 52, 99,134,156,209,187, 3,122,223,119,229, 77,104,113, 28, 97,179,130, 77,239, 9, 51, 10,167, 25,182,163,123,232,252,214, - 94, 21,238,143,150, 86,166,254, 23,192, 10,190,108, 60, 11,118,231,151,159, 85,176, 19,229,216,151,198,159,222,217,107,253, 84, -103, 39,206,195, 12, 55,160, 63,173, 92,121, 45, 83,171,144, 18,200, 46,160, 33,194,191,114, 5,249,163, 55,224,169, 19,107,139, -111,223,129, 79,191, 5,191,249,200,186,239, 71,217, 60,240, 7, 6,129,209,151, 3,108, 21,185,158,224,125, 43,120,102, 5,207, - 94,130,171, 55, 96,243, 0,238,158, 27, 32,231,139,111, 66,249, 42,220, 42,118,145, 57,207,200, 58, 65, 81,228,178, 16,179,114, -242,198,192, 78,149, 44, 98,186, 66,239, 88, 90,120,136,122, 39, 95, 23,251,191,165,159, 55, 44,243, 27, 26, 52, 40,216,243, 30, - 81,186, 2, 49, 10, 97, 21,237,159,190, 35,172,122,184, 17,225,131, 35,242,244, 19,134,181,237,191, 17,214, 31,183, 85,131, 68, -159, 5, 87, 40, 3,122,250,223,195,221,191, 15,111, 10,188,114, 21,190, 12,245,230, 14,221,141,212,243,145,114,115,100, 87,148, - 97,229,221,158,206,151,204,230,177, 22,223, 91, 75, 50,171,143, 97,121, 61, 18,116, 82, 77,203, 98, 15,204, 84, 88, 27,241,172, -237,225,219,122, 66,208, 9, 27,187,164, 31,139,143,178,167, 76, 4,167,118, 93,180, 84,103,239,116,163, 71,173, 78, 23, 0, 49, -238, 69, 66,167,240, 22, 29,173, 0, 31, 40,156, 45, 50, 33, 22,227, 68, 19, 88,201, 62,105, 43, 6,131,207, 72, 45,174, 82,103, - 10,143,106,130, 60,173, 70,156, 91,251, 69,163, 20,139, 83, 94,246,167, 45, 53, 75, 85, 41, 11, 69,119,139, 71,142, 11,245,120, -184, 64, 94,147,230,253, 95, 50,232,117, 63,169,188, 17,207,178, 95, 86, 38,143,250, 66,133, 80,153,125,235,178,184, 80,244, 23, - 80,224,117, 65,190, 92,150, 58,245,115,184,121,237,117,154,198,202, 62,199, 93, 23,248,220,197, 20,129, 11, 56,119, 46, 92,106, - 91,162,228,172,146,183,131, 48,138,176, 10,198, 79,183,145,122, 32,186, 85,122,172,202,160,133, 96, 59, 42, 63,167,179,117,239, -126,233,138, 93,111,147,163, 90,140,149, 80,205,138, 70, 8,179,250,114,159,209,249,182,113,102, 42, 51,196, 69,104,197, 54,122, - 7, 47,132,148,246,124,254,187, 97,100,216,237,208,156,125,210, 22,140, 18,234, 59, 87, 21, 72, 33, 16, 82,240,159,175,101,114, -148,105,169,213,106,105, 46,149,161,100, 82,140,116,169,163,235, 58, 43,242, 49,209,133,200, 65,223, 35,190, 78,218,229, 76, 46, -217,156, 78,181,112,190, 57,183,241,127, 54, 5, 76,169,197, 58,244,102, 3,116,197,113,136,145, 68,176,145, 82,187, 21,166,133, -218,116,218,195,184, 88, 67,220, 66,206,253,129,205,157, 29,131, 8, 39, 91,123, 17,123,143, 62,220, 72,129, 80, 57,146, 22,143, - 41,156,169,176,243,204,220,203, 90,185, 49, 84, 46,145, 72,215,214,132,143, 4,228,123, 10,124,211, 17, 60,249, 33, 56,248, 54, -232,126, 39,200,123, 77,229, 91, 43,212,155,176,249, 57, 56,255,135,176,249, 60,250,250, 8, 95, 57,132, 55, 42,220, 25,225,180, - 80,115,158,110, 75,230, 25,115,187,214,162, 64, 91,151, 45,237, 52,152,176,109,210,205,159, 70,209,184, 31, 62, 88,227,158, 2, -180,133, 71, 75,110,170,225,106,129, 55,237, 81,170, 70,135, 17,153,205,185,234, 17,126,225, 32,248,161,111, 99, 10,233, 2,178, -138,200,229,128, 28, 37,228, 48, 88, 7,124, 24,152, 60,124,125,176,127, 78, 43,188,178,179,177,248,123,122,228,119, 92,129,167, - 14,102, 19,189,170,177,220, 31,142,232,121,134, 71,150, 44,199,221, 29,250,208, 59,244, 3,219, 45,201,221,132,108, 42,114,154, -225,216, 47, 63, 15, 43, 58,229, 79,122, 20,154,211, 67,204, 74,102,251,242,240,116,176,238,120, 0,206,133,122,154,209,123,133, -112, 46,200,161,204,185,156,111,100,235,224,175, 38,120,223, 33,220,207,240,230, 22,158,128,248,206, 74,124, 54,194,175, 91,244, -169,252, 91, 79,193,251,175,217,101,228,141, 71,240,218, 22, 62,183,129,219,131,189,222,151, 10,114, 89, 9, 15, 10,250, 85,165, - 62, 97,165, 67,158, 95,193,187, 86,240,196, 26,222,117, 4,215,158,182,240,150,221, 93,139,200,187,189,131,135,213, 30,196, 36, -134,159,125,111, 71,120,103, 64,239, 6,184, 63,160,215, 43,235,161,114,245,110, 49, 74,148,111, 32,202,130, 38, 72,181, 86, 40, -102,243,221,182,238, 41,122,250, 94, 59, 91,146,107, 5,251, 96, 98,177,228, 35,250, 24, 35,241, 48, 18,214,129, 16, 58, 98, 88, - 33, 79,172,224,249, 1,121,250, 89, 56,250, 55,173, 67, 15,151, 32, 28, 65,184,108,223,161, 60,130,205, 63, 68, 31,253,143,112, -231, 54,220,185, 2,183, 34,122,115, 68, 31,110,169, 12,232,249, 64,189, 59, 48,170, 80, 86,182,143,148,234,244, 62,194,228,189, - 14, 18, 45, 37, 49,202, 36, 18, 8, 75,236,113,176, 85, 72, 89,236,120,165,169,185,151,140, 6, 23,136,181,244, 47,169,243, 65, -186, 36,137, 73, 89, 70,140,218,184,127,137, 46, 45,158, 83,222, 20,241,163, 31,127,193, 45,105,154,196,121,219, 13,231, 58,111, - 63, 87,201,198,228,131, 66,149, 48, 33,165,117,193,112,105,251,246, 78,103,188, 52, 50,119,180,109, 12,155,139,175,213,194,156, - 69,176,138, 86,200,238,251, 1, 45, 11, 49,158, 76,252,237,150, 60,201, 20, 55, 90,177, 44,241, 4,108,116, 86,228, 79,212,184, -198,151, 95, 12,190,195,162,195,180,100, 59,159, 36,176,100, 93,232, 94,108,123,123, 93,155,254, 38, 46,196,108,157, 31, 67, 89, -247,169,110,203,108,244,198, 28,176, 49,178,236, 69,127,234,226, 82, 22,189,160, 23, 30,239,202,121,187,252,239, 11,191, 39,197, -104, 5, 47, 68,159, 28,138, 71,149, 54,133,191, 21, 45,245, 15, 89,157,198,167, 30, 78, 35,106,131,199,148,208, 24,168,217, 26, -170, 28, 64, 71,195,121, 7,145, 9,143, 59,229,192, 47, 0, 73,179,185, 79,247, 35, 78,171, 78,202,117, 9,166,175,144, 69,151, -174,170,140,217,212,232, 53,103,150, 15,175,249,220, 61, 43,222, 39, 64, 13,104, 99,211, 53,220,175,238, 60, 5,132,170, 78,157, -244, 53,245,168,149, 84, 70,226,104,157,123,159, 58,250,190,103,213,117,244,169, 35,166,196,110, 28,201,121, 52,183,212,241, 9, - 67, 57,100, 55,236,236,223,229,209, 70,254, 45,149, 78,194,116, 65, 75,237,234, 23, 69, 56,112,245,251, 52,214, 90,160,250, 66, -244,236,232, 90,209,123, 35,111,102, 91,157,214, 77,229,168, 55,177,144,160,236,138,141,200, 82,128,117, 23, 56,140, 29,135, 39, -145,235,231,153,124, 54,112, 37,195,250,228,128,240,194, 33,242,167, 10,124,248, 26,156,252, 48,244,255, 34,132,103, 45,146,178, - 69, 57,149, 83,208,155,176,251, 36,156,253, 12, 12,175,160,183, 10,188,210, 91,231,245, 48, 27, 40,133,130,250, 41,210, 0, 39, -226,170, 13,117, 35,120,227,224,139,170, 47,250,124,116,188, 18,199,144,202,158,170, 69,116,161,153, 92, 46,203, 9, 11,150,121, -107,133, 22,114, 82, 89, 64, 30,130, 76, 93,126,232, 5, 14, 34,116, 66, 88, 71,147,123, 31, 4,228,146,167,166,173, 34, 28, 38, - 59,117,218,213,191,217, 22, 2,112, 82,225, 56, 34, 71, 9,110,172,145,203,107,211,233,158,102, 99, 84,142, 25,125,115, 64,239, -156,193,131, 1,189,183, 67,111,102, 67,252, 13, 10, 71, 32,151, 34,218, 69, 84, 11, 50, 84, 36, 41,194,202, 94,179,131, 41,255, -113,206,212,212, 96,133,112, 19, 9, 59, 63, 17, 91,129,116,165,148,228, 96, 95,127, 61, 23,191,233,228,126, 4,220,170,214, 73, -191,183,183,204,239,195, 17,182,110,190,255,161, 67,248,208, 85,251,190,175,159,195,107,231,232,103,182,240,112,132,203, 10,183, - 54,200,189,140,174,162,125,173, 43, 61,242,237,107,120,225,192,108,120,103,213,104,176,247,119, 38, 8,188,247,101,187,168,245, -201,126,254, 19,191,124,180, 7,114, 21,237,181,122, 40,200,218, 35, 69,182,129,122,216,177,122, 88,185, 52,154,247,126,231, 7, - 71,245, 38, 32, 72,179, 32, 9, 73,103,149,111,231,110,193,117,116,167,130, 88,176,137,233, 72,197,242,150, 87,209,196,112,135, - 29,225,160, 35, 92,238,225,125, 17, 62, 84,144,247, 62, 9,135,255, 50, 28,125, 28,194, 21, 79,113, 11,150,195,190,253,101,244, -225,127, 1,119, 94,133, 91,135,240,224, 58,220, 83,244,246,128,222,222,162,155, 17, 61, 31,209, 71,153, 58,130,244, 74, 10, 50, - 91, 44,125, 38, 62, 33, 79,163,225, 89,162, 39, 38, 78,197,175,122,224, 72, 89,110,168,236,112, 13, 77,228, 41,179,133, 83,147, - 71, 10, 55,206,131,119,160, 41,206, 54,184,166, 43,104, 7, 97, 81,221,203, 75,104, 60,136,165, 80,108,250,189,110,251,138,227, - 12, 33,145, 32,147,170,187,250,101, 42, 53, 98,165,226,201,110, 30,186, 49,173, 14,230, 96,153,214,245, 38,111,111, 67,235,198, - 61,110,181,182,247,119, 18,243, 10,125,180, 59,233,110, 17,135, 28,218, 97, 77, 91,151, 9, 33, 90,103,154, 17,134,106,163,220, -118,110,102,220,221,163, 58,165,136,233, 34,229,177,173, 53,226, 36, 22, 83,127,207, 46, 20,216,182, 91, 95, 22, 85,149, 61,121, -208, 18,126,213,108,123,121, 97, 85,219,243,103, 47,134, 27, 23,131,224,154, 78, 34, 94,132,144,234,190,253,109,143,207,161,109, - 37, 97,207, 60,206, 73,143, 33, 78,138,254, 38, 59,172,165,184,213,111,174,188, 51, 31, 97, 47,228,140,168, 66, 10, 1,233, 18, - 37,207,152,241,162, 74,206, 35, 57,231, 41, 98, 86, 22,160, 16,213,199,111, 30,109,202,210, 94,103, 9,129,228,163,127,183,225, -236, 41, 26,179, 8,195,104,141,162,104,155,212,186,221,109, 10,100,169, 86, 27, 48,126, 75,219,155, 75,140, 19, 52, 41,151, 66, - 41,251,130,203, 82,109,245,147, 67, 37,213,202, 88, 10,197, 45,109,187, 49,211,117,153, 46, 6,142,186,142,176, 62, 96, 40,133, - 49,143, 28,212, 74, 56, 58, 50, 42, 94, 8,164, 24, 72,126, 97, 42, 90, 25, 75,102, 44,133, 84, 29,215,113, 20,204, 7, 29,167, -187,141,206,226, 22,117,145, 92, 18, 56, 47,156,109, 10,111, 84, 24,138,249, 41,111, 4,187, 33, 30, 69,216,121,202, 65, 95, 33, -105, 36,252,240,117,210, 31,186,194,193,159,127,141,114,167, 34,207, 28, 34,127, 48, 33, 63, 88,224, 93,223, 2,235, 31,181,168, - 72,137,134,183,212,211, 57, 65, 75, 31, 65,254, 34,156,254, 18, 12, 95, 67, 31,156,193, 87, 19,220, 46,112,199, 11,186,227, 28, - 77, 30,107,169, 78,226, 45,133,214,133,239,166, 42,146, 23,243,164, 3, 65, 86, 9, 89, 41,212, 56, 49, 92, 85,231, 2, 45,117, - 65,153,155, 76,162,134, 48, 21, 89, 48, 28,179, 71,249,245, 45, 50,212,126, 22,233,196,187,110,111,223,150,191, 62,104, 62, 39, -117,131,182, 7,174, 55,234, 13, 46, 86, 27,125, 30,167, 98, 81,167,207, 88, 48,136,222,223,217,226,119, 87,225,171, 91,234,173, - 45,220,223,160,183,119,214,225, 62, 28,144, 71, 70, 44,146, 8, 60, 10,232,198,216,233,114,201, 95,147,243,130, 30,102,219,177, -119,254,243, 81,231,211,112,180,221, 57,199,157,245, 55, 67,129,135,234,168, 89,191,237,106, 50,165,219,206,215, 3, 62, 27,212, - 67, 65, 86, 98, 93,126,174,112,176,130,167, 59,184,148,173,240,199, 4,215,122, 27,239,223,220,218, 68,225,229,209, 2,117,142, - 20,190, 52,160,159, 26,144, 33,195,211, 61,242, 29,199,200, 55, 31, 33,151, 86,112,210, 91, 17, 7,155,195,238, 92,229,118,234, -235,135, 52,218,195,248,238, 35,184,190,131,211,157,193, 0,206, 2,108, 35,114,167,162, 37, 18, 46,117,112,211, 91,202, 19,229, -104, 59,176, 14,198,240,182,131,200,138,228,232,155,133,157,103,222,139, 23,150, 54, 76, 89,161,244, 85,233, 86,209,114, 17, 82, - 32,116, 29, 97,149,144,147,158,112, 45,193,211, 9,121, 26,219,249, 63,217, 33,151,159,131,254,247,192,250,219, 12,103, 44, 43, -200,111,193,246, 23,225,236,127, 65,239,127, 1,238, 31,193,221,167,225,243, 25, 61,223, 64, 45,212,135, 5,125, 56,162, 37,219, -251,131, 32, 7,166,116,158, 66, 12,235,156,127,149,196,144,171, 76,157,163, 76, 98,181,234, 85, 49,103, 3, 0,181, 1, 93,112, - 97, 93,240,207,117,151,246,193, 2, 37,248,134, 71,102, 85,245,162, 25,158,212,213,170,109, 47,121,129, 73,190,215,185,250,224, -204, 63, 98, 59,223,165,199,101,162, 89, 89, 72,204,196, 34, 11,251,153,197,106, 30,244, 16,166, 40, 21,161,238,171,175, 9,211, -238,187,122,170, 92, 23,196, 35,139,133,224,121, 19, 13, 22,147,253,163,221,139,253,236,121,143, 12,167,251,202,113, 21, 6, 23, -212,141,174,162, 46,139,224,245, 82,155, 70,193, 59,201,176,240,124,233,108,143, 83, 23, 37, 44,139,116, 93, 92,130,150,170,245, -186,192, 49, 46, 11,189, 94, 96,199,183, 21,201, 99,133,120,249,218,214,121,188,177, 92,141, 60,102, 93, 91,224,200,151, 28,247, - 32,145, 24,141,152,150,156,170,150,157,123,144,181, 78,234,251,170, 13,170,226,110, 10,153,121, 0,147,234, 88,102,128, 76,240, - 93,119,232,146,167,126,150, 89,197, 95,242, 4,207,178,137,145, 92, 64,216, 94,208,233,203,227,126,254, 20,162, 21,223,182,122, -154, 64,236,206, 17, 24,182,104,246, 85, 77, 10,251,126,125,103, 17,132, 96,194, 55, 17, 39,198,117,157,237,219, 9,126, 17,197, -179, 2,116,226,202,171, 95,162, 67,136,196, 16,173, 48,167,206,112,183, 49,210,117, 29,171,152,232,251,158, 46,173, 88,165,142, -216,173,204,255,224,235,221, 90, 70,170,119,251,155, 97,112, 17,159, 78, 65, 72,105,141,218,200, 80,148, 88,230,107,115,171, 89, - 77, 93,105,137,116, 5,125, 88,185, 51,216,104,170, 96,100, 51, 85,120,106,109, 34,187, 90,205, 71,125, 16, 64, 98, 15,111, 5, -248, 75,103,112, 51, 18, 63,122, 12, 63,156,225,163,192,181,239,131,245,127, 2,233,134,217,143,244,209,226,241, 77, 80, 31,194, -248, 69,120,244,179,176,123, 29, 78, 31,192,215,146,117,126,247, 42,156, 59, 44,165, 57, 84,163, 76,234, 77, 19,186,217,216, 77, -170,162,217,219, 12,193, 10, 77, 23,144,131, 48, 69, 49, 73, 83,175,101,108, 31, 31,188,144,166,105,113,104,191, 14,243,126,158, -206,137, 52,205,222,119,236, 92,242,132, 1, 93,186,246,245,235,204,142,140,179, 38, 97,154, 59, 14, 10,167, 64, 29,172,139,108, - 59,234,109, 70,207,189,125, 90, 99,132,151, 23, 21, 62, 60, 34, 87, 15,172,155, 61,233, 96,237,233, 63,159, 62, 71,207,183, 48, -142,112,111, 71, 61, 31, 25, 93, 36,152,178, 18,118,209,170, 83,103,218, 43, 80,244,188, 34,187,106,151,154,149,120,156,156, 78, - 28,109,162, 26,128,102,240, 57,244,166,152,114,188,175, 30, 67,233,151,219, 46, 65, 42,246,218,157,154,149, 90,170, 95,104,250, -100, 15,202,170,115,158,185,216, 68,226,238, 8, 47,159,218,123,121, 54,162, 59, 69, 87, 38, 76,226, 65,181,215,246, 59, 14,224, -134, 32,207,246,112,121,101,175,197,198,115,130,235,104,151,144,203,157, 59, 50, 28,162,147,177,231,233, 32, 66,249, 48, 28, 62, -130,131, 55, 97,216,192,209,153, 89,197, 14, 18,114, 22,145,183, 4,222, 97,225, 68,218,239, 8, 93,135,102, 69,118,197,242,192, -179,162,185,144, 11, 12,131, 78,184, 82, 17,179,109,198, 32,116, 17,219,147,175, 35,225,176, 71, 14, 59,194, 73,132,107, 9,121, - 42,192, 51, 1,185, 33,232,241, 10, 57, 56,130,254, 25, 8,207,155,131, 35, 60, 9,165,131,225,117,216,254, 4, 60,250, 27,112, -126, 31,189,119, 0, 55,159, 49,245,254,189, 17,125,101, 75,205,197,133,151,117,142, 2, 12,254,156,103,166,100,196,170,222,113, - 72,153, 96, 8,161, 21, 88,215,130, 84, 79,167,170, 85, 38, 24, 74,113,149,184,101,163,155,223, 60,186, 61, 45,234,140, 49, 54, - 21,174,123,189,235,220, 1,230,133,181,205, 38,252,173, 19,223,111,153, 90, 65,207,162,123,227,218,246,171,213, 98, 39,186, 23, - 28, 66,157, 62, 58, 80,109,173,209,236,110, 90,124,221,208, 44,120,115, 78,183,138, 19,184,196,188,235,179, 61, 53,144,168, 4, -181,149,138,132, 64,168,213, 1, 67,246, 94, 7,173,211,223,105,162,148,181, 24, 21, 23,168,237,234,140,175, 13, 33,208, 7, 33, -187, 80, 76, 22,110, 10,157,186,200,186,232, 30,101, 22,201,181,245,132, 79, 89, 42, 74, 21, 23, 4, 46, 80,188, 75,246,254, 84, -108,125,130,209,172,176,181,217,246,218,126,254,226,220, 92, 46, 48,222,127,187, 28,139,139,127, 76,141,140,214,133,232, 9,104, -113, 26, 61,131, 21, 25,173,118, 17,106, 1, 86,197, 83,198,180,182,149,143,236, 69,133,202,254,255,153, 96, 51, 81,132,174, 51, -203,151,230,178,184, 8,185,245,216,127,240,224,152,217, 9, 20,118, 81,173,191,200, 25,111,207, 88,112, 7, 74, 35, 15, 70,119, -163,168, 24, 13,110, 24,179,141,250,155, 29,198, 29, 36,136,184,248,212, 84,250, 49,218,197,160,234,130, 44,160, 70, 3,237, 82, - 71,231,130, 56, 66,176, 90,153, 71, 7,159,205,170,196,198,160,111, 17,171,187,113,228,108,183,163,158,157, 82, 9,214,125,143, - 35, 73,132,227,131, 67,174, 28,159,112,114,114,153,148, 58,106, 45,108,117,199,237,179, 71,108,206, 78, 45,161, 48, 4,210, 90, -172,168, 71,117,107,145, 46,253,216,182,103,115,160, 14,100,216,237, 42, 55, 71,211, 32,137,216, 25,127,123,180,179,245, 10,202, - 73, 85, 98, 22,250,245, 1,242,220, 9,124,139,192,229,115,248, 3,131,141, 29,175, 61, 15,235,127,207, 20,190,225,200,252,182, -228,230,108,117,117,205, 61, 24, 63, 15,167, 63, 1,231, 95,131,221, 45,244, 86,133, 55,131, 37,130,109, 11, 19,175, 51,129,236, -162,169,213, 61, 77,115,105,142,212,162, 38, 72, 91, 89, 4,159,172, 93,118,223,219, 40,220,138,181, 63,100,217, 17,144,203, 20, -151,126,241,105, 73, 94,168,215, 10, 43, 7,167,116,237,228,115,219,124,148, 61,136, 3, 89,173, 40,102, 71,141, 85, 31, 9,231, -140,110, 20,182, 21, 61,171,112, 58, 26,125,173, 40,210, 41,117, 83,172, 11,149,128, 92,139,200,213, 8, 95, 46,200,155, 91,248, -253,106, 47,219, 87,182,240,142, 14, 93, 21,248, 64,128, 23, 49,198,187, 84,180, 91,120, 72,187,104,157,235,229,100, 33,235, 4, -116,107,205, 33, 35, 54, 79,173,189, 95,124,218,172, 85,145,218,193,218, 46, 15, 42,190,231,124,100, 63,147,198,246,112, 22,223, - 59, 10,210, 11,122,172,237, 84,183,145,249,213, 96, 5,246,161,139,221, 6,239,168, 71, 95,127,132,130, 30,131,246,160,135,192, -224,131,191, 43,157,145, 11,139,162,111,129,188,145,209, 67,208,227, 74, 56,200,246,247, 9, 1,142, 58,184, 22, 76,237, 94,157, -153,149, 4,210,161,125, 65,201,150,105,126,114,217, 2,103,158,123, 19,206,223,128,187, 59,120,135, 34,103,192, 61,144, 27,137, -112,174,232,206,184, 9,241,180,218, 5, 98, 80,250,179,202,193,166,152, 86,193,187, 43, 57, 8, 70,182, 58, 12,200, 73, 15, 79, - 36,228,138,192,147, 1,185,134,175, 26,214,144, 86,208, 61,137,196,119,131, 60, 15,122,205,247,134,175,195,248,105,216,124,198, -166, 80,103, 91, 56, 63,132, 7, 79,195, 77,181, 91,243,217, 72, 61, 29,208, 33, 83,123,157,165,213, 83,232,203,156,148, 88,212, - 34, 74,235,130, 21, 94, 28,129,169, 98,111,113,174, 58, 19,183,188,202,235,194, 31,221,238,157,201, 89,217, 73,204,122,214,184, - 11,237, 66, 16,252,190,171, 23,124,216, 85, 76,116, 43,238,155,202,173,179,214,253, 98,161, 64,168,246,115,197,133,240, 75, 39, - 64,192, 34,193, 74, 27,121,114,177, 7,158,228,172,208, 69, 33, 84,243, 45, 15, 42,211,238,157,118,169,152,130,224,253,107,180, -110, 76, 42,157,204,194, 41,105,176, 29, 55,192, 72,109,107, 11,157, 4, 99, 65, 91,130, 91, 48, 64,150,204, 83,157, 32,176,241, - 73,222, 70,101,242,211,215, 69,186,246,126,124,169,211,223, 60,168,166,238, 13, 2,234, 66, 25,175,123, 94,239,233,124, 94, 0, - 98,170,238,211, 96,150, 2,190, 36,251,214,195, 73, 27,176,176,157, 93,244,159,179,200,132,151,104,215, 26, 17, 33,134, 64, 8, -201,119,228, 70, 88,203, 90, 39,130,168, 76,171, 5,247, 82,235,156, 17,176,140,145, 94, 18,109,116, 1,187,105,118,147, 40, 66, - 23, 12,192,164, 62, 2,175, 19,125,176,145, 16,103,214,185, 44, 5,172,186,152,232, 72,216,251, 59,181, 75, 76, 10, 97,234,166, - 99,138,142,120, 53,250,224, 56,142,118,129,110, 29,188,204,121,236,180,204, 63, 17,138, 8,165, 20,164,100, 31,187, 39,223,109, -219,186, 97,187,219, 48,158,219,232,189,186, 98, 32,231, 66,169,213,190, 71,201,115,170, 94,251, 60, 6, 65, 67,176, 63, 83,178, -217,235,166,232, 85,108, 34,144, 58, 78, 46, 93,226,210,149,171,164,213, 1, 15,199,145,123,183,222, 36,159,157,186, 61, 48,144, -142,188,182,173,130,137, 50,228,194,195,215, 53,197,118, 18,100, 20,242,185,157, 37,135, 97,254, 48, 94,170,202,225, 89,229,100, -157, 8,151,215,200, 65,135,188,119, 5,127, 98, 7,223,185,133,120, 5,134,239,134,244,199, 33,124,179, 23,243, 17,107,235,154, -249, 35, 65, 61,133,242, 50,148,183,172, 67, 63,191, 9,195, 93, 19, 60,189,150,108,135, 94, 93, 5,178,178,226, 40,209, 70,233, -211,211,218,162,150,188, 59,150, 86,144, 87, 94,128,219,239, 95, 57,241,164,243,125,107,242,147,171,225,180, 84,231,147,164,181, - 31,157,125, 13,209, 22,190,209,174,253,206,139,173, 94,192,183,213,186,218,161,218,136,251, 44,195,166,154, 48,168, 42,186,173, -134, 80, 61, 27,209,179, 98,162,143,188,240,208, 39,199,171, 14, 62,230,201,145,112,210, 89,135,253,106, 33,126, 26,120,225, 4, -190,186,129, 87, 54,240,177, 21,188,175, 67, 46,117,232,203, 10, 95,174,196, 7, 74, 24,108, 5,160, 39, 9,174,118,112,185,179, -124,164,131,104,133,190, 93, 88, 54,192,186,216,114,184,154, 34,122,154, 78,104,130, 67, 69,162, 32,199, 17, 61,173,176, 45,246, -117,165,162,155, 2,143,252,232, 73,246,250,132,236,151, 43, 21,184,151,109, 60, 30,125, 18, 81, 5,174, 9, 92,141,176, 41,232, -105,181,191,107,239,239,209,145,243,115,183,192, 93, 15,151,201,190,228, 59, 23,228,161,247, 99, 7,110,219, 59,216,185, 22,225, -220,253,222, 43,180, 7, 57, 28, 64, 62, 5,219, 83, 15,159,191, 14,253, 31, 7, 62, 4,233,111, 67,121, 19,142, 30, 34,249, 33, - 58,238,160, 14, 72, 30,144,172,134, 19, 30,124,106,178, 3,182, 2, 15, 20,206,100,158,111,246,254, 51, 92, 22,155, 76,156, 68, -207, 90, 95, 67, 56,129,244, 52,196,103,160,255,152,197,175,202,145, 65,115,182,191, 0,187,127, 2,103,111,160,167,231,176, 9, -112,218,195,233,161, 77, 40,182, 59, 56,171,212,157,101,155,214, 97, 68,163,175, 97,134,108, 58,130,232,113,241, 91,179,102,101, -156, 23,238,235, 2,173,144,139,237,121,219,199,165,137,182,106, 85, 87,176,235, 36,134,106,141, 82, 66, 77, 56, 85,101, 66,223, -138, 40,161, 92, 40, 28,117, 14, 9,209, 37, 65, 12, 93,116, 91,214, 44, 84,239,240,171,119,196,180,244, 46,159,254,165,186, 36, -165,205,240,147, 42,115,100,153,248,208, 40,133,121,223, 25,171, 19, 26, 69,232, 4,196,247,139, 89,149,161,154, 69, 74, 68,109, - 61, 39, 58, 29,248,161,249,239, 85,201, 85,167, 29,190,234,156,107,142, 83,240,204,210,103, 95,191,138,237,197, 11,179,230,104, -244,206, 93, 93, 77,254,160,194,153,119,214,213,167,134,121,207, 6,215, 84,230,205, 91,191,132,166, 56,224,107, 15,127, 43,123, - 24,141, 37,252,103,233,127, 47,178, 63,117,174,139, 83,117,229,125, 69, 88, 36,121, 77, 5,126,210, 10, 44,246, 46,222, 77, 39, -137, 19, 76, 69,188, 88,205,137,101, 54, 14,207,165,236,101,183,139,187, 8,204,229,160, 11,177,181,139, 50, 69, 22,153,240,243, -127,219,139,131, 21,136, 90, 9,105, 53,143,221, 23,184, 93,212,192, 48, 83,218,156, 78,115,129,125,200,207,226,134,163,170,211, -235, 30, 93, 28,103, 64,152, 52,113, 35,170, 10,195, 56, 80, 70,243,150,167, 24, 32,122,168, 75,169, 83,145,159, 12, 17, 90, 13, - 56, 35,129,172,202,102,187,101, 28, 71,219,151,215, 74,201,153,210, 2, 90,166,105, 64, 68, 67, 52,101,124, 41,211,206,106, 10, -232,145, 96, 62,244, 92, 60,240,204, 39,131, 97,246, 63,140,227,142, 59,183,111,114,251,206, 45,255,254, 22,146,214,210,244, 10, -144,142,124, 85,190,198, 98, 48,151, 47,113,112,177, 66, 12,129,176,238,136, 53,114,242, 76,199, 11,119,183, 60, 58, 43, 72, 85, -214, 69, 57, 14,129,213,122, 77,124,231, 17,242,241, 8,223,188, 67,222,119, 6,215,159,131,250, 39, 33,254, 33, 56,120,202, 31, -235,193,247,230, 46,101,209,222,162, 35,235,151, 96,248, 5,168,107,216,126, 1, 54,119, 96,120, 4,103,143,208,183,162, 29,102, -163, 23,215, 67, 31, 49,186, 61,219, 72, 96,213,119,213,177, 93,171,103,193, 87,114, 84, 93, 31,109,239,126,232,162,169, 3,143, - 56,235, 13,206, 98,113,155,243, 50, 79,229,235, 21, 0, 0, 32, 0, 73, 68, 65, 84,203, 94,120,223,123,231,226,190,166, 96,183, -154, 51,179, 45,144, 49,111,247,121,177, 34,117, 94, 77,196,244,168, 90, 62,249,198,195, 34,212, 14, 96, 69,169, 67,165,110, 43, -117, 44, 12, 62, 34,181,189,162,117,233,186,243,124,241,149, 5,105,116,119, 11,125,180,245, 0, 15, 10,252,211,129,248,117, 43, -248,150,206,162, 81,191,116,110, 80,150,156,225, 3,157,177,219, 63, 23,144, 71,126,251,186,150,224,160,179,163,164, 15,200,245, -149, 41,244,175, 36,228,200, 25, 85,186,152, 58,244, 14, 18,168,254, 54, 5,177, 36, 25, 2,114,160,232,105, 65,135,236, 80,145, -104,251, 93,166,214,201, 46, 31, 21,120, 75,225, 74,130,119,245,240,153, 17,174, 68, 3,197,188,190,133,109,161,158, 85,184,239, - 2,152, 43,209,225, 70,209,110,166, 99,133, 65,108,154,161,158,233, 43, 17,185,226, 33, 40,215, 77,223,193, 23,183,182, 75, 94, -169,173, 64,174,244,232,229, 4, 47,100,164,127, 96,227,253,163, 4,221,155,176,250,113,195, 10,111,158, 2,253, 48,132, 83, 72, - 61, 18,119, 46, 74,116,235,158, 12,136,110,161,110,161, 62, 2, 61,131,225, 28,134,193, 82, 62,196, 95,167,110, 13,105,109, 59, -241,248, 14,144,167,161,123, 15,252,255,116,189,217,179, 37,217,117,222,247, 91,123,239,204,115,238, 84,115, 79,213,232, 9, 3, - 1,130, 0, 65,144, 20,105,138,146,104,153,150, 44, 59,100, 59, 68,234,193,118,132,195, 47,140,144,159,236, 71,251,145, 79,142, -240, 63,224, 7,135, 31,236, 7, 7, 67,180, 77,155, 14,153, 14,112, 16, 1, 73, 4, 45,145, 24, 9,128, 32,134,106,116, 55,170, -199,154,110,213,189,247,156,147,153,123, 47, 63,172,181, 51,247,185,213, 68, 68,161,167,170,123,239, 57, 39, 51,215, 94,107,125, -223,239,235, 94,132,254, 54,196, 43,182,210,200, 23,176,253, 38,108,126, 11,206,191,130,222, 27,225,199, 61,188,219,163,239,140, -232,147,115,116,227, 15,194,232,235, 17,197, 14, 13,131,191,246,161,160,143,252,239,163, 77,160,114,182,113,241, 38, 91,244,231, -164, 74,206,194,152,153, 99, 78, 75,171,100,111, 10,110, 77, 76,139, 77, 44,104,213,101,182,222,252,200, 62,194,147,178,124, 93, - 65,231,196,192,210,242, 26, 92, 48,215,137, 43,149,115, 45, 50, 46,150,194,236, 99,169, 10,213,130, 21,237, 88,143, 6,209,191, -102, 97, 14,176,232,130, 33, 88,167, 98,197,180, 22,198, 92, 20, 13, 66, 87,247,150, 89,231,196, 46,117,113, 82,231,173,190,186, - 10, 63,212,221,183, 46, 61,180, 22,157, 87, 24, 26, 23,181,121, 86,246,250,217,208,164,170, 21, 89, 68,107, 45,238, 86,102, 22, -221,146,191,158,170, 0,209, 99, 68, 67,179, 95, 69,108, 85,168,243, 60, 93,247,226, 90,139,239,221, 91,188,233, 83, 10,244,230, - 51, 8, 18,102,225, 88,231, 27,175,209, 59,226, 82,121, 24,178,172, 43, 77,212, 27,231,144,173,218,157, 70,177, 80, 19,196,210, -199,114,241,247,184, 24,246,180, 22,203, 42,118, 43, 37,207,211,135,118,188,190,100,249,233,124, 48,144, 38, 22,119, 65, 14,155, -183, 61,198, 8, 49, 81,198,237,178,150,104,198,231,178,151,235,254,148,155,126, 6,203,208, 70,175,170, 21, 71, 43,234,102,101, - 19,183,162, 77,192,110, 55,146,199,145,104,121,228, 16, 2, 99, 49, 46,116,125, 79, 98,144, 57, 26,118,114,232, 75, 81,236,112, -227, 7, 98, 9,193,215, 20, 70,146, 83, 89, 88, 10,190, 16, 34,166,158, 41, 38,202,176,243,231, 90, 35,116,172,168, 91,177,206, -188,157,166, 89, 62,140, 52, 89,236,186, 63,206,247,201, 66,186,174, 74, 18, 33,244,193,229,249, 13, 5,194,239,250,176,238,136, - 71, 43,228, 87, 14, 72, 31,239,184,245,223, 63,224,250,110, 7, 71,145,112,146,144,231, 58,248, 88,129, 95,222,193, 39, 35, 92, -125, 21, 14,127, 3, 86,255,192, 30,108, 6, 89,180,228,172,121,167,212,129,118,134,254, 28,190, 12,219,223, 6,249, 12, 76,135, -176,125,207,150,245,195, 35,235, 94, 54, 30, 70,126,226, 82,213,226, 79,172,202,153,172,209, 80, 61,115,202,213,140,122,234,101, -201, 39,141,106,146,214, 85,180, 56,204,149, 43,185, 43,222,170,238,145,119,184,183,201,118,219,140,217, 67,192, 50, 92,140,232, -214,139,206, 70,209,205,132,158, 43, 58,140,148, 33, 91, 33, 31, 10,101,107, 31,116,201, 19, 90, 28,118, 80, 76,116,179,155, 96, - 40, 66, 78, 97, 30, 23,197, 58,234,241, 12,122,141,234,196, 50,219, 51,119,111, 79,196,104,163,167,254,209,150,245, 63,187, 71, -250,175, 95,132, 79,118, 76,255,237,143,217,190,126,129,156, 4,250,111, 6,226,223, 63, 54,133,248,143, 10,220,140,200, 58, 89, -218,115, 15,114,165, 67,158,237, 44,176,229, 40,186,109,193,223,219, 19,247,192, 31, 38, 27, 91,151,206,170,195,129,218, 88,252, - 34,195,217,136, 76, 5,178, 23,223, 67, 31,196, 62, 25, 77, 13,127, 88, 76, 76,247,221, 9, 94,238,224, 87,175,194,149, 43,240, -234,198,138,238,153,117,162,170, 10,157,162,189,239,113, 58, 49,181,102, 31,144,209, 42,140,198,209,234,236,125, 69, 79,139,233, - 32,126, 42,217, 19,234,206, 14, 61,157,224,137,229, 31,235,104,137,110, 60, 24, 9, 93,132,183,182,232,161,141,214,120,121,101, - 7,149,221, 27,208,191, 3,252,164,117,236, 60, 99,226, 76,142, 65, 94,104,198,130,238,250,141,197,100,216,229, 20,226, 27,112, -252,142, 21,120, 70,151,198,247,150, 2, 23, 94,130,240, 41, 43,236,233,196, 21, 95, 63, 0, 30, 65,254,190,141,217,119,119,208, -211,199,112, 55,192, 15, 18,122,231, 9,249,221, 29,229, 34,163, 58,217, 61, 87, 39, 73, 79,236,193, 64, 4,189,240,202,226, 92, - 97, 45,120,225,114,177, 90,182, 75,116,114, 81, 87, 41, 97, 78, 16, 19, 47,158, 45, 57, 69,212, 30,156, 41,176,128, 73,252,236, -150,177, 48,167,122,235,212, 4, 65,109,182,171, 53, 38,119, 70,119, 20,155,240,101,153,221,158,115,145,150, 96, 95,175, 22,192, -212, 60,236, 67,133, 51,121,200, 76,146,101, 88, 54, 5,165, 27,189, 19,159, 67, 50,124,116, 42,246, 26,166,166, 43, 37, 87,132, -234,100,156,244,102,191, 46, 69,205,185,154,189, 11,244,148,182,169, 22, 34,153, 13, 45,246,221,130, 29,112,151,124,234, 50,119, -147, 21,223, 58, 79, 62,154, 66,187,148, 21,117,248, 8,115,116, 39, 51, 20,165,150,161,128,136,206,202,123,113,117,254, 2,183, -209,197, 10,216,216,207,234,231,116,121,223, 61,199,170, 74, 64, 36,217,126, 88,133,108,126, 49,146,139, 36,237,177,238,207, 59, -106, 78,121,240,246, 51,204, 69,189,102,140,215, 46, 87,243, 52,235, 12,236,176,101, 63,133,237,165, 13,188, 98,221,180, 31, 17, -100,137,146, 85,105, 57,245,251,232,185,210,202, 0, 93,192,153, 68,136,221,138, 73, 39,178,157,234,104,178,223,102, 20,109,237, -150, 91, 59,157,162,151,130,102,116,222, 53, 4, 9,214,156,138, 32, 49, 33,209,186,245,130, 48,110,119,228,113,156,201,118, 89, - 76,165,111, 27,215, 52,103,173, 15,227,192, 48, 77, 76,195, 96,247,167,239,195,163,251,239, 13, 85, 92,220, 38, 88,102,166, 64, -153, 39, 36,101, 6,185, 69, 9,208,117,228, 50, 44, 20, 64, 93,130,149,102,199, 66,251,254,233,165, 36, 29,223,245,107,105, 93, - 87,144,214,171, 30,214, 1,233,236,195,149, 38,231,150,226, 10,241,171, 9,185, 17,225,137,194,239,236,224,153,158,248,185, 21, -252, 68,129, 79,140,240,242, 57, 92, 63,128,195, 95,130,213,127, 5,221,103, 33, 28, 47, 35,118,205,151,242,199,221,182,150,255, - 18,118,191, 3,143,255, 21,164,159,130,248, 60,236,190,106,224,148,178,181,113, 99,167,240,108,182, 14,105,151,247,153,131, 49, - 46,225,229,181,237,136,141,197, 76,196,196, 83,161, 52,187,243,228, 79, 28,187, 24,101,240, 39,203, 96,123,122, 61,155, 12,125, - 58,170,237, 84, 47, 28,125,186,153,236,191,159, 91,209,214,193,140,255,101, 44, 54, 78, 25, 51,186, 41, 22,167,151,133, 82,138, -125,152,193, 0, 12, 25,101, 64, 24,178,113,240,139,231,180,215, 83,119,244, 31, 57, 86,107,145, 10,121, 92, 48,157,231, 34,116, - 42, 68, 41,164, 35, 97,247,141,115,174,252,143,119,137, 63,145, 56, 63,221,241,248,186,208, 29,194,225,227,137,195, 63, 62, 39, -252,167, 55,144,163, 3, 24, 2,114,179,135,171, 61,114,128,169, 25,143, 35,164,236, 29,167,195,110, 86, 9,186,107,208, 29,248, -211,117,131,205,192, 19, 28,190,104,209,158,247,190, 7,231,131,219,195,140, 28,167, 33, 27,169,237,208, 64,233, 26, 10,124, 97, - 99,133,249,205, 12, 31, 57,135, 79,249,154,163, 38,135,244, 2,143, 65,199,226,147,145, 98, 95, 79,146, 23, 54,111, 21,119, 85, -255, 96, 85, 66, 94,142,102,155,122,103,164,188,185, 51, 31,254, 88, 40, 27, 53,126, 66,176, 74, 82,142, 34,114, 22,145, 20, 41, -187, 64,124, 48, 34,155, 12, 47,172,225,240, 12,174,127, 29,142,238,129,126, 20,228,154, 77,142,198,239, 65,186,109,133, 89,189, -191, 13, 35,240, 30,240,151,176,121, 11, 30,159,195,195, 11,244,113,237,164,125, 98,112,242, 45,100,245, 69,136, 7,158,231,185, -177,226, 95,118,118, 0,188, 24,225,126,132,183, 3,122,103, 71,254,241,134,252,120,231,240, 8, 55,123,199,138,250,170,211, 34, -187,196,183,155, 76, 9,145, 16, 5,137, 50,251,231, 39, 63,211,214,181,250, 20,116,217, 9, 55, 69, 64, 90,216, 73, 37,160,133, - 96,153, 8,193, 11,162, 23, 22,187,240,194,188,183,150,134, 39,190, 87,218,179,119,171, 42,123, 57,224,115,180,101, 54,107, 88, -108, 54, 87,194,165,224,110, 23, 94,101, 89,178,148, 10, 66, 44, 58,191, 13,201,247,243,147,235, 2, 43, 91, 73,157, 93, 95, 67, -149,150,157,100,125,141,102, 87,171,221,118,169,145,199,106,116, 76,130, 61, 18,202,236, 34,107,147,228,196,105,124, 50,143,229, -103,107,171, 39,241, 85,191,254, 50, 54,213,198, 21, 38, 53, 74, 98, 22, 80, 85,159,189,241,173,100, 14,211,169, 54, 53,109,130, -118,148,194,174, 48, 35,176,130, 67,173, 44, 72,106,233,123,103,137, 97,112,205,127, 21,173,133, 84,223, 20,130, 83,176,212, 43, -122,237,146, 17, 83,169, 75,176, 78, 92,137,179,182, 64,221,173, 80,166, 76, 41,217, 86, 50,254,232, 44,222, 91, 91,137,240,134, -164, 20, 15,145,125, 42, 97,100,158,244,148,102,153, 31,100, 57,236,204,217,240,213,174,167, 74,215,117, 16, 3,121, 24,104, 94, -226, 66,229,187, 28,198,213, 28, 76,219, 67,170,206,185, 37,203, 65, 37,132, 90,128,109, 42,168, 2,227, 48, 50, 57,115,221, 14, - 77, 54, 13, 75, 18,136, 93,162,168,178, 29, 7,118,219, 45,211, 56,248, 68, 33, 56,164,198,167, 26, 33, 46,185, 5,179, 52,192, -131,133,106,170, 95,179,239,215, 82,124,148, 31, 41,174, 27,168, 7, 57,213, 75,200,156, 75,228, 65,116, 95, 55,177,255,123, 29, -181,155, 94,187, 2,135,139,159,154,236,136,212, 2, 28, 41, 92, 87,184, 61,194, 11,163,253,251,159, 83,184,154, 45,120,226,106, - 15,183, 94,129,254,215,129,127, 0,188,228,155,156, 13,232,195,167, 53,149, 51,141, 97, 11,229, 59, 48,254, 30, 60,254, 35,144, -235,176,254, 28, 12, 95,179,110, 94,176,217,243,225, 51,176,218, 32, 87,119, 46,160,187,180, 27,104,149, 23,101,223,250, 66, 14, - 78,150, 19, 27,161, 79, 30, 58, 50,248,150, 43,251, 94, 82,189,229,185, 80,171, 99,231,101, 17,115,109,138, 21,240,157,147,123, -138,218, 63, 79,254, 75,138,141,135,182, 25,157,148, 60,186,191, 89,116,206,103,175,153,236, 99, 17, 46,178,107,229, 26,209,198, -212, 36, 27,213, 56,214, 41, 47, 15,140,186, 51, 59,159,124, 77, 18, 44, 2,247,236, 40,112,250,111, 46,232,255, 28,166, 3, 40, - 43,235,238,166,117, 64,223,157, 76,221,253,111, 93,135,215,109,162, 34,175,174,225, 70,135,244,157, 83,132,138,141,150, 67,129, -120, 19,120,222, 2, 67,226,123,192,199,129,191, 9,252, 79,192,251, 32,207, 66,121,100,135, 42, 73,112,100, 25,164,250,230, 57, -122,103,135,190, 51,160,119,183, 86,164,175, 11,233,113,177, 41,192,127,126, 3, 94, 78,176, 27,173, 64, 31,123,215,114,210,161, -103, 25, 57, 72,232, 65, 54,109, 68,151,108, 4, 24, 93,206, 59, 21,179,156, 92,235,237, 49,217, 7,251,154, 27, 40,167,153,114, -238,113,132, 67, 97,218, 21,166,179, 74,236,202,132, 7,163, 97,118, 49, 85,122,217, 21,210, 90, 9,103,230,245,231, 86,129, 23, -126, 0, 71,239,129,124, 4,228,138,143,199,255, 16, 86,207,195,193, 85, 43,208,225, 28, 46,238,193,143,206,225, 7, 5,222,119, -241,156,170,241, 15,174, 39,228,102,132,213, 14, 13, 79,172,200, 31,122, 21,121,162, 86,156,239,187,177,227,108,160,108, 38,202, -253,145,252,112, 71, 25, 39, 52,249, 41,222, 15,120, 18,218,129,165,144, 11,108, 82,180,226,148, 21, 53, 19,181,123,160,253, 35, -204,150, 73, 62, 15, 38, 75,227, 93,110,144,174,245, 65, 76, 40,104,246,189,110,169, 44,241, 86,101, 46,115, 33, 14,205,190,180, - 90,207,114,110,138,159, 44,133,139,178,140, 58,101,143, 47,190,144,214,170,204,162,212, 29,178, 83,156,167,217, 78,165,140,109, - 87,231, 95, 55,120,129, 28, 93,132,148,115, 67, 72,203, 51, 30,142,146,171,119, 70,200, 18,216,130, 41,152, 61,246, 57, 87, 17, - 96,185,172,200,215,133, 2,199, 50,118,151,153,144,102,133, 71, 85, 61, 7,190,109,152,132,168, 50,239, 61,139, 44,185, 6, 50, -251,243,117,137,231, 37,120,119,181, 47,158, 91, 34, 97,101,222,240, 45, 7, 49, 89, 70,253, 92,202, 38,119, 17, 27, 33, 80,138, - 26, 34,187,242,193,125,100, 44, 8,177, 75, 36, 76, 92, 90, 36,250,180,197,222,159, 49, 23,198,113,154,119,215, 53,142,122,246, -203,123, 71,234,196, 21, 3,190,224,187,102,205,123, 62,120,213,125, 69,187,238,241,217, 22, 44,109,165, 19,138,123,198,241,240, - 44, 73,157,173, 79,234, 68, 87,151,233,199,124,152,209, 38,113,174,201,117,173, 0,162,253,158,221, 38, 35,193,247,232,196,104, -127, 46, 8,211, 84,152,198,113, 17,172, 85,146, 95,176,124,128,237,148,173,152, 15, 91,212, 99,195, 67,140,206, 62,241, 72,154, - 16,230,201,196,158, 88,193,125,248,226,171,144, 90,152, 85,139,175, 41, 10,164,132,196,100,220,246,236,235,205,198, 58,184,231, -146,104,171,184,238,255,181,138, 38, 43,188, 58,201, 63, 62, 52,208,199, 65,177,241,117,180,189, 46, 73,205,170, 36,209, 66, 53, -250,235,144,174, 90, 7,222,189, 2,233,147,208,127,210,198,142,230,145,114,185,243,105, 51, 98,111, 11,122, 89,110,241,242, 14, -148,183, 61, 59,244, 53, 88,255,134, 35,187, 86, 22, 12,178,187, 7,195, 7, 16, 55,126,215, 14,190,176,154,230, 11,203, 78, 33, - 14, 87,209, 12, 97, 7,113, 7,211,102,177,166,141,117,215,173, 70, 22,219,168, 21,166,209,121,238, 59,111, 17,182, 5,182,166, -124, 86,177,147,154, 58,102,175,100,155,213,105, 54,246,185, 37,185,249,184,105, 82,139,116, 45,197,132, 74,201, 82,145,102, 8, - 7, 58,127,249,157, 15, 3,170, 10,119,239,124,162, 54,178, 42, 14, 56, 25,155, 17,104, 22,115,169,109, 70,119,204,245, 78,128, -205,102,207,139,110,121,239, 39,223,201,109, 20,121,182,183, 11,230,160,135,151, 12,167,106, 16,143, 12,225,121,123,175,195, 45, - 63,209,191, 7,121, 13, 97,107,138,236,153, 32,253, 29,215, 63, 76,176,253,115,123,255, 70,183,215,125,245,148,242,187,143, 40, -111,109,209,149, 89,172,166,179,145, 41, 90,206,142,136,176,186, 40,244,255,230,140,144, 3,242,145, 43,118, 13,141,238, 30,184, -218, 35,155,130,238, 38,228, 57, 63,201, 28, 56,201,101,240,207,183,179,193,177,172,124, 14,252,234,202, 46,179, 31,238,224,145, - 82, 30,219, 46,126, 10,133,173, 42, 91,135, 92, 68,135,197,164, 65,233,243,196, 74,139, 77, 17,222, 85,226, 54,219,250, 97,219, -193,174,135,151, 47,144,171, 31,128, 30, 64,255,243,160,223,135, 15,222,128,241,161,173,107,206, 4,126,152,225, 13,224,141, 9, - 29,118,140, 97, 52,246,149, 68,228, 40, 18, 14,147, 29, 74,114, 64,142,147, 5,179,100, 76,224,183, 85, 83,239,110,139, 77,108, -130, 31, 4,187, 50, 83,213,138, 66,118,107,153, 78,205,131, 59,152,130,122,204, 53, 28,198,108, 98,102, 80, 88, 34, 72, 53, 44, -236,239,150,132, 45, 65,141,214,167,152,195,160, 52, 97, 7,158,180, 82,233,120,104,153,147,172,106, 65,183, 97,201,126, 39,201, -164,205,238,216, 30, 52,129, 42,192, 23,155, 38, 96,123,242,132, 37,157, 85,200, 74,100, 9, 45,178, 64,153,197,101, 19,106, 7, -222, 6,140, 84, 57, 7, 11, 49,109,172, 67,255,214,143,229,202,107, 27,165, 7,138, 4, 82,178,123, 40,229,194,228, 95,173, 20, -245,115,188,206,118, 47,230, 14,116,177,141,105,179,159,108,219, 64,109,254, 93,161,233,246,165,142,235,195,204,115,175,231, 39, -209, 50,175, 33,230,174, 43, 84,100,172,238,237,137,235, 88, 57, 58, 0,108,210,133,159,223,226,138,231, 3, 81,171,126,114, 37, -184, 52, 92,240,162, 75,108, 90, 81,161, 72,161, 72, 38,187,136, 48, 35,228, 58, 54,111,242, 89,219,169,204, 2, 83, 12, 51, 67, - 61,180,147,155, 89,192,182,175, 48,111, 55,224,250, 84, 37,104,200,110, 77,247, 25, 80, 98,236,153, 80,166,113,154,129, 65, 69, -100, 86,210,239,101,193,238,215,243,249, 51,179,243, 65, 43,244,132, 16, 29, 21, 28,163,239,211,147,101,151,143, 59, 74,153,154, - 61,191, 29, 48, 74,136,236,198,129,113,187,165,140,163,237,169, 59,159,128,200, 18, 53,104, 59,244, 56,159, 50,102, 17, 98, 67, - 31,172, 2,189,122,125, 76,121,178,248, 86, 85, 68, 38, 36, 70, 66, 12,100,141,115, 50,168, 54,239,226,135, 89, 11, 91,187,158, -162, 75, 65,151,154,167,254,169,104,118,160,238,186,117,204,241,196,112,149,114,197,254, 62, 29,251,174,240,153, 5, 97, 41, 7, - 16,250,198, 0, 51,184, 53,109,247, 33,177, 22,122, 9,241, 83,172, 35, 12, 47, 64,252, 85, 43,226, 26,172,187,143,207, 67, 62, -135,112, 10,241, 45, 8, 63,182,140,239,105,235,187, 77, 7, 64,171, 64,153,188,224,143, 62,234, 28, 96, 28, 77, 88,181, 43, 86, -176, 55,174,160,126, 48,153,213,171,130, 80, 38, 69, 39, 87,152, 79,182, 31, 87,241,130, 93,199, 85,142,119,157,159, 34,163,239, - 56,165,194,251,189,107, 47,197,236, 13,149,249, 62, 85,166,181, 48,168, 48,100,101,240,145, 98, 29, 16,168, 7, 10,180, 17,128, - 41, 56,164, 32,251,122,191, 14, 78,196, 10,248,197,104,231,174,177,179,214, 97,167,246,210,123, 79, 88, 77,209, 30,142,235,171, -145,240,211, 7,139,234,233,102, 63, 11,224,116, 83,144,225, 14, 28,156,128,220,116,130,217, 43,160,223,128,242, 99,200, 55, 96, -250, 52,164,191, 2,254,149, 41,150,206,183,240,208,216,240,250,112, 64,191,244,128,242,127, 61, 2, 70,228, 25, 65,111,249,120, -252,205,128,134,133, 18,166,219,130,126,225, 9,253, 31,110,144,191, 53, 16,126,253, 25, 23,232,169, 41,223,233,145,251,226,150, -163, 26,154, 99,254, 73, 89, 1,169,216,190, 47,129,172, 19,218,129, 60,155,204, 50,248,254, 0, 63, 8,228, 71, 3, 79,164,176, -233,226,194,220,143,190,207, 12, 22,114, 54,105,161,159, 70,242,123,133,114,145,137, 79, 38,194, 7, 35,242,206,132, 12, 7,232, -107,167,200,245, 31, 3, 47,194,225,103,224,246, 49,220,185, 3,111, 2,253, 26,126,229, 16,110,159,192,255,240, 67,242,239, 63, - 97, 76, 19, 37, 23,164,159, 8, 99, 36, 12,147, 39, 38, 5,100,154,224,253, 96,206,138,173, 11,175,178,171,175,179, 35,140,179, -209,247, 36, 9, 97,231, 7,185,236,202, 85, 93,196, 86,129,194,164,193,245, 24,203,142, 88,231,251, 41,204,161, 34, 82, 71,124, - 90, 22, 27, 79, 85,172, 5,157, 71,236, 85,136,150,103,101,142,117,233, 65,133,236,227, 84,109, 18,229,146, 44,201,131,101, 98, -239,241, 98, 80, 22,103, 21,169, 61,188, 82, 22,250,209, 15, 33,107, 97,138, 48, 77,166,159, 72, 85, 64,215,216,148,117, 6,229, -232,135,242,196,235,195, 63, 70, 51,155, 76,121,217,125, 87, 14,212,108,183, 11,113,182,145,137, 22, 66, 85,249,123,209,175,126, -252,122, 88, 86,151,113, 72,131,193, 85, 31,233, 7,127,143,181,237,154,154,154, 50, 71,151,122, 33,152,227,249,170, 12,177, 9, -254,217,235, 85,125,244, 60, 71, 60, 95,202, 37,175,169,110, 53, 35, 35,233,194,134, 9, 21,219,218,172, 82,104, 2, 77,170,184, - 78,102,190,154,197, 4,211,100,155,139, 71,237,105,147,230, 86,230, 96, 31, 63,214,204, 98, 1,247,222,123, 33,203, 78, 80, 11, -206,102, 47, 57,207, 70, 60,253,235,208,177,151,171,210,222,239, 93,142, 53, 69, 11, 41, 38, 74, 76,142,251,206,205,238,200,231, - 39,186,140, 56,171,221,186, 6,210, 46,171, 38, 27,169,231,106,177, 19, 8, 33,121,135,157, 12,246,146, 18,163, 42,187,209,147, - 60, 93, 33, 42,238,118, 42,192,110,183,101,220,237, 16,205,196,202,128,166, 10, 2,125, 49, 50,227,111,109,213,218, 28, 45, 22, - 25, 69,123,204,246, 67, 64, 36,154,123, 96,154, 16,103,214,139, 79, 66, 74,153,154,251,251, 82,102,125, 8,243,195, 97,209, 80, -212,116, 59,177, 41, 77,153,252,128, 95,128,178,130,233, 25,136,215,125, 28,121, 27,250,107,176,242,206, 60, 28,154, 37, 39, 30, -215,244,112,208, 11,104, 73, 62,243, 81, 47, 95,218,230, 95,254,184,131, 29, 10, 72,149, 83, 9,229, 30,148,115,203, 70, 47,239, -194,248, 46,140,239,121,177,158, 42, 93,195, 63,216,201,118,150,249,137,169,138,199, 29, 12, 25, 29,188, 35, 61,247,104,209,199, - 19,220, 87,120,127,132,243,236,156,105,179,146,217,238,215,119,186,217, 69, 91, 46,248,208,170,124, 15, 11,107, 82, 91,212, 82, -108,242,215, 29,185,169,141, 35,100,242,134,118,235,107,249,154,225,172,165,197, 14,235,254,122, 81,108,140, 58, 23, 68,149, 25, -114,178, 27,149,141,219,199, 71,181,174, 93,154,189, 74,246, 73, 0, 59,120,110, 5,171,143,118,139,240, 44, 4, 88,247,166,251, -162, 88,100, 41, 43,152, 30, 66,186, 11,225,115,222,141, 71, 40, 55, 64, 62, 6,211, 21, 59, 88,233, 53,251, 92,182,192, 54,163, -111, 94, 80,190,240,152,242,149, 51, 67,172, 30, 36,251,168, 55, 1, 58, 37,158,153,117, 45, 36, 31, 37,215,125,230,227, 9,249, -127, 78,145,103, 87,200, 63,188,229, 99,133,100,157,198,160,240,100, 50,111,120,244,125,110,125, 98,119, 17, 73,142,159, 13, 1, -121,111, 64,223, 24,224, 16,194, 47,246,164,219, 10, 95,132,131,239,238,200,231,138,118,182,250,216, 70, 65,163,208, 37, 27, 10, - 76, 65,152, 78, 21,221,140,244,253, 68,186, 58, 33, 33,146, 78, 38,235, 70, 59,208,248, 16, 57, 81, 79,152,251, 4,252,228, 21, -120,243,155,246,207,183, 86,240,246, 19,248,218,134,210,153, 21, 82, 39,108,106,147, 60, 29,169, 19,130, 20,239,104,155, 15, 61, - 96, 69, 61,248,228, 40,251, 3, 61,213, 66,228, 15,168,178,128, 4,107,206,124,240,223, 59, 11,171,124, 65, 89,229, 41, 81,150, -188,110,209,118,140, 91, 40,181,124,171,169,198,172,147, 10,203, 38,214,199,207, 26,196, 84,244,190, 71,175, 26,111, 13,150,138, -166, 49, 32,217,192, 33, 14, 91, 94,236, 72,179,127, 37, 32, 1,142,187,196,213,103,122, 14,126,233, 4,121,109,205,240,187, 15, -120,239,251,231,168, 40,147, 83,197,122, 12,101,187,228,138, 87, 63,244,126, 0, 9,245,128, 86,106,176,155, 41,139,251,106,141, -107,159, 44,209,211,198,213,239, 95,239,218,187, 96, 15,247,220, 28,136,132,229,251,212, 40,151,168, 85, 91,235,100, 50,241,110, -119, 38,239,177,167,108, 95,188,226, 50,219,239,180, 1,200,212,113,104, 96, 9,150, 17,247,246,207,193, 46, 46,122,144,230,160, - 49, 43,222,101, 89,153,204,123,246, 37,128,110,182,180, 61,181,193,150, 5, 17,107, 67,148,138,171,149,166,136,102,251,140, 29, - 93, 27,244,175,249, 58, 44, 0,178, 89, 60, 93,178,119,156,181, 33, 41, 79, 63,218,165, 57,189, 92, 70,201,206,129, 56,251,157, - 44,238,255,143,169,243, 85,165,121,185,237,163, 8, 51,108,168,253, 98, 90,202,126,104,187, 67, 92,234, 74,167,106, 21,130, 4, - 35,172,185,143, 60,197, 72, 22, 97,179,219, 82,166,209,223, 99,239,112, 69,152,114,102, 26, 71,114,158,252,125, 14, 75, 16, 76, - 61,132,120,247, 29,176,113, 86, 29, 64,235, 37,204,210,222,132,171,174,120,138, 57, 47, 44,201, 10,202, 48, 17,198, 9,233, 19, -154,162,231,120,232,165, 9,135, 23,124,196,234, 32,245, 58,169, 33, 67,126,152,111,116, 22, 73,223, 47,200,179,167,176,254, 62, -164, 27, 6,126,209,183, 64,111,129, 62, 15,253,203,208,221,114,140,235,129,119,119,218,242, 40,155,113,136,254, 53,233,187,149, - 20, 87,247, 50,247,161,220,133,252, 77,144,143,218,109, 87,222,134,233, 3,200, 15, 44, 70,115,154,108,217, 86, 38,163,135,149, -108, 69,127, 60, 51,123,209, 46, 27,113,109,235, 12,207,237,104, 5,104,147,173,176, 63,200,112,207, 4,109,133,105, 22,247,204, -180,180,236, 35,245, 97,241, 85, 86, 91, 75,173,174,179, 68,166,217, 45, 34, 11,224, 70, 69,140,102, 59, 45, 33,105, 59,183,167, -239,170,218,180, 57,185,207,172,234, 75, 55,102,244,206,190,126, 48,117,159, 55,154,163,130,169,134,167, 9,116,147, 79,166,213, -186,243, 24,204,105,117,178, 18, 78,142,109, 3,162, 90,144,215, 55,232,107, 23,200,141,130, 62,216, 25,180,231, 90, 7, 55, 54, -200,245, 11,232, 63,106,221, 41,175,131,188,228,199,255, 27, 80, 94, 3,254, 22,200,191,128,233,174,185, 15,222, 53,139, 30,159, - 91, 17,126,121,133, 92,241,192,232, 71, 62,126, 27, 51,218, 95, 16, 30, 78,164,149, 63, 69, 79, 4, 89, 11,242, 40, 32,234, 14, -137,179, 12, 39,201, 60, 54,169,131, 81,145,139, 26,143,107,159,195,172,230, 74,106, 19,128, 85,231, 6,221, 17,254,242, 2,253, -241, 68,201, 35,124, 92,232,126,227, 42,105, 55,113,248,207, 55,148,119,204, 34,183,253,160,176, 27,236, 97,190, 58,176,209,215, -147,173,146,163,144,178,178,126, 48,210,203,132, 14, 5, 78,132,120,226,160,145,143, 60, 52,237, 6, 64,255, 34,188, 38,240,206, -183,225, 15,222,133, 31,143,112,162,232, 99,115, 72, 72,175,243,168, 75, 5,100, 40,104,231,139, 80, 48, 92,110, 46, 54, 78,111, - 1,231,131,117,235, 50, 45, 18,112,201,251,137, 91, 97, 14,212,104, 78,254,149, 31, 81,230, 77,158,141,178,117,177,152,205,164, -176, 16,144,121,212, 94,246,133, 69,178, 63, 69, 51,177,152,143, 30,181,198,123,186, 34,189, 65,103,214,192, 20,105,250, 44, 81, -232, 29, 6, 18, 99,228,224, 36,112,244,179,199,132,255,236, 57,152, 70,244,119,238,205, 72, 41,113,111,248, 80, 51,189,221,186, -148,231, 7,145,238,137,156,234,248,170,218,239, 42,120, 36, 52, 60,247, 50, 43,174,212, 44,145,234, 74,255,102,199, 95,209, 18, -161,186, 94,117,153,250, 78, 46,239, 90, 53,124,251, 57, 90, 83,108,220, 28,154, 3,132,204, 36, 55,153,117, 16,212,127,174,152, -215,153,135,198,172, 85, 48, 13, 68,196,229,104,182,219,247,162,222, 98, 95,133, 5, 36, 99, 12,251,101,207,223,242,172,230, 0, -158,218,173,106,237, 89, 27, 90, 30,213,203, 45,151,176,182,178,112,220, 29,117,188, 72,157, 26,227,186, 44,241,181, 13,175,103, -217,221,150,210,214,211, 15, 65,209, 85, 36,238,126,177,111,231, 22,203,250,160,144, 66, 66, 82, 50,111,183,175, 4,130, 23,111, -213,167, 73,120,203, 7, 41,123,125,101, 21, 76,202,101,113, 92,140, 22,189, 27, 35,187,221,142, 60, 14,246,186, 66,244, 21,131, -146,115, 38, 15, 35, 37,231,185, 33, 89, 70, 74, 45,157, 46,248, 72, 63,204, 65, 45, 13, 33,127,111, 68, 94,119,251,165, 89,111, -137,107, 18, 36, 38,198, 14,116, 24,144,169, 16,186, 68,137,145, 50, 57, 33,181,221,197, 87, 56,143, 68,135, 22, 55,181, 76, 23, -123, 31, 85, 40,199,251,217, 22,255, 87,207,145,227,157,141,190,245, 42,228,251,176,125, 23,242,219,144, 95, 53,255,109,218, 24, - 88, 67,142,188,219,246, 25,176, 78,205, 6,236,242,167,236,223, 76, 19,148,251, 80,238,128,254, 24,198,191,130,221,215, 33,189, - 6,221,175,249, 92,170,131,114, 2,229,194,108, 68,101,176, 95,195, 19,152, 30,195,197, 57,122,110,176, 19, 6,177, 59,117,151, - 29, 18,162,139, 98,253, 81,182,228,182,209, 21,234,243,145,223, 59,242,188,112,222,231,211,189,255, 55,202, 62,151,218, 8, 73, -126, 58,149,125,177,125,241,130, 58,142,214, 97,141, 62,249,207,174,216, 76, 77,148,239, 30, 68,162,241,162,218, 84,192, 47,239, -178,236,165, 70,181,232,211,204,140, 57,158, 31,184,163,219, 70, 68,237,236,115, 24,225,133,171, 16,186,128,246,166,146,230,222, -132,254,193, 67, 27,191,175,221,223,125, 52,194,250, 28,142,255, 49,132,255, 0,184,135, 5,147, 43,112,100,135, 56, 62, 9,225, -143, 96,247, 47,225,237, 29,250,230,132,158,142,144, 51,114, 45,161,201,222,107, 57,138,240, 66, 66,146,160,187, 12,159, 58,182, - 11,109,114, 69,223,129, 93, 96, 33, 8,226, 33, 42,156, 21,120, 82,204, 86, 24, 28, 65,123,225,171, 17, 5,217,150,101,163, 83, - 71, 94,100,123,226,158, 36, 27,219,223, 29, 40,111,141,148,239,142,200,183,182,132,159,233,136,191,188, 38, 93, 51,144,196,250, -237,145,252,229, 29,249, 71, 35,225,102, 68,142,133,241,207, 71,206, 86,202, 32, 86, 88,226,164, 28, 61,154, 56,124,125, 3, 35, -196, 11, 69,206, 15,208, 79,108,144,107,119,204,175, 30, 95,132,231, 62, 13,219,111,187,102,163, 67,182, 9,189,231, 63, 79,242, - 61,104,189, 32,134,236,162, 45,153,201,128,182,238,105,242, 75,107,180,105,158,159, 73,148,236,201,129, 13, 89, 45,200,194,113, -183,219,167,241,157,137,122,215,141,237,201,181, 54, 44,106,171,137, 98,187, 58,234, 3,177, 29, 11,178,204,114,151,253,189,204, -137,107,120,231, 94, 84, 81, 49,124,110,110, 84,240,161,238, 29, 27,245,182,170,237,175, 31, 61,158, 24,126,255,148,254,247, 79, - 25, 55,133,115, 50,155,152,201,121, 25,127, 87,146, 92,168, 35,110,191,134,235,121, 35,205, 29,187, 54, 51,238,198,111,239,208, -145, 25,219,234,185,232, 45, 54, 85,230, 87,106,249,232,120,166,123,152, 97, 57,234, 60,114,102, 13,198, 28,190,164,203, 1,170, -138, 4,163, 44, 93,178, 94, 10,101,169,194, 47,101,127, 15, 42,174,158,175,202,232, 24, 28,114,162, 25,134,237, 37,251,218, 2, - 84,175,215, 68, 93,231,213,132, 60,154,228, 52,209,125,181,119, 22,230, 33,244, 76,116,171, 74,232,214, 83,191, 23,224,186,252, -249,232,135,143, 86,114,161,173, 35,220,253,253,226, 7,133,122,192, 42,151,188,225,237,212, 56,248,148,241, 67,255, 87,199,198, - 24,146, 53, 9,164,174,159,125,238,179,240,178, 90, 39, 75,251, 19,237, 23,205,102,232,227,216,227, 37,219, 32, 4, 99,199, 71, -239,208, 67,234,184,152, 38,118,195,206,255,123,116,165, 63, 76, 99, 38, 79,147, 89,245,218, 81,186,163, 25,149,229, 64, 39, 40, - 49, 36, 23, 38, 22, 27,163,123, 66,219, 83,236,155, 70,112,160,174, 93,209,121, 74,101, 59,254,210,117,110,155,132,144, 58,159, - 22, 47,201,125, 79,191,125,242,212,103,104,211,131, 56,139, 55, 18,127, 57,192,195,100, 36,175,103, 39,184,122, 10,199,143,224, -224, 46,172, 86, 80, 14, 96,188, 5,253,107,150,249, 28,175, 67,188,225, 59,241,155, 16, 14,172,200,235,232, 54, 40,125,122,145, - 50, 31,213,162,251,128,158,129, 48, 25,184, 99,248, 54,148, 47, 65,247,139, 54, 5,144,119, 32,223,243, 14,125,107, 94,245,139, - 7,112, 54,160, 15, 4,206,130, 11,221,116,153,111,111,124,116,186,117,239,248,153,117, 98,138,157,250,108, 89,105,150, 33,173, - 65, 47, 85,205, 94,253, 51,165,238,153, 90,138, 83,123, 10, 95, 94,130, 58, 56,174,178, 3,134, 98, 33, 6, 53,179, 58,250,239, -147, 92, 19,156,116, 62, 40,212,241,223, 76,134,218,187,153, 60, 31,166,117,229, 5,219,151, 20,255, 67, 5,232,130, 1, 40,198, - 73, 89, 37,120,233,170, 53,181, 42,193, 72,113,135,193,128, 43,193,176,181,114, 43,193,237, 2,183, 55,200,245,127, 4,241, 63, -180,137,140,161,214,128,231, 64,126,210, 98, 75,229, 15,225,201,111,161,223, 5,222, 75, 40, 35,250,100,180,177,193,219, 59,195, -151, 30, 6,244,165, 14,169,249,233,197,218, 39,217, 22,152,196, 14, 94, 15,118, 6,167,121, 49, 89,248, 74, 12,150,173,254,252, -161, 61,185,118, 59, 15,190, 9,203,211,188,171,106,161, 88, 23,158,120, 96,177, 81,240,158,237,209,231, 6,228,129, 21,206,221, -215,183,236,190,182, 37,246, 66,186,153, 88, 61, 31,233,126,101, 69,252, 76, 71,136, 66, 88,117,132,207, 38,142,223, 63,103,120, -125, 96,119,100,194,179,139, 34,236,128,252,112,226,100,216,160,163,146, 6, 63, 89,191, 40,200, 51, 63,130,131, 71, 16, 62, 10, - 47,191, 6,219, 59,240,104, 34,190,182, 34,142, 35,211,227,178, 56,138, 7, 31,133,201, 37,220,101,237,214, 28,129, 32, 77,122, -148,178, 20,185, 82,100, 86,138, 27, 77,203,174,207,169,237,212,155, 10, 96,177,201,165,137,144, 14,139,176, 43, 96,123,186,210, -230, 74, 75,227,111,181,199, 82, 41, 62,101, 42,204,158,233, 69,250,189, 32, 32, 82, 16,130,219,231, 52,168,119, 17,203, 53, 94, - 83,213,152,148, 11, 10,187,113, 55, 15,239, 74, 80, 74,182, 12,233,185,171, 11,194, 80, 92, 3, 80,133, 70,186, 31,237,186,236, -140,181,153,100, 73, 99,133,178,123, 87,212,138,118,209,203,221,209,172,179,158,173,113, 21,224, 82, 42, 40, 70,150,103,212, 84, -215, 97,106,218, 0, 11, 18, 49, 43, 93,214,253,192, 20, 9,115, 50,232,222,100,178, 13, 21,145, 75,237,171,221,223,147,185, 22, -131,218,232, 85,131, 97,162, 85,231,144, 71,105, 19,212,180,216,202,162, 73, 88,147,102,164,155,116,113, 23,132,134, 48,151,129, -209,117, 18, 53,236,100,105, 76,116,239, 32, 34,173,214,176,174, 5,154, 52,158,224,100,185, 34, 62,238,110,148,232,121, 79,161, -214,248,168,165, 85,228,115,169, 43,151,249, 16, 41,141, 85, 45,197, 14,237, 18,101,202, 75,240,204,124,176, 43, 79,229,187,138, - 95,207, 82, 49,179,205,156, 95,154, 81,124, 10,209, 58,116,207, 45,223,169,178,219,110, 9,197, 24,253, 38, 80, 45,214,161,231, - 66, 46,227, 12,126,177,209,250,194,140, 87,173,153, 31, 46,188, 11,129,130,237,192,161, 32, 33,205, 7,166, 42,116,171, 90,152, -138,127,149,134,253,191, 56, 4,140, 57, 95, 60,178, 59,166,132,166, 14,157,166,230,117,201,226,120,208,188,119, 44,171, 48, 35, -156,248, 87,155,211, 84,190,113,134,188,190, 34,116,201,210,183,142, 48,150,246,141, 17, 78, 54,232,141,135,200,173,187,112,244, - 29, 88,253,190,229,197,166, 99,136,183, 32,222, 54,127,121,255, 11,208,125,204,115,160,139, 89,214,102, 83,114,125,199,179, 9, -241,136,144, 15, 33,118, 32,190,179, 31,191, 14,211, 19, 8, 63, 13,225, 89,232, 78, 13, 25,187, 23, 25, 36,182,251, 13, 78,142, -216,120, 87, 62, 86,210,195,130,104, 85, 87,164,171,150,134, 83,153, 41,141, 18,105,191,160,107, 67,202,210,197,178,211,138, 45, -195,146,163, 49,102, 59, 63,100, 53,171, 90, 5, 97, 36, 22,238,118,237,172,179,159,146,217,123, 72, 85, 31,163,182,168,107, 2, -203,225, 64, 29,237,168,254,128, 65,157,104,235, 12,157,226, 40,250, 87,175,194,209,202, 66, 32, 36, 69, 75,169, 19, 87,153, 95, -233,145,219, 29,242, 82,129, 23,118,200,201,223,135,240,107, 80, 30,248, 46, 93, 13,188, 18, 20,194,187, 80,126, 7,253,224, 91, -240, 77, 69,223, 14,112,115,128, 39, 25,253,192,115,205, 71,243,221,201,218, 22,252,250,246,206, 62,159, 67,247,147,171,154, 78, -225,193,136,190, 49,153, 20,226,123, 35,242,194, 8,207,117,246,125,122,223,245,247, 30,115,118,144,144,110, 64,163, 19,254,206, -213,152,247,167, 88,236,235, 73,231,184,177, 2,215, 2,225,163, 43,148,137, 32,153,124, 58,241, 24, 24,139, 18,223, 25,232,222, - 20, 14,191, 53,112,248,108,224,224,118, 79,248,116,130, 65, 88,253,195, 3,174,252,211,145,199, 23,202, 32, 54, 28,216,185,211, - 81, 54, 19,199,239,110, 97, 5, 41, 43,178, 21,116, 44,200,205,251,112,184,131,195,103,225, 99,183,208,205, 7,132,243, 66,186, -182,166, 60,217,144, 55, 19,154,202,124, 58,171,162, 40,237, 4, 73, 46, 66,211,197, 47, 45,141,119,121,190,182,180, 94,111,179, -242,170,121,142, 45,227,220, 69, 41, 44,203, 44,172, 25,117,214, 69,172,212, 81,255,135,200,150,202, 76,240,210,153,141, 86,217, -234,185,105, 7, 13,109, 26,216,136,113,230, 67,168,157,160,175, 74,231, 75, 57,216, 79,162, 33,217, 0, 0, 32, 0, 73, 68, 65, - 84,232,209, 71,217, 33,219,225,183, 56,103,190,222,122,161,146,219,116, 17,161, 73, 48,224, 76,112, 27,103,221,202, 21, 93,238, -143, 58,208,180, 53,131, 16, 66, 85,117,251,180,173,181,234,105,155,105,206, 82,172,217,223, 58,168,103,116,171,238,171,187, 69, -197,197,131,174,102, 15,166, 21, 40, 33, 16, 84, 44,174,214, 81,156, 33,248,104,188,242,185, 92, 73,254, 97,225, 36, 51,141, 47, - 40, 33, 23,195,127,122, 82,155, 86, 85,119, 21,180, 73, 99, 97,213,229,185,177,247,243,203,135, 9, 10,101, 22, 56,230,166,128, -207, 82, 52, 49, 97,228,130,154,213, 61, 27,157,206, 93,189,238,229,209, 75,163,170,215,218,109,214, 21,101,101,215,107,139,184, -101, 46,130,251,251,117, 26,234,217,190,247, 58,138,144,250,222,126,238,146,151,239, 53,143, 55,195, 94,183, 90,213,236,104, 45, -182,251, 25,233,117,236, 30,131, 69,192,246,221,138, 85,151,152,128,237,102,235,129, 39, 66,145,192,148, 39,242, 56,249, 14, 63, -207,238, 1,145,125,171,180,250,158, 98, 81,177, 27,159,189, 30,154, 69,154,159,209,179,211, 85,150,227,101,104,118,234,186,143, -197,153,245,103,130,225, 97,201,133, 24, 35, 83,113,248,132, 44, 26,171,118,116, 23,100,241,164, 51,243,255,139,119, 15, 66,252, -111,142,195,111,134,179, 1, 30,101,164, 15,240, 83, 29,252,233, 0, 95,221,161,223, 86,244, 91,130,188, 21,224, 97, 48, 95,213, -110,128,199,143, 97,251, 14,240, 38,232,159,193,240,251,144,191,106,136,215,112,213,199,243, 71, 70,230,178, 28,212,230, 82,140, -214,222,208, 65, 88, 67,186, 9,241, 99,150, 46,162,247,188, 91,191,238, 68,179, 39,246, 53, 66, 15,253,100, 56,207, 81,236,215, -224,221,122, 85, 20,111,176,253,248, 69, 54,145, 91,171,110, 81, 83, 33,207,127, 95, 22, 79,226,114,204, 95, 64, 47, 34,139, 90, - 81, 60,233,172,102, 68,143,234,150,178, 57, 43, 90,230, 7, 80,239, 77,101,181, 27, 77,186,255,160,129, 37, 47, 37,122,236,183, -238,199, 25,251,120,107,223, 99, 92, 85,179,171, 74,180,245,227,249, 43,215,224,250, 33, 4,141,132,163,206, 64, 65, 7, 29,241, -164, 67,174,174, 9, 47,175,144, 87, 10,242, 66, 65, 14,255, 14,132,255, 4,244,129, 59, 21,220, 8, 27,254, 2, 46,254, 55, 56, -253, 3,244,141,247,208,255,119, 64,191, 61,161,219, 1,213, 17,221, 12,240, 32, 83, 78, 71,235,144,130, 53,247,146,252,226,125, - 99, 68,191,185,177, 19,207,218, 77,189,131, 91, 9,119,197, 82,196,114, 65,222, 26,225,139, 23,240,141, 11, 31,189, 39,123, 65, -170,232, 27, 91,248, 96, 50, 17,221,177, 24, 69,237,194,131, 34, 38,103,199,111,178,135, 14,128,188,150,224,176, 80,238,140, 76, -217, 68,114,244,130,174,133, 45,194,249, 6,134,251,133,248,195,129, 48, 22,244,134, 50,124,127,228, 98, 43,156, 15,194,217, 96, - 35,217,209,207,123,113, 87,232,118,197, 39,253,138,236, 28, 69, 75, 70,194,185,217, 3,111, 69,120, 50, 33,239, 41,114,108,128, - 1,189,176,107, 74,147,204,133,122,238,126,178,146, 75, 99,113,172,100,169,250,176,208,165,208,104, 83, 97,100,217, 18,205,254, -235,160,203,206, 57,184, 66,123, 63, 36, 59, 92,138,157, 44,243,195,158,189,225,165,236, 35,221, 42,157,165,202,193, 43,189, 37, -120,209,206,193,199,159, 94,252, 43, 31,199,159,254, 86,116,170, 86, 95, 93,189,175, 51, 50,162,222,126, 85,252,151,231,235, 91, - 23, 97, 92,176, 2, 60,186,184, 42,121, 54,123, 5, 97, 69, 49, 58, 87,167, 74, 39, 54,177,218, 53, 1, 50,226, 4,187,106,160, - 48, 83,251,146, 89, 94,191, 79,174,187,211,246, 93,144,202, 37, 23,183,149,182,122,172, 74,212,140,144,186,166,251,109,193, 62, -254,249,248,222,164,130, 73, 44, 9, 44, 16,146,131, 78, 80, 68, 11, 82,178, 27,112,124, 34, 24, 2, 26,163,233, 32,136,116, 49, -178,238, 87, 72,119, 64, 73, 43, 52,246, 16, 19,154,146, 49, 27, 66,104,120,242, 50, 11,188,234, 20, 98,182,177, 53,107, 1,219, -126, 52,106, 8,109,136, 4,149, 25,224, 34,202, 89,225, 80, 89,233,158,192, 54,167,149, 53, 67,205,176,167, 95, 95,198, 5, 81, -246, 73,119, 34, 77,225, 19,220, 47,110, 86,203, 46, 38,194,170, 39, 79,217, 20,225, 90,109,114,186,168,251, 61,129,173,238,199, -231,217,137,234, 62,208,197,197,164, 49,134, 37,194,180,235, 32, 37, 46,118,131,129, 99,196,223,191,105,162, 76, 19,228,137,201, -241,221, 85,177,110,159,223, 66,107, 19, 49,207,122,168,246,180,104,197,180, 74,231,230,215, 55, 7,204,216,215,144, 69,193,176, -151, 74,183,136, 0,154, 57,134,184,200, 79,157,205, 65,205, 34,112, 85, 87, 89, 14, 16, 50,131,115, 76, 32, 87,180,204,147, 20, -179,147, 6,210, 91, 91,225,250,182,112, 24, 54, 28, 94, 7,249,202, 68,121, 99, 67, 25,242,172,166,208,187, 29,242,221, 21,225, -217,222,236, 95,231, 10, 55, 34,242,241, 12, 31,153,224,246, 6,174,255, 49, 92,251, 18, 28,220,132,245,207, 66,252,183,161,251, -121,235,188,195, 85, 87,204, 15, 86,172,227,179,160,143, 93,241,126, 0,241,208,126,143,158, 65,190, 11,242,216,118,154,161, 51, -100,108, 92,217,168, 62,222, 71, 14, 30,161, 7,152, 77,235, 84,108, 71,171, 1,210,100,133, 61,136,133,114, 20,167, 39,209,180, -219,173, 76,248, 67,148,155,243,190,188, 34, 44, 85,109, 60, 90,149,233, 85, 57,235, 99, 67,101,201,130,137,193, 58,143,202,193, -174,162,184,188, 23, 33,185, 88, 50, 82,180, 67,195, 84,149,200,205, 46,191,158,238,196, 9, 84,189, 71, 99, 38, 89,116, 99,207, -118,112, 99, 5, 65,140,223, 46, 87,122,194, 81, 71,184,218, 35, 47, 30,160, 47, 68,120,121, 68,110,158, 64,247, 43, 16,255,174, - 23,243, 17,244, 24,194, 35,224,159,161,239,126, 29,253,215, 59,202,151, 7,244,225,100,148,182, 94,209,164,200,155, 62,157,247, -145,163, 14,130,116,222,113,108, 20,185, 42,104,202,198,126,255,171,201, 34, 69,174,121,162,206, 21,187,195, 53, 66, 94, 43,225, - 72,225, 64,145, 7, 19,242,222,214, 44, 99, 69, 61,192,165,160,255,252, 9,122, 91,144,191,125,136, 60,159,140, 32,248,126,182, - 64,152, 39, 5,253,222,136,158,102, 88, 25,122, 55, 51,145, 58, 97,221, 57, 85, 13,211,222, 73, 48,248,223,233,160,232,166,208, -127,107,203,244, 53,229,113, 22,198, 32,108,179,178,205, 86, 16,214, 2,154,157,153,252, 56,115,172, 91,232, 32, 5, 69,206,122, -120,152,209, 23,129,103, 50,114,114, 0, 63,123, 21,121,172,164,215, 33, 92, 23,194,235,129,233,193,232, 34,115,157, 9,198,140, - 62, 2,109, 14,101,115,189, 13,127,141,255,231,178,222, 72,155,249,106,217, 79,161,122, 58, 50,186,217, 65, 95,234,227, 22,172, -171,236, 5,166,204,160,166,121,228, 26,125,199,237,249,215, 25,207,193,110,236, 89, 25, 31, 87,137,255,113,153,195, 52,108, 50, - 97,193, 24,153,154,208, 85,187,127,157,213,236,168, 46,123, 95,223,160, 85,139,210, 65,128,181,143,124, 75,195, 99,175,204,236, -196, 2, 27,116, 92,196, 28, 51,154,125,151,123,153,180,165,151,252,113,210, 68,158,202,165,128,149, 54,202,116,242,206, 71, 85, -200, 49, 89, 16,199, 52, 34, 20,231,122,123, 58,219, 28, 20, 99, 16,160, 34, 22, 50, 21,252,207,148, 26,252, 65,178, 81,175, 84, -170,155,139, 5,253,161,108,151,134, 15,204, 75, 54,239,123,140, 75,200,135, 24,226, 20, 53,118,134,150,105,254,115,165,105, 72, -234, 97, 35,184,117, 81,155,157,255,236,181,247, 17,246,158,189, 76, 47,137,216,170,186,124,182,249, 86,172,171,159, 1, 89, 94, -123, 45, 76, 79, 73,231,154,108,215,250,255,209,161, 97, 81,160,235,123, 63,252,149,167, 48,105,218,138, 69,133,253, 29,125, 83, -208,101, 94,142, 58, 10,214,177,173,125, 74,132,148,184,152, 38,242, 52, 16,130,101,219, 79,211, 72,241,253,121,174,205, 94,115, -144, 43,141, 27, 97,182,167,248, 61,180,231,138,151, 89,178,106,214,219,138,205,189,164,236, 88, 16,185, 6, 40,162, 10, 45,103, - 44,236,146, 42,103,209,200,230,206, 97,246,184,251, 10,182,177,140, 20,103,240,183,148,199,202,251,151, 24, 72,155, 16,136,209, -166,158,135,119,118,240,189, 13,131, 51, 31,147,192, 90, 11,235,221, 72,218,108, 41,119, 35,101, 99,167,154,116,144,224, 47,146, -137,117, 14, 34,114, 34,240,209, 2,159,126, 23,249,248,255, 13, 47,252, 30, 92, 63,134,245,199,160,251, 71,144,254,166, 97, 56, -195,145, 63,132,214,134,225, 84,247,155,151, 83,147,110,135,107,134,150, 45, 24,228,102,245, 14,108,191,103,243,238,248, 2,244, - 71,200,250,125, 56, 26,208,247,177,214,245,188, 24,217,194,125,172,236,196,200, 98, 23, 66, 41,226,207,171, 96,138,228,232, 99, - 74,105,118, 99,178, 8,142,196, 33,207,101,242,110,174,168, 71, 90,170,227, 29,217, 3,103, 38,207,140,209,232, 23, 77,222, 87, - 35,199, 70,221, 90,253,166, 53,167, 62,151, 75,138,120,239,196,170, 37, 67,188,107, 73, 98,138,233, 46, 40,135, 1, 14, 11, 60, -119, 69, 72, 71, 9, 89,119,132, 3, 67,249,198, 27,107,120,177,135,151, 34,225,118,129,147, 23, 32,253,187, 16, 63,235,140,243, - 96,254,244,248, 87,112,241, 63,163,223,249,128,242,123, 91,242, 55, 47,200,247,119, 22,125,218,155, 6, 82,122,177, 36, 57,127, -250,202, 42,216,123,124,205,212,235, 82, 10,186,197,186,249,152,209,247, 39,228, 98, 66, 62, 62, 33,107,167, 54, 93,241,207, 38, - 42,217, 74, 4, 92, 40,241,125,179,108, 49, 40,252,196, 33, 92, 13,232,170, 48,253,127, 27,248,242, 99,194,171, 29,225,167, 59, - 75, 69, 27, 60,151,253,182, 32, 69, 40,119, 70,202,189, 17,174, 65,217, 8,105,172,126,106,241,248, 96, 37, 37,235,192,183, 69, -121,112, 1,219, 81, 24,124, 92, 56,184, 75, 33,123, 51,158, 60, 2, 30, 32, 63,201, 92,121,115,107,209,171, 87, 11,114,154, 77, - 39, 48,246,232,173, 0, 55, 59,248,187,215,144, 17,194,131, 72,247,217, 14,185,179,101,122, 48,218, 65,103,212,121, 26,222, 42, - 98,247,206,150,165,217, 13,183, 81,151,141, 7,186,236,141,110,132,210,108,141,235, 42, 71, 84,246,145, 30, 66,227, 70,113,239, -251, 37,187,105, 21, 67,201,222, 30,186, 1, 93, 56, 32, 99,102,126,235,228,254,238, 64,167,197,114,196,235, 20, 41,152,162,189, - 0, 57,139,175, 26,172, 8,150, 25,177,202,220,209,236,145, 68,159, 82,123,195, 58, 64,103, 35, 40,138, 42, 67,118,191,185, 23, - 40,117,211, 77,251,222,168,238,167,151,213,226,158, 91,139, 92,245,221, 4, 8, 26, 22, 79,127,147, 10, 38, 31,162,109,194,187, -167, 73, 77, 12, 53, 54,121,221, 73, 76,105, 95, 37, 32,197, 31,190, 65,132, 18, 35, 18, 59, 99,136,171, 71, 57,251, 33,103,244, - 78, 81,220, 75, 95, 60,127, 92, 93, 87, 80,161,244,165, 2, 99,114,178,102,162,212,180, 46, 43,251, 29, 32, 18,153,130,123,188, -103,130,159,237,187,231,241, 56,151,140, 15,218,252,172,212,173,141,173, 15,164, 1, 96,181,160,206, 60, 43,172,151,104,213,125, - 91, 90, 43,144,171,144, 30,109,248, 48,178,160, 90, 29, 81, 43, 10,177, 75, 72,234,200,211,248,148, 35,142,189, 78,223, 39, 6, - 65,230,216, 96,217, 27,100,215, 57, 85,245,142,139,229,152,119, 29,131, 22,198,237,214,176,190, 18,200,101, 32, 79, 19,154, 39, -255, 90,101,175, 99,174,133,214,137, 77,243, 72,190,226, 99, 5, 63,216,214, 48,156,217,211,175,174,196,119,182,124, 21,205,169, - 77,166,171,160,148,102,205,146,203,178, 72, 81,215, 8,132,228,236,120, 64,250,142, 60,142, 38,164, 21, 3,109,233,222, 33,129, - 61,176,141, 89, 15, 45,174, 54,254,147,231, 15,127,179,115,201,237, 16,132,243, 24, 56,147,192,185, 8,103, 8,231, 42,148, 96, - 23,213,249,144, 57, 45,133, 33, 22,138, 20,134, 97, 96, 60, 31,152, 30,111, 41, 31,236,208, 59, 35,124, 5,248, 82, 68,255, 84, -224,173, 1, 57,127, 7,228,139, 32,191, 11,250,117, 43,230,114,203,189,239,189, 23,154,232,197,254, 25,235,236,229, 69, 43,224, -225, 58,196,231,160,123,198,232,118,156, 58,147,251, 10, 28,128,156,236, 96, 93, 22,190,106, 87, 79, 56, 97, 70,248,121, 12,149, - 91,115,150, 43, 81, 90, 26, 66,176, 44,240,250,123,203,180, 48,181, 43,163,125,102, 16,248,205, 16, 5, 82, 20, 58,119,234,229, - 73,103, 82, 86,185,116,209,215, 67,111,244, 8,240,206,215, 33,227,162,105,154,213,173,193, 85,190,177, 89, 61, 31,116,194,202, -199,238,215, 50, 60,251, 92,164,127,110, 69, 56,233, 9, 39, 43,226,173, 53,225,246, 1,124,180,135,143, 9,242, 66, 15,135, 31, - 55,184, 15, 47,219, 45, 47,226,170,174,127,138,190,247,127,192, 31, 63, 36,255,175, 23, 76, 95,127,204,227,237,192,233, 90,121, -146, 96, 80, 37, 4, 11,111, 56,223, 40, 59,207,139,150, 11, 53, 61,198,181, 68,184,209, 67,143,165,181,157, 78,232,131,209,176, -173, 23,217,146,225,178,218, 52,229, 8, 75,169,187,155, 41, 63, 28,209, 15, 50,122,191, 32, 71, 1,249, 72,132, 51, 69,142,109, - 26,160,113,162, 92, 12,236, 94,223,112,246,198,142,139,191,216, 81,222,218, 33, 79, 38,228,186, 16,126, 97,141,124,126, 77,120, -181, 39,124,106, 69,120,177, 51,209, 75, 54,122,220,202,109,248,235, 35, 97,213, 43,195, 4,167, 91, 97, 82, 97,235,197, 96, 48, - 83, 4,131, 86, 2,155, 80,130, 44, 78,135, 8, 97, 80,210, 46, 47,214,133,173,189,118, 75, 35, 1, 78,122,120,121,133,188, 63, - 64, 17,226,115, 29,193,151,160, 53,221,172, 6,243, 8,210, 6, 40, 45, 69,254, 82,138,149, 94,162,115, 20,246,187,241,189,223, -223,196, 35, 7,167,183,153,114, 59, 46,192, 87,185,100, 60,158, 83,187,100,190,208,164,249, 1,130,167,101, 77,197, 56, 19,234, -243,253, 18,116,246, 52,151,185,251,150, 89,147, 82,153,236,197,185,237,243,175, 6,129,106,126,110,153,247,193,210,116,109,201, - 15,197,125,130, 85, 12, 36, 49,215,192,144, 97, 82,221,167, 46, 58,133,113,200, 31,190,210, 74, 1, 58, 31,163,103, 17,247,198, -203, 98, 41,144,250, 90,131,143, 59, 3, 53,149, 57, 86, 8,141,180,130,172,101,149, 48,185, 37,111,116,212,108, 85, 94, 71, 87, - 61,219,180,219, 16,164, 65,162,107,106,220, 83, 92, 20, 77,201, 15, 58,117,159, 95,156, 74,233, 3, 19, 17,186, 40,164, 32, 75, - 4,172,199,228, 22,138, 13,199,213,156, 8,234,175, 33, 5, 33,164,206,198,210,212,247, 95,103,172,108, 16, 89,160, 53,254,179, -170,200,211,158,242,102, 20, 95,199,136,245,181,137, 29,227,150,126, 94, 91,234,159,238, 7,139,104,227,125,170, 30,106, 93, 4, - 73, 22,181,107,201,104, 81, 32,174, 14,252, 64, 56,205,187,116,109, 2, 77,236, 32, 22,136, 30, 1,171, 85, 32,217,220, 52,218, - 72,239,140,235, 30,232, 82,207,122,213, 83, 98, 98,179,221, 32, 37, 67,180, 41,137,141,221, 7, 11,128,210,203,200, 28,153,223, -131,138,221, 53,247, 66,216,211, 47,204, 83, 3,145,189,110,219,244, 6,121,185,113,253,123,180,160,229,197, 37, 33,203,184,195, - 79,216, 85, 64, 87,170, 69, 83,156,248, 55,141, 14,227,105,217,184,230, 93, 15, 18, 45,152, 70, 76, 20, 40, 41,154,219,226,191, -124,246,240, 55,147, 27, 53, 11,194, 64, 96, 7, 70,179,242, 4, 31,137, 48,168, 24, 88, 76,132,173, 8,155,108,182,240,199, 17, -206,162,112, 30,149, 49, 20,114,158, 40,155, 1,121, 48,193,157,130,126,165, 67,190,209,193,102, 68,210, 29, 83, 87,151, 63,176, - 81,187,220,246, 29,188, 35, 95,101,106,150, 93, 14,169, 9,215, 76,148,151,110, 67,255, 12,132, 11,131,105,107,130,238, 0, 57, - 84,228,218, 0, 87, 11, 28, 57,219,187,143,150,246,229,209,122, 18,237, 36, 99,170,156,138, 76,117,193, 69,146, 69,125, 61,184, - 98,183,217,197,213,247, 63,213,164, 40, 23,107, 71, 49, 21,122,113,210, 85,181,140,176,247, 16, 95, 38, 80, 33,154,170,182, 51, - 81,186,237, 17,235,206,181,209,102,204,130,112, 63,163, 28, 4,179,172, 29, 71, 56,217, 40,215,111,116,244, 31, 63, 32,244, 43, -226,141, 3,194,237,181,101,215,127, 60, 32,175, 4,228,218,179,176,250, 60,196,159, 55, 42,160, 76,222,230, 60,130,241,127, 65, -223,254, 38,124,185,144,255,112,195,238,205, 51,238,167,204,253,149,112,166,182,107, 62,203,246, 64, 60,219, 9,143,118,194,102, -244,144,176, 2, 93, 22,194,245,104, 35,118, 1,253, 96,162,220, 29,152, 30, 78, 51, 46, 32,111, 50,242, 36, 19,206,213,114,228, -223,203,148,187, 19,250,129, 89, 15,195,115, 9,249, 72, 71,120,161,179,234,250,110,134,105,160,188,189, 65, 31, 14,156,159, 21, -222,139,118,173,157,110,149,241, 97, 38,252,104, 36,190, 51, 18,158,137,200,107, 7,200,203,107,228,246,138,248, 82, 32,220,140, -196, 40,164, 67,232,110, 5,226,181,128,158, 41,167, 79,224, 34,135,121,165, 49, 78,230,126,156,178,237, 24, 83,172, 39,106,153, -187,178,236,159,163,168, 18, 55,254, 48,149,154, 75, 84,233, 97, 10,215,123,120,190, 71,238, 26, 66, 82,158, 75,200,198,191, 81, -242,192,135,184, 60,232, 68,247,211,169,246,241,150, 11, 35, 91, 26,161, 84,227,128,219, 91,197, 5, 22,123, 86,106,246,241, 33, -232,158,233, 68,218,125,186,196,249,139,213, 68,171,217,102,227, 86,174,162,178, 32,152,235,175, 36,243, 20,161, 52, 83, 37,196, - 19,187,128, 66, 88,246,231,218, 60,238,157,119, 94, 2,205,247,182, 78, 38,122, 88, 75, 77, 74, 78,224,185,240,202, 38, 11,219, - 22,246, 82, 41,113, 52,224,193,150,218, 86,197,167,158,174,140,109, 63, 24,170,149,203,119,229,177, 41,216,234, 93,117,240, 2, - 22,188, 16, 90,199, 83,215, 95, 58, 11,217,212,225, 31, 90,242,114,152,168,138,230, 70,164, 92, 21,202, 82,227, 58,125,250,161, - 49,153,142,160,100,119,228,152, 45,169, 52,184,240,250,115, 76,237, 7, 30, 22, 37,248,172, 76,247, 3, 9, 41,206,251,233, 16, - 59,223,175,218, 26,160,175,190,123,177,178,220,137,165,159,153, 37,177,204,182, 50,221,187,246,164, 25,149,219,243, 81, 69,246, -124,225,101,239,242,213,189,195,128, 60,125, 78,152,133,101,181,232, 74,140, 4,132,212,245,214,165,231,105, 57,232,180,250, 38, -239, 66,103, 94,187,132, 69, 8, 22,132,167, 96,180, 62,114, 79,201, 52, 9,113,213,179, 25, 71,166,221,206, 72,131, 37, 51,229, -201,196,210,165, 44,163,107,221, 79, 61,146, 86,101, 31,130,255,114, 17,170,255, 60, 93, 76,116, 93, 79,136,209, 14, 89, 94,128, -149, 96,160,167,185,235,215,217,103, 95, 49,183,165, 2,206, 40,174, 43, 89,126,158,146,173,139,148,102,255,102,105,123,186,103, - 69,173, 48,160,224,201,112, 82,181, 6, 62, 33, 10, 18,136,255,228,249,227,223, 76,110, 13,153,138,237, 27,183,165, 42, 69,157, -103, 21, 2, 59, 21,206,179, 48, 98,234,234, 18,133, 93, 17,182, 69,217,169, 37,144, 93,136,176, 11,194, 38, 9, 83, 80,162,102, -194, 52, 89,123,116, 39,194, 55, 58,120, 91,225,226, 62,116, 95, 70,226, 23,172,157,139,175,120, 1, 58, 48,196, 23,161,153, 1, -137,137,232,194, 53,203,173,238, 94,128,238, 42,244,147, 37,141,165,222,232, 99,199,130, 92,203,200,245, 1,174,103, 56,193,212, -213,201,192, 6,210,133,229,131, 74, 11,171, 82,130,123, 33, 39,245,128, 23,165,234, 66,234,141,218,121, 49, 78,209,111,190,232, - 65, 15,197, 44, 73,237,184, 61,200, 37,212,165, 44,112,139,152,236,225, 49,233, 62, 37, 74,196, 58,254,228,162,245,181,135,158, - 29, 39, 51, 35, 28, 5, 88, 35, 28, 61,211,179,250,236, 49,225,228,144,240,194, 10,121,173,135, 79, 4,120, 45, 34, 55,175,195, -193,103,172,152,199,143, 2,174, 99,144, 96,106,247,233,183,209, 7,119,225, 59,145,252,197, 51,118,175,159,242, 65, 46,124,224, - 7,180, 41, 91,214,205,206,245,104,231,158, 6, 42,193, 58,136,149,194,250, 40, 18, 95, 94, 17,110,116,246, 30,110, 76, 64,183, -221, 42,143, 51,108, 85,216,170,112, 49,193,230, 65, 97,120, 47, 19,207,149,120, 40,200,237,100,221,245, 47, 31, 32,183, 18,250, -142, 41,158,202,247,183,148,247, 7,166, 63,185, 96,251,112,226,145,103,166, 76,110,118,216, 69,216, 78, 74,185, 59, 18,191,186, - 69,238, 77,179, 93,144, 46, 34,193,198,251, 37, 23,244, 73,161, 60, 42,236, 46,148,179, 81,216,101,153, 95,211, 99,255,107,138, - 86,208,131, 68,255,188,150, 66, 23,196,172,100, 89,108,142,155, 54,101,230,105,115, 86,144, 51, 69, 14,253, 3,189,209,195,205, - 4, 63,154,144,117, 64,142, 2,250, 32,155,171, 33, 25, 54, 54,164,104,145,198,200, 94,199,189,116,244,117,124,185, 60,164, 90, - 77,198,194, 16, 95, 58,220, 24, 27,206,251,188,107, 92,148,187,114, 57,193, 41,132, 26,206,108,191, 55, 93,154,161,138, 93,195, -243,232, 81, 91,162,152,236, 9, 56, 39, 87,186,151, 25,194, 18,108, 53, 85,154,189,174,119,219,203,136, 93, 23, 37, 59,150, 85, -208, 71,235,112,131,207,115,173, 11,134, 11, 21, 70, 31,249,106, 67,155, 75,254,217,132, 70, 16,215, 24, 2,230,131, 77,242,221, -124,141,118,152, 27,116,135,208,172,130,160,151, 86, 14,117,102, 17,252,160, 31, 28, 98, 83,154,221, 63, 78, 81,107,243,205,235, -103, 90, 90, 15,121, 51,117,169,185,221, 26, 92,217,172,217, 4,103,170, 51,102, 87, 47, 77, 27,180, 10,179,106,161,245,221,115, -253,123,149,128,132, 72,137,201,139,126,130,212,161,211, 96, 62,237, 70,253, 62,239,164,133,134,199,111,141,197,222,126,189,249, - 61, 75, 38,183,189, 31, 42, 97,111,135,141, 11, 61,151,117,146, 46, 63,248,229,162,126,185,171, 76, 70,145, 76, 18, 72,171,181, -173,110,178,189, 11,165,148, 61,155, 66,181,172,133,154,128,134,161, 88, 45, 0, 70, 46,145, 76,237,189, 78, 49,178,234, 87,172, - 86, 43,134,162,236,182,155,217, 89,148,167,201,173,205,121,129, 70,181,247, 73,179,187,183, 2,153, 22,145, 99,213, 63, 4,119, - 21,185,242, 93,221, 26, 87,113,177, 18,189, 1,110, 24, 1,141,126,112,161, 9,126,152,164,203,237, 11,179,170, 61,134,246, 6, - 95,152, 38, 78,178, 11,226, 93,121, 12,132, 24,188, 67, 79,243,247, 73,193, 97, 7, 8,236,138,199,130,170,123, 17, 85, 40,158, -220, 54,170, 48, 86, 11,150, 58, 71, 58, 70,198,146, 9,110,247,144, 82,216,169, 18, 35,108, 5,182,162, 28, 78,153, 62,103,186, -243, 29,221,251,145,240,122, 79,248,227,158,240,249, 53,250, 31,223, 67, 62,241,223,193,201,111, 67,255,239, 67,250,101, 27,205, -203,161, 21,114,137,205,192, 78, 32, 30, 89, 97, 15, 47,195,234,151, 12, 85,171, 27,243,181,231, 7, 6,180, 25,127,132,108,238, -194,246, 33,156,239,208,135, 1,222, 11,112, 47, 34,167, 9,121,164, 48,140,200,110,162,236, 2, 58,100, 66, 54,180,168,246,138, -140, 98,224,137,156, 73,106, 83, 10, 89, 7, 27,207, 79,214,201,215,241,162, 20,217, 75,196,154,109, 12,141, 66, 84,154, 28,104, - 84,108, 55,231,191,127,229,250,164,212, 80,244, 87,106, 39,109, 27,183, 7,226,145, 16, 83, 71, 56,234,136,159, 61, 68,174,247, - 22,247,249,140, 88, 86,250,209, 53,136, 47, 65,120,205, 98, 68, 37,154,131, 64, 31,185,100,127, 7,211, 23,209, 39,239,194,247, - 2,229, 95, 63,102,124,253, 9,247, 39,248, 64, 2,231,147,204, 86,161,177,250,168, 39,251,153, 87,126,245, 69, 85, 86, 2,225, - 70, 34,220,234, 9,199,201,146,235,130, 61,233, 71,204,230, 55, 84,125, 73,177, 7,228,245, 91,166,115, 8, 31,237, 8,159, 62, - 48,128,119, 14,232,159,109,209, 15,132,248, 55,122,228, 35, 9,125, 50, 50,141,133,109,191,116,211, 67, 94,114, 93,114, 7,186, - 10,148, 60,113,237,171,103,116, 15, 39,226, 11, 61,178,142,148,123, 19,211,219, 3,211,253,129, 39, 99, 97, 27, 33,135, 96, 63, - 79,134,179,193,214,250,227, 84,117, 47,118, 83,104,130, 62,218, 40,112,187,181,113,123,116,111,233, 78,224,113, 50,146,223,241, -253,137,245,227, 76, 60,152,208, 65, 73,189, 89,160,136, 1,158, 59,128,191, 1,124,245, 2,185, 46,196,155,153,252,227,193,140, - 31,149,233, 62,170, 45,238, 55,153, 32,197,212,250, 90,133,152,142,106, 45, 11,251,189, 37, 60,148,176,175,237, 20,177,183, 80, - 23, 25,200,242,192,111, 81,150, 94,237,212,219,254,121, 72, 16,170, 4, 95,125,255, 44, 85,227,118, 89, 81, 54, 63,108, 66,168, - 63, 87,125,192, 4, 38,191,186,117,198,182, 26,247,191,140,101,166,178, 73, 85,189,207,216, 83,211, 88, 7,159,134, 20,241,174, - 84, 27,229,186,238,143,122,235,215,233, 92,155, 66, 83,208,105,242, 92,234,136, 92,138,199, 28, 8,172, 28,224, 82, 71,245, 49, - 88, 81, 47,126, 24,183,189,166, 54,244,252,133,254, 84, 59,251,209,127,134,224,239, 67,104,172,167,200, 94, 56,157, 77, 4, 2, - 77,167,102, 74,108,153, 70,235,192, 42,221, 46, 5,239,218, 23,171, 88,104, 68, 97,170, 75,135, 44,168,237,239, 3,236, 84,102, -174,123, 8,201, 4,120, 10,196, 14,101,103, 36, 52,255,190, 83, 61,172,168,204, 92,179, 73, 13,101, 28,129,222,223,155,249,240, -243, 33, 12,208,162,151,131, 67,234,103,210,232, 54, 46,195, 81,218,110,215,167, 96,162,190, 6, 21, 33,170,210,245, 43, 8, 17, -245,104, 85, 81,221, 79,117,243,247, 68, 90, 7,130,182,234,144,197,119, 87, 61,229, 97, 46,234, 61, 37, 4,134,205,150, 80, 89, -238,117, 26, 48, 90, 28, 80,144,200, 42, 5, 52,216,103,150, 27, 52,171, 93,226,145,152, 18, 93,215,205,240,155,226,160,163,162, - 22, 82,148, 27, 75,164,173, 21,146,173, 60, 82, 90,186,110,221,223,251,235, 37,191,253,190, 32,209, 68, 86,245,112, 95, 17,225, -162, 32, 41,218,100,106,154,252,144,211, 30, 34,236,160, 17,194, 2, 26, 50, 7, 73,144,121, 31, 51, 2,147,216, 15, 61,185,106, -117, 66,216,249, 15, 49,250,155,222,213, 27,215,119, 73, 18, 29,171, 88,160, 99, 66,180, 48, 40,236,180,112,234, 76,145, 21,112, -156, 39, 14,207, 38,186, 39, 23,164, 63,236,145, 63,235, 9,175,101,228,231,190, 14, 31,251, 6,242, 98,128,171, 7, 22,125,217, -157,216,158, 61,173, 65, 78, 32,253, 12,164,159,131,240,138,237,218,229, 25, 22,163, 76,163, 52, 42,231,214,153, 14,223,132,205, - 23,144,231,190, 7, 47, 61,130, 39, 91,244,161,192,155, 17,222, 78,132,123, 29, 34, 35,154, 50,165,207,115, 50,155,157,170, 27, -245, 71, 7,244, 1, 29, 45,130, 53,228,209,139,185, 86,247, 12,157,143,210,170, 69,106,142, 81,172, 55,108,116, 17,203, 76,176, -242, 29,125,180,140,231,228,251,246, 20,133, 24, 3, 97,109,145,161,225, 56, 17,174,116,200, 65, 66, 62,217,195, 11, 17,174,129, - 92, 89,195,250,186, 79, 56, 94,114,113,161,130,108,236,223,229, 55,161, 60,182,201, 71,249, 62,236,222,128,215, 3,229, 79,207, -152,190,245,152,199, 67,230, 65, 20,158, 56, 13,175,158,188, 39,167,140,197,149,189,236,226,163,200, 94,160,235, 3,225,102,103, -163,247, 20,188,245, 85,202,206, 10,250,136, 21, 78,124,191,121,120, 37,178, 62, 14,132, 11, 67,193,234,195, 9,221,128,126,175, - 32, 93, 36,254,108,135,220,240,216,200, 81,225, 43, 66,159,148,131, 4,103, 59, 22,102,183, 26,129,237, 2, 40,209, 72, 46,215, -222,219,161, 39, 66, 58, 84, 3,226, 93, 4, 56,181,135,245,105, 14, 84,237, 77,241, 88,207,106,149,138, 53, 6, 52, 66,223, 5, - 62,254,249, 67,158,220, 31,249,209, 95,110, 76, 97, 30,173,238,141, 46,234, 26,197, 14, 25, 7,131,114,117, 26,231, 27, 48,173, -163,217, 63, 99,132,151, 14,108,180,240,253, 45,225,213, 53,114, 14,122, 62, 17, 79,108,119,146,207, 38,244,116, 48,225, 97, 49, -152, 75, 81,157, 33, 70,165,232, 2, 86,201,203,228,187, 92, 66, 94, 87, 81,230, 44,116,247,247,134,230,159,159,222, 18,178,191, -255,204,151,214, 0, 82,139,188, 49, 85,181,185,157,172,234,235, 66,156,115,229,242,232,226,174, 50,103,144, 7, 51,138, 85,161, -206, 12, 60,241, 0, 16,196,174,117,223,101,217,110,190,236,231,151, 87,250,153,180, 80,168, 37,200,101, 22,153, 46,176,233, 5, -222,211, 12, 30, 70, 42, 93,216,246,199,187,106, 19, 84, 37,168,204,247,229,194, 90,175, 83,135,101, 4, 92,194,114, 88,216, 91, -159,205,135,243,101, 87, 93,119,217, 58, 79,124,100, 22, 10,106, 76,150, 12, 87, 44, 61,174,166,122,197,152,172, 56,228,130, 78, - 19, 57, 27, 85, 45, 72,211, 61, 42,179, 66, 94, 27,229,191,109,127, 50, 90, 70, 8,201,222,247,225,194, 24, 26,213, 49, 80, 61, -220,190,225,174,247, 80, 13,242, 25,253, 32, 21,155,149, 68,110,196,126,168,208, 14,230,231,228, 57,173,154, 3,105, 20,219, 50, -179, 22,120,170,104,201,156, 82,134,239,253, 87,171, 21,221,106,205,118,156, 90,103,221,194, 96,111, 38, 47,115, 44,235,158, 52, - 68,246,200,199, 53,208, 36, 5, 43,232,146, 18,227, 52, 89, 80,139, 59, 15,114,182,168, 83, 45, 21,237, 92,220, 30,231,137,109, - 68, 7,208,100, 23, 38, 71,250,149, 29, 60, 74,158,252,221, 95,246,230,168, 54,215,110,153, 25,250, 22, 24, 19,144,148,128,201, -244, 13, 69,247,209, 59,210,236,211,139,101, 0, 84,237, 87,169, 86,194,246,186, 11,158, 84,217, 89,250, 32,174, 51, 8, 33, 44, - 59,127,191,182,202,124, 24, 86, 82, 41,206,124, 22,179,162, 84,207,232, 6,191, 17,138, 25,226, 17,153,173, 67, 89,101, 30, 31, - 34,193, 34, 6, 93,241, 90,196,198, 78, 5,227,227,166, 98, 93,255,128,146,131, 48,117, 74, 15, 28,234, 72, 58, 29, 9, 95,139, -200,215,163,239,188, 3,114,248, 24,185,254, 24,110, 1, 30, 28,199, 21,133, 27,191,135,188, 18,224,197, 99,184,246, 73, 56,252, - 47,160,251, 5, 8, 55, 61, 74,212, 91,159,152,140,122,215,189, 6,135,255,158,117,241,227, 29,216,253, 57,178,251, 50,188,250, - 6,122,111, 11,175, 71,228,135, 9,121,208, 17,114,221,215,248,227, 47,251, 77, 85,178, 49,201,139,129,110, 74,202,104, 74,168, -102, 98, 81,210,228, 98,136,201,118,105,165,152, 98,188,120,236, 34,201,131, 56, 74,158,115,168,235,222, 60, 6,155, 14,196, 40, -150,240,117, 20, 9,171,100, 83,129,227,132, 92,239,144, 43,201,222,135,219,192, 51, 43,164, 63, 49, 93,129,124,196,243,207, 87, -214,163,148,187,192, 99,136,159, 48,178,223,244, 61, 43,246,211,219,160,223, 69,223, 41,232,183,183, 76,223, 57,229,236,108,228, - 81, 18,182, 59,131,132,100,160, 83, 27,135, 74,103,157, 75,242, 61,126,240,189,126, 63, 9,241, 70, 34,220, 92, 33,199,209, 42, -227, 35, 12,135, 90, 44, 59, 62,142, 16,163, 5,118,172, 18,200, 88, 56,255,192,104,190,221,157,204,234, 71,153,120, 18,137,215, - 58,226,231,123, 68, 35, 92, 24, 30, 75, 78, 18,161,143,232, 38,179, 58, 22, 11,133,217,249, 65,210,249, 0,243, 3, 47, 26,110, -246,218,155, 59,228, 68,136, 47,117,164, 85,135,110, 38,142,222, 29,216, 1, 15,139, 5,234,132, 58, 13, 9,206,206,247, 14, 34, -250, 40,229,237, 31,108, 57, 63,205, 11,145,214, 7,159,163,175,206,147, 56,172, 16,115, 31, 92, 57,157, 64, 46,144,215,133,212, -249,174,164, 83,248,216,177, 9,234,238,239,144, 79, 31,192,191,184,128,151,123,248,123,107,194,151,158,160,239, 41,218,179, 71, -242, 82,109,243,178, 23, 52,106,171,232,110,133,150,179,142,206, 71,247, 84, 45, 6,218,128,167,116,217,151,151,253,209, 40, 13, -103, 93,171,184,206,164,213,196,138, 37, 45, 77, 50,161, 87,181,146,173,123, 33, 66, 16,207,146,207,130,134,122,221,123,239, 60, - 93, 66, 87, 6, 33, 21,153, 83,199, 74,168, 28,124,157, 11, 73,165,112,133, 69, 85,199, 20,162, 63, 0, 77,249, 94,167, 10,179, -189,190,138,192,252, 1, 22,154,201,151,248, 78,186, 23,232,171, 71,155, 5, 30, 80,234,193,192,109, 65,193, 5,114,185,161,174, - 40,206,178,154,173,136, 50, 91, 75,235, 62,179, 30, 90,234, 55,158,115,189,213,173,174, 33,154,255, 60,103, 74,140, 51,105,178, - 79,137, 28, 34, 69, 18, 49, 41, 41,140, 72,182,144, 42,113,127,118, 3,255,195, 66,167,131,231,183, 23, 71,235, 66, 41, 22, 70, - 82, 98, 50,124, 51,173, 51,103,102,141,241, 52,138, 67,246,121, 94, 77, 54,124, 17, 59,130, 21, 95, 7,137, 86,246,187,204, 57, -242,251, 35,118,153, 35, 94,165,237,166,165, 25, 29, 35,115,146, 89, 23, 18,221,234,208,237,142, 77,158,176, 54, 0, 46,183, 84, - 46, 98, 60,217,203,173,159,109,201,243,244,199, 33, 51,169, 35,246, 61,147, 42,227, 48, 56, 62, 87,152, 38, 11,135,209,113,156, - 89,219,138,185,148,132, 60, 35,137,139,179,236, 83,234,232,250,149,105, 40,114,158, 39,214,185,174, 7,244, 50,202,169,174,230, - 29, 78, 36,246, 44, 15, 49, 94, 10,121,113, 28,114,104,167, 30,101,241,181,187, 38,160,136,160,121,108, 88,238,246,223, 82, 12, -224, 40,221, 86,115, 80,149,157,170, 75, 6, 0, 64,146,104, 29,206,232,136,193,209, 97,109,163, 95, 0, 81, 5, 25, 50, 18, 35, -147, 8,145,192, 40,236,219, 10, 84,232, 66, 32,198, 64, 25, 97,146,108, 54,175, 92,201,105, 54,194,202, 82, 49,167, 86,228, 87, - 65, 89,147, 9,100,207, 76,142,200, 20,145, 15, 4,238, 86,207,133,239,192, 83, 32, 28, 7,228,246, 22,126,241, 43,200,231,190, - 14,207,223,132,107,159,129,245,175, 88,190,123,188, 5,242,156,121,223,137, 6,192, 73,135,144, 94,130,131,191, 13,229, 55,224, -234, 29,228,198,111,193,179,127,130,126,236, 49,188, 5,220, 79, 48, 90, 91, 32, 71,190,199, 28, 50,108,221, 86,245, 16,232, 51, - 97,116, 10, 29,101,137, 79, 84, 39, 61,121, 48, 12, 59, 79,130,171,109,161, 47, 35,235, 72, 91, 86,130,116, 98,160,152,181, 64, - 31,145, 99,219,201,154, 95, 45, 26,227,252, 42,214,149, 31,175,224,224,182,197,213,202,243, 70,128, 67,141, 8,151,239, 25,176, - 71, 51,164, 23, 32,188, 4,195, 31, 66,233,205, 22,168,223, 67, 31, 94,192,119, 38,242, 55,207, 24, 78,119, 60, 10,194,227,209, -120,221,197, 39,178, 93,178, 61, 62,190,239, 79, 1,214,201, 16,180, 43,224, 64,132,120,163, 39, 92, 79, 8,209, 0, 63, 15, 21, -206,204,207, 28, 4, 86,201,234, 91,181,118, 14, 19, 60, 25,237,198, 93, 71,229,170, 22,142, 21,226,173, 14,185,217, 35,215, 87, -240,126, 49, 10,224,113, 38, 30, 7,219, 24,172, 23, 1, 98,110,146,188,166, 98, 41,108,165,152, 31,189,127,152, 57,121,125, 68, -186, 64,120,161,163,123,237, 0, 57, 83,202,163, 76,174,215,244,100, 7,168,164, 21,175, 45, 51,212, 37, 79,133,247,223,207,172, - 68,109, 44,234,237, 88,197,243, 22,199,163, 86, 21,214,217, 36, 4, 81,174,156, 22,132, 45,225, 71,102, 65, 33, 4,248,104, 66, - 62,125, 8, 95, 43,112, 18,225, 51, 5,190,191, 67,255, 56, 51,125,111,135, 70,157,103,157,243, 16, 72,246,163,122,171, 2, 61, -243, 52,144,104, 22,212,150, 57,102,126,121, 92, 4,246, 58, 2,109,177, 96,123,187, 60,239, 40,213, 24,241,245,125,144,182,147, - 47,251,129, 40,245,235,148,217, 43,223, 88,211,138,223,224,186, 48,142, 23,113, 94, 65,220,148,162, 46,246,145, 58,234,246,231, -114,186, 52, 69,168, 73,107, 50, 22, 52, 6, 98, 74,243, 8,201, 24, 13, 54, 73,180, 28,246, 68,233, 35,162,153, 48, 88,216, 83, -156, 11,251, 82, 24,163, 79, 91,234,208, 88,125, 95, 30,103,135, 65,217,243, 93, 47,226, 68,239, 86,181,217,183, 59,217,177,168, - 65,133,148, 50, 43,215, 43, 60, 68, 53, 83, 52, 52,194,155,138,180, 30, 17, 85, 70,205,140, 26, 40,253,218,154,131, 90, 44, 66, - 50,142, 61, 54,202, 13,165, 64,153,102,120,149,250, 78,151, 82, 76, 92,133,144,243, 56,115,171,107, 49, 85, 45,179,112,109,137, -240,253, 16,112,183,180, 81, 91,203,161, 37,212,174,189,233,152,107,120,141, 92, 78, 93,155,197,143,186, 76, 44,184,188,159,183, -247, 34,137,176, 90,175, 33, 36,166,113,240, 34, 84,201,119, 31, 22, 21,199,156, 64, 86,156,146,182,183,175,175,163,119,137, 6, -154, 89,245, 72,136, 76,195,206, 56,234, 33,144,199,113,206, 46,159,111,234,122, 76,168, 7,179,146,253, 62, 40, 86,208, 87, 43, - 99,221,187,221,176,134,203, 80,218, 57,216,211, 60,118,117, 37,105,113,230,124, 8, 1,141,117, 54,226,138,247, 57, 1,168,198, - 77,215,207,201,225, 82, 98,235, 86,149,110, 78, 13, 69,148, 24, 3, 49,245, 75,178, 91,158,236,240,221,120,247,139,195,105,172, - 55,205,164, 18, 3, 90, 44,127,184, 4,231, 66,123,199, 30, 84,152,234, 3,207,223,172, 89,150, 95,253,142,193,253,195,106,230, -123,213, 72,206, 16,181, 48,170,141,221,234,232, 33, 20,171,145,235, 40, 28,196,192, 65, 40, 28, 38,165, 67, 89,171,113,169,196, -247, 32, 98, 71, 63, 0, 0, 32, 0, 73, 68, 65, 84, 17,117,175, 20, 74, 33,102,135, 55,156, 9,225, 78, 71,248, 97,135,252,239, - 32,215,238,193, 39,255, 8,174,255, 17, 92, 87,228,165, 14, 94,125, 14,110,190, 12,135,191,102, 60,249,240,188, 39,203, 37, 43, -250,235, 27,208,127, 10, 14,223, 66,174,253,115,184,253, 39, 70,199, 27,183,118,165,118, 9,210,202,115, 84,207,208,211, 45,188, -157,225,110, 68, 30,138,241,206,119,178,204,115,235,174,114,106, 18, 89,166,198,198, 80, 47,254,149, 35, 82, 87,174,204, 63, 12, -232,145,121,252,103,100,234,177,255,245,176, 67,250,171,166, 43, 72, 31,177, 86,189,170,166,202,133,237,203,203,153,179,246, 11, -132, 91,144, 62, 7,195,159, 65,126, 8,225, 19,160,175, 27, 55,255,174, 82,190,127,206,244,254, 5,103, 5, 78, 85,216, 78, 14, -228,243, 44,156, 50, 25,181,183,143,152,142, 96,182,111, 20,214, 2,171,103, 18,225, 51,107,228,181, 53, 28,116,200,189,193,230, -162, 43, 8,189,176,246,177,237,144,173,144,154, 37, 9,114, 46,230, 86, 84,216, 37, 56,212, 98, 63,242, 22, 19,153, 29,216, 75, -144,126, 36,220,236,137, 63,222, 65,150,217,164, 48,168,165,104,209, 32, 74, 69,160, 36,216, 5, 88,223,155,144,195, 68,124,182, - 71, 62,218,145, 56,224,248,219, 27,244,126, 38, 39, 99, 19, 73,150,153,165, 31,171, 23, 56, 7, 36, 40,125, 92,198,170, 18, 27, - 78,193,222, 67, 38, 88,142,119,130,243,108,239,205,201,249,132,156, 14,116,119,109, 77,194, 42,193, 43, 7,240,147, 71,240, 87, - 23,240,153, 3,244,206,192,248,229,115,244, 89, 95, 10, 95, 84, 28,234, 50, 95,107,159,105,161, 17, 90,181,236, 2,105,188,192, - 21, 0, 39,205,181,101,197,210,193, 7,109,182,118, 19,108,210,166, 98,105, 51, 10,176,125,161,167,105, 53, 86,162, 82,187,214, -218,217, 21, 32, 22,202,232,232,229,169, 32,197, 12,239,218, 20,115,145,253, 20,183, 42, 37, 11,165, 85, 52,219,142, 56, 54,114, -106,117,133,251,232,130,184,145, 70, 37, 23, 18,218,217,115,104,202,117,135, 47, 22, 66, 69, 68, 53,144,198, 45,157,102, 43,206, -237,250,162,174, 14,230, 17,123, 29,191,107,131, 44,185,148,149,217,172,205,140,200,230,227, 85, 89, 2, 30,231, 2, 92,173,112, -158,250, 50,205,225, 76, 58,251,254, 53, 38, 86, 34,196, 82, 24, 52, 27,217, 12, 5, 57,176, 46, 50, 79, 11,107,189,235,136, 39, - 55,172,176,108,206,208,237,214, 70, 37,117,205, 16, 2,185,136,251,219,179, 9,122,163,146, 99,164,196, 30,213, 97, 1,185, 52, -188,250, 57, 6,185,233,206, 67, 93, 21, 72,141,212, 21,211, 73,201,178,126,144,214,245,123, 41, 76,165, 85,201,163,234,201,128, -245,144, 80,199,204, 54, 34,238,251, 53,177, 91, 49,148, 50, 35, 89, 89,230, 29, 79, 37, 97, 70, 26,186,159,234, 30,133, 77, 36, -122,138, 25,196, 24, 89,117,189,121,210,243, 68,158, 76, 56, 51,150, 98,144,153,108,212,184,122, 3,205,234,125,167,200, 21,191, -206, 82, 8,196,212,249, 26, 89,153,138,241,224, 43,205,173,213,121, 32,173,192,209,199,102,213,146,230, 10, 87,165,248, 33,112, - 57,220,168, 51,244,115,201, 75,160, 83,187, 94, 40,217, 5,133, 29, 37,218,164, 64,167,201, 2,105, 58, 83,185,171,136, 9,121, - 93,143,176,172, 44,202,162,182, 47,153, 84,219,145, 82,187,147, 58,114,172,185,196, 13, 13, 77, 84,233, 28,196,210, 38, 56, 91, -174,236,228,162,136,142,162,194, 46,143, 78, 71,178,145, 88, 93,215,173,130, 61,168,143,114,225, 56, 10,185,192, 65, 20,203,164, -214,224,249,193,101, 62, 92,168, 70,186,169,176, 26, 71, 82, 20,244, 8,242,129, 18,186, 68, 24, 58,228,251, 7,232, 7, 35,229, -189, 29, 12, 59,194,141, 55,144,159,120, 11,254,222,159, 34, 63,125, 2,207,127, 12,142,127, 21,186,207, 67,120,198,232, 42, 56, -158,246,248,215,225,224, 63,130,233,212,109,114,163,101,198,167,107,134,166, 45,143,144,107, 95,134,231,190, 4,159,120, 7,125, -114, 97,168,220,236, 94,215,154,141, 93,124,247, 49, 86,168,127,244, 89, 96, 66,164, 44,102,216,222, 21,115, 49, 65, 95,153,152, - 62,251, 77,226,193, 26, 29,228, 53,156, 95, 88,235,187,254,121, 3,243,200, 19,251, 57,203,153, 85, 69,221,185,186,125, 13,233, - 19, 48,189, 5,155, 63,131,254,103,140, 28,167,239,161,247, 7,248,238,150,233,238,134,237, 38,243, 40, 8,231, 91, 35,184,106, -150, 25,215,185, 43, 86,208,241,169, 88,196, 14, 95, 69, 3,199,100,116, 27,144, 28, 23, 21,146, 5,131,219,235,247,220,249,177, - 30, 18, 10,156, 15,176, 43, 38,152,236, 93,188, 84,218,124,130,173,167,211, 4,177,223,112,210, 19,158,235,232, 86, 22, 77,216, - 39,179,131,159, 95, 24, 20,169,243,183, 45, 68,123,240, 15, 25, 70, 31,155,234, 54,163,143, 50,225,181, 21,241, 39, 15,144,152, - 56,249,230, 25,250, 96, 66, 69, 56,171,249,129,137,153, 10,168, 98,187,222,232,226,166, 32, 6,174, 9, 77,220,165, 52, 33,154, -248, 41,216,241, 61,164, 65, 9, 15, 7, 83,182,175, 34,114, 16,209,131,128,124,100, 13,175,172,225,157, 29,242,239, 28, 33,255, -167,117,145,210, 21, 52,137, 39, 3,250,251, 80, 22,122,153, 40,104, 84,226, 36, 51,142,184,137,181,110, 73,198, 76,126, 15,149, -204,252,222,207,221, 64,190, 36,120, 43,151, 30,142,181,197,217,115,244, 52, 44, 87, 31,242,206, 45, 91, 21,131,105, 65,166,134, -214,230, 28,118, 90, 86,184,239,168,231, 26, 25, 92,164,231, 95, 39,214,209,119, 12, 30, 65,106, 45,179, 56, 9,174,184, 35,187, -119, 12,236,136,233, 91, 68,237,223, 79, 49,146,177, 73, 82, 41,217,210,217, 98, 32,249,153,169,111,152,239, 89, 13, 54, 82, 26, -149,246,194,221,119,193,158,191, 93,213,111,220,202,197,130, 86,220,169, 94, 2,221, 44, 19,143,250,185,197,176, 64,129,212, 21, -227, 69, 11,108,207,209, 16,221, 59, 29, 73,177,179,243,126,183,140,128,139, 19,234,138, 39,126,201, 48, 80, 54,103,196,245, 49, -101,117,108, 87,219,230,204, 94,175,216, 94,213,114,183, 11,185, 12, 22, 40,162,246,122,136, 61, 26, 59,131, 65,185, 70,160,204, -130,185,198,126,230,175, 53, 87,178, 89, 61,122,105, 67, 9,110, 69,152,232, 94, 0,139, 74,104,116,255,141, 66, 59, 52,113,170, -179,141, 77,232,186, 21,253,122,141, 6,241, 36, 52, 43,166,218,232, 42,158,202,110,173, 2,185, 82,156,179, 94,173,151,139,253, -174, 82,227,186, 85,111, 7, 66, 15,132, 81, 17,198,113, 36,103, 87,220,214,105,211,124,168,113,237,212, 12, 45,183,180,180,144, -162,127, 46, 94,208,125,154, 48, 67,119,116, 57, 16,171, 79,110,184,196,114,159,189,246,132,185, 27, 23,191,230, 67,116,144, 80, - 30, 80,151,154,154, 78,193, 52,105, 85,252,166, 51,227, 2, 98,234,172, 75, 15, 97, 33, 52, 58, 50, 87, 36, 88,106,158,235, 79, - 74,206,115, 4,113,138, 30, 72,145, 51,108,199,194,182,216, 8,222,186, 0,102,225, 72,168,105, 79, 30,176, 16, 93,249, 74,201, -110, 17,139, 20,133,190, 79, 4,141,140, 27,101, 44,153,186, 41,170, 34,141,169, 40, 35,197, 70,169, 2, 57, 8,121,178,209,255, - 81, 18,186,100, 98, 49,123,130,217, 60, 55, 28, 69, 79, 78, 10, 14,157, 73,246, 32, 61, 12,112, 8,220, 78,200,185,119,207, 41, -217,213,249,197,130,126, 97, 7, 71, 95,135,231,191, 14,159, 16,228,213, 53, 28, 31,195,122,237,124,215, 99,232, 79,160,191, 5, -233, 21,232, 62, 9,221, 21, 72, 87, 92,129,255,140,141,238,251,191, 3,235, 31, 35, 55,223,128,252, 30,228, 45,232,128,144, 23, - 34,158, 15, 79, 69,182, 32,131,181,160,165,238,114,234, 5, 22,102,106, 20, 83, 54,156,237,198, 44,127, 70,103,115, 21,221,238, -255,167,235,221, 98,109,203,210,251,174,223, 55,198,152,115,174,125, 57,183, 58,117,239,174,238,118,119,187,219, 54, 77,219,177, -163, 36, 68,113, 68, 98, 19,130,148, 60, 32, 2,146,133,184, 8, 9,161, 32, 33, 4, 88, 8,241,128,242,196, 59, 32,241,130, 16, -138, 20,204, 67, 0, 33, 8, 82, 2,137,130,131, 37,156,142,113,140,237,166,239,238, 91, 85,117,117,213,185,238,203, 90,107,206, - 57,198,248,120,248,190, 49,231, 92,187,154,150,142,186,251,212,169,179,247, 94,107,174, 49,190,203,255,255,251, 63,129,233, 57, -242,199,127,213,125,230, 31, 88,193, 81,247,118,153,215,131,119,233,201, 58,249,154, 97,255,119, 64, 46,173,107,215,111,194,248, - 2,222,171,148,111, 31,200, 63, 62,242,162, 40, 47,179,112,200, 22, 61, 31,150,247, 84,137,222, 5, 73,176, 6,188,197, 77,118, - 64, 39,129,240, 48, 33,103,193,100,228, 31, 29,169,223, 58,146,255,104,100,254,225,204,109,132,253, 12, 71,159,196,198, 8, 23, -189,185, 13,115,241, 31, 93,160, 70, 89, 94, 2,223,245,216, 31,246,223, 11,143,122,239, 22, 12,114,115, 57,192,163, 12, 79, 71, -219,171,231,128,233, 0, 20,138,243, 88,135, 51,232,174, 11,241, 73, 33,124, 2,228,245,158,240,165, 68, 55, 85,238,253,254,158, -114,157, 41,157, 29, 52,199, 54, 80,217,238,178, 67, 19, 96,233, 50, 14, 94, 60,205, 34,167,227, 62,255, 76, 28,139, 23, 25,199, - 74,120, 49, 33,103,137,244, 94,132, 20,236, 98,127,109,176,215,233, 50,144,254,108, 37,255,239, 47,145,215, 65,250,106, 76,251, -122, 26,118, 17, 60,189,164,206,246, 58,116,237,194,150, 19, 11,237,210, 41,213,226,216,129, 40, 72,169,166,253,208, 59, 84,186, -147,237,103,221,228, 88,175, 56,217, 69,248, 67,155,105,111, 71, 2,178, 97,210,235,250,251,106,221,135,212,181, 67, 89,214,168, - 42,196,160,107,124,176,174, 48, 23,113,113, 34,149,197, 57,162,110,194,182,241,173,137, 69, 37, 84,134,100,218,157,118, 14,217, -247,215, 56,105,118,184,205,213,206,133,164, 74,212, 74,143, 46,106,245,217, 59,254,122,167,171,172,170, 76,181,122,238, 66,203, -115,223,164,223,169, 46, 74,253,229,215, 18, 20,104,175, 65,110,161, 42,186,138, 93,219,235, 88,253, 66, 47, 77,139,147,109,222, - 89,163, 59,136, 82,180,166,167, 6,170,199,126,134,197,238,230, 96,153,170,228,253, 53,189, 42, 12,231, 72, 76, 72,215,163,135, - 91,170,102,170, 68,123, 33, 99, 34, 12,103,232, 60,219, 8, 57, 23,168, 19, 53, 68,155,108,108,138, 23,105, 35, 32,116,137,147, -173, 63, 65,149,221,152, 0,193,233, 72,210,246,205, 13, 72,163,235,101, 27, 54, 41,150,237,217, 10, 75, 58,158,137,183,162, 4, - 98, 55,208, 13, 3, 33, 38,198,108,157,180,120,193,161,101, 21,152, 44,206, 13,109,223,115, 88, 38, 46, 13,214,228, 8,248, 5, -150,100,130,182, 30, 77,137,105,154,236,117,148,192, 92, 50,101,158,109,181, 81,170,137,235, 54, 72, 92,221, 96, 12,131, 64,138, -137,152, 58, 23,214,153, 96,174,117,219, 39,101,221,118,159,237,235,172, 32,186,174,118, 54, 41,109, 34, 66,149,232,145,223,234, -137,130,174, 92, 79, 59,106, 42,246,231, 66, 36,196,224, 4,193, 74,205,198, 55, 8, 49, 34, 77,125,175, 74,206,197, 39, 1,246, -169, 12,209,179, 0,156,149, 95,171, 17,231,162, 8, 97, 56, 35,229,106,118, 13,149, 96, 35,200, 90,233,124,127,165, 45,234, 83, -214, 56, 68,169,129,144,172,210,108, 63, 96,108, 10,207, 32,132,110,176,221,210, 56,115,116,196, 93, 16,243,180,207, 42, 36,205, - 4,133,189,143, 88, 74,182, 70,247,178, 6,204,114, 44,156, 11,244,157,165,129,233,101, 66, 30,236,208, 65, 32,216,155, 36,231, -189,167,130,121,213, 60,184,118,255, 38, 91, 39,125,168,214,142, 22,224,105, 71,252, 97, 64,190,209,161,159, 15,240,240,104, 54, -184,177, 66,254, 49, 92,249, 73,253, 90, 68, 62,135,137,158,222,122, 19,206,238, 91,196,172,244,118,129,206, 71, 63,248, 58, 59, - 85,195,153,135,208,236,124,190,117,180,246,102,206,232,126,143,236,175,205,236, 45,193, 47,113,151, 85, 87, 59,121,116, 95,236, -251,172, 30, 86,210,139, 5,154, 68,129,239, 30,224, 79,191, 10,151,127, 2,230, 31,122,190,124,177, 40,218, 58,217,197, 46,172, - 17,184,227, 87, 96,124, 9,247,126, 17,184, 5,253, 33,250,116, 66,191,115,164,124,112,224,230, 86,121,166,129,253,108,251,192, -236,135,217,208, 0, 38, 98, 62, 97,153,221,250,218, 0, 59, 10, 41, 6,194,227,132, 60,238,236, 95,120, 94,169,207, 50,249,233, -204, 62, 87, 94,102,235,204, 75, 59, 25,252, 71,142,254,247, 84,255,224, 22, 86,196, 46, 55,126,250, 62, 22,184,181,165,183, 60, - 48,111,168, 76, 21,233, 97,232,225, 85, 87,188, 30,102,181,177,163, 23, 31, 45, 87, 62, 6, 19,228, 61,248,250,145,112, 30,137, - 15, 58,228,149, 68,248,249, 11,186,163,114,255,171,123,242,177, 90,224,139,152,210, 63,248,158,119, 59,102, 95,156, 10,178, 73, -145, 58,101,128, 44,159,235, 42,112,244,196,188,238, 54, 19,158, 79,200, 46, 18,207, 45,242, 86,135,132,188,115,134,254,224, 22, -126,225,156,240,245, 35,245,199,123, 99,220, 15, 66, 56,110, 14,214,176,233,216,189,232, 24,156, 19, 51, 42, 39,225, 33,213,221, - 37,217,104,199,164,168,222,137,182,236,128, 37,208,215,179, 11,182,180, 16, 87,177, 47,191,181,166,173, 84,255, 92,171,132, 83, -139,146,239, 70,181,165, 82,149,214,197,213, 69, 64, 37,226,148, 65, 93, 39,145, 49,232, 18,164,104, 77,191, 44,219,235,224,234, -229,172,186, 6,164, 86, 59,107, 26,118, 53,169, 57, 66, 6, 10, 41, 4,195, 52,251,159,151,176, 58, 75, 16,232,180,218,216,221, - 69,113,147,218,133, 94,100,221, 41, 27,190,214,252,245,145,192,188, 88,197, 86,204,109, 92,176,170,237, 82,210,147, 12,243,232, -254,117, 9, 86,148,196, 77, 39,187, 4,162,196,132,226,226,184, 82,125,132,236, 1, 37,197, 59, 64,173, 72,181,208,141, 26, 58, - 66,151,176,102,219,160, 35, 18,173, 59,173,227,222,153, 26,137, 20, 19, 12, 3,117, 60, 90,199,158, 11, 85,102, 36,117,132,212, -129,118,212,108,151,154, 53, 5,137, 24, 59,223,233,250,165, 18, 76,175,100, 5, 85, 65,213, 46,233, 37,145, 82,215,212,175,234, - 43,207,181, 99,151, 37, 12,163,234,221,100,239,187,197,129,141,222,219, 56, 59,165,142, 16,123, 38,167,185,209, 24, 7, 14, 96, -161, 5,205,184, 18,156, 37,166,212, 39, 23, 65,238,176, 28,154,155, 34,210,197,142,216,245,182,247, 46, 54,162,202,192, 60,205, - 94,228,172,147,132,186,201, 34,208,205, 52, 46,132,104,254,249,152,236, 57, 41,229, 14, 5,174,126, 92,144, 80, 55,188,252, 13, - 97, 78, 54, 43,131,208,188,234,162, 11,114, 57, 0,187,126, 48, 97,121,173,116,201, 96, 49, 99, 45, 28,166,145, 50,142, 14,189, -113,198, 65,215, 45, 69, 74,174,166,226,215, 90,156, 56,106,161, 47,185, 20,242,116, 68,170, 18, 37,216,212, 34, 37, 82,242, 61, - 66,212,194,121, 4,145,196,160,133,169,216, 11, 33, 46, 46,201, 62,126,145, 32, 20, 73, 84,169, 11, 53,202,192,133,182,223,203, -125,100,154, 10,211, 92,104, 5, 67,169, 48, 23, 37, 72,229, 92,108,135,129, 7,173,133, 98,190,236,131, 79,117, 45,197, 72,184, -168, 74, 31,148,184, 87,139,184, 44,222,229, 14,246,193,209, 32, 75, 26,132,238,149,250, 66,169,199, 64,157, 50, 76,147,137,104, - 34,132, 93, 68,207,123,226,107,129,240,112,103,221,252,177,218, 92,247, 38, 83, 63,152,209, 39, 5,190, 94,145,223,141,200,195, - 61,132,175,195,179,201, 78,188, 93,180,121,103,136,200, 89, 7, 15, 2,124, 50,193,219,157,159, 46, 56,197, 78,225, 70,224, 71, - 25,158, 9,122, 13, 60, 10,240,122, 92, 85,155, 13, 85,151,196, 4, 98,183,110,200,153, 10, 92,249,102,224,137,130,142,200,151, -126, 5,202, 45,148, 23,158, 45,127,176, 75, 93,111,253,239,115, 1, 96,253, 8,230,119,161,123,211,126, 79,191,142,222,188,128, -239,102,234, 31,237,153, 94, 78, 60, 15,112, 61, 25,100,166, 20,139,189,204,108,172, 81, 69,204,218,222,146,182, 16, 82, 80, 6, -133,238,126, 36,188,218, 27, 1, 39, 11,245, 42, 83,158,204,228,219,204,173, 26, 87,125,159,173, 88,104,147, 91, 41,107,199,219, - 59, 75, 97,241,102,103, 63, 69,167,138,244,209,170,226,164,200,189, 72,188,215,209,189,200,164,170,140,213, 44, 96,187, 4, 53, - 8,251,227, 74, 85, 44,197, 10,193,171,201,182, 21,114,149,121,248,213, 3,114, 63, 18,126,225, 18,121, 99, 32,126, 25,250, 27, -229,225,119,247,212,162, 92, 1, 7, 17, 39,202,157,100,165, 16, 88,106, 68, 31,175,174, 76,240,120, 39, 0, 72, 93,188,116, 84, -232, 50,214,173,239, 2,210, 7,194, 16,224,222, 17, 62,115,137,124, 98,135,190,156, 8,127,225, 62,241,191,158, 96,151,221,116, -111,185,228,155,245,243,230,114, 48,109,195,208, 40,133,171,190,103, 25,249, 90, 97,161, 39,252,244, 59,167,237,154, 64,184,137, - 29, 19, 86, 20,106, 46, 91,229,173,189,206,167, 35,119, 57, 9,150, 17,223,187,139, 10,162, 1, 77, 66,210,178,184, 38, 40,117, -241,131, 47, 26, 32,100, 9, 41,218, 42,203,181,165,134, 45,113,158,235, 48,183, 20,124, 82, 35, 72,138, 4, 85, 82, 45,118, 54, - 86, 83, 35,119, 18,108,100, 25,212,249, 9,149, 36,202,173,130,207,206, 78,134,185,230, 97,111,113,183,186, 92,202,141, 11, 81, -165, 69, 28,183, 97,133, 46,187,249,246, 60, 71,239,202,113,151, 95,216,108, 44,172,153, 73, 62,114, 45, 70, 21,243, 73, 87, 43, - 32, 45, 90,180, 50,249,206,190, 11, 21,173, 35,185, 36,159,134,219,154, 51, 68,199, 91,215,130,206, 35,117,151,168, 2, 93,215, -219, 69, 55,103,114, 41,134, 14,157, 70, 66,204,132,212,147,186,193, 5,124,246,208,212, 50,251,207,100, 78,129, 20, 2, 85, 12, - 35,172,165, 16, 81,119, 40,201, 42, 6,245, 11,253,132, 98,232,107, 8,245,243, 95, 54,197,207,106,199,112, 17, 97, 35,244,133, - 72, 12, 61,161,235,144,216, 83,180,146, 75, 89,162, 99, 43,117, 51,122,111,104,216,182,191,174,104, 72, 75, 17,215, 16,179,150, - 79, 94, 23, 56, 76,138,137,212,119, 16,133, 60,102, 11,101, 17,131,204,148,121,242,142,185,110,188,255,107,112,202,154,198,102, -190,242, 16,147,209, 36,107,246,148, 56,255,190,234, 70,212,162,219,156,144, 85, 28,217,170,254,224,250,129,182,222,169,181, 16, - 98, 34,164, 14, 81,216,197,200,253,251,247,144,110, 96,154, 38, 74,173,204,170,148, 60, 49,231, 66,153, 51, 81,108, 45, 91,169, -148,108, 1, 62, 49,217,106, 32,249,190,188,106, 37, 16,208, 16,188,179,159, 77,232, 60,236, 8, 93, 34, 87,101, 60, 28, 72,103, -154, 73, 49,114,214, 65, 41,202, 49, 22,139, 24, 45,190,191,114, 49,213, 81,125, 21, 90,149,218, 71,178, 4, 68,103, 84,133, 33, - 24, 26, 83,231,130, 20, 72,233,140, 24,111, 57, 23,245, 61, 88,165, 6, 56, 19,229,204, 61,185, 81,108,212,154,130,125,160, 26, -184,100,170,166,156,190, 81, 97,168,112, 62, 41,195, 97,166, 83, 37, 14,160, 15, 88,103,161,213,104, 28,122, 93,201, 7,101, 76, - 1, 21, 37,244,129, 46,122,108, 67, 12,118, 74,158,187, 89,118,244, 98, 32, 84,106, 84,116, 7,245, 21, 19, 2,113, 25, 76,189, -254, 12,244,104,102, 15,153,252, 65,232, 33, 12,138,148, 64,232,147, 77,191,251, 96,151,249, 92,225,170,160, 79,170,157,198,103, - 98, 13,254,212,153,167,171,110, 20,197,183, 10,151,222,114, 30,109, 70,173, 30,251, 41, 47,129,111,140,240,239,189, 1,195,167, - 97,255,129, 95,230, 51,212,209, 60,248, 76, 38,209, 15,175, 64,184, 7,183,191, 9,211, 75,184,252, 83,160, 63, 66,231, 31,194, - 7, 25,253,214,145,242,254,129,155, 12, 47,171, 48,218,121,195, 84,151, 4,223,165, 19, 45,155, 14,181,177,162,135, 0,103, 10, -241,161,199,142,122,252,153, 62, 49,206,251,177, 8,147,192,232,253, 77, 81,187,172, 60,216,207,238,136, 96,250,207,157,172,246, - 40,252,245,180,150, 41,192,224, 2,204, 7, 61,225,237,129, 97,154,185,189,205,220,102, 27,195, 86, 3,198, 49, 58, 16,170,115, -156,255,236, 31,176,235, 0, 93, 23,232,159,102,228,247,142,244,247, 58,228, 11,103,200, 39,122,210, 47, 94, 48, 28, 42, 15,222, - 59,154,128, 73, 12, 65,154,235,218, 1,167, 53, 55,229,164, 51,113, 30,132,141, 88,239, 28,116,234, 59,246, 3,144, 70,219,175, -203, 16,237, 87, 23,209,157, 32,239, 60, 66,138,160,159,129,240,103,238, 81,127,235, 37,242, 72, 33, 7,100,170, 54,170,222,100, -137,107, 93, 55, 53, 49,194,176,137, 24, 61, 73,103,243,248,209, 37,116,124,129, 92,164,211, 97,106, 27,157,120,229, 18,217,116, -246, 85, 79, 76,110,178,165,172, 53,122,218,242,255,195,186, 50,113,129, 85,148,202,224, 48, 21,203,241, 86, 36, 52,120,145,120, - 84,100,195,160,174,214, 31,226, 70,168,231, 54,170, 22, 13, 26,124, 50,100,182,159, 0, 69, 73,126, 25,196, 54, 2,199, 58,224, -157, 27,187, 67,206,156, 73,165,136,145,232, 50,171,216,173,141,198,131, 26,146,182,222, 65,165,136, 95,236, 81, 54, 89,230,178, -138,234,216,224, 99,131,172,100,191,197,219,173, 44,172,247,186,132, 90,215,165,219, 87,169,174, 36,151, 69,127,144,117,229, 62, - 12, 1, 83,103,235,186, 94,137,213, 61,212,162, 84,157, 45, 42, 54, 68, 66,133, 97,119, 78, 77,133,227, 60, 34,206, 50,215,106, - 88,238,160,213, 0, 40, 33, 57,134, 86, 23,236,109,140,105, 65,222, 74, 8, 22,108, 85, 11,193,195,119,216,234, 10,228, 84,192, -185,237,146,131,216,243, 19,116, 77, 12, 83, 9,171,114, 94,162,237,133,131, 5,181,132,216,249,229,104, 41,117, 21,239,130,203, -230, 66,119,253, 84, 91,234,139,248,216, 61,207, 70, 77,107, 19, 51, 87, 99,218,235, 31,232, 59,183,176, 21, 37,231,188, 52, 35, -243, 60,129,110, 80,171, 34,190,191, 95,217,235,226, 46,171, 16,147,217,237, 98,240, 46,120,237,191, 91,110,124,115, 18,168,224, -168,241,184,136,219,194,170,100,217,192,130,236, 12, 61,239,122,206,207, 47, 8, 41,129, 42,187,174,163,219,237,184,158, 38, 14, - 57, 51,205, 19,243, 60, 51,231, 12, 57, 47, 59,247,230,188,176, 58,185, 56, 16, 52,210,133, 72, 28,118, 75, 94,122, 6,234, 52, - 50,132, 72,127,126,142,246, 3,251,227,145,227,237, 21,121, 28, 73,247,165,144,212, 62, 60,115,176, 17,121, 86,165, 68, 33, 19, - 32,218,135,245,166, 40, 47,139, 85,249,147,135,193,207,193,132, 42, 69, 33, 82,173, 59,158, 71,226,249,125, 46,206,118,212, 82, -108,151, 50, 91,135,126,233,190,245,234, 56,189,132, 44, 73, 71,147,218,225, 16, 16,166, 42,116,106,168,212, 89, 34,247, 66, 34, - 74,161,237,255,169,213, 46,230, 93,183,158,178,157, 11, 18,212, 41, 67,168, 69, 23,166, 72,184,223, 17, 30,196,133,239,222,210, -180, 24,128,135, 54,230,210, 92,208, 23, 51,229, 69, 70,231,106,115,192, 24, 8, 93, 48,241,252, 25,232, 99,129, 71, 98,176,154, - 25,184, 26,209,155,138,126, 56,163, 71,181,244,178,123, 29,225, 97,176, 19,111, 44,200, 21,107,200,112,241, 54,175,141, 37,230, - 66,125,153,209,209,124, 97,225, 3, 37,124, 54,194,151,127, 30,142, 87,144,111,188, 18, 24,237, 82,215,217, 78,189,152,160,251, -164,117,241,227,247,253,146,239, 97,254, 14,124,116,128,111, 78,148,111, 31, 56,222,204,188,116,225,218,177,192, 92,215, 28,226, - 70,245,138,209,212,189,169,241,230,253,215,160,102, 45,147,203,132, 92,118,118, 88,238,161, 94, 21,242, 77,101, 18, 49, 72,203, - 98,225, 20, 74, 59, 36,106,165, 74, 32,121, 16, 78, 39,246,126,196,212, 22,246,109, 73, 29, 44,156, 39,221,192, 43,129,240,169, - 68,124, 47,210,213, 98,121, 3,115,195, 30,194,121, 7,215, 94,148,132,141, 45, 44,136,112, 19,220,180,240,193,145,240,187,145, -116,158,144,119,122,228,157,129,244,229,202,110, 84, 30,124, 52,217,197, 30,173,174,219,118,201,203, 1, 16,100,109,153,101,131, -254,188,147, 42,169, 62,205, 40,246,206,144,110, 10,242, 98, 38,116,126,176,221, 75,232,195, 91,228,254, 99, 36, 62,133, 95,189, - 71,252,135,123,184, 81,116, 23,168, 59, 69,167, 53, 41,203,101,249, 39,221,118, 23, 45,246,119,210,211, 38, 58,108,114,202, 79, -149,250,121, 99,199, 88, 11,145,213, 66,237,226, 52,221, 50, 26, 87,119, 6,213,231,218,245, 39, 68,101,121,196,231, 22,185,186, - 11, 91, 37,248,218,217,108, 7, 82,186,217, 0, 44,246,101,133, 16, 43, 90, 44,221,173,253,153,234, 0,148, 66, 64, 84, 8,222, -253,203,182,252, 16, 67, 54, 95,116,173,211,183, 68,171,189,174, 98,220, 37,161,178,145,224,196,214,137, 56,136, 40,159,136,251, -172,139, 23, 2,157, 88, 26, 99, 27,217,139,174,221,185,178, 30, 57,181,217,183, 60, 72, 67, 92,100,105, 1, 45,234,239, 64,117, -120,146, 80,125,212,189, 20, 50, 21,102,207,119, 24,188,151,208,101,108,219,178,100, 3, 90, 10,146, 71,164, 63, 71,131, 9,185, -134,152, 80, 44, 99, 67, 84,140,150, 86,138, 65, 82,202,228,108,245,176,174, 41,162, 77, 88,230,227,100, 26,202,152,252, 11, 5, - 19,234,233,102, 97,125, 34, 12,213, 77, 0,143,108,162, 86, 29,162, 83, 27, 48,200,226, 97, 67, 76,254,111, 6,231,145, 71,143, -252,245,253,184, 83, 56, 75, 46,182, 38,104,232,217, 86, 96,106,181,233, 71, 23,169,217, 60,251, 18,172, 35,181,101,122, 93, 24, - 18, 11, 28, 38, 6,202, 56,217, 62,217, 71,209,117,206, 62,206,175,190, 82, 98,237,250,217, 16,232, 98, 48,113, 92,140,214, 89, -107,221, 68,208,110,199,244,226, 48,173,136,196,184, 38, 24,214,109,145,184,134, 35,197, 20, 57, 31,118,220,191,184, 36,118,157, - 23, 60,129, 26, 19,207, 14, 7,174,110,110, 25,199,163,237,156,155,215, 60, 69, 74,173, 76,227,209,206,200,216, 17,186,110, 89, - 83,132,109,108,107,203, 90,207,217,113,187,145, 57, 4, 14, 55, 87, 76,251,189, 71, 3, 67,186,223, 53, 69,189,146,188, 18,110, - 69,126,145, 98,163,143, 40,156,163,220, 19,225, 16,148,105, 80,142, 53,112, 28,179,225, 11, 43,196,208, 89, 10, 79, 85,130, 22, -186, 24,152,242, 68, 71,129,104,147,229,179, 8,179,151,127, 70,251, 82,180, 90,230,118,231,251,176,200, 42,242, 40,130, 9, 6, - 58,251, 97,232,234, 26, 47,185,235,224, 44, 89,121,191, 87, 66,174,244,101,178,197, 94,159,144, 92,145,162, 72, 19, 47, 61, 76, -182,187,174,117, 25,167, 72,239,158,210, 51,129,235,136, 30,142, 86, 8, 4, 1,177, 7, 43, 92,118,200,131,132,184,221, 76,231, -140,238, 21,189, 42,232,211,140, 30,124,192,248, 48, 32,143, 58,120, 45,192, 78,208,235, 10,123,108,196,124,230,153,239,197,243, - 86,247,118,250,105, 1, 61,216, 56, 74,178,192,139, 10,191,254, 25,224, 21,152, 95,216, 37, 46, 25,242,232, 72,220, 98,187,252, -248,134,141,218,143,255, 0,174, 95,192, 43,159, 3, 62,128,155, 23,240,157, 76,253,218,158,249,201,129,171,201,226,230, 75,105, - 89,189,235, 5,149,252, 12,239, 69, 40, 98,187,208,222,119,233, 22,247, 42,196, 62, 16, 94,237, 44, 66, 21,165,190,156,169,207, -179,141,143,196,189,227,109,116,186, 81,117,215, 24, 76,112, 23, 86,213,122,140,178,162, 31, 27, 98, 80, 34,240, 22,232, 75,228, -124,132, 55, 7,226,227,145,243,155,153,123,179,114,136, 54,181,153,171, 29,130,247, 59,184,153, 87,207, 58,213,104,115, 41,155, -122,127, 80, 37,254,224,136,252, 65, 36,222,143,200,163,142,240,133, 51,186, 91,133,223,171,232,203,153, 26,101, 73,200,107,187, -224,185,248, 7,243, 20,125,110,135,153,108,206, 21, 93,183,137,234, 2,153, 89, 77,233, 31,174, 39,194,185,165, 36,201,187, 9, - 94, 13, 6,238,223,125, 26, 57,255, 22,225, 95,187, 64,255,179,153,250, 86, 68,118,192,148,215,233, 94,105, 4, 41, 7,187, 84, - 27, 15,246,193, 62, 31,249,206,126, 93,151,148, 85,189, 99,241,221, 64, 49, 62,166,132,210, 69,214,108,219, 32,239, 40,117, 19, - 68,180, 32,189, 78,151,136, 90, 87,201, 80, 69,233,162, 9,190,212, 69, 69,232, 10,173, 89,194, 86,188,208,219, 2, 62,107, 86, -162, 47, 37,117,113,180,123,113,224, 23,140, 84,231,108, 55,160,138, 4, 39,194,217,175, 42, 74, 46,149, 94, 76,244, 54, 85, 56, -186,154,123,141, 10,117, 15,185,251,182,163,197, 4,120,126,185,189,247,139, 82,190,178, 56, 84,194,230, 53, 43, 62, 89,138,209, - 62,186,115, 11,180,145,200,236, 29,170,111,209, 9, 81, 72, 90,209,160, 11,100,170,250,131, 19,212, 60,246, 85, 54,238,172, 70, - 55, 12,230,163,111,113,187,165, 90, 16, 77, 46,222, 13, 78, 19,210, 13,132, 52,160, 33, 33, 90,232, 98, 36,207,147,123,155, 35, -210, 37,136,113, 21,135, 57,114, 48, 68, 43,254,141,123, 94,124, 29, 82,150, 56, 88,139,122,209, 37, 73,254, 84, 52, 39, 27,217, -219,122, 29,158,228,159, 72, 32,132,100,217, 26,186, 78,117,212,187,254,208,246,248, 40, 85,220, 10,233,223, 71, 27, 59, 45, 95, -165,130,116,209,237,224,237,235,234, 29,235,122,219,215, 71,250,174,183, 88,213,108,194,182,138,146,231,121,121,129,151,213,142, -171, 71, 23,200, 17, 45, 8, 37, 46,232,218,186, 86,142,171,213,110, 99, 53, 51,117,122, 92, 86, 0,237,239,194,119,254, 45,252, - 37, 70, 11,148, 73,169,115, 52, 65, 38,134,200, 49, 20,174,110,111,217,223,222,216,174,223,197,116, 33,218,251, 54,151,108,241, -179,197, 61,243,213, 86, 25,169, 23,162,116,166,154,175,149, 60,207,238, 54,146, 37, 66,247,118, 28, 25, 15, 7,234, 60, 45,254, -123, 17, 33, 37,130, 31, 88,149,168,106,202,203, 32,203, 62,170,248,135,182, 79, 66,170, 74, 95,172, 58, 63, 14, 61,251, 25, 38, -175,234,164, 15,104, 13,110,150, 55,196, 30,243, 68, 9, 22, 43, 56,136, 24,215,188,147,101, 47, 89, 16,106, 88, 67, 19,162,239, -180, 58,169, 12,213, 71, 99,231, 59, 87,147, 58,147, 60,138,181,101, 93,242, 79,106, 65,206, 35,177, 8,122,125, 52, 97,138, 70, -179,149, 5, 65, 30, 13,200, 59, 59,163, 36, 29, 42, 39,124, 66, 13, 32,197,254,206,203, 72,144, 1,121, 92,151,110, 77,186,128, -188, 18,145,251,166, 24,172, 31, 77,232,203,217, 46,245,209,253,244,247, 13, 38, 99, 94, 61, 27,171,215,131,192,222, 81,160,169, - 34, 93,112,159,142,127,114,179,218,218, 96,116, 27, 66, 47,240, 3, 69,126,177,135,207,254, 52,220,222,154, 32,142, 12,249, 96, -106,251,166, 64, 11,103,144,222,132,227,223,133,247,191,141, 78, 3,242,166,192,248,125,244,195,138,254, 96, 36,191,119,228,112, - 83,121,137,112,204,106,233,105,173, 32, 95, 1, 91,110,171, 88, 3, 28,108,108,105, 68,185,190, 64,119, 47, 33,175, 59, 22,246, - 80,225, 89, 70,111,138,121,209, 89,248, 8, 11,155,193,215, 66, 86, 20,248,230, 67,219,133,152, 86, 48, 13, 17,211, 42,196,100, -150, 60,122,216, 61,133,183,247,132,215, 7,250, 39, 19, 23, 47, 38, 6,177,172,243,105, 90,239, 36,113, 75,101,213, 53, 26,119, - 44,112, 59,155,103,190, 27, 11,241,155, 71, 43,198,254, 88,128,139,142,248,115,103,112, 44,156,125,109, 79,190,202, 75, 67,107, - 59,107,219,207, 22,189, 75,223, 58, 85,169,109,108,204,171,213,204,245,126, 33, 8,221, 94,137, 47,102,106, 23,145, 15, 39,228, -135, 17,125,253, 71,200,163, 63, 7,220, 71,126,249,155,132,223,219, 19,254,254, 1, 62, 19,169,103, 21,142,198,147,214, 98, 93, - 69,187,208, 93, 19, 68,236,132,110,182,139, 46,111, 78,184,186,193, 85,126,124,153,126,138,120, 93, 67, 90,196,135, 69, 13,253, -186,118,164,139,159,189, 52,199,154,218,229,220,198,222,245, 4,143,109,105, 85, 94,128,176, 92,168,235, 14,191, 29,124,213,213, -127, 90, 65,114, 93,121, 3,181, 41,134,117,179,247,182,231, 36, 44,186,123, 89, 28, 26, 22, 27,106,127,235,132, 85,147, 41, 42, -193, 71,145,121, 93,214, 47,108,238, 6, 78,105,100,192, 90, 79,147,222,178,158,178,219, 41, 75, 40,157,123,230,253,242, 85,187, -139,138, 4,183,149,217,235,150,212,222,119, 75,108,172, 20,255,203, 27,222,216,194, 61,236, 66, 79,205,109,232,120,233, 40,167, -233,114,213, 15,105, 91, 35,136,115,218, 65, 74, 38, 78, 19, 33, 14, 22, 33,234, 62,237, 24, 34,101, 26, 77, 56,215, 50,161,187, -100,168,235, 90,150,213,135,230, 66,205,121,157,203,108, 39, 6,109,236, 46, 97, 9, 2,218, 22,181,117,219,183,183,128, 23,115, -178, 59,127, 60, 25, 53, 79, 45, 97,143,208,138, 49, 35,170, 25, 73,206, 59,104, 79, 39,115, 37,182,147,221,116,241,129, 75,244, - 46,116,154, 86, 37,253,162,184,247,207, 93, 85,179,120,117, 29, 69,132,113,154, 55, 23,185, 46, 28, 21, 90,240,139,132,211,120, - 94, 23,175, 53,251,152,169,221,117, 25,255, 47,118,181,229, 51, 97, 85,158, 46, 1, 48,155, 88, 88, 17,251,123,220,206, 29, 61, - 41, 47, 5, 11,175,169, 34,140,121,102,158,247, 76,165, 80,202,140,180, 4, 54,199,230,206,165, 80,219,186, 96,153,154, 52, 40, - 78,165,228,138,138,141, 38,139,255, 76,120, 12,108,174,133,105, 26,169,211, 4,181, 18,150,131,213, 83, 68,195,152,208, 82, 9, - 85,156, 0,101,214, 48, 5,106,168,134,134,213,134,206,244, 39,176, 20,186,243,196,174,235, 72,197, 46, 69,213, 76,150, 64,191, -235, 41, 65,232,181,208, 7, 27,105, 73, 48, 42,153, 0,169,197, 57,122,151,158, 55,163,224, 22,127, 73,123, 44,165, 67,134, 51, -228,184, 55,156, 98, 3,169, 15,131,221, 28,209, 80,172, 60, 8, 72,202,118, 84,185,162, 72,187,136,220,235, 9, 63,117,102,135, -220, 17,187,236,131,213,232,198, 20, 87,191,157, 76, 40, 38,175,247,107,254,250,253, 96, 93,126, 48, 23,173,126, 48,219,197, 92, - 4, 46, 20,238,153,141, 79,162,237, 14,234,161, 34,135,201, 70,246, 23, 62, 65, 8,174,108, 45, 98,130,132,169,174,126,170, 32, -118,217,139,129, 1,228,165, 34,255,210, 39,160, 94, 66,190,246, 55,224, 96,151,123,157,124,197,144, 44,165,174,124, 27, 62,250, - 38,250,141, 10, 95,126, 8,241, 37,250,209, 1,222,203,212,247, 70,202,237,200, 53,112,157,197, 59, 82,179,108,205,254, 97, 73, - 11,210,209,209,153,193,208,153, 45, 98,118, 0,118, 9,226,163,142,240,176, 55, 95,227,237, 76,125, 81,168, 83,101, 18, 28,130, -209, 44,246, 74,104, 0, 48,223, 13, 23, 63,231, 67,241, 76,122,245,203,189,108, 88,167,109,236, 39, 15, 32, 62,128,183,174, 8, - 63,125, 78,120, 58,114,126,152,185,172,202, 53,194,209,239, 40,241, 75,167,147,213, 91,219,169,173, 21,142, 5, 98,134,151, 9, -210,205,140,124,125, 79,255, 56, 34, 95, 56,131, 87,122,226,207, 92,210, 29,149,139,111,236,157,144,104,113,194,234,167,191,108, -156,183, 69, 87, 15,121,106, 69, 73,219,173, 53,225, 88,219,195,183,172,118,132,116, 91,144,243,153, 48,116,200,147, 10,207,110, -225,149,167,208,253, 37,232,190, 68,248, 55,254,123,194,223,251, 67,244,208, 33, 59, 19,205,233,180,138,204,234,221, 64,151, 2, - 93,244, 47,146, 27, 43,109, 67, 50,228, 99,121, 26,126, 80,182, 36,173,211, 63,113,194,232, 14, 62,185, 89,212,240,101, 3,249, - 88,185,227, 84, 57, 77, 29,116, 1,220, 26,116,177,218,156,138,114,199, 15,109, 63, 84,208,181,103,207, 91, 49,150,174,175,163, - 58,162, 54,251, 20,161,101,116, 71,183,154, 37, 87,191,183,159, 67,151,236,241,246,122,212, 13, 15, 94, 22,101,123,243, 24,207, -155,188,239,178,185,180, 54,132,224,213,246,180,233, 92,149,150,196,229,197,100, 41, 36,196,158, 11,132, 81, 5,157, 43,147,159, -145, 89,197,206, 80, 17, 7,244,216,103,174, 84, 22,164,234,150, 77,166,136,229,107, 96,128, 29,109,197,112, 43,218,188, 35, 52, -165,183, 18, 36,179,243,177,244, 56,207, 11,194, 52, 72,132,190, 51, 65, 97,206,238, 44,240,229,200, 38, 66, 85,182,188, 8,217, -128, 98,238,132, 4,109, 83,208, 44,209, 48, 44,144,154,144,210, 26, 68,228, 59,242,160, 38, 96,140,169,179,221,184, 8,115, 41, -140,243, 76,158, 70,247,214,215, 69,240,216, 62,104, 33, 8,244,189, 23, 31,171, 40,205, 10,206,234, 3,115, 75, 86,236,251,158, -216,155,154,126,154,102, 71,242,138, 49, 11,220,163,170, 57,175, 29, 64, 91, 47,137,119,220,206,124, 15, 33, 46, 48, 24,221,236, -224,106,243,150,139,239,252, 84, 54,150, 59,143, 60,197,252,153,109, 36,110, 26, 8, 97, 8,194,217,238,140, 28, 34, 55,227,200, - 52, 30,172,216,241,203, 95,162,189,118, 5,152,243,236,142, 5, 93, 53,184, 27,203, 96, 69,125,165,146,109, 4, 47, 6, 38,210, -220, 50,225,179,157,213,169,115,241,236, 54,171, 93, 73,242,231, 3,242, 52,192,147,100,203,198,138,161,245,230, 76, 61, 40, 53, -154, 82,122,210,150,188, 38,148, 98,172,217,185, 63,163,140, 7,179, 64,212, 66,223, 71, 66, 85,152, 71,170,147,150,196,167,219, -182,254,142,116, 81,136,234, 24,217,224,187,176, 16,172, 63,143,220, 0, 0, 32, 0, 73, 68, 65, 84,152, 84, 56,150, 74,214, 74, - 23,236,247,228,124, 71,236,122,226,237, 11, 95,222,218, 44, 76,187, 1, 57, 23, 68, 39,123,241,207, 34, 50, 84, 56,219,217, 15, - 54, 43, 66, 36,188,209, 35,175,245,254, 41,206,112, 17,209,210, 33,227,228,251,233, 22,150,110,249,166,114,105,114,109,149, 98, - 41, 56,179, 80,111,205,132, 93,159,101,171,234,206,253, 22, 60,100,116,159,151,169, 6,135,138, 78,106, 10,167,206, 25,208, 55, -138,220, 55,101, 44,147,117,238, 4, 65,179, 34,179, 34, 15, 2, 97,223,193, 31, 78,132,159,233,225,157,119,224,230,104, 35,137, - 90,237, 50, 47,163, 83,227, 58, 11,184, 9, 17,174,127, 31,253,110,133,235,132, 60, 78,176,127, 1, 31,205,232,251, 19,245,106, -102,174,166,143,200, 77,168, 83,237,210, 78,219, 76,233,134, 14,246, 66, 63,138, 29, 84,125,128, 65,148,212, 7,194, 27,157, 97, - 79, 85,109,250,127, 85, 40,199, 74,222,120, 51, 83,180,131, 42,103,150, 72, 89,201,141,254,102, 21,232, 92, 44, 44, 38,119,172, -105, 88, 85, 86,153,154, 36,208, 55,145,139, 39,232,167, 50,241,123, 59,250,167, 51, 23,243, 72, 95,109,106,112, 88,224, 78,171, -162,167, 29,216, 30, 69,204, 88,132,235, 0, 59,148,238,233, 68,248,131, 61,221, 89, 7,159, 78,240, 86, 71,204,231,244,183, 10, -239, 29,144,169,176, 15,107, 8,143, 21,175,174,120,175, 27,160,217, 73, 96,138,156,164, 81,137,223, 26, 85, 97,138,208,205, 74, -188, 45,212,243,140,220,102,228, 22,208,143,140,125,208,125, 30,222,122,139,240,107,255, 62,250,223,222,194,207, 38, 35,180, 29, - 42, 57,183,253,235,170,118,223, 66, 93, 6,177,209,252,220,146,189,234,157,192,150,192,194,180, 61,193,190,254, 36,252,166,167, - 46,182,220,162,182,207, 44, 62, 54, 21,223,109,223,197, 97,110,215, 18,150,165, 46, 75,236,235, 6,127,115, 2,159, 49, 58,164, - 15,119,253,114, 54,122,156,250,200, 93, 28,122,181,118,236,139,210, 88,194,162, 36, 95,173,242,118,168,246,254,231,230,170, 76, - 85, 40,190, 19,173,122, 39,232,165,178,229,161, 46, 5, 69,217,118,160, 77,216, 25,214, 11,173,180,247, 58,250,238, 72,155,207, -219,173, 94,193,236,113,147,194, 88, 42,217, 3,176,114,179,104, 57,146,205,239, 36, 99, 53,180, 68, 52,245,239, 95,130, 11,197, -132, 89,124,188, 95,219,254,222, 5,167,209, 51, 49,170,249,154,205, 52,148,172,187, 78, 25,205,213,163, 93, 87,177, 89, 8,137, - 48,116,238,106,169,126, 49,182, 66, 84,209,208,118,197,193,131, 86,100,249,122, 43, 70,214,254,121, 11, 27, 65,130, 79,250, 92, -208,165, 74,205,117,141,153, 77,182, 87,143, 41,217, 36, 13,152, 75, 49,165,247, 52,218, 69, 94,171,231,139, 87,247,129,251,192, -172,235,237,253,119, 81,100,187,216,150,139,212,239,231, 46,245, 12,195, 14, 66,100, 30,109, 74, 33,209, 21,231,117,182,239,211, -211, 53, 55, 50, 96,179,197,185,125, 13, 49, 13, 0, 14, 14,211,141, 57,109, 83,197, 45,222,214,214,241,171,200,114,226,180,255, - 21,163, 1, 96, 68, 96,151, 18,195,238,140, 41, 4,174,111,175,169,243, 76,148, 96, 40, 96, 47, 17,171, 4, 74,201,228,226,190, -114, 79,124,195, 67, 93, 8,193,190,108, 12, 27, 82,156,117,231,179, 86,166,155,107,202,120, 68,106,117, 77, 64,178,245, 71, 12, - 14, 4,210,101,133,150,194,127,244, 6,204,123,216,223,160, 31,102,248,221, 11,248, 63, 59,120,119, 34,228,137,110, 63, 26,138, - 50, 86,166, 16,184, 21,203, 74,215,121,166, 74, 71, 14,137, 58,103,186, 24,169,177, 67,166,105,121,177,178, 38,227, 94, 43,164, - 82, 9,169, 50, 96,251,167, 40, 32, 73, 40, 33, 80,106, 37,182,180,162,222, 71, 79, 53,210,237, 6,250,121,164,203,217,121,186, - 9,238,157,193,189,206, 72,100,231,103, 72,159, 45,212, 96, 82,120,212, 59,201,202, 78, 99,217, 5,179,139,197,100,251,119,173, -182, 5, 75, 59,100, 31,144,161,160, 23,238,113, 74, 88, 18,219,117,134,155, 74,185,202,112,116,142,187,248, 40,221,253,148,122, - 44,102,163,107,106,197,132, 93,246,131,239, 18,198, 66,185,205, 72,141,132,183, 58,240, 8, 82, 28,154, 98,164, 23, 59, 96,195, - 89,130,144,145,127,253, 19, 80,238,155, 56, 78,171,217,215,202,108,197, 7, 45, 93,229, 77,235,183,175,247,240, 61, 53,107,221, -160,232,143,103,248, 81, 70,127, 52, 81,110,103,227,186,155,110,143, 17,155,190,132,118, 99,232,234,201, 78, 54,245, 50,123, 79, -187,220, 3,116, 5,186,243, 72,120,173,131,157,183,201, 79,103,234,209,187,202, 96, 69, 75,112, 27,210,178,131,212,187,233, 86, -126,104,139, 43,225,179,154,160,112,242,253,139, 84, 83,246,235,193,120,253,225, 53,120,188, 39,188,181, 35,188,123,228,252,122, -226,126, 54, 93,225, 81, 78,119,180,114, 71,188, 86,212,132,123, 83,128,171, 32,116,185, 18, 62,152, 8, 95,187, 37,158, 9,188, -181, 67,222,222,145,126,193,235,130, 15,143,200, 33,115, 76, 54,205,136, 97,221,142,212,176, 65,183,202,102,191,168, 39, 13,204, -199, 46,188, 18,160,238, 51,117, 95,136,185,192, 62, 65,126,110,175,123,247, 26,200,125,194, 95,249,139,232,255,250, 55,209, 23, -230, 91,215, 98, 22,206,188,181,216,137,251,165, 27,229,207,217,250,169, 42, 83,222,172, 49,218,250,187,222,233,142, 27, 99,122, - 51,126, 80, 62, 14,147,183, 67, 95, 92, 21,191,134,175,148,176,109,242,117, 81,114,181,215, 60, 87,159,232,213,109,215,189,190, -102, 77, 45,215,184, 4,205, 51, 95, 89,215,122, 45, 52,165, 46,157,241, 93,125,128, 3,173, 48,166, 58,190,167, 77, 94,232, 76, -165, 50,185, 60,165, 16, 9,162,116,161, 82,171,186, 15,126, 19, 12,162,235,183,216,194,129,182,239, 99,227, 19, 76, 77,112,231, - 35,210,165,106, 68,137,181, 34,161,105, 6,132, 89,132,169,218,247,209,178,230, 23,207,122, 93, 71,181, 13,151,159, 17,170, 8, -157, 88,160, 80,221,168,186,181,182,181,139, 3,108,157,120,102,117,141, 17,206, 12,230, 99,223,108, 37, 64,234,145,100, 80,147, -128, 43,184, 53,155, 39,218, 71,229, 75, 64,149,119,151,161,133, 1,249,104,186,170,175, 53, 54,249,231, 77, 24,183, 92,236,222, - 0, 68, 49,176, 77, 3,142, 5,223, 51, 75,176,241, 51, 33, 81,197,246,197, 69, 33,231,153, 60, 79, 80,243,130, 48, 93,119, 56, -130,148,130,164,100,148, 60,103,128,200, 73,218, 81, 88, 70,241, 73, 2,195,176, 35, 14, 61,199, 92,200,121, 38, 4,219,215,235, - 60,155,142, 43, 37,234, 56,218, 62, 60,218,121, 41, 77,119,224, 48,155,232,239,107,169, 45, 29, 45,218,179,181, 88, 26,101,137, -222, 93, 32, 5,219,108,244,118,161, 7,103,178, 32, 12, 41, 17,186,142,155,156, 57, 28, 15,224,104, 87,137,209, 83,250, 10, 37, - 59, 30,214,167, 17, 18,215,231, 90,189,112,176,232,214,206,128, 67,110, 91, 45,185, 50,229,137, 50,142,148,146,237, 30, 86,161, -150, 66,150, 98,144, 51, 57, 77,198, 11, 64,226,193,111, 26, 56,165,190,135,188,249,159,195,103,254, 30,252,177, 9,190, 61, 32, - 95,191, 64,190,115, 78,250,104,102,120, 54,115,185, 31,185,159, 11,207,146,114,211, 23, 74,151,208,216,145,210,206, 59, 22,179, - 99,148, 90,201,146, 40,209, 84, 90, 85,102, 38, 81, 58,181,125,131,198,134,218, 19, 68, 51,177, 88,114, 91,223,153, 40, 33, 6, - 65, 14, 19,253,229, 64, 87, 38,122,177, 86, 95, 46,206,145,221,206, 60,206, 82,140,253,156, 3,114,123, 64, 59,123, 72, 92,253, -101, 7, 74,209,149,136, 82,163,237,159,230, 10, 41,161, 15, 6, 27, 29, 93,143,232, 7,123,235,186,167,140,142,149,122,171,246, - 6, 84, 19,204,145, 2,225,194, 2, 39,202,213,108, 7,211,130, 35,179, 17,101, 80,108,122,208, 69,187,244, 71,251, 59,234,211, -137,240,102, 66, 30, 69,120,233,115,192,217, 31,215,234, 30,248,127,177,131,207,188, 3,123,167,211,213,217, 58,116, 29,157,177, -217, 65,234,161,255, 50,148,223,131,169, 32,207, 20,254,244,206,138,150,167, 51,250,124,164,220,204,228, 99,177, 45,129,159, 73, - 73, 76,140, 83,155,224, 40,216,222, 50,134,213,122,214,162, 31,131,119,234,157, 96,138,247,123,201, 94,131,171, 66,125, 62, 83, -246,133, 41,251, 78,178,200,178,119, 92, 15, 79, 59, 72, 75,221,144, 30,117,211, 77,183, 25,237,114,177, 31,237,245, 45,183, 16, -118,160, 15,225,242, 3,120, 59, 19,238,247,244,221,145,243, 99,161,235, 44, 55,160,212,230,180,216, 40,184,155,237,164, 29,218, - 5,142, 1,110,147, 48,236, 11,225,253, 3,242,176, 39,156, 39,120,144,144,207, 12,116,163,243,170, 63,130, 48, 22, 38,191,216, -131,216,248,183,137,232, 66, 16, 82, 16, 75,223,219,142,141,221,222,180, 37, 69,182, 93,106, 41, 16,143,217,224, 71, 55,189, 65, -129,242, 55,129, 47, 26,180,232,209, 63, 71,248,245,255,131,250,215,158, 89,246, 80, 88,193, 45, 86,114,110,152,156,117,213,175, -137,191, 95,125, 88,117,202,101,227,183, 95, 92, 85,156, 70,188,173,223,183, 95,116,133,213, 67,231,174,208,149, 60, 23,169,193, - 10,211,192,202,133, 95, 44, 65,155,113,100,105,169,101,117,189,247, 91, 33, 39,185,145,181, 60,168,198,119,226,213, 47,219,186, - 20,129,250, 19,139,164,101,197, 32,178, 8,238,106, 27,138,251,251, 61, 58,230,193, 87,245, 4,132,206, 59,183,105, 73,118, 51, - 78,122,254,216,110,245,227, 49,181,230,217, 14,248, 18,111,243, 26, 42, 9, 93,236,123,206,141,244,208,159,122, 2,161, 41,205, - 23, 93, 54,187,224, 38,249,242, 53,100, 64, 93, 3,176,186, 40, 52, 8, 73, 2,153, 96, 17,160,178, 38,159,213,106,211, 75,235, -194,237, 97,201,190,126,144, 54, 98, 14, 98,163, 48, 23, 88,202,202, 39,181,188,245, 90,214, 78, 83,130,167, 72,174,130, 79,196, -199,224, 33, 46,113,170,108,166, 53, 65, 44,102,184,233,180, 36,246,246, 62,214, 21, 41,216,210,246,170, 4,230,121, 98,158, 39, -239,208,213, 3, 82,140,254,103, 49,163, 38, 20,211,152,124,175,172, 39,122,149,101, 22,231, 98,206,174, 55, 50,157,198,200,124, - 56,218,186,184,235,200,174,254,151,198, 2,152,103,223,119,219, 97, 22,155,171, 69, 65,106, 65,186,206, 59,251, 66, 12, 22,149, - 90,169, 86, 68,181,168, 87,239,108,108, 66, 32, 43,163,221, 9,112, 54,149,240, 85, 67, 8,212, 24,217, 79, 35,101,158, 22, 33, -158,196,232,133, 77,166,228,201, 5,114,155, 41, 37,235, 24,201,196,127,137,110, 24,144,126,160,148,194,148, 39,230,105, 50,207, -125,201,110,163,147,211,216,228, 45,143,162, 37, 44,250, 89,156,136, 59,224, 30,240, 42,196,255, 18, 30,252, 16,249,242,223,129, -159,251,159,225,159,121, 23, 94,222,194, 7, 17,249,127, 7,194, 87, 47,121,229,247,247, 60,248,241,145,219,219,145,167,103,145, -151,231,231,148,148, 12, 8,147,122,251,248,141, 35,104,101,154, 45, 90, 48, 71, 53,152,134, 31, 21, 83,181, 75, 37, 69, 19, 42, -149,224, 10,108,236,197,175, 83,165, 83, 69,135, 1,158, 31,153, 52, 64, 55, 64,183, 67, 94,102,226,152, 9,181, 32,146, 9,211, -104,240,146,115, 80,153,225, 92,144, 55,122, 52, 5, 36, 76, 54,206,232,173, 75,151,108,187,118, 8,232,141,162, 31,102,234,187, - 35,243,213, 76, 61,102, 51,253, 91, 0, 51,210,131, 68, 27, 77, 74,173,212,234, 7,154,143,181,151, 64, 7, 31, 71,114,163,132, - 2,225,205,206,148,242, 25,234,143,103,202,251, 19, 97,215, 17,191, 28, 76,129,127,163,200,220, 66, 97, 34,188, 3,242, 39,223, -128,124,223,118,233,181,218,101, 87, 71,155, 99,203,224, 51,187, 47, 65,255, 69, 56,252,109,120, 89,224,162,131, 55, 7,184,154, -145, 39, 25,125,154,169,215,153, 50, 25, 29,174, 41,124, 61,209,150,226,137,123, 65, 44,246,213,138,126, 37,185, 48, 46, 5,207, - 77, 23,232, 37, 16, 31,154, 53, 11, 5,189,206,212,103,133,114,240, 4, 52, 87,164,235,162, 8,150, 53,132,196, 59, 62,241,139, - 60,250,101,210, 58,249, 50, 41, 58, 42, 50,123,142,183, 96,220,253,250, 4,226,219, 72,255, 0,125,109, 36,188,217, 19,223,235, - 56,223, 23, 46, 10, 28, 61,121, 77, 54,130,182, 46, 8, 26,117,201, 1, 87,177,130, 99,246, 3,255, 44, 40,233,101, 37,124,255, - 64,191, 19,248,210, 37,114,127,128,207, 7,186,217, 23,184,207,143,132,177, 18,211,218,177, 53,203, 92,240,177, 91, 12, 45, 45, -107,205,239,145,141,141,187, 93,172,110, 85,166, 30, 42,229,118, 38,125, 56,160, 31, 78,200,197,223,130,248, 73, 24,190, 0,115, -143,124,233, 83,200,163, 23,232,143, 39,100,103, 54, 45,241, 48,165,150,134,189, 44,125,151,221,116,181,194, 75,238,112,244,117, -147,154,229,157, 82,235, 60,150,162, 64, 86,187, 14,117, 19,238, 34,156,192,105,116,177,116,121,184,146, 3, 74,244,174,225,169, -229, 90,215,182,115, 85,138, 46, 81,110,158,251,108,239,111,192,226, 52,139,174,113,146,170,119,109,115,178, 57,175, 90,191,212, -246, 3, 77,205,111,234,229,193,247, 19,147, 23,121,109, 39,154,125,218, 96, 25,236,235,197, 89,221,251, 92, 89, 95, 63,217,236, -206,219, 89, 89, 8, 11,114,247, 36,217, 66, 21,159,220, 26,132,178,138,235, 82,170,191, 30,234,154, 32, 49, 16, 77,169,203, 8, - 62,122,204,111,241, 28,139,224,133,109,241,244, 74, 75, 59, 50, 91,110,168,153,144,231, 37, 30, 88,154,189, 82,140,117, 63, 78, - 6, 26,145,104,239, 9, 33, 17,130, 41,167,181, 89,190,100,179, 8, 49, 68, 29,177,235, 61, 93,175,248,206,216,157, 56,110, 71, - 19, 54,158,205,102, 33,107,115,142,170, 11,217,206, 46,110,123, 40,151,240, 16,116, 29,107,187,232,121,158,102,230,105,180,251, -192,199,237, 91,241,157,180,226, 36, 37,202,220,192, 49,110, 21, 91,132,188,222,240,133, 64,215,117,244,253, 64,232, 59,142, 57, -147,231,217,186,218, 16,208, 89,109,245,219,245, 6,228,241,137,174,249,245,173,144,180, 26,182, 24,122,188,165,190,121, 65,169, -234,152,229,166,149, 73,209, 4,123, 13, 34,227, 1, 80, 1, 83,221,199,174,183, 2, 10, 37,249,250, 98,156,103,131,192, 56,120, - 71, 60,198,120,158,103,242, 60, 90,227,184, 20,169, 97,227,172, 49, 28,108,140,137,216, 15,182,130,158, 38,166,227,129,121, 58, -218, 26, 65,218,132, 76, 78, 48,208,252, 68,190,196,106,255, 76,242,225,159,128,123, 95,128,238,179, 16,223, 66,229, 13, 8,191, - 4,225, 87,161, 87,228,193, 15,224, 19,127, 11,190,244,219,112,245, 28,253,214, 5,241,127, 59,231,254, 63,158, 57,127,145,120, - 92, 18, 55, 73,216,239, 6,198,190,163, 28,143,148, 58, 19,242,100,111,172,216, 88,201, 66, 20,140,232,149, 69,136, 18,173,163, -204,133, 73,205, 82, 39,126, 1,132,169,112,126,121,193,144,206,209,253, 51, 36, 14,132,112, 15, 61, 84,166, 81,169, 7,165, 79, -129,238,246, 64, 55, 30, 56, 79, 66, 26, 18, 81,133, 24, 10,225,195, 9,162,169,214,229,237,138,124,242, 12, 46,146, 29,120,199, -138, 94, 85,202,211, 76,253,254,129,195,213,145, 43, 9,148,110, 71,234, 33, 81,232, 37, 19, 45, 93,216,171, 88, 91,136, 73, 10, -132,251, 3,220, 90,199,154, 58,150, 28, 99,201,106,182,180,217,214, 10,225, 81,103,252,231,171, 66,254,222,209,168,125,159, 31, - 8,175,184, 12,252,104, 45,177,124,241, 12,238,189, 99, 70,114, 81, 23,197, 29, 13, 50,163,254,161, 79, 3, 12,127, 6,234,143, -225,240, 3,248,102,129, 79, 14,166,254,127,126,139,190,152,168, 55,153,114,156, 25,139,217, 6,219,126, 46,184,192, 40,109, 46, -159,118,113, 5,223,163,167, 32,116,161,218,255, 86, 8,187,128,220,235,221,107,175,150,122,118,147,201, 69, 77, 36,215,118,161, -106, 32,148,176,209, 87, 45,143, 92,109, 51, 18,161, 95, 38,106, 62, 82,174, 78,213,205, 25,210,193, 14,154,239,127, 3, 62,247, - 16,194, 99,184,124,134,188,209, 17,239,119,156,189, 24, 57,175,112, 83, 76,108, 52, 97,187,212,182,251,236,116, 69, 73, 46,121, - 37, 30, 29,124, 91, 97,151, 11,241,106, 38,127,127, 34, 61,152,224, 51,150, 29,192, 23,206,237, 98,255,142,194,139,153,144,179, -141,118, 13,118,215,226,182,236,188, 9, 38,248, 59,129,114,132,245,210,148,205, 69, 81, 34,212, 92,168, 87, 51,250,116, 66,190, -113,134, 94,124, 15,145,255, 10,230, 95,131,240, 0,250, 55, 8,127,225, 12,254,139, 35,241,211,174,206, 86,221,216,202,238,254, -167, 46, 4, 58,145, 21,152,115,162, 92, 63, 13,173,244,234, 62,178,196,180, 4,124,236,104,130, 39,238,140,188, 33,248, 72,189, - 46,138,246, 86, 64,157,100,160,123, 14,145, 44,186, 10, 79,227,162,154, 86,164,157, 93,101, 5,116,108, 25,246, 77,172, 28,219, -107,187,116, 67, 27,241, 88, 19,118,105,245,194, 74, 23, 11,230,174,237,211,117,189,208, 75, 53,198,211,194,199,103, 85, 44,175, -119,214, 38,176, 69, 88, 44,137, 34,107, 87, 42, 85, 23,186,156,184,111, 60,122,161,155,213, 92, 22, 89,149, 94, 42, 29,149,178, -241, 60,154,157,183,122,168,203, 10,180,105, 1,142,109, 29, 82,138,241, 52,250, 70,137, 43,153, 90,178, 91,248,100, 17, 4, 6, -177, 46, 80, 67,103,202,123,218, 14, 54,227,158, 37, 98, 10,148, 26, 29, 61, 26, 60, 25, 44,184,157, 78,168, 46, 98,147, 16,109, -207, 92,178,237,212, 67, 92,133, 95, 98,221,191, 46,194,200, 86,166,132,197, 43,174, 34,148,146,109,132, 92,117, 5, 85, 5, 79, - 15,115, 79,250, 60,102,166,241,136,214, 76, 45,142,111,221, 20,107, 11,197, 48,117,246,207,180, 56,211,221,139, 61,223, 53,203, - 18,150,147,232, 58, 19,199, 21, 96, 26,237,146, 76,187,222, 38, 76,213, 34, 83,107,223,145,247,123,175, 75,130, 79, 3, 32, 23, - 11,205,137,193, 20,249,101, 89,139,232, 34, 26, 53, 58,173, 39,241,165,232,238, 12,221, 20,178,129, 46, 70, 82, 99,177,187,112, -173, 8, 20, 87,223,199, 16,189,216, 10,228,134,117,157, 39, 23, 17,234,146, 64,103,231, 70, 88, 66, 39, 36,216, 10, 96, 42,133, -121,191,247,232,216,188,234, 26,126,146, 53,117, 51,210,210, 45, 85,114, 19,178,147,202, 47,127,141,240,137,175, 33, 95, 72,240, -115, 17,249,147, 3,188,125,142, 62,122, 0,221,231, 64,126, 5,228, 95,129,240, 87,225,236,219,200,227,191, 1,159,251, 26,250, -143,119,196,175, 92,112,249,245,204,249,115, 24,199,204,129, 61,199, 62,112,211,247, 4,157,157,225, 43, 12, 82, 25,164, 46,123, -233, 54, 82,202,197,132, 38,227,146, 71,108,135, 73, 42, 74,188,247, 10, 90, 59,142, 53, 18, 46, 31, 34, 50, 80,247, 7, 38,141, -148,144, 97,156, 97,154,185, 8,194, 69, 12,156,107,165, 11,137, 46, 36,250,155, 66,156, 15,196,151,145, 48, 59, 13,227, 97, 71, -221, 11,220, 84,244, 22,244,166,146, 75,101,127,185,227, 56, 43,181,206, 70, 22, 14,137,210, 91,186, 90,157, 51,177,181, 36,206, -108, 15, 40,177,183, 17,229, 33, 55, 88,139, 34, 73,136, 41,160, 89,225, 96,173, 93,120,188,131,203,153,242,193, 76,249,246,193, -108, 97,159, 30, 8,111, 12,240, 40, 34,143, 35,188,246, 10, 76,131,117,171, 57,175, 4, 57,205, 6,148, 9,201,194,102,244, 5, - 28,255, 71,120,118,133,126, 15,228, 47,247, 86, 8, 60,155,225,186, 82,246,153, 50,155, 10,187,141,146,183,108,243, 70, 66,146, - 85,139, 98, 58,160, 69, 32, 23,216, 73,101,168, 74,188,236,144, 55,147,157,188, 71, 69, 95, 22,244,214,172,108,217, 51,215,205, -230,100,251,216,237, 90, 71,188,149,213,184, 9, 24,241,139,183,110,119,189, 69,208, 89,145,238, 96, 99,214,255,103, 68, 30,125, - 23, 94,255, 60,114,126,134,190, 62, 19, 94, 31,232, 62, 24,185, 87,102,110,146,121,214, 75,216, 72,149, 55,177,144, 33,108,146, -192,144,101, 58, 48, 2,105,159, 9, 47, 39,226,247,142,112, 25,144, 55, 35,188, 50, 32, 63,171,164, 12,212, 35, 50, 9, 33, 87, - 56, 22, 66,217,140,182,195,186, 58,168,245, 52, 79, 90, 54,169, 86, 49,174,246,190, 82,149,112, 51, 17,158, 38,210,144,224,172, - 67,245, 91,200,107,255, 3,236,126, 13,244,179,132, 95,253, 3,226, 95,191,161,222,204,164, 11,239, 52,239, 36, 54, 75, 93, 69, - 60,218,118,232,213, 61,206,149,141,222,117,211,180,111,130, 48, 52,152, 7,120,233,218,117,133,206,212, 37,166,204, 21,222,146, -144,133,179,238,107,113, 49,210, 97,109,136, 54, 87,168,171,235,120,162, 4,230,160,230,131,174,167,249,237, 45, 49,107,123, 16, - 45, 7,229, 86,125,200, 42, 54, 92, 47,223,150,203,237, 62,240, 22,190,225,226,170,162,106,251, 96,214,189,252,228, 54,199,186, -233,245,215,194, 69, 61,160,101,197,213,202, 29,174,190,110,230,242,226, 33, 63, 17, 39, 24,218,199,192, 72,132, 33,218, 69, 31, - 33, 87, 11, 46,169,139, 48, 78, 79,173, 97,178,249,187,219,168, 61,117, 72,215, 33, 82,137,197,199,171, 45,254, 86,172,120,137, -254, 1,205, 93, 79,137,253,226,102, 56,177,164,210,242,187,157,104, 23,182,209,167, 38,158, 82, 49, 30,124,168,230, 52,145,212, -249,106, 33, 44, 19, 23, 33,248,106, 32, 26,132, 69, 51, 90,149, 89, 29, 37, 44, 45,215,188, 44, 83, 24, 17,199,102,167,184,136, - 2,231, 82,152,199,131, 39,232, 21,143,148,245,120,215, 38, 8, 83,247,163,151, 12,185, 88,183,141,241, 58, 44,148, 68,151, 91, - 74, 82, 36,245,157,197,142,118,137,113, 46,204,243, 76,151, 34,221,112,198,205,225, 96, 13,202,176,227, 56,155, 32, 47,248,133, -169, 33, 88, 65, 83,138, 17, 16, 99, 90, 43,254,150,190, 38, 44,151,110,155, 24, 46, 84,101,145, 69,195, 16,188,176,153,107,117, -251,157, 21,197,154,243,210,157, 35,230, 92,152, 91,192, 78,105,197,207, 50, 66, 91,246,221, 49, 69,170,123,207, 75, 41,148,105, - 50,198, 64,206,139,117, 72,183, 46,146, 45, 77,242,206,133,126, 2,196,218, 8, 85,227,191,124,214,253,181,253,135,194,248,213, - 74,254, 7, 21,253,155,153,240, 55, 70,248,219, 55,132, 63,252, 33,114,241, 91,112,254,191, 64,255,155,144,246,144,190, 12,231, - 63,134,199, 19,250,250, 61,244,205, 14,121,116, 78,247,226,150,179,195,200,133,118,236, 36,209,213, 66,212, 66, 39,149,115,102, -118,193, 60,155, 65,203,134,102,101, 97, 14, 83,179,198,248, 8,169,203,149,203,159,254, 34,212,217,146,125, 30, 63,164, 30,142, - 86,105,157, 13,132,156,153, 15,183,140,227,136, 6,167,210, 53,188,101, 12,212, 46, 49,135,200, 52,103,226,205, 12, 47, 50,250, -222, 4, 79, 38,180, 56,209, 36,155,177, 37,136, 61,104, 34,221,134,117,239,248,131, 46,185,183, 50, 34, 73,168, 53,112,123,176, - 74,173,195, 86,224, 22,174, 97, 84,169, 24,132,112,110,190,110,125,225, 73, 64,175,245, 11, 20,142, 99, 69, 62, 40,132, 93,135, -124,170,135,159,234,225,222, 39,236,123, 41,142,130,229, 22,230,201, 91,178, 1,226, 61,232, 94,129,233, 43,176,255, 54,124,173, -194,187,138,252,211,247,225,102, 66,127, 56,162, 31, 29, 41, 31,140,204,135,204,193,116,122,107, 46,247, 86,179,233,159,253,216, -118,232,126, 25,117,209,224, 45,231, 65, 57,139,145,254,237, 29,241,139,231,200,121, 66, 95,102,202,119,143,204, 79, 38, 14, 69, - 57, 98,107,252,169,220, 25,221,222,137,122,144,150,209,236, 54,144, 62,153,150,240, 60, 5,210,235, 59,194, 39,118,240, 40, 25, - 79,127, 62,194,255,125, 3,243, 1,249,236, 3,255, 91, 70,228,186,160, 79, 11,220,102, 70,207, 10,216,122,226,171,255, 44,166, - 94, 54, 1, 75, 39,226,187,240,166,236, 55, 58, 97, 44,237,176, 14,112, 30,225,178,243,220,122, 65, 70,204, 86,216,155,205, 43, -228, 6,131,193, 5, 49, 43, 30,180,110, 70,244,219, 32,152,200,218,125, 74,109, 35,122,227, 97, 75,142,182, 63,120,244, 17,114, -246, 24,194, 47,192,229,119,144,219,103,212,223, 25,225,210,109, 93, 91,173,192,146,131,173,167,203,198,205, 88, 88,183,222,121, - 95,178,159,144,230,116,165,214,217,153,180, 22, 59,117, 19,195, 41,193,118,128,181, 49,184,197,133, 91,126, 25,182, 65,115,101, - 13, 61,137, 81, 72, 98,182,163,166,230,109, 49,160,178,137, 42, 69,215,174,120,171, 75,216, 90,234,195,102, 52,111,227,124,241, -233,145, 65,144,186,205,115, 27,197, 40,112,163,174,107,129,236, 19,161,217, 11,170,178, 93, 79,248,247,211,254, 93,145,141,247, -184,129, 30, 37, 80, 52, 80,176, 14, 76,252,189, 77, 98,151, 58, 2,163, 10,179, 36, 52, 6,186, 32,164,100,244,187, 73,132,217, -247,180,219, 52,210,224,207,101,117,192,141,138,160,169,183, 15, 92,158,144, 50, 47,214, 46,189,251,249, 12, 54,206,183,149,165, -141,132, 99,240,113,121,136,214,141, 46, 22, 62, 89, 46,166,208, 28, 9, 62, 46,175, 62,122,246,212, 30,227,178,123,110, 56, 30, -186, 18, 83, 90,226, 98, 45,143,219,186,236,198, 39, 81, 86, 32, 74, 16, 83,124,135,212,209, 13, 59, 19,124,149, 74,174,153,121, -154,108,234, 80, 11, 90,102, 47,222,101,233,140, 5, 75,208, 84,112,251,154, 11, 41,131, 56, 47,189,158, 68, 1,119,253,192,217, -249, 5,221,238,140, 18, 2,227,241,136,214,194,249,238, 12,217, 13, 76,135, 91, 82,236, 24, 67,224,240,242, 5,226,188,117,137, -201,138, 16,143, 33,141,169, 35, 72,112, 77,199,170,111, 88, 29, 45, 94,244, 5, 7,210,176, 22, 46,203, 51,169, 77, 20,111,212, - 73,205,133,228, 54, 67, 21,152,181, 26,228,199,247,223,141, 9,176,157, 60,181,247, 86, 99,103,240,174,105, 34,143, 71,243,154, - 55,229,255,102,213,117,114,161,235, 54, 34,152,143, 29,186,119, 49, 61,233,183, 6, 56,219, 9,247, 68, 56, 87,184, 95, 42,151, -165,114,249,213,137,139,223,135,179,223,136,116, 15,247,132, 47,190, 64,254,249,111,193, 63,117,137,190,254, 0,118,103,200,107, - 9, 36,161,111, 2, 63,117, 6,239, 38,194,243,129,203, 31, 84,206,191,119,203,195,227,200, 94, 51,210,139,117, 60,162, 76,174, -200,156,189, 27,152, 49, 33,123,219, 97, 76,185, 48,164,142,238,141, 55, 56,252,224, 93,194,163,199, 48, 41,229, 56,154, 29, 32, -194,116, 56,144,143, 35, 85,101,209,157, 69,169,198, 53,158,179,193, 45, 98, 71, 25,206,152,242,204,238, 56,123,164,104, 50, 97, - 79,136,104, 12, 72, 10,236,114, 37,234,145,177, 31,152,217,185, 15,117, 66,234,178,168,179,195,172,219, 81, 66,101, 63, 39,142, -115,230,181,243,202,227,168,220, 28,108,151, 30,147, 32, 67,103,252,204,226,169, 89,123, 65,111, 33, 60,238,209,108, 62,119, 57, -239,221, 79, 89,145,123,151, 80,122,219,161,151, 17,244,165, 93,232, 57, 26,167,149,100, 49,176,249,143, 96,255, 61,248, 64,209, -111, 84,228,103,122, 83,243,127,255, 22, 14,230,117,174, 83,179, 70,173,193, 31, 91,212,105,220,220, 12,193,243,128,163,119,183, - 73,236, 82,239, 9,164,203, 68,124,189, 67,238,123, 95,116,101,182,171,130,154, 42,218,187, 88,217, 88,133,164,169,106,239, 76, -142,151, 29,102,216,252,163,246,185,137,234, 56,173, 3,204,217, 2,109,190, 53,195, 47,188, 15,175,188,137,220,127,129,190,221, - 19,223, 28, 24,158, 31,121,176,207,236, 59,155, 18,136, 31,148,113,233,252,214,226, 97,123,169,169,243,126,246, 64,154, 11,114, - 59, 35, 31, 77,164,206, 9, 57,175, 38,139,107,205,144,138, 82,158,143,112, 95, 16,157,145, 81, 41,162,139,122, 95, 93,121, 29, -116,229,180,155,237,104,211, 1,183, 51, 32,249,126,125, 46,148,219, 9,185,138,200,251, 59,120,179,192,131,223,129,244,167, 64, -254, 34,225,215,222, 35,253, 79,123,234,245, 76,119,223,161, 76,242, 19, 6,108, 46, 36,106, 29,116,101,195, 1,192,213,250,126, -249, 55, 74,158,129, 92, 92,237,189,128, 20,149, 26,124, 87, 88,183,170,112, 19,148,181, 75,166,182, 49,165, 10, 53,250,101,173, - 43,132,164, 74, 96,212, 66,170, 78,199,114, 33, 27,155, 68,182,197,239, 45, 56,146, 84,204,230,234, 26, 20, 81, 61, 25,187, 23, -239,234,140,151, 96, 34,164, 78, 3,209, 81,176,101, 97, 8,152,186, 93,151,140,116,219,135,151,230, 79,119,108,109, 92,214, 76, - 62,210,110,194,185, 77,119,223, 64, 63, 85,221,254,185, 28,246,234,194, 57, 43, 48,134, 40, 36, 17,131,237,108,172,121, 57, 8, -115,118, 87,135,199,249, 53,237, 88,243, 90, 55,200, 22, 24,214, 53, 22, 43,113, 74,104,234,110, 89, 96, 52,219, 40,207,162, 30, - 80, 82,143, 36, 31, 31,175, 33, 59,117, 17, 2,106,195,183, 53,209, 74, 16,148, 98,221,164,154,187, 65,156,160, 38,226,192,148, -100,227,248, 42, 88,183,216,246,242,186,146, 7, 91,118,250,106,177,180,142, 62, 4, 33,246,118,161,231,121, 54,149,187, 11,214, - 74,173,214,113,150,246, 76,110,166, 51, 41,217, 51,208, 58,248, 38,156,172, 80, 75,221,100, 24,120, 86,122, 63,208,167, 14, 73, -157,137,198,242, 76, 31, 2,221,217, 25,251,105, 34, 84,165,238, 18,135,171, 43,116,158,221,226,101,163,247,226,246,185,246,255, -115,219, 69,202,221,181,150,158, 88,213, 84,117, 97,111, 44,102,183,170, 14, 65,138,190,158,114,210,161, 7,184, 76, 37, 91, 2, - 93, 93, 71,100, 75,158,253, 70,241, 47, 98,207, 83, 29,143, 20, 95,185,232,182,112,186,139,118,102,227,187,228, 14,228, 81,185, -195,169, 56, 61,120, 83, 44, 48,162, 28,189, 34,254,192,197, 29, 23, 59,191,228,115,229,222,126,228,193,111, 31,185,248,191, 2, -187,179, 91,226, 63,121, 69,248, 87, 47,209,159,127,132,190,253, 8,189, 22,244,252, 1,124,186,194,225, 0, 63,170,132,223,191, -224,242,155,133,139,143,110,169,115, 65, 43,204, 81,152, 98, 37, 39,187,140, 83, 88,105, 82,165,218,161, 54,228, 66,119,255, 33, -250,240, 85,228, 71, 31, 65,223, 51,125,244, 1,211,113, 68, 83, 64,111,111, 40,135, 3, 69, 10,125, 39, 11,215,153, 12,218, 57, - 7,184, 66,208, 74, 37, 48,165,142, 46, 5,130,206, 22,231, 55, 77,208,117, 4, 49,251, 0,131,144,242,140,212,217, 24,248, 65, - 8,201, 44,104,246,154,187,192,166,228, 13,157, 42, 48,206,194,197,195,200,131, 7, 21,125,110,126, 80,233, 65,118,129,250, 36, - 55,101,154,165,126,160,200,121,103,241,160, 95,216,193,167, 6,248,116,132,238, 1,228, 9,116, 2,110,236, 98,159,226,218,170, -197, 11,208, 27, 24,223,135, 15, 3,188,155,225,122,134, 63,123,110,139,223, 27,171,104, 52,219,127,215,182,235,194,201, 86, 27, -117,116, 59,144, 9,206,170, 22, 76, 36,215, 58, 18, 49,144, 75,188,236,144,183, 7,203, 0,205,106, 57,239,179, 90,166,140,195, - 90, 90, 12, 98,139, 37,213,159,176, 6,222,142,249, 83,104, 93,172,156,206, 61,125, 88,174,207,179,217, 41,223, 8,240,213,151, -200,159,125, 8,195, 61,228,205, 76,248,116, 38,125, 52,114,241,254,158,251, 69,153, 35, 28,252,176,109,227,193,184,233,226,156, -254,184,156, 79,179,147, 41,227, 12,247,174, 51, 97,152,145,120, 36,246, 64,119,110, 62,252,183,123,194, 92,224, 91,192,149,141, -165, 19,153, 48, 87, 27,189,183,213,169,172,151,168,110, 88,236,225, 78,135, 29,218, 94,238, 88, 41,177, 16,110, 38, 98,223,193, -203, 8,211, 19,184, 60, 64,252, 37,120,237, 93,210,191,243, 27,148,255,244, 37,220,247, 11,174, 29, 40,245,227, 94,115,101, 19, -213, 26, 54, 99,185, 59, 5,213, 66, 79, 91,118,134,235, 31,169,158, 95,223,130, 75,140,127,190,170,115,219, 78,113,251,245, 84, - 54,142,204,106,201,138,133, 74, 9,234,240,186,181,227,180, 2, 65, 23, 56, 80,113,116,235, 18,146,177,249,118,215,128,185, 53, -159, 58,168,144,168,116, 42, 30,184,178, 22,111,217,157,144,213, 23, 44, 45, 36,165,104, 93, 5,125, 75,161,105,190,223,206,122, - 93, 8,155,120, 96,214,215, 36,251,246, 60,139,172, 61,115,144, 37,173, 48,110, 10,168, 45,160,101,150,192, 92, 12, 89,171, 75, - 97,228, 5,141,174, 5, 85,241, 76,132,198,170,239, 93, 64, 55, 59, 98,185, 77, 3, 82,155, 54,182,159,177,218,249,181, 20,230, -213, 11,178,205,164,115, 29,157, 55,117,189, 91,228, 84, 23,193,106,187, 80,196,149,243,165, 22,164, 40, 26, 13, 26, 97, 99,239, -108,175, 89,140,132,254,204, 41,147,141, 33, 80, 55,163,228,149, 65,158,115,161, 78,147,137,205, 74, 65,107, 70,107, 94,126,120, - 89, 86,126,178,140,172,107,201,235,110,185, 61, 3,165,249,215,213,221, 80, 66, 55,244,116, 67, 79,232,122, 99,164, 56,188,102, -119,118, 14,169, 99,186,185, 97, 2,198,171, 43,234,254,150,232, 22, 54,109,130,187, 86,117, 71,187,224,107, 45,238, 99,151, 83, - 8,132, 63, 8,182,174, 96, 41,108,218,132, 65,181,161,138,163, 23,101,149, 24, 3, 41, 36,106,136,140,243, 68,157,166,229, 25, - 22,183,204, 89,162,154, 46,145,186, 16, 60, 62, 53, 59, 89,111,187,255,145, 77, 65,115,183,230,144, 19,202,229,233, 34,125,251, - 27,119, 46,245,229, 60,168,202,232,202, 61,193,194, 51,130,171,189,207, 6,225,114,128,135,192,195,121,230,149,127, 52,242,224, - 31, 93,113,246,234, 71,196,191,124, 15,249, 23, 30,162,159,120,149, 58, 93, 34,207, 4,186, 35,188, 38,240, 37, 65,190, 54, 16, -159, 76,240,188, 16,159, 22,250,253,209,162, 88, 35, 28,130, 46,163,137,189,167,145,134,185,112,241,230, 91,196,183,223, 34,124, -243, 27, 76,251, 43,242,225,214, 0,145, 37, 65,153,232,165, 48,196,232,251, 54, 99,196,103, 31,177,198,206, 71,102,170, 46, 9, -154,137,146, 44,231,125,178,139, 93,231, 76,149,142, 16,171,137, 72,250,129, 64,161,159, 50,193,217,146,218, 8, 82,234,202, 46, -177,216,187, 33, 21,230, 16,153,107,101,190, 86,250,207,158,195, 91, 21,253,238,232, 73, 62,254, 33,235,212, 40,117,209,238,235, -120,191, 35,124, 98,128, 79, 15,240,185, 8,143, 31, 64, 57,179, 11, 93,247,118,161, 31,227,102,110, 58,152, 72,110,254,177, 49, -225,175, 20,125, 81,204,102,246,120,128,235,108, 59,122, 15,138,209, 90,151,131,190,113,204,131,172,137, 83,178, 29,233,184, 80, - 40, 96, 35,212, 20,161, 43, 74,220, 5,194,195, 14,121,165,183,155,248, 88, 96,175, 14,185,112,138,220,194,102,112, 25,148,119, - 95, 4, 54, 1, 28, 91,164,232,230, 87, 48, 37,180,164, 22, 79,230, 63,235, 71, 35,220, 22, 27,139,127, 43,195,103,158,192, 59, - 15,225,209, 25,124,166, 16,223, 63, 50, 60, 27,185, 63, 23, 14, 81,150,241,106, 59,200,219,238,115, 89, 45,202, 50,113,180,130, -113,118,189,225, 65,137,215, 51,165, 19,228,195, 64, 56,143,232, 39,119,200,101,132,119,206, 44,207,253, 91,178,100,239,176, 47, -200, 92,220,225,192, 73, 94,178,174,247,235, 58, 46,151,205, 47,127,108,116,172,232,141,194,195,106, 19,152,154, 65,158,194,217, -151,161,254, 21,228, 47,125,155,244,215,255, 46,122,101, 67,153,234, 80,149,117,220,177,225,122,182,139,120,115,161, 47,227,185, - 13,120, 69, 55, 93,109, 3,188, 44,235, 24,117, 95,180, 24, 28,165, 40,139,128,201,192, 72,156,176,217,173,128, 51, 27,149,248, -173, 88, 75,182, 93,186,108, 46,105,101,193,247, 54, 66, 86,241,174,127,205,178,118, 0,204, 9,235, 67, 87, 65,231,146, 2,135, -227, 85,133,206, 79,176,124, 23, 44,227,211,190,153, 53, 35, 94,253, 32, 79,209,236, 74, 73,103,162, 26, 21,179, 46, 29,145,219, -209,252,224,182,112,150,184,120,234, 67,114,123,170, 86, 43, 50,216, 68,148,182,233, 66, 16,230, 90,201, 89,151, 66,172, 52,180, -238, 86, 61,239, 26, 33,245,175, 23,177, 78, 87,100, 9,220, 90, 4,136, 45,237,172, 81,242,138, 43,246,163,239,132,107, 53,207, -186,116, 61,226,209,165,102, 63,247,224,147, 48, 19,139,159,167,218,168,124,237,162,171, 4,103, 93, 20,140, 49, 94,107,241,239, -177, 58,210, 54,152, 71, 58, 88,160, 14, 34, 68, 85, 66,138,150,194,167, 94,168,182,238,126,158, 44, 69,206, 41,113, 11, 0, 39, -156,100,148, 46,187,250,234,133, 67,216,232, 38,212,178,219, 78,170,214,152, 18,221,176, 35,117, 61, 53, 4, 3,205,228,153, 33, - 68, 98, 63, 48,205, 19,135,105,226,120,115, 13,121,118,187, 93, 58,185,148,109, 58,225, 96,154,210,186,225,186,168,247, 37,108, -180, 61,173, 24,212,149,150,160,117,213,149, 7,127, 13, 75, 53, 96, 90,215, 37,164,235, 56, 78, 35,121, 28, 87,241,223,146,167, -238, 54,193,150,173,128, 90,103, 94,243,162,188, 23,130,231,173,215,117, 92,223,166, 73,155,144,169, 53,198,248,244, 30,215,143, - 67, 39, 78, 6, 17, 41,109, 42,231,217, 31,204,134, 79,188,174,150,149, 29, 49, 42,220,135, 17,206,147,112,255, 65,228,126, 85, - 30,223, 76,188,246,223, 60,225,222,111,188, 96,248,165, 15,137,255,246, 99,244,243,143,209,113, 7, 79,177,236,206,135,192,190, -179,125,242,183, 43,241,187,137,248,209, 76,186,206,116,204,164, 14,134,100,129, 49,215,147, 85,164,203,244,181, 98, 0, 0, 32, - 0, 73, 68, 65, 84,221, 91,159, 66, 47,206, 8,199, 3,245,230, 6,166,145, 46,218, 40,174,148, 9,237,130,251,150,237, 69, 42, - 85,201,193,188,238, 45,218, 48,182,189, 97, 45, 6,190, 33,160,169, 51,250,212,156,209,227, 30,173, 29, 49, 38,228,124,135,116, -103,200, 48, 33, 58,195, 14,100, 84,194,172, 54,202,154,109, 87, 18, 99, 36, 45,104,213, 64, 29, 43,245,163,137,244,197,115,248, - 66,103,129, 49,147,121, 49,101, 23,144,179,232, 17,145,129,240,184,135, 47,236,224, 51, 1, 30,222, 71,242, 67,247,104, 31,160, -236, 77, 88,208,102,140,187, 8,221, 25,240, 18,158,237,225,185, 67,113,114,134,199, 14,210,121,182, 55,207,113,239, 31,182,186, - 17, 88, 56, 98, 57,212, 38, 86, 82, 79,254,114,199,156,179,220, 98, 83,190, 11,244, 81, 9,151, 29,225,149, 14,206, 19, 34, 17, - 61,204,166, 6, 44,186, 68,104, 86, 86, 16,159,186, 25,119, 85, 96,234,169, 2, 94,252, 18,111,251, 66, 85, 36, 53, 35,124,179, -207, 8, 60, 47,232, 84,108,219,219, 5,244, 43, 55,200,235,231,112,150,144, 55,123,194, 39, 7,226, 7, 59, 46, 14, 7, 30, 70, -251, 89, 14,229, 84, 49,205,102,239,218,158,231,226,109, 65,244,125,252, 65,148,120, 93,216,133, 25, 25, 2,242,131,128,116, 1, - 13, 3,114,153,224,173,128, 28,109,167,169, 85,208, 50, 81, 35,164, 99, 69, 68, 23,156,107, 83,162, 7, 61, 45, 94,100, 99,153, -146,165,110,177,125,171, 30, 43,210,124, 86, 18,128, 29,132,183,225,254,127, 72,252, 79,190, 74,253,171,239,161,175, 36, 82, 46, -228, 77, 90,239,137, 0,109,243, 1,174, 62,147, 94,185,212,171, 80,238, 46, 99,189,234, 41, 76,166,229,129, 47, 23,157,202,202, -240,223, 72,110,164,173, 30,164,218,122,197, 47,180, 54,246,157,138,109,155, 90, 87, 94, 79, 46,120,150, 11,234, 36,137,109,251, -117, 54,151,123,251,217,162, 40, 73, 34, 41, 8,103,174,135, 24, 91, 16, 75, 83, 80,187, 45,203,124,229,120,220,168,189,240,177, -229, 88,251,110,175, 86, 7,191,232,194,123,114,194,152, 31,254,238,193,110,145,157, 65,117,137, 88,109,148,185,185,108,132,120, - 98,201,121,177,174,170,230,186, 76, 16, 62, 62, 12, 93, 11, 45, 89,180, 44,202,250,223, 45,163, 61, 34, 39,130,168, 22,205,147, -130,123,196,171,225, 65,187,126, 48,238,186, 90, 38, 0, 21, 3,193,164,206, 58,229, 5,103,106, 23,112, 21, 89, 38, 73,170,149, - 16,162,189, 30, 57, 47, 42,137, 16,251, 37,171,214,196,114,193,149,238,213, 88,243, 46,136, 83, 87, 62,169, 43,197,107,198,172, -100, 43,191,109,117, 18,184,202,212,178, 13,202, 70, 48, 18,214,204,242, 69,216,160, 30,220, 3, 49,117,116, 93, 71,140, 29,115, -206,140,199,189,189, 39, 67,207, 62,103,110,166, 35,199,219, 27,152, 39, 83,241, 75,216,116,186,174, 42, 23,243,159,183, 9,192, -214,215, 45,178,126, 77,221,120,245,101, 11,171,212,117,196,185, 29,137,247, 18,136,195, 25,183,243,196,180, 63,152,237, 44, 24, - 91, 69,116,179, 14,241, 47, 84,188,152,105,251,253,187,134,180, 86, 70,180,194,118,219, 16,233, 6,207, 44,119,133,239,250,241, -177,251,246, 31,165, 45,180, 63,249,131,159, 48,142,241,190, 42, 99,181, 81,204, 40,112, 85,225, 50, 40, 87, 98, 77,213,179,157, -240,254, 46,240,106,174,188,241,219,215, 60,252,135,183,236,126,246, 35,194,191,251, 10,250, 79, 60, 66,231, 30, 25, 20,198,108, - 63,240, 27,192,207, 36,248,163,137,240,189, 76,255,195, 91,226,205,204, 89, 52,132,232,189,122,164, 92,222, 99,250,229, 63,199, -252, 59, 95, 33, 93, 61,103, 56, 94,147, 58, 83, 53,206,215, 47, 12, 20,224,166,127, 98,132, 26,208,154,153, 8,236,220,130, 98, - 9, 72, 66, 23,253,192, 18,181,109, 91, 85,144,132,244,157,189, 33, 37, 35,121,134,121, 68,206,207,145,139, 29,114,110,164, 38, - 66,133, 51,123, 48,120,105, 59,240, 42, 25, 81,203, 36, 14, 82,145,206,148,238,245,187, 71,226, 39,123,120, 61,193,179, 98,243, -255,115, 65,206, 4, 25,133,240,102, 7,159, 31,224,179, 10,143, 30, 35,229,129, 75,155,179, 41,232,114,134,209, 88,244,210,230, -225, 65,225,197, 21, 60, 81, 27,185,239, 13,151, 38, 63,229,113,179,123,239,210,123, 95, 61,232,122, 52, 54,180, 98,108,241,152, - 85, 12,149, 47, 6,159,105,162,174,222, 89, 1,157,168, 1, 21,118, 9,121,212, 35,131,169, 82,153, 42,117, 86,223,177,110,210, -165,124,252,203,169, 99,229,228,177,148,141,237,169, 46, 23,222, 50,103,116,147,187, 93, 24, 92,249,148,225,201, 68,124, 39,194, - 77,134,175,189,132, 47, 63,130,123, 59,228,115, 23,164,247,103,234,237,204,189,167, 51, 57,185, 39,189,174, 43,134,200, 10, 7, -217,126, 56, 74, 49,226, 95, 85, 24,197, 66,137,186,171, 66, 56,203, 72,154, 73,239,187,223, 47, 6,184, 76,240,233,193,120, 67, -163,207,118,247, 80,123, 33,206,149,160,117, 25,197,159,168, 82,125, 92, 25,101,221,221,138, 99, 70,165,237,168,199,138, 76,213, - 15,202, 25,164,115, 60,238,167,145, 63,254, 31, 16, 63,255,235,212,143, 42,241,190,109,109, 26,180, 71, 78, 62,176,178, 77,162, - 89, 49,240,122, 39, 49, 85,148, 90,228,206,101,190,190, 81, 85,215,239, 89,116, 51, 6, 87,167,191, 21, 69,213,118,190, 82,170, - 67, 85,252, 0,114,229,244,236,119,107,239,172,242, 82,218, 37, 87,239, 36,181,157,130,113, 22, 86,245,230,123,107,127, 38,160, -110, 35,139,182, 63,245,189,209, 92,170,247, 89, 43,240, 68,169, 75,108,108,195,100,138, 8,146, 58,251,251,231,201,104, 94, 11, - 68,199,113,199,106,254, 95,203,151,143,144, 44, 32,100,137,245,118,245,190,162, 75, 44,106, 70,236, 89, 19,235,247,230,172,158, - 38,185, 94,216,139,179,195,159,122, 65,108,237,224,162,188,212,166, 73, 27, 18,105,245,106,180,122,241, 19,218, 5,179,196,156, - 43,177, 51, 58, 89,172,166, 22,111,217,233,235,196,194, 59,209,208,161,204, 54, 93,104,138,248, 90,137, 81, 60,254, 51, 82,138, - 79,111,234, 76,157, 45,166, 83, 99,178,179,174,174, 43,146,170,101, 93, 3,105, 37, 87,179,251, 45, 91,161,176,226, 12,197,253, -218,134,103,149,117, 4, 45,193, 56,229, 37, 47,153, 9, 77,160, 38,158,179,222,232,109,213, 63, 80, 49, 90, 86,122,151,122, 52, - 4,142,211,200, 60, 78,116, 49,114,156,102,170,142,204,165, 90, 14,200, 38,167,160,226,201,115, 18,189, 67,175,148,121, 51, 1, - 16, 57,249,124,156,208,146, 56, 53, 98,180, 3,212,125, 1, 92,132,196,197,227, 87,217, 31, 15, 72,169, 28, 85, 57,222,222, 82, -243,140,104, 37,134,206,233,122, 86, 52, 45, 22, 54,177, 98,166, 93,232,167,133,158,219,183, 55, 72,220, 19,231, 90,189,155, 15, -240,255,131,124,190,171, 33, 90,118,234,232, 66, 55,109,217,205, 90, 12,222, 49, 55, 21,175,239,138, 50,240,172, 10,103,230, 12, -227,182, 24,224,227, 42, 10, 79, 31, 8, 15,179,242,214,215,111,121,244,111,237,217,125,225, 25,225,215, 95,181,192,145,177,179, -127,225, 76,224,126, 15,143, 19,250,217, 10,223, 72,196, 63, 56, 16, 95,140,116,185, 48,236, 97,254,103,127,133,253,171, 63, 69, -247,238,127,199,120,251,220,236, 81,221,142,241,214, 4, 17,196,176, 16, 70, 69,226, 18, 13, 86,131, 82, 36, 27, 80, 37,177, 40, - 65,205,167,109,150, 17,201, 74, 96,166,106, 64,163, 47, 63,107, 37,104, 33,220, 92, 67, 25,145,116, 9,151, 61, 18,138, 9,184, - 10,132,123,138,206,150, 84, 22,102,165, 75,217,160, 42,179,209,230, 68, 2,250, 34, 35,169, 67, 94, 9, 80, 18, 18, 5,233,212, -212,213,159,218,193, 79, 43,188,250, 73,136,127, 30,246, 95,241, 18,254, 0,249,104,108,211, 92,215, 37,109, 47, 48,223,194,147, - 25,110, 51,154,189,109, 24, 20,222, 26,236, 38, 27,125,124,114, 8,182,146,199,224, 13, 97, 35,218, 90, 58,131, 54,250,246,189, - 37, 77,221,219,242,211, 85,108,236,120,225, 44,249, 62,216, 5,244, 66,215, 56,171,237, 72,125,211,157,182, 29, 89,240, 72,239, - 19,123,155,172,162,147,182, 83,151, 22,133, 21,163,141,193,178,249,224,245,210, 98,104,121, 50, 17,223, 24,208, 63, 56, 32,159, - 56,131,199, 59,120,125,135,124,254,130,244, 60, 51, 28,111,184,184, 46,228, 4,199,236, 95,183,174, 10,226,213,206, 41, 39, 43, -135,182, 27,206, 81, 56, 86, 8, 47,230, 37,208, 34,118, 1,237, 2,116, 88,204,236, 59, 3, 50, 85,226,204, 2,179,183,173,140, - 16,167,122,130,112,219, 6, 66, 44, 62, 84,185,139,199,242, 27,250, 38,192,116,132,249,187,190,210,217, 25,147,224,236, 87, 9, -255,241,231, 9,255,230, 55, 9,247,226,226, 36,111,251,241, 69,108,168,171, 53,113,113,133,149,143,119,136,181,174, 48, 69,253, - 56, 29,246,132, 14,215,250,155, 18, 54, 75,112,191, 50,150, 8, 81,173, 70, 39, 67, 86, 4,170, 11,214,174,171,114,230,227,243, -181,251, 98,131,221,244,142,184, 17,225,238,132,209,156,128, 94,196,189,214, 53, 35, 21,178, 68,102, 17,230, 54,194, 21,181,188, -245,205,208,150,182,139,181, 54,157, 26, 34,101,158, 44,104, 74,252, 66,151,176,137,243,148,165,192,140, 41, 57, 65,175,174, 32, -169,186, 6,216, 22,167, 11, 21,247,154, 87,133,172,213,186,255,205, 68, 42, 46,121,240,186, 92, 94,117,171,106,247, 41, 89, 23, - 87,113,162,108,100, 90,237, 98, 95,157, 12,178, 64,130,226,112,238,157, 96, 98,206,133,233,112, 67, 9,137, 34,137, 34,222,169, - 58, 36,166, 96,220,143,144, 44,133, 76, 61, 53,172, 8, 11,115,124,206, 51,250,255,209,245,118,177,182,101,217,125,215,111,140, - 57,215, 90,123,159,143,251, 85,117,235,163,171,219, 93,238,110,219,109,119, 28, 39,178, 19,199, 73, 72, 8,249, 80,148, 32,100, -132, 64,188, 16,161,136, 8,158, 64,138,120, 0, 5,162, 86,224,129, 7,144, 16,136, 7, 4, 15, 72, 8, 33,148, 40, 65, 74,136, - 66,136,132, 29, 59,182,227,182,211,137,237, 78,140,251,195,238,118, 87,119, 87,215,199,173,251,113,206,222,123,173, 57,231,224, - 97,140,185,214,190,183,170, 31,142,238,173, 91, 71,103,159,189,246, 90,115,206, 49,198,255,255,251,215,226, 7,151, 96,160,139, - 26, 58,100, 68, 60,136, 74, 35,124,165,135,209,208, 43,205,200, 73,167,149,104, 15,199, 28, 89, 18, 41,197,231, 16,170,251,178, -204, 33,138,123, 30, 99,138,177,118,111, 94, 84,135,169, 38,242, 56,145,198, 49,226, 75,103,196, 26, 85,178,231,137,164, 68,237, -162,180, 56, 2,174,121, 68, 13, 52,249, 90, 79,192,125,214,145,128,157, 89, 75,122, 39,202, 54,253,196,122,152, 91,215, 12,191, -110,123, 17, 94,185,127,143,116,125,205, 92, 27,207, 88,184,125,250,100, 37,189,233,121,141,220,147,221, 66,211, 80, 75,161,126, -196,134,126, 78, 76, 20,145, 23,192, 75, 47, 90,216, 94,168,149, 94,216,221,237, 67,186,247,168,212,135, 14,236,232, 2,156,234, - 21,249, 51,123, 17, 71, 23, 92,232,102,220,138,144, 35,211,250,164, 48, 55,227,166, 10,207,146,240,232,174,240,114,133, 87,191, -122,195,131,255,224,192,248,185, 71,200, 95,121, 25, 62,117,215,191,249,113, 2, 93, 28,167, 58, 9, 92, 42,124,125, 68,191,254, - 20, 30,188, 9,127,242, 47,178,251,250,111,162,239,189,199,188, 28, 25, 46, 39,110, 91,225,180, 84, 52,249,147, 87,173,173,228, -172, 38, 41, 78,249,130,234,192,160,238, 45, 23, 1, 29, 98, 51,204, 18,152,191, 16,100, 52,219,136, 85,234, 22, 16,217, 73, 36, - 87, 29,253,163,218,141, 78,170, 43,234,161, 44,167,134,188, 7,195,179, 19,106, 66, 27, 96, 89,140, 60, 20,164, 39,153, 61,170, -200,107, 3,242,178, 15,251,164,138,171,200, 63, 1,188,114, 1,187,191, 16, 60,247, 91,151, 72,183, 19,204, 21, 59,133, 40, 32, - 16,183,104,130,175, 62,243,168,211, 78, 93,155, 4,185,140,235,117,138,118,211,164,216, 77,243,254,160, 60, 47, 80,123, 78,117, -190,218,171,156, 72,165,230,212,173, 20,155,122, 78,130,238, 7,244, 58,123,181,170,130,157,188, 27, 96,139, 11,101,200,241,126, -100,155,136,173,155,121,220, 55, 61,224, 78,206,110,196,243,198, 67, 10, 26,135, 12,177, 8, 15,217, 75,190, 39,160, 15, 18,245, - 4,237,189,130,236, 18,122, 55,218,240,127,106,132,187, 35,242,201, 61,233,131,133,241, 84,185, 58,221,120,199, 38,195,161, 42, -170,182, 37,107,197,254,153,251, 24,226,133, 57,127,109, 1,243, 59, 25,211,211,133,146,207, 84,193, 73,145,151, 51,220, 25,176, - 55, 65,231,216, 61, 31,187, 79,208,250, 14,219,236,204,188,199, 11, 97, 16, 81,150,117,254,106,239, 59,151,234, 57,178,239, 27, - 60,252, 53,104,239, 64,186, 10,213,218, 53,242,123,255, 93,244,211,255, 25,242, 54,164,139,173,197,223,171,232, 62,207, 62,119, -185, 61, 39, 88, 78,120,117, 30,149,120, 61, 39,192,173,161, 21, 27,161,202,100, 75,109,107,141,115,133,222, 58, 82, 89, 49,177, -205, 43,139, 22,115,120, 83, 89, 19,243, 14, 65,118,155,158,179,167,157,221, 3, 38,129, 37,149, 51, 31, 93, 59,179,231,185, 70, - 32,197, 76,151,168,173,231, 86, 60,181, 77, 51, 53, 57, 10,202,196,217,238,218,122, 69, 84,163, 77,105, 48,140,200,180,119,123, - 86,109, 30, 46,164,225,249, 24,188, 85,211, 74,115,114, 28, 48,134, 61,236, 60,231,198,197,109,182,126,188, 37,198, 67,173, 54, -170,184,135,191,213,237,222,110,173, 51, 18, 92,112, 90,250, 26, 26,182,185, 30, 89,148, 4,246,131,249, 89,189,109, 35,136,117, -131,215,205, 1,144, 2, 72, 50,152,161,251,107,116,218, 83,159, 61,102, 62,222,114,210,129,197, 18, 85, 26,164, 70,149,228,126, -119, 4, 77,153,166, 25,202,226,226,219,228, 85,120, 69,168, 75,161,116, 65, 91, 93, 34,213, 76, 67, 57, 47, 27, 75, 66,125, 51, - 84,201,161, 78,143,123,190, 89, 79,110, 90,103,245,213,106,220,107,254, 89,166, 52,160, 57,252,215,243, 49, 54,212,231, 21,134, - 98,207, 71,152,114, 54, 62, 19, 17,242, 48,145,199, 9,178, 50,207, 11,182,204, 1,183,113, 72,112,109,205,223, 95,216,229,120, -206,186, 41, 43,202,214, 58, 96, 34, 54,117,211, 51, 4,232,139, 21,202,202, 17, 8, 47,130,120,152, 88,183,216,157, 16,242,241, -136, 13,153,195,211,199,212,211, 41, 52, 4,172,209,172, 61, 81, 46,165,193,181, 21,181,248,200, 33,174,177,189,208, 38, 63,255, - 85, 92,164,215,214, 81,206,139,169,136, 47,110,232,219, 4,254, 35,143, 10,190,230,150, 26,148, 46,188, 80,233,175, 58,116,235, -107, 84,232,141,115,230,180, 81,205,103, 75,214, 28, 97, 94,154,255,219,209,224, 86,225,131, 43,229,165, 6,175,127,233, 9,247, -254,194, 45,249,143,221, 69,254,227, 87,224, 99, 23,240,193, 8,143, 60, 71,220, 38,224,165, 4,156,104,175,127, 6,218, 7,164, -250,187, 12,237,134, 97, 20,198, 1,242,237, 1, 83, 35,153, 80, 37, 78,202, 6, 86, 23, 52, 85,100, 26,208,164,238,131,151,140, -100, 67, 99,246, 42, 23,206, 93,183, 15,234,154, 53, 44, 65, 17, 90,123,183, 99, 80,177, 6, 69,174, 51,146,129,203,134,212, 29, - 28,103,207,139, 31, 20,203,194, 48, 87,228,253,133,121,134, 97,167, 94,121, 46, 5,118,226, 74,241, 15, 10,114, 63,123, 91,234, - 22,184,151,224,161, 57,177, 79, 94, 66,150,191, 19,106,119,131,122,139, 45,226,171, 98,204,160,109, 55, 34, 79,102,236,231,159, -193, 93,129,135,193,135,159,129, 59, 25,246, 9,222, 15,144,255, 78,182, 15,168,190, 72,205,242,177, 67,183, 55,201, 25,214, 86, -113,244,101, 82, 23, 23,234, 40,232, 69, 70,238,142, 1, 23,151,213, 42,103,181, 33,203, 38, 0, 17,233, 41, 85,178,230, 67, 59, -251,252,172,210, 56,243,114,247,155, 82,165,111, 50,201,211, 73, 58,110,235,212, 96, 39,232,189, 1,110,149,246,205,133,246,157, - 5, 25, 19, 82, 11,124,233, 25,252,216, 53, 60,156,224, 83, 59,210,227,202,176, 24, 87,223, 57,120, 43, 54,193, 28, 49,176,233, - 5, 59,223,249, 6,115, 46, 66, 49, 7,255,145, 15, 13, 25,139,115,204, 39, 69,190,157,176, 4,242,242,132,220, 25,177, 79, 53, - 15,194, 41,128,204,180,217, 51,142,173,182, 15,141, 27, 76,195,159, 25,188,239, 85,178,221, 95,183, 26, 60,169,240,158,194,241, - 29, 56,125, 17,242, 39,232, 3, 47,166, 63,140,254,107,215,232,127,253,152,124, 87, 73,173,177,156,209, 98, 95,172,186,251,230, -210,133,144, 17,183,189,158,242,245, 92,127,164,231,221,132, 16, 26, 38, 11, 14,188,173, 94,103,107,219, 74, 82,123,245,216,147, -219,218,182, 2,184,134,163,174,227,199, 67,176, 38, 70, 83,199,167,246, 10,207,124, 35,236, 98, 50,117,133,154,211,210,186,143, -189, 67, 57, 6,223, 20, 82,241,150,110,193, 88,162, 98,172,154,144,148, 73,106,206,170,104, 53, 72,118,189, 37, 53, 96,187, 11, -191, 30,167, 83,108,228, 3, 77, 19, 58,184,106,168, 30, 15,171, 47,186,105,162, 36,159, 19,151,184, 6,169,139, 36,218, 54, 38, -144, 32,185,149, 56,147,181, 51, 48, 79, 63, 44,182, 23,132,154, 53, 64, 75,189,165, 59,132, 93,116, 10,177,199,218, 85, 57, 19, - 65,244,182,123, 83, 33,103, 39, 99,234,197, 30,189,186, 71, 59, 29, 88,230, 19,183,115, 97, 81,165,132,210,187, 83,224, 2,108, - 14,106,232,180,243,207,165, 69, 78,119, 39,214,244,239,139, 86,180, 68,139, 77, 52,193,144, 17,205,254,247, 94,169,170,103,120, -180,226,164,123,205,201,197,104,209,246,182,214,168,165, 3,102,188, 58,214,148, 93, 76,187,148,176,153,186,176,167,133,119,240, -195,176,148,179,229, 74, 97,208,196, 48,238, 72,121,160, 24,204,243, 28,209,165,217,157, 0, 34,148, 82,227,119,248,176,219, 70, -147, 99, 87,171, 61,159, 54,103, 29,123, 43,182,229, 34,124,168, 52,246,103,182,131,102,106,173, 80, 11, 7, 73,220, 62,125,202, - 43,151,151,124,208,140,229,224,244,203, 86,125, 92,184,234, 34,162, 80,108, 89,168,181, 98,165, 70, 39, 64,183,238,152,124,184, -242, 22,209,179,124, 67,215, 31, 61,135,165,144,239,221,114,127,177,245,126,254,255,210,191,122, 55,127, 30, 44,172, 63,178,198, -115,234,121,252,227, 11,189,253,118, 22, 34, 49,135,192,227,196,166,186, 94,162, 82,184, 81,225,118,231, 15,232,248,229, 91,242, -223,185,241,121,226,143, 14,158,168, 54,203,202, 89, 39,123, 28,167,237, 4,145,119, 73,239,127, 29,185, 63,145, 7, 97,119,156, -217,165, 16,115,201,134, 83,145,206, 4,181,202, 96,141,125, 86,174,166,204,176, 27,144, 65,209, 41, 33,151, 9,238, 13,126, 74, - 60,201,122, 44,119,129, 67, 40,213,155, 7,128,203,253, 1,125,121,132, 33, 98,245,118, 78, 51,146,218,252,160,112,145,144,187, -153,116, 87,201,248,130,111,197,189, 43,122, 1, 50,186, 21,206,145,237, 78, 91,145,151, 6,248,152,194,213, 15,128, 93, 32,135, - 95,136, 39,251, 0,243, 18, 43, 98,103,103, 38,184,163,240,179, 79,224,183, 79,216,163, 25,153, 27,188,146, 96, 81,228,245, 9, - 94,157,224,241,226, 23,120, 18,248,214, 66,251,237, 3,229,184, 56,247, 28,161, 54, 13, 21,177, 57, 36, 33, 52,105,201,186, 10, - 93, 72, 89,124,206,103,158,200,150, 31, 76,164, 55,119,200, 43,147,223, 77,223,157,177,111, 30, 41,143,102,202,161,113, 60, 19, - 3,153,109,160,160,222,194,110,182, 41,232, 58,236, 38,169, 48,168, 48, 38, 97, 63, 56,124,102,184, 59,144, 94,223, 35,175,141, -112,223,145,187,124,115,134,251, 2, 23, 81,178, 28, 13, 57,128,220, 17,248,160, 34,175,100,184,183, 11, 16,140,162,181, 33,179, -145,159, 45,171, 24,200,100, 19, 65,157,143, 8, 68,182,104, 77, 61, 19,211,145,194, 46, 85,226,126,200,126,205, 48,144, 81,224, - 50,251, 97,106, 48,228,132,179,234,101, 27,136,174,247,207,224, 35, 5, 73,157, 87, 29,179,116,141,255,238,127, 31, 61,135,154, -203, 4,175, 85,100, 47, 48,253, 4,200,126, 45,239,229,213, 95,194,254,250,239, 98, 57,129,182,231,230,234,231,170, 87,225,249, -127,176,182, 9, 41, 42,231, 62, 86, 57,107,185, 75, 84, 22,182,169,249,215, 74,127, 83,173,251, 89,119,179,166,173,115, 62,219, - 4, 69, 45, 42,229,206,198,239,249,229,213,132,114,230,205,174, 43,245,109,179, 5, 72,120,174, 53,123, 40,134,224, 30,240, 33, - 39,210,144,201, 17,252, 81, 3,114,180, 52,143,173,148, 97,244,192,166,174, 38, 31, 6,218, 48,193,184,195,166,157,255,174,243, -236,213,249,144, 33,143, 94, 49,151,133,118, 58,122, 12,108,242,182, 52,170,222,166, 87, 13,116,104, 91,149,207,117, 77, 2,220, -188,145,174, 77,168,155, 29,171,139, 32,251,225,241,236,222,146,149,134,231,107,233, 46,206,176, 41,124,202,179, 41, 53,152,250, - 93,196,217,131, 67,194, 45,237,133,241,229, 53, 88, 99,153,143, 28,151,202, 44,137,170,153,150, 39, 76,242, 6,118,233,136,218, - 46, 16,196, 60,199,189,139,192,130,119,222,172,110, 48, 35,186, 64, 48,163, 17,225,169,113, 93, 92, 91,236, 48,149,243,239,105, -214,176,226,213,121,181,141,152,166,241,218,152,209, 22,239, 2,108, 29,247,180, 97, 23,217,238, 53,206,245,104,226, 51,255,113, - 24,153, 46, 46,200,227,196,220,140,211,225,198,127,102, 31,249,136,227,151,169,109,165, 43, 34, 91, 85,155, 66, 99,213, 98,166, -221, 3,128,164, 39, 87,225, 86, 51,105,182,126, 96, 61, 86, 85, 67, 96,105,170, 72,171,228,148, 72,195, 68, 85, 23, 20, 30, 69, -121,252,244, 9,229,116,136,238, 69,116, 67, 35,138, 86,196,159,237, 98, 80, 79,135, 24, 81,180, 45, 66,248,133,137, 62, 1, 65, - 18,217, 6,109, 98, 91,128,147,124, 4, 96,230,121,157,187,125, 20,131,102,171,212, 69, 2,135,152, 66,225,217, 96,136,190,170, -198,236,168,179,175,123,229,222,236,188,114,119,101,244,100,112,140,212,139,169, 91,108,212,125,197,199, 65,184, 25,149, 87, 14, - 71, 30,252,247,111, 51,252,223, 55,200, 95,125, 25, 62,117, 15, 25, 34,239,252, 13,133,227,128,236, 27,242,206,251,200,165,186, -180,246,100,228, 60,113,241,184, 50,206, 11, 83,105, 12, 5,230,106, 28,171,119,244,181,129,148,138,230,130,214,140, 12,151,176, -223,251, 65, 97, 39,176, 31,189,229,127, 58, 65,137,184, 65,196, 45, 91, 39, 67,170,231,148,234,117, 70, 46,242, 26,130, 41, 26, - 54,171,253,232, 37,237,212, 72, 53, 99,195,136,126, 48, 81,254,233, 13,203,239, 30,105, 55, 13,189, 82,184,219, 96, 17,172, 8, -146, 11, 60,220,249, 83, 45,226, 41, 40,243, 63,246, 63,205,160,156,176, 99,196,176,246, 82,230, 66, 92,204,240, 79, 14,212,188, -208, 78, 11,250,181,133,244,125,131,255, 30,151,161,124, 43,226,136,182,177,121,117, 72, 7, 36,244,116, 33, 11,245,238, 38, 44, - 82, 54, 24, 77,138, 13,190, 11, 10,117, 76,232, 85,134,171,209,191,225,216,224, 81,165, 30, 10,118, 44, 44, 37, 40, 93,161,185, - 72,201,219,237,125,243, 44,109, 83,153, 55,182,106, 53,197,220, 62,171,127, 20,178,243,205, 83,122,111, 60,121, 70, 59,173,151, -123, 13,189, 74,216, 32,200, 28, 24, 89,105,216, 23,110,144, 63,185, 67,238,239,176, 55, 26,114,218, 51,136,103,212,223,121,231, -128,101, 33, 69,247,230,140, 32,187,158,100,211,115,170,244, 13, 65,218, 4, 90, 49,100,110,180,165,210,142, 5,125,164, 88,255, -165,239,140,200,171,187, 21,228,194,187,190, 33,182, 82,177, 98,235,125,228,130,163,173,156,150,190,211,174,146,235, 16,173, 44, - 13,158,137,219, 17, 31,188, 5,237,125,208, 7,241, 84, 93,193,195,127,157,244,211,191, 74,251, 27,133,244,170,146, 91,101, 89, - 67, 70,236, 57,226, 92, 39, 99, 57,237,139,109,241,235,115,194,118, 54,202,236, 77,169,216,112, 83, 84,236,231, 0,151, 53, 13, -109, 85,116, 7, 31,123, 5,164,123, 62,173,213, 45,204,163,243,225,107,156, 73,157,199,238,180, 51,225,121, 98, 28,161, 52, 95, - 15, 59,221, 87,237,242, 55,114,171, 12, 36,116, 72,216,169,156,217,181,146, 39, 34,214, 22,228,197,130,106,194,198, 17,149, 33, -238,203,160,171, 13, 67,216,155, 20,155,143,216,124,112,190, 4,184,109, 45, 37,183,241,105,194,146, 15,184,235, 25,194, 84,195, - 86,166, 57,109,222,242,224,230, 23,220,226,213,120, 94,200, 45,103,225, 89,221,138,215,100,155,209, 14, 41, 86, 19,243,188,117, - 98,115, 39, 18, 18, 53,230, 44, 93,171, 96,102, 48, 78,180,101,102, 89, 22, 78,167, 19, 75, 53,150,136,231, 21,150,128,199, 68, -117,151, 61,246,212, 84,221, 82, 59,237,189, 13, 94,230, 21, 23,219, 22,239,135,104, 18,134, 97,242,120,217, 62,211,213, 28, 65, - 39,230, 52,184,142,130,213,158,211, 29,235,125, 41, 17, 21, 26,237,102, 17,199,196, 34, 78, 83, 91,102, 95, 20,206,139, 63,219, -196,140,222,138,174,207, 69,225,246,153,114, 82, 37,143, 99,240,213,149, 82,143,107, 87,224, 57, 32, 82,171, 27,237,149, 13,202, -162,113, 88,108,103,140, 56,255,124,210,154, 6,106,210,226, 61,217,218,193, 16,112,119, 65,140, 97,146, 8,105,156,200, 73,253, -154,150,133,211, 60,115,120,252,129,163, 92, 45, 58,110,107,203,223, 15, 11,170, 66,213,196,114,184,197,150,226,225, 76,145, 89, - 96,234,194,234,205,237, 17,249, 8,210, 43,117, 63,144,183,243,230,250, 11,221, 4,251, 8, 64,172,125, 68,213,222,255,146,239, -134,120,163,136,123,211, 23,235, 73, 93,158, 97,125, 48,215,103,153,179, 72, 86,235,139,196,134, 63,190,208,205, 56,154,197,220, -200,219,124,217, 60, 4,225,152,132,155,189,240,116,223,120,245, 43, 79,184,250, 75, 39,228,223,188, 69,254,226, 67,216, 11,150, - 95,162,181, 55,145,227,140, 62,125, 31,153,129, 71,126,242,179,212,144, 1,116, 86,198,164, 92,139,249,102, 46,158, 60,214,250, -195, 85, 64,150,226,182,180, 36,112,121, 9,247, 38,120, 9, 56, 10,242, 94,195,180, 33, 86,177,185,177, 6, 12,223,201,232,195, -201,103,227,163, 64, 83,175,214,198, 16, 9,141, 97, 65, 58,156,224,105,245,104,191, 34,164, 87, 7,236, 73,161, 62,105,180, 15, -140,180,107,222,182,190, 82,236, 8,178, 68,168,185, 42,212,103,200,252, 36,230, 60, 7,236, 20, 23,187, 68,127,111, 23,153,236, -191,248,140,118, 40,216, 93,195,230, 74,125,180,160, 95, 62, 33, 63, 49, 5,173, 46, 46,248, 69, 88,163, 98, 39,147, 41,147,150, -230,155,117,242, 89,104,171,207,159,250, 68,108,173, 84,221, 89, 38,164,164,232, 69,246,121,250,165,130, 41,118, 91,176,219,138, - 29, 42, 45,162, 86,103,219,216,231, 22,221,229,210, 89,235,201, 63,231, 30,233,184,194,110,116, 99,178,187,129, 65,144,203, 12, -187,193,231, 59, 57,195, 55,102,236, 59, 5, 94, 51,236,169,159, 28,229, 42,146,245,212,165, 7,242,126,195,126,227, 9,242,227, -247,224,229,201,237,145, 18,234,232, 95, 51,238,190,127,226,105, 22,199, 13,159,181,172,107,188,251,132,121, 32, 86,131, 23,249, - 55, 45,153, 47,214,115,163, 29, 61,249, 79, 6,133,189,122,231,101, 63,192,107,178,198,123,202, 7,254, 96,180,217,129, 67, 22, -220, 90, 29, 4, 75,194,122,250,105, 94, 25,172,195,109, 11, 22,251,193,224, 3,224,245,247, 97,121, 7,134, 31,136, 82,123,128, -244, 39,208,127,231,147,232,223,248, 50,169, 36, 70,169, 20,188, 2,174,103,208,148,142, 50,213,248, 71,167,198,217,214,146,238, -226,186, 51, 25, 90,138, 10,176, 87,214, 43,199,253, 76,168,100,237, 69, 4,134,156,197,148,250,168,199,108, 99,161,154,232, 74, -217, 90, 35, 54, 61,154,100, 83,238,214,136,173,140,217,185,160,158, 94, 38, 91,183, 71,226,144,144, 74, 65,166, 29,101,151, 54, - 28,109,139,132,177,197,193, 25, 41,103,100,156,124,174, 27,164,196, 86,253,103,212,214,176,229,228,239,107,153,209, 90,124,212, - 52, 12,174,126,111, 46, 14,107,187,168,194, 14,199,141,212, 19, 95,131, 24, 73,140, 83, 28,136, 37,198, 23, 82,206,104,113,241, -231,144,182, 71,176,156,193, 94, 82, 56, 16,186,208,208, 35,131,109,245,172,247, 36,182, 28, 7,155,117, 20, 97,193,104,215,204, - 92, 10,199,121, 94,237, 96, 22,209,188,114,170, 46, 92, 27, 6, 48,113, 92,112,110,212,154,160,229,141, 30, 41,201, 5,113, 73, -145, 97,192,138,195,120,114,242, 77,166,210,199, 46, 78,191,244,106,126,243,153, 91,173, 88, 89, 34,156, 38,173, 51,103, 19,167, -131,246, 19,163,213,182,206,126,252,254,178,231,157, 26, 91,196,208,246,239, 93,183, 32, 78,143,211,148,209, 60,146, 82,162,224, - 8, 85,179,237, 48,233,152,227,182, 34,103,109, 67, 33, 70, 17, 33,235,166,184, 10,117, 53, 61,215, 89, 94,117, 14, 81,161,123, -154,155,119, 34,104,182,134,185,148, 82, 67, 36,232, 98,205, 60,140, 44,165, 4,163,190,108, 58,128,232, 20,104, 10,204,114,107, -212, 50,211, 37,153, 46,148,136, 92, 82,145, 77, 99,176,110,150,186,186, 2, 52,242, 3,186, 50,168,107, 94,158,171,210, 87, 90, -221,247, 20,194,111,240,153, 31,105,198, 44,194, 81,224,113,134, 91,115,194, 92, 50, 97, 15, 92,246, 8,112, 92,159, 53, 27,236, -194,175, 89,207, 5,179,103, 51,248, 19,190,145,239,154, 39,116,213, 80, 60, 46, 10, 55,131,242,236, 14,188,118,156,121,233,127, -253, 46,227, 23, 79,240, 87,239,195,103, 62, 6,111, 63, 68,228, 9,122,231, 6,174,197,171,154, 91,127,168, 41,213, 31,174,136, - 87, 28, 13,106,242, 5,163,103, 42, 39,241,133, 27,245, 42, 74, 70,241, 22,106, 18,184,186,194,246, 9,110,158,249, 83,218, 43, -167,221,136,126,242, 18,185,151, 97,111, 1, 38,136,147, 77,242,157, 64, 84, 48, 43,176, 27,125, 99, 63, 85,152, 13,185, 72,164, - 31,186, 66,190,189,248, 5, 42,225, 11,156,207,230,221, 6,164,201, 67, 90,218,201,167,143,167,234, 23,105,142, 50, 71,195,155, -190, 24,246, 43, 7,236, 42, 34, 11, 23,127, 47,237, 91, 51,233, 88,131,242,214, 96,183,248, 97,229, 80, 92,220, 53, 37,164, 41, - 67,107, 76, 33, 88,111,210, 61,198, 18, 9,121, 33,130, 49, 86,224, 76,198, 21,239, 58,102,184, 55, 34, 23, 41, 84,218,134, 61, - 45,216,220,168, 39,227, 84,124,131, 44,214, 33, 13, 27, 26,182,179,216, 85, 55, 26,203,185, 88,111,101,118, 35,232, 62,163, 83, -134,189,122,200, 9, 96,223,152,177,103, 11, 60,115, 31,172, 51, 93, 5,185, 56, 83,121,142, 5,249,154, 97, 15, 15,200,247, 93, - 97, 15,155, 43,150, 71,101,104, 2,191,246, 24,158,156, 56,170,112, 74, 17, 52, 19, 93,164, 62,232,215,152,187,245, 89,155,134, -229, 71, 82, 44,218,213,104,135,134,228, 70,122, 90, 96, 76,216,197,236, 7,184, 75,133,215,247, 80,253,100,157,222,181,213,223, -218, 78,113, 82,104, 32,201,252,251,163,106, 94, 87,252,236,195, 85, 91, 26,114,106,240, 52,193,233, 6,230, 95,135,253, 31, 96, -195,228,188, 2,175,255,123,164,159,254,207,177,191, 93,176,215, 19,195, 77,165,157, 55,222,206,132,136,171,136,110, 37,198,121, -217,173,104,232, 30,206,221, 43,222, 81, 91,146,231,134,175,191, 99,237,109,204,120,208,215,104,213,168, 76,187, 55,146,236,149, - 86,245,195, 33,205,144, 97,196,134, 17, 41, 5,155,103,154, 44, 97,137,218,184,239,172,249, 3,129,157,109,254,251,228, 30, 37, -107,198,128,178,164,204,148, 35,222, 50,101,234,241,136,150,194, 14, 40,121, 96, 25, 19, 53,170,112,103,206, 87,199,207, 54, 67, -171,145, 90,128, 80,186,157,104,157,181,102,210,144, 2, 40,100,180, 20,190,226,182,101,109,232, 89,130,156,103,214,251,207, 40, -209,245,170, 97, 37,169,145, 51,207, 25,251,191,207,220, 91,219,186, 84,122,150,133,217, 66,107,100, 17, 93,168,146, 24,101, 99, - 58,116,148,174,164,240, 7, 4,206,245, 84, 11,181,132, 42, 31, 89,175,149,147,217,150, 46,247,166,213,130,150,130,230,193,173, -100,170,180,230,207,182,107,135, 22, 52, 42, 63, 77,105,229,246,155,165,109,179,169,109,157,235, 90,115,161, 23,165,110,246,180, -216, 50, 85, 19, 41,185,248,171,118, 79,123, 7,170,164,240,185,247, 36,213,179, 80, 30,139,200, 85, 86,225,165,110,164,187, 24, - 63,164,148,104,146, 56, 85,143, 87, 61, 55,243,187,149,113,123,173,243, 70, 88, 23, 38, 86, 51, 31,135, 18,121,234,113,223,119, -193,162,157,209, 0,147, 8, 57,229, 85, 88,231,143,105,163,205, 14,136,169,173,145,172,177,155,118, 88,158,176,101,241,215, 54, - 91,109,124, 93,123, 64,140, 82,106, 93,156,229,208, 71, 2,129,212,150,102,207,181,115, 36,184, 1,136,110,221,178, 78, 6,236, - 7,225,100,103,176, 41,158, 63, 38,189,208,141,252, 80,158,163, 25,233,191,249,254,221,231,239, 53, 87,172,191, 92,225, 65,133, - 7,102, 92, 38,184, 80,225, 78,242, 49,224,164, 49, 98, 92,163, 58,125,223, 26,116, 75,201,210,179,164,155,110, 3, 89, 45, 36, - 81, 97,148,234,234,227,195, 78,169, 25,166,239, 28, 25,254,254, 9,253,216, 45,242,123,158, 66, 73,232,242, 12, 30, 0, 59,117, - 25, 77,193, 91,229,161,100,180, 64,138,117,110,242, 16, 27,199,148, 96, 18, 37, 93,102,184, 28,225,206, 21,220,191,240,139,113, - 92,188, 21,209,212, 91,165, 55, 62,195,214,143, 95, 32, 63,180,131,169, 70,208, 65,184,247, 53, 16,119, 41, 57, 25,206, 12, 73, -230, 39,187,222, 94,108,234, 89,203,123,133,197, 49,132, 50,102, 84, 20,189,227,170,121, 30, 42, 60,188, 3,166, 72,121, 10, 86, -176, 83,139, 19, 82,172, 8, 67,136, 5,191,122,130, 95,189,193, 94,194, 85,231, 53, 20,241, 71, 72,115, 66,126,226,210,239,148, -233, 26, 46,127, 20,210, 35,228,155, 79,225,155,197,213,252,165,158, 59, 55,214,148, 49,141, 96,145,245,122, 41, 12, 73, 72, 99, - 66,167, 76,126,105, 66,190,111,135,220,223,123,155,243,221,153,246,246,137,250,184, 80,231,194,161,201,170,147,232, 51,199,172, -178, 10, 76,123, 80,130,200, 71,224, 97,197, 89, 57, 87, 10,195,253,145,244,112,135,188, 49,193,203,163, 71,141,253,253, 39,180, -182, 96, 41, 42,166, 28,243,234, 11,221, 86, 73, 83,215, 60, 60, 51,120, 53, 35,119,198,240, 95, 26,114, 61,160,187,132,190,219, -208,147,199,167,106, 98,101, 99,247,170, 48,105,132,144,196,172, 51,169,111,242, 57,185,157, 79, 34, 25,198, 15, 43, 26, 11, 67, -140, 11, 38, 31,140,202, 20,243,242, 57,126,126, 55, 32,219, 6, 14,146,236, 17, 94,114,198,106,151, 20,115,119,146,119, 1,166, -132,188,210,224,226, 8,187,159,132,244,160, 75,205, 64, 95, 67, 62,243, 51,216,223,122, 23, 27, 93,148, 86,187,158,225, 12,247, -138, 88,180, 74,159,167, 81,105,100,216, 39,241, 38,209,144,146,207,162,199, 17,153,118,232, 56, 58, 57,175, 72, 48,217, 59,188, -104,219,140, 87,255, 55, 96, 73, 49,205,129, 3, 13, 46,184, 14,136,186, 40, 72,202, 66,171,254, 44, 89,180, 73,251,205,215,206, -185,214,218, 55,145,104,249,139,147,220, 44, 15,222, 74, 31, 6,210,224, 63, 99,110, 66,209, 76, 30, 6,210, 56,146,134, 1,146, -122, 94,185, 53,134,230, 26,246,214, 60,222, 83, 59,218,181,197,225,165, 89,180,233,149, 60, 13, 30,189, 25,106,209, 78,207,236, -204,244,180, 6,208, 88,176, 6,162,149,219,182,234,176, 91,241, 52,200,207,221, 99, 92,240,160,151, 99,245,231,163,244,103,164, -111, 68,241, 48,166,222,214,143, 13, 63,197, 65,187,173,109,101, 54, 17,106, 30, 48, 29, 56, 45,133, 82,106,244, 61,226,231,134, -192,215,234,102, 43,108,165,120, 91, 58, 70, 16, 12,227, 26,231, 38,113,250,118, 86, 69, 8,218,162,125, 86,154, 81,231, 25, 74, - 4,203, 68,152, 79,247,255,107,140, 74, 58,119,185,123,192,123, 56,208,138,100,109,219,252,166,199,181,174,219,168,200,166, 0, -183,118,134, 3,118,178,158,226,175,145,135,137, 97,218, 65, 26, 56,205,142, 94, 85,137,216,215, 24,145,180, 37, 14, 50,102,207, -153, 77, 36, 14, 4, 73,213, 5,125,145, 12,234,113,195, 62,190,241, 2,191,110, 4,200, 30,222, 18,173,249,218,204, 5,110,173, - 82,154,185, 0,219, 64,114,136,255,138, 19,244,182,153,179,191,166, 14, 99, 56, 23,132, 90,150,104,141,202,115, 41,169, 26,185, -245,253,181, 36, 58, 84,170,186,142,128, 86, 44,109,173,107, 74,155,125,175, 93,251,133,192,151,243,178, 61, 50,222, 72,159,255, - 31, 95,250,124,250,131, 19,249,135, 71,118, 15, 71,238, 92, 38,238, 37,229,193, 34,188, 92,140, 7, 5, 94,170,198, 3,117, 56, -220,117, 18,174,146, 48,169,119,167, 99, 13, 99,140,205,117,212,205,194,148,227,212,175,122, 86,189,245,177,176,249, 60,188,142, -202,112, 88, 24,126,110, 70,143, 7,244, 15,206, 94, 49,138, 7,110,144, 4, 57,186,145, 86,150,176,198,196,160, 71, 85, 24, 84, - 25,212, 24, 21, 38,245,216, 86,189,235,100, 52,219, 93,120, 14,250,225, 0, 99, 67,110,193,170,248,140,195, 20,121, 56,160, 31, - 27,224,218,243,189, 58, 12,119,167, 0, 0, 32, 0, 73, 68, 65, 84,101,182, 51, 5, 71,243,141,195, 12,217,165,181,135, 42,234, - 27,187,244,214, 64,176,141,201, 62,255,215,203,140,220,155,144, 73, 60,183,251, 19, 25,238, 61, 64,150, 91, 40,183, 30, 98,114, -140, 77,189,167,147,236, 20,174, 18,252,236, 51, 63, 53,143,134,157,236, 57,196,171, 62, 85,228, 15, 93, 64, 46,112,241, 3,112, -249,103, 33,127, 3, 62,248, 22,252, 78, 11, 79,100, 64, 36, 94,196,179,190, 88, 53, 43, 12, 89,145, 81, 73, 23, 3,233,149, 9, -190,111,239,191,239,161,193,219, 11,246,238, 76,187,153, 89,142,198,225,172, 74,108,108,237,123, 51,159, 15,202,121, 54, 91,236, -232, 26, 27,127,138, 80,180,253,164,228,251,147,191,214,235, 59, 23,252, 61, 91,224,103,159,210,172,210, 74,195,110,154,111,126, -147,250, 6, 56, 70, 6,123,197,239, 1,113,188,152,188, 26, 4,184,197,231, 0,242, 32,147, 6, 69,159, 9, 90,141,220,162,141, - 74, 95, 60, 58,169, 76, 72,121,187, 6, 41,197, 67, 55,196, 38, 46,172, 68, 46,201,253, 1, 52, 24,241, 13,125, 28, 98,156, 18, - 54,243,178,209,169,104,125, 45, 13,107,228, 62, 26,161,226,118, 52, 25, 4, 25, 82,220, 47, 25,238,128,220,185,133,225, 30, 12, -159, 13,174,172, 1,123, 31,195, 60,250, 71,180, 47, 20,236,194,162,189,187,217,160, 56,163,218,157, 7,231,164,216,116,178, 12, -232,180, 67, 46, 46,225,226, 26,219,141, 14, 39,137,236,131, 84, 22,172,213, 72,213,234,161, 53,103, 18, 67,217,238,109,107, 17, -151,236, 50,113,127,221,181, 34,142,110, 93,173,216,178, 32,121,240,205,189,148, 77, 48,213, 89,218,189, 26, 73,217,121, 14, 81, -145, 19,249,223, 18, 29,160,170,137,162,138,229, 28,112, 41, 79, 14,147,230,182, 33, 48,114,246, 22,190,136, 39,165, 57, 30,217, - 92,200,213,140,214,138,183, 62, 7, 7,131, 72,107, 33,148,143,254, 74,140, 16, 68,206,208,219, 34, 46, 80, 76, 9,211,204,146, - 7,106, 30,176, 60,161,211,222, 81,210,105, 8,134,186,135,165, 44,230, 7,144,115, 98,158,157,105, 74,250,193,118, 58, 3, 98, - 73, 23, 69,245,192,151,102,190,145,152,145,205, 5, 87, 51,153,121, 94, 40, 22, 41,127,178, 89, 53, 27,155, 35,193, 86,125,200, - 70, 46, 84,201,174, 78, 95, 22, 74, 51,202,178, 80,235,178,110, 20,162,222,249, 44,157,146, 25, 66,182,182, 58, 32,218,217,125, - 21, 54,195,158,185,110,117,203,139,183,134, 68, 94,251, 74,148,139, 3,195, 42,100,238,248,214, 86,195, 73, 16, 80,171,179,180, - 41, 17, 33,229,145, 97,154,144, 52,176,148, 5,169, 21, 19, 87,161,151, 90, 86,165,189,217, 25,237, 80,117,205, 91,207, 57,147, -199,232,240,196, 1,167, 31, 94,218, 26,254, 19,202,255,176, 41,186, 88, 54,173,128,156, 46,112,236,188,118,213,228, 33, 58,170, -148,184,191,207,249, 23, 67, 30, 96, 24,144, 82,177,236,160, 29,106,217,210,236,226,224,224,243,254,188, 50, 1,122, 10,161,179, - 4,212,159,147,110,219,171,171,165,229, 67,184,237, 15,129,102, 94, 64,202,158,135, 64,100,251, 95,110,209, 79, 13,240, 35, 10, -159, 28,224,206,132,102,152, 30, 87,198,111, 26,252,118,131,175, 20,236,187,149,250,164, 82, 22,227,184, 52, 14, 2, 55, 98,220, -100,225,169, 9, 79,163, 61,191, 84, 56, 70,225, 90, 59,211, 57,102, 30, 37, 66, 67, 36, 42,246,163, 8,239, 42,212, 11,229,181, -121,225,238, 95,127, 76,250,142,192, 95,126, 9,125,115, 71,251,170,194,103, 34,244,113, 20,248,182, 32,143, 10,217,132,148, 42, -150, 98,209, 89,161, 21,134,142,186,149, 81, 30,216, 14,169, 98,247,119,112,167,193,147,131, 11,178,118, 6,247, 19,220,205,113, -196,238, 84,164,110,253, 48, 56,198, 21, 27,170,251,183, 35,217, 65,174, 67, 16,228, 41, 8,112, 87,209,107,131,161, 56, 98,118, -223,160,166,120,162,163,165, 93,159,122,151,224, 20,135,133,158, 35,154,204,219,187,223, 45,240,157,130,221,139,240,230,174,104, -147,234, 20,187,139, 56, 53,169,192,248, 38, 92,254, 24, 28,190, 2, 15,254, 9,161,228,193,102,247,209,134, 6,109, 5,179,240, -220,201, 17, 82,235, 85,168,207,179,184, 51,184, 64, 48, 80,145,148,182, 86, 84,245,156,101,189, 86, 26,231,173,172,176, 76,181, -109,211, 57,167, 45, 38,245,137, 68, 30,252, 16,193,148, 99,160,159,225,157, 91, 23, 93,197, 33,134,102,180,103,138, 94,248, 2, -205, 73,145,189,109, 38,104, 12,222, 45,216,151,158, 33,191,239, 14,242,112,244, 7,101,159,224, 39, 7,242,195,145,244,207, 14, -180, 71,179, 3, 72, 78,149,214, 10,197,220, 46,132,198,181, 89,129, 46,174, 74,239, 30, 36,105,206,185,111,181, 33, 82,145, 97, - 99,191, 90, 82,228,110, 70,174, 6,120,216, 28, 8, 4,200, 83,208, 91,176,157, 31, 76, 56,198,155,159, 21, 25,122,171,177,133, - 42, 62, 62,239, 83,133,111,103,120,229, 22,118,127, 15,118, 63, 14,195,143,132,177,116, 4,253,113,244,223,120, 5,253,155,111, -145,170,145, 66,113, 91,207,221,241, 1,186, 17, 4, 53, 63, 84,170, 38,223, 88,243,224, 21, 75, 53, 56,204, 62,103, 94,202,154, -238,226, 52, 70, 37, 15, 3,165, 41,181,154,191,103, 26, 90, 60, 65, 76, 37, 81, 83,138, 46,132, 99,114,125, 61, 86,239,172,168, - 98, 38, 88,202,232,110,196,106, 11, 54,249,128,236, 46,208,211, 28,156,116,175,222,172, 91,119, 36, 44,113,181, 34,230,130, 34, -143, 54,245,251, 37, 91,137,170,213,157, 13, 38,142, 65,117,108,157, 87, 80, 41,194,160,176, 70,138, 67, 73,130,160,167,137,251, -181, 25,144,113,128, 50, 99,102, 43, 44,198, 69,147, 78,152, 44,113, 0,110, 8, 45,101, 44, 57,236,166, 38, 65,135, 1,134,201, -237,142,154, 17,140, 82, 10, 66, 37,215, 25, 93, 78,228,200,193, 46,102, 31,130,118,166,228,143,107, 94, 89, 14,178,218,244,123, - 39,171,111,180, 53, 54,122, 81,111,197, 46,243,137,101, 41,158, 63, 17,113,167,137, 70,194,168,174,116, 12,171,152,109,163,147, -230,237, 34,107, 5,116, 88, 49,189,180, 74, 91,142,142,123, 77,121,125, 72,107,139,208, 39,210, 74,189,107,181, 63, 24,105,157, -237,183, 32,165,245,214,178,136,167,233,121,229,160,113, 64, 74,171,134,192,194,218, 74, 0,127, 86, 6,250, 89,122,217,106, 83, - 55, 99, 84, 71,225,142,195, 72, 27, 51, 50,187, 31,189, 90,163,198, 61,213, 90,228,194,155,160, 73,221,254,152,178, 87,203, 41, -187,112,143, 22, 9,106,178, 10,223,170,157,157,124, 3, 67, 75,116, 45, 45,249, 28,188, 44,209, 21,160,173,182,205,164,137, 33, -103, 52, 37,183,149, 6, 21,111, 85,218, 35,200, 48,208,106,139, 67,164,249,136,163,179, 15,122,167,164,235, 20,154,231,186,119, - 39, 64,159,235,183, 53,144, 74, 86,126,194, 71,123,207,237, 35,133,113,242,156,211,101,123,175,249,173, 95, 57,176,255,213, 35, -187, 44, 12, 59, 37, 93, 41,250, 70, 70,126,104, 64, 62,151,224,115, 19,118,255, 2,185, 49,134, 15, 26,249,171,198,238,139, 51, -247,126,103,161,189, 91, 89, 78,149, 83,109,220, 42, 60, 81,120, 60, 10, 55, 56, 64,238, 96, 27, 42,180,131, 72, 36,170,249, 73, -182, 40,203, 69,224,209, 36,164, 90,185,254,133, 15,188,205,250,151, 95, 66, 62, 57,193,215, 20,126,112,143,237, 78,160,234,130, -164, 99,246,211,193,209, 91,217,214,156,184,137,122,149,231, 67, 18,175, 74, 44,141,212, 87, 63,141,221,221,161,239,126,211,209, -176, 47, 53,184,111,174,176,175, 53, 72, 37,190,209,154,216, 25,146, 43,200, 68, 39, 67,238,157, 97,218,196,144,187,209, 70, 61, - 53,216, 3, 69,177,219, 80,185, 87, 28, 53,123, 87,195,166,117,240,121,249,162,222,210,239,189, 58,100, 83, 37,254,230,236, 21, - 90,242, 84, 52, 43, 21, 59, 86, 56, 84,218,169, 97,178,243,159, 41,234,116,146,225, 14,212,207,194,149, 87,145, 82,156,221,185, -212, 21,216, 70, 50,176, 49, 22,146, 53,111,193, 23, 28,153, 18, 58, 38, 31, 17,220,201, 46, 8, 19,117,181, 91, 87,154, 5, 62, -179,139,223, 90,124,102,185, 67, 93,162,149,111,155, 69,123, 75, 32,236,220,159, 8,141, 97, 23, 39,223, 41,124, 62, 9,248, 86, -193,114, 16,244,202, 86,229,154,121,117,110,179,107, 15,228, 94,246,141,189,199,174,189, 53, 99,251,103,200, 15,223,133,151,197, - 43,254,151, 12, 62,113, 23,249, 49, 33,125, 61,145,126,125, 71,125,107,161,220, 28,209,227,236, 24, 83,193,187, 61,153,205,206, -216,227,215,206,134, 85, 86, 27,237, 84,225, 54,218,149, 79,226, 90, 20, 69, 30, 36,236, 94,218,218,237,136,171, 72, 14, 29, 80, -232,159,175, 73, 67,170, 56, 0, 41,192, 29,235,124,162, 25, 60, 73,216,187, 5,185,122, 11,118,255, 39,220,249, 56,232,101,128, - 89, 30,192,195,215,208, 63,252, 54,252, 92, 35,221,137,241, 64,235,157, 18, 57,131, 9, 13,228, 72,168,210, 52,132,162,181, 66, - 93,226, 96, 86,189, 66, 26, 70, 44,169,111, 13, 18, 76,182, 82,144, 82,144,101, 33, 45,149,166,153,186,219,187,128,177, 95,151, -192, 68,163, 94,181,153, 66,121,250, 20, 59, 28, 28, 70, 19,212, 48, 29, 70,116,119,129, 13,131, 71, 94, 86,163,148, 5,171,213, - 23,215,210,182, 20,175,243,182,108, 84,110, 75,245,246,111, 27, 92,196,212, 59, 1,100, 69,107, 88,153, 52,121, 35,122, 89,200, -218,188, 29,175,130,204,133, 33,185, 34,190,106, 10,235, 21, 72,241, 64,151,108,142,186,173,103, 93, 14,149,234, 41,145,226, 17, -164, 86, 11,165,186, 32, 74, 69,208,211,193,253,239,217,173,115,102, 80,155, 35, 12,115, 31,160,231,201, 23,241, 84,145,214, 60, - 80, 37, 78,209,238, 93,223, 28, 33, 37,112, 20,205,188, 98,231,140,182,104, 18,207,106, 84,115,101, 89,162, 34, 55,106, 83,119, -143, 12,217, 63,218,210,104,197,239,175,231,225, 96, 45, 42,244,153, 52, 76, 43,163, 2, 29,161, 85,172, 26,181, 85,180,182, 53, -240,200, 34, 52,102,131,156,185, 34,218,219,236, 70,137, 16, 18,159, 84, 68,181, 94,159,239, 32, 18, 4,183,115, 76,234,154,216, -103,109, 85,215,182,126, 47,174, 9,114,230,241,186,211,158,105,127, 65, 26, 7,150,102,204,167,133,121,153,253, 94, 48,243, 42, -189, 85, 4,101,152,198,128,211,228,200, 56,240,251,184,181, 26,174, 28,215,126, 52,241,206,229,218,205,224, 57, 55,170,231,192, - 75,162, 45,243, 42,120,179, 56,240,174,227,195,148,104,170,110,237, 67, 72,121, 88,253,232,195, 48, 58,142,120, 89,214,131, 5, -185, 98, 53,196,163,182, 29, 36, 52,197,134,156,124,134,238,163,219, 45,111,221,171,110,221,170, 46,219,234,113,251, 30,114, 56, - 59,211,128,240, 34,175, 30,200,255, 56,114,212,247,139,177,171,149,171,167,133,235,183,102, 46,190,160, 92, 12,194,116,157,200, -175, 39,228, 71, 70,248,241, 17,249, 3, 3,246,167, 38,168,144,222,174,164,255,175,176,251,197,133,235,175,157,120,248,184, 49, -159, 42, 71, 26,143, 19, 60,201,194, 77, 8,130,139, 60,143, 16,237,164,177,169,251,134, 21,110, 51,140, 75,101,250,205, 39,240, - 95, 53,228, 47, 63,128, 31,188,128,127,161,200,247, 79,216,157, 1,222,159,144,247, 23,248,160, 97,143, 23,100,158,145, 42,207, - 39,107, 36,133, 57, 86,240,131,120, 40,202,245, 53,246,240,190,223,140,119, 26,236,139, 51,233,137,152,212,229, 12,145, 89, 3, -138, 82,193,118,138, 44,134,221,152, 87,179, 45, 54,253,172,176,111, 94,121,162,136, 85,159,141,223,198,162,253,122,242, 57,249, -238, 2, 78,199,144,144, 23,182, 94,106, 28,225,167, 16,212,189, 95,224, 37,241, 54,135,129, 29, 13, 59,248, 65,163, 29,219, 54, -235, 40,129, 23,179,147,127,117,168,192,168, 48, 38,210,220, 56,213,152,143, 6,231, 93,187,115,165, 17,115,178,132,236,146, 87, -234, 87, 25,121, 48,192,206, 33, 29, 54,183,141,140, 22,121,155,154,125,108,145,226, 20,174,230,228,178,174,161,168,109,227,204, -159,223,116,189,217, 48,164, 24, 81,140,201, 7,236,147,250,245,254,157, 19,114, 33,200,168,232,232,239, 77,162,180,177, 86,253, - 26, 29,154, 47,154,215,209, 55,183,120,177,175,159,176,252, 20,249,204, 93,208, 2,186,135,235, 31,133,151,175,225,205, 95,195, - 62,247, 91,164, 47, 8,250,203,153,242,254, 45, 44,139, 87,255, 1,190,247, 46, 92, 28, 0,149,231, 66,223,173,199, 87,222, 54, - 76,221, 18,213,129,230,214, 6,184, 55,194,125,117,187,157, 76,222,214, 93, 60,130, 81, 39,176,108,216, 98,125, 5,247,241,205, -178, 69, 82,130,193,105,129,119, 19, 60, 60,193,238,215, 97,255, 79, 97,250, 41, 23, 88,200, 29,224, 14,250,231, 39,210,207, 85, - 82,115, 14,195, 18, 84, 20,141,177, 65, 78,222, 45, 82,107,164,148, 2,140, 83,250,240,149,170, 25,147,236, 29, 4,107, 1,155, -153, 93, 77, 94,155,227, 62,155,243, 33,116, 24,104,227, 62, 14, 47, 33,205, 83, 9, 13,137, 87,236,173, 6, 31, 33,135,109,172, - 86,154, 86,207,208, 62, 29,145, 60,146,246,123,200,147, 87,152,116,178,154, 56, 76, 72,166, 16, 57, 85, 15, 2, 41, 37,102,185, -174,153, 47, 34, 17,237, 90, 17, 51,170, 10,102,213,231,155, 49,147, 7, 99, 10,198,190,228, 76,198, 96, 26, 97,186,164, 78, 59, -210,188,128, 46, 44,117,113, 44,180,120, 37, 88, 17, 71,165,246,172,117,105,254,115,211, 6,153, 49,171,110,229, 19,208, 38,206, -167,168,149, 90,107,204,191,235,154, 24,111,117,107, 69,155, 38, 39,218, 37,159,229,167, 86, 25,164,173, 27,250,233,140,229,223, -187, 91,216, 25, 93, 44,100, 60,162,202,177, 20,150, 90, 87,202, 91,177,198,128,144, 98, 99,211,148, 61,195, 94, 92, 83, 96, 18, -204,249,200,168, 71,132,188,191,164, 28, 15, 80,139,119, 20,243, 68,107, 39,170,249,238,155, 87,216,225,166, 77, 50, 9,197,184, -166,216,224,219, 25,101, 48,116, 10,210,206,136,112,182, 30, 4, 86,237, 68,216,197,172,143,116,154, 87,217, 91, 76, 96, 88, 93, -115,246,224,157, 33,147, 52, 57, 79,127, 41,204,165, 82,202,236, 7,227,206, 68, 23,111,117,167,113,242,141, 53,190,223, 67,124, -188,171,150, 12, 36,167,117,102,237,159, 83,132,211, 6, 55,163,213, 18,173,117, 89,113,183,198, 86, 65,119,114,167, 11,106,147, -243, 22,102, 31, 93, 16,116, 56, 17,101, 24,132, 52,142,222,180,237, 17,198, 61,165,206,156,210, 41,105,235,112,184, 83,172,190, - 48, 35,119,167, 76,171,171, 49,207,133,216,108,162, 82, 59,115,160,219, 71,196, 90,159,195,225, 95,252,174,252,229,197,188,106, - 22,200,205, 5, 69, 89,225,130,198,117,129, 7,239, 23, 30,190, 7,119,190,116,224,234,111, 37,198,187,137,225, 83, 35,242, 71, - 38,236,247,143,216,159,184,128, 63, 45,200,163, 70,250,157,194,197, 47, 47,236,127,253,196,189,239,158, 88,142,149,185, 54,110, - 7,113, 33,187,186,237,104, 6,154,186,144,164,198,252,189,152, 48,155,113, 51,129, 46, 30,246, 98,255,109, 66,255, 35,129, 31, -190,192,126, 59, 33,159, 29,177, 35,240,237, 25,190, 60, 35, 39,193,170,120,123, 60,157,209,213, 74,108, 16,178, 64,109,232,119, -223,130,203,167,240,202,222,231,162,185,249,124, 32,141, 62,172,173, 17,174,210, 43,137,106,216, 28, 11,127,113,178,154, 28,138, -179,214, 59,236,185,246, 40,167,120, 90, 71,133,151,212,155, 51,115, 12,146,175, 7, 63, 68,156,138,183,193,151, 80, 24, 31,227, -233,206,226,173,227,155, 6, 79,189, 36,182, 83,156,118,187, 42, 71, 67, 29,216,177, 98, 43,255,245, 25, 44,191,238,135,151, 69, -125,244,144, 29,166,146,130, 91,189, 52,176,131,145, 6,143,164,213, 20,200,220,193, 55, 89,149,128,172,236, 6,239, 73,159,218, -243, 97,215,230,194,136, 20,196, 52, 11,244,169, 74,231, 39,199,223,117,243,176,219, 70, 7,101, 8,221,133,230,128,198,236,146, -107, 7, 46, 7, 23, 62,190, 91, 87,224,140,180,230, 35, 14,195,243,225,155, 34,131, 97,218,252,134,121, 26,194,201,148,253,115, -154,178, 3,122, 46,158, 32,111,188, 12,135, 35,180, 59,176,255,183, 32,255, 37,228,226,239,193,197,127, 7,211,129,252,143,174, -144, 15, 14, 94, 57,186, 36,117,179,151,232,153,194, 79,227, 51, 9,152,139,149,134,221,198, 98, 36, 6,143,226, 48, 86, 4, 30, - 12,216,189,209, 53, 14,217, 63, 91,185, 1,158, 9,146,131, 60, 23, 7, 67,159, 67, 4,146,167, 11, 78, 26,206,237,255,160, 32, -151,239,194,205,207,195,240,105,247,173,235, 4,250, 83,200, 27,191,140,190,158,209,239,156,152, 46, 61,195,187,246,200,220, 36, -228, 88,220, 68, 70, 68, 51, 84,159, 71, 10,174,242,182, 90,124,243,172, 62,255,108,226, 42,255, 26,149, 73,141, 42, 76,114, 70, -242,228, 85,123,199, 47, 71, 6, 4, 75,217,136,115,181, 4,246, 85,176, 97, 8, 50,153, 83,199, 90, 53, 88,102,172, 84,116, 60, - 65,158,220, 74,150,167,245,126,160,248, 1, 96,141,192, 76,201,253,254,134,255,190,209,146, 84, 77, 94,205, 90, 99,142, 10, 44, -229,236,135, 9, 19, 74, 54,234,168,107,117, 92,135, 29,146, 71, 70, 17, 74, 30, 97, 62,209,110,235,218,113,104, 98, 43,168,197, - 90,245,138, 61,208,183, 26, 50,120, 85, 65, 99, 4,211,158, 19, 35, 57, 78, 90, 52,121,219,182, 86,172, 45,219, 92, 75,148, 20, -248, 64, 77, 3, 50,141, 36, 42, 99, 89,160,250, 6, 93, 59, 82,180, 19,131,215, 42, 51,110,195,216,188,172, 25, 75, 93,188,179, - 97,193,221, 15, 65, 94,238,177,162,109, 19,164, 33, 9,197, 91,233,162, 33, 34,107,133,122, 60,160,227, 68, 61, 25,182,212,136, - 27,245,158,125, 13,162,166,132, 69,211,226, 61, 16,221, 17,135,166,132,229, 81, 66,240,169, 1,117,169,177, 70, 69, 43,187, 61, - 23,155, 26, 91,139,181, 16,117,122,152,137,133, 45, 80,146,146,243,232,225, 39,225,139, 47,165, 96, 82,215,177,145,157,253, 28, - 49, 97, 76, 35, 50,106,204,164, 99,105,106,117, 61, 84,136, 36,134,232,122,216, 89,220,116, 78,201, 9,143,177, 73,214,142, 85, - 12, 18,161,196,193,196,171,253, 20,156, 15,141, 66,197, 29, 8, 37, 0, 60,173, 5,231,192, 42, 25,193,210, 64,105,222,125,106, -165,197,178,108, 43, 80, 38,169,250, 1,163, 69,236,113,173, 33, 48, 13,205, 65,117,193,162,167, 94,182,176,152,198,181, 93, 67, -185,228,123, 10,228,214, 42, 93, 94,228,208,108,147,247,124, 91,225,131, 56,189,105,204, 69,122,108,233,133,194, 78, 60,154,243, -158,192,131,218,120,240,110,229,213,119,103,238,127,225,150,139, 75,101,248,248,132,254,145, 29,246,199,247,240,123, 6,236, 39, - 46,224,105, 67,190, 50, 51,254,226,194,248, 47,142, 92,126,119,230,193,161,112, 59, 55,158, 42, 60, 27,133,219, 24, 43, 31,101, -139,143,208, 32, 53,230, 1,212, 10,249,219,207,104,255,131,160,255, 62,200,103,175,176,247, 12,185,239,155,177, 29,131, 2,247, -182,250,238, 53, 5,147,177,212, 77,205,181, 23,111,181, 78, 21,238,220, 64, 59, 98,179, 35, 15,209,140, 77, 13,169,147, 63,184, - 41,146,217, 78,165,251,128, 66, 3, 21, 96,148, 20, 54,183, 59,195,115,209,124, 44, 49,184, 22, 65,238, 77, 62, 87, 47,192,221, -228,135,128,229,128,149, 32,163,244, 77,221,226,130,167, 64,212,254,230, 1,150,134, 93,130, 29, 10,246,172,110,225,228,241, 64, -112, 39,210, 90,108,128,241, 83,193,164,252,142, 19,217, 58, 35, 85,188,221,155, 22,235, 33,104, 20, 17,108,113, 27,155,142, 49, -251, 24, 18, 58,170,207, 13,175,146, 75,211,163,213,202, 77,141,124,118,127,111,238,108,144,181, 5,223, 21,245,253, 32,143,201, -202,124,239,205, 7,139, 42,126, 80, 15,145, 75,131,122,151,227,110, 14,139, 66,130,223,121,134, 61, 94,176,215,187, 39, 40, 4, - 23,139,159,250,156,135, 28,106,242,165,109,171,225, 16,194,201, 33, 98,125,127,235,128, 77,143,145,151,238,194,241, 31, 66,249, - 41,216,255, 17,200, 63, 13,118,131,252,161,255, 9,134, 35,249,103,119,200,141, 80,106,241,214,250, 25, 67, 86,244,108,115,175, -125, 1,118, 95,117,107,134,158,234,154,220, 68, 57,185,205, 82,128, 7, 25,185,202, 30, 14, 36,138,188, 29,179,224, 67, 13, 59, - 78,111,109, 38, 79, 43,236, 89, 3, 57,200,110, 75,131,167, 10,203, 2,243, 91, 80,223, 1,153, 64,238,193,248,167,225,206,255, -140,254,177, 70,254, 63, 38, 76, 11, 23, 97, 23,109,173,249, 25, 52,103,200, 59,191, 79, 79,199,128,123,120,123,166,206,133,186, - 84,154,149, 21, 41,155,186,234, 60,178, 19, 90,180,254,210, 48,122,136, 71,100, 38,180, 26,149,189,197, 40,164,127,175, 66,109, -226,155,189,132,206, 0,127, 14,181,187,108, 69, 98, 62,191, 68,186, 91,168,239, 99, 67,110,167, 19,173,206,171,189,135, 14,250, -104, 94,117,169, 40,150, 50, 77,189,147,196, 52, 98,201,171,116,137,236,238, 74,117,122,153, 25, 69, 71,218, 82, 24, 14, 55, 78, -248, 34,193, 82,208, 90, 86,183,192,210,124, 62, 75, 11, 24, 72, 87, 74, 18,224,153,240, 53, 73,191,215,215,249,127,143,104, 45, - 46,188,142,182, 45, 75,241,217,126, 2,165,117, 84,149,199, 66,227,179,107,221, 93, 80, 85, 97, 62,193,241,228,149, 98,124,223, -220, 54, 22,122, 86, 33, 27, 40,149,210, 95, 39,150,251,190,102,151,160,252,229, 96, 46, 44, 86,157,185, 46,190,142,121, 0,157, - 5,190,181, 32,183, 79, 25,199, 29,146, 7,218,241, 22,149,192,188,182,138,217,226, 51,231,228,130, 97,103,192,119,165,127, 13, -104,239,246,254, 45, 41,174, 61,235,163, 5, 57,195,156,186,213,108,181, 94,181,182,165,243, 53,223,176, 82, 14,177,162, 38, 74, -107, 44, 37, 44,107,205, 28, 11,156, 61,148,198,186, 54, 64,132,156, 7,114,118, 66,158, 9, 46, 84,171,171, 12,209,109,205, 57, - 99, 42,148,165,132, 3, 34,236,139, 34, 12, 73,227,250,137, 87,243,173,249,216, 49,126,151,166, 10, 75,241,131, 78,192,107,170, -128,182,186, 6,252,132,247,114, 21,203,250, 60,222, 29, 24, 22,179,114,107, 45, 28, 51,234,203, 73,159, 73,226,163,189,222, 33, -235,182,189,166,186, 10, 29,215, 89,154, 74, 64,127,218, 11, 1,172, 31, 81,165,191,152, 42, 39,231, 2,185,109,204,144,254,192, - 94, 63,223,139,200,163,193,108,226,130,183, 22, 73,108, 45,144,213, 38,188,103,240, 45, 17,190,153,132,239, 40,188,127,106,156, -222, 91,224,139, 71,210, 63, 56,146,126,225,132, 62,110,240, 70,130, 31, 24,225, 39, 39,248, 67,123,228,205, 29, 58, 12, 76, 71, -229,242, 88,185, 92,140,203, 30,240,209,125,123,177,182, 75, 4, 66, 37, 13, 81,221, 98,216,111, 25,242, 3, 9,121, 35,195,219, -230, 22,178,251,142,108,229,158,248, 6, 58, 70,117,124,111,128,171,193,255,173,207,111,115,194, 87,196,134,220, 46,126, 50, 46, - 11,210, 15, 0, 75,236, 84,199, 88,236,107,136,153,196, 85,234, 82, 28, 94, 66,210,168, 22,117,203,249,124,142,210, 31,253,238, -189,122,238,249,157,228,172,203, 18, 39,152, 83, 92,228,110, 85,187, 8, 31,253,223,125,134,205,197, 5, 99,207, 10,237,209, 18, -254,231,104,127,215, 68,122,243, 18,249,253,123,144, 17,174,127, 26,242, 67,223,196,126,247,171,216,111, 66, 45, 75, 84,184,182, -182,250, 56,219,132, 83,204,210, 73,138, 94,103, 23,155, 92,142,240,241, 61,242,210,206,223,219, 51,131,247, 78,240,120,161, 61, -153,169,207, 22, 63,117,203,115, 41,134, 94, 69,233, 38,154,227, 5,230, 58, 34,140, 34,236,146, 31, 12,243,229, 64,126,117,143, -188,186,131,215,246,240,242, 0, 95,124, 74,251,242, 45,118, 41, 91, 37, 59,168,123, 75, 3,122, 46,221, 42, 22, 10,236, 62, 64, -236,137,181, 82, 5,116,240, 46,199,117, 69,174, 39,120,246, 15, 97,124, 3,134,215, 32,127, 26,166,215,145,135,191, 1, 23, 71, -244, 59, 25, 89,100,141,141,117, 11,154, 70, 91, 92, 86, 64,189,104, 90, 57,201,231,246, 64, 66,113,237, 76,228,248, 12,119, 26, -163,143,205,168, 44,221,188,172,226,153,215, 35,200,190,219,220,196,131,140,114,228, 6,236, 19,114,183,193,120, 5,187, 79, 65, -254,184,163, 99,211, 61,224, 55,144,139, 47, 99,191, 58, 96,183, 46,222,179,218,168,166,200,176, 67,246,147, 87,142,203, 66,173, -149,138, 82,154, 58, 64,163,122,151,234,124,218,211,149,178, 45, 54,105, 65,169, 50,210, 36, 69,104,134, 87, 12, 93, 84,103,182, -109, 88, 22, 45, 88, 59,135,128,212, 13, 71,234,239,103, 64,198, 93,159,109,108,243,204, 97,192, 82,222,146,163, 67,216, 83,197, -253,209, 18,149,176,228, 33,190,124, 83,148,253,133, 91,169,140, 32, 49,122, 53,163,101,102,160, 81, 82,102,174,149,118, 56, 58, -220, 72,140,211,233,200, 50, 31,161,245, 48,164,110,212, 98,157,211, 98,205, 59,146,201,159,229, 6,212, 26,232,219,213,193,177, -129, 86, 4, 23,160,182,148, 61,215,178,121, 68,236, 16,238, 14,119, 63,170,171,229, 53,185,166, 96,220, 33,215,247,176,253, 61, -170, 36,183, 69,213,122,230,179,246,194, 33, 99,164,228,135,196,197,132, 83, 21, 90,228,244,249, 51,213,179,201,187, 56,181,115, -243,195, 82, 22, 15,157,230,140,232,232,127,166,228, 42,111, 17,202,233,224,155,117,202,190,177,135, 77, 46,231, 17,212, 69,102, -173,213,149, 69,222,211,248, 68, 4, 13,123, 92,171,238, 73,151,190, 0,196,252,255,220, 98,166,225,175, 23, 81, 7,202,228,236, -155,168,166,168,202, 23,202,105,166, 84,199,213,106,210,192,254,194,144, 51,211,232, 97, 46,118,174, 60,151, 62, 51,119,225,174, -158,165, 32, 54, 51,106,109,212,110,201,107, 27,139, 67, 84, 73,162,228,193, 35, 92,171, 53,218, 82, 72,154,200,195, 16, 29,155, -182, 22,146,162,178,206,213,205, 44, 28, 33,222,181,144,184, 46, 73,125, 92,160, 42, 36, 52, 68,143, 45, 14, 44, 26,174, 44,167, -203,137, 38,135,251, 68, 40, 76,199, 71, 91,160,106,183,232, 97,255,236,106, 41, 62, 26, 92,119,194,239, 81,165,235,139,161,235, -155,100, 78,206,182,245,244, 83, 23,250,121,214, 28,245,152,127,219, 86, 88,206,205, 79,150,135,232, 16, 63,109,240,212,132,247, - 27,124, 71,132,111, 37,225,219, 34, 60, 58, 85,234,123, 11,250,207, 14,164,127,112, 75,250,245,130, 92, 24,188, 49,194,103, 71, -228, 39,247,240, 99,123,244,114,100,168,153,221,177,113,117,104, 92,182,240,126,246,152,164,190, 87, 42,100,179, 80,185, 26,246, - 85, 67, 62,149,145, 55, 6,236,253, 6,151,134,220,207,112, 21, 39,250, 34,222,166,189, 12,113, 90,247,171,140,177,240, 7, 5, -142,147,192,222,206,200, 95, 45, 44, 58, 46, 18,243,232,190, 32,183,168,251,163, 93,169,146,145,166,112, 61,250, 70,220,129, 10, -242,194,160, 67,146, 31, 42,238, 69,148,231, 28, 28,213,131,249,151,157, 33,137,238, 13,112, 91,177,127,126,194,172, 80, 31, 23, -152,227, 67, 63, 86, 23, 9, 13,137,100,137,244,169, 61,242,185,236,232,185,235, 63, 3,249, 62, 28,255, 31,248,157,111, 96, 95, -129,182, 20,183, 29, 45, 22,194,159, 77,237,174, 94,156,175,158, 73, 29,148,116, 53, 32, 15, 70,228,245, 29, 60,112,118, 51,143, -102, 87,151,223, 46,212, 39, 11,237, 89,241, 86,165,156, 89,169,206, 38, 16, 93, 28,109, 47,228,103, 39, 96, 76,226,103,170,172, -228, 59, 19,249,149, 11,248,248, 14, 94, 27, 97,202,216,223,124,159,118, 90,176,125,119, 16, 90, 8,204, 92,197,207, 18, 91, 64, - 63,116,133,135,157,232, 26, 88,232,211, 56, 52, 79, 12,123,188,192,125, 65, 46, 47,225,217,207,195,248, 50,140,159,134,225,115, -176,251,125,112,239, 23, 64,110,208,183, 50,178,180,192, 71,134, 96, 78,116, 75,156,145,228, 78,138,236,178,126, 57,179,185,117, - 90,137,172, 89,156,145,228,177, 87, 63, 60,142,186,217, 94, 10,235, 34,168,200,234,113, 39, 71,252,108, 22,100,231,240, 7,185, -223, 96,186, 11,187, 55, 97,252,193, 24,244, 78, 32, 63, 0,227,255,133,164, 19,246,203, 13,180,208, 82,102,217, 95, 99,121, 68, -151,197, 63,247,158, 53,222, 51,156, 91,136,228, 58,205, 74,207, 5, 85, 97,137, 18,165,229,193,231,238,230,243, 61,234,130,198, -102,184, 5, 79,184,218,121,197,134, 55, 91, 15,121,182,210,202,163, 89, 21,222,111,207, 62,238, 66, 14, 69,198,201,133, 71, 61, -100, 36, 84,213, 68,101,168,195,228, 22,188,156,145,156, 93,232, 53, 14,206, 14,215,204,134,142, 87, 20, 35, 91,245,199,217,224, - 52, 23, 76, 51,121,183, 39,103,165, 56, 72, 53,126,126, 67,107, 69,251, 98, 77,119,148,184,120, 51, 7,115,176,169,210, 52, 14, -148, 91,244,218,218,154,150,168, 66,155, 38,167,217,117, 95,187,217, 74,228,157,205, 81,178,164,236,139,188,184,138,123, 54,133, - 60,110, 96,156, 90, 86, 11,220, 42, 52,239, 26,208,230,108,248,118, 78,241, 59,247, 99,139,146,212, 86,232, 80, 99,131,188, 88, -231,185,231, 33,220, 17,190,185,149,101,246,247, 20,155,156, 14, 83,164,254, 21, 90, 93,188, 61,220,159, 39,250,198, 44,225,162, - 72,190, 89,245,226, 75,210, 58, 54,241,239, 75, 46, 20,203,206,142,239,110, 12, 19,168,214,220, 78, 87,252,192,217,149,229, 26, -188,248,156, 7,134, 97, 96,202, 35, 87, 87,215, 92, 93,221, 97, 24,119, 44,101,161,149,226,153,232,177,161, 75, 44, 64, 61, 96, -168,197,140,186,243,231, 83, 74,228,148,200, 67, 38,231,129,148, 51, 57,126,159, 82,235,115,155,117, 39, 50, 82,155,111,208,209, - 5,178,208, 77,208,186,126, 98,115, 0,117,208,140, 35, 95, 59, 66, 55,186, 23, 42,107, 40,210,134,166,141, 67,155,109, 82, 90, -215,132,168,199,209,174,174, 65,191, 38, 53, 68,173,172,225,192, 31, 45,142,227, 12, 58,213, 13, 90,124, 68,168, 75,250,227, 23, -250,249,116,118, 70, 72,231, 85, 89,220, 80, 35,155,183,188, 70,245,126,219,188,176,125,210,124,212,248,190, 10,223, 76,240, 78, - 18,110,231,138,124,253, 68,254, 71, 7,242,207, 31,145,167, 1, 13,121,115, 68,126,255, 30,249,189, 35,242,241, 29,169,100,166, - 34, 92,206,149,203, 98,140,157,250,117, 38, 22,206, 61,202,185, 24,246,117, 67,190, 63, 35,223, 63,194,141,227, 68,229,101, 65, -174,171,111,238, 67,248,232, 58,111,187,111, 57,115,180,119,251,134, 93,226,196,153, 3,204,108,134, 52, 87,176, 58, 38,237,140, -176,221, 89,144,139, 67, 73,184,159, 87,178,155,156,103,123,118, 26,192, 36,112,119,240,116, 54,139,120,167, 78,143, 59,181,205, -155, 62,136,207,144,223, 94,144,155,234,169, 89, 55,197, 55, 52,154,255,169,130,238,188,165,168,159,186, 64,126,104,242,138,229, -242, 95, 2,189,128,155,191, 3, 95,121, 27,251,186,209,202,236,179,255,110, 43,209, 51, 5,186,194,144, 61, 46, 74,114, 66,115, - 66,119,163,167,145,189, 58,186,242,253, 84,177,183, 79,142,230,125,186,208,110, 10,237,166, 6,210, 81, 54,255,118, 88, 48,180, -135,151,172,139,190,172, 30,204,172,206,188,222, 53,152,118,153,244,112,135,126,108, 15,175, 15,240,234, 30,110, 10,252,253, 71, -180,177, 98,251,104,231,214, 56,136,244, 21,235,133, 59,216, 96,107,155,198,120,193,154, 95, 83,185,169,254,217, 60, 43,225,106, -184, 7,207,126,201,199, 20,227,247,129,126, 12,201,111,194,245,207,195, 7, 11,250,118, 66, 6, 54,133,102, 15,161,201, 26,194, -108,137,185,229,243, 38,112, 89,229,202, 81,217,247,194,107,192, 15,122, 23,217, 31,150,238,146,168,108,200,200, 28, 66,193, 28, - 85,206, 20, 80,138, 75, 65, 30, 8,236,238,193,229,167, 97,248,161,240,172, 23,200,175,130, 86,228, 99, 95,128, 95, 22,218, 7, -123,236,222, 21,173, 37, 90, 57, 33,181,250,226, 46,157, 67,219,168,225, 61, 79, 49, 62,168,125, 97, 9, 74, 26,189,189,171,147, -255, 25,240,141,182,156,192, 42,231,241, 19, 22, 7,133,126,232, 49,149, 51,175,176,108, 56,203,179, 46,142, 87,184, 81,237,229, - 17,221,237,124, 35,204,131, 87, 37,125,129, 15,191,183,230, 1,166, 41,116, 34, 1, 30, 10, 59,144, 87,139,121, 93, 24, 53, 37, -134,105,199,184,223, 49, 12,131,207,160,155,209, 46,174, 24,118, 59,111, 77,207, 39,230, 16,224,181,214,220, 86, 22,141, 19,123, -206,153,225,170,114,111,165,198,248, 44, 15,126,160,227, 60,224,101, 83, 37, 55, 51,135,153, 12,147, 91,250,226,126,240,184,205, - 46,238, 12,181,183,192, 82, 42,203,241, 72,149,112, 31, 72, 70, 8,145, 32,178, 6, 13,245,235,183,152,135,224,212,224, 6,120, - 14,189,172,248,223, 14, 81,146, 72,131,179, 46,244,236, 33, 55,214, 66,247, 96,107,215, 99, 37, 72,228, 1, 29, 6,100,152, 64, -149, 58, 31,195, 15,206,170,196,182, 94,241, 70,184, 75,175, 38,219, 89, 72,139,177,205,126,207,193, 41,173, 85, 90,113, 97, 92, - 53, 91,253,222,221,175, 45,154, 24,242,192, 52,237,152,118,123,118,251, 11,198,221, 5,121, 28, 25,226, 96, 80, 69, 56,205, 51, -243, 50,111,155,113,101, 3,208,148,186,122,212, 29, 96,163, 12, 57, 51, 78, 35,121, 28, 72, 41,123,213,159, 28, 92,116,106,141, -211,233,232, 87, 71, 29, 80,147,146,227,134,172, 22, 15, 22, 10,203,101,105,174,152, 95,187, 80,237,172,117,190,242,225, 67,140, -152, 18,165, 54,164,109,241,170, 61,160,197, 98,195, 95,115,145, 59,201, 46, 66,175,172,148, 51, 12,108,243,217,252, 82, 34, 48, -233,249,198,175,189,152,233,242, 28,223,250,195, 62,246,117, 83,255, 87, 46,245,243,221, 75,201,202, 4, 63, 19, 5, 71,129, 59, -156, 1, 76,242,198, 12, 98,110,193, 82,105,198,147, 38, 60, 70,120, 79,132,119, 70,225, 89,107,148, 71, 11,195, 23,111, 25,126, -230,128,188, 83,225,245, 12, 31, 31,145, 31,220, 33, 63,234, 16, 18, 33, 49,204,202,238,212,216,151,198,132, 48,196, 60,163, 31, - 56,100,114, 1,156,125,179, 33,159,136, 86,124,141, 56,210,187, 47, 35,247,223, 69,174, 12,230,209, 45, 72, 68,203,251,253,230, -170,243,254,238,151,186, 65,202,119, 17,126,221,179, 42,171,251, 58,233, 74,210, 98, 62, 3, 40, 13,230,134, 92,171,119, 2,166, -141, 47, 28, 12, 84,175, 34,171,248, 2,255, 90, 68,164, 30, 98, 54,222,249,186,199,182,109, 2,187,152,185,255,179,163,171, 74, -123,158,108,109, 88,177,104, 9, 25,210,212, 83,148, 62,121,137,124,106,130,227, 9,246,159,241,159,243,228,239, 98,191,113,139, -125,123,161, 30,150,149, 52,117,238,120, 92, 63,175, 93, 90,147,235,210, 46,163,187, 1,121,121, 68, 94, 25,124,179,121, 86,224, -237, 5,110, 10,237,102,161, 61, 41, 62,131,169,103,172,136, 51,115, 65,143,162,238,247,110,183,143,244,255, 63, 70, 30,207,112, -119, 34,191,182, 67, 62,177,115,161,226,131, 9,126,251,150,246,171, 79,104,151,177,226, 86,217, 4,101, 97,167,179,210,177,136, -242, 33,210,130, 21, 91, 45, 21, 86,170, 7,128,156, 26,178,100, 63,117,222,175,200,197, 61,184,249, 5,200,247,124, 84, 33, 15, -125,211,126,233, 75,240,172,161,143, 60,234, 83, 7,117,234, 94, 74, 17,131,217,103,174, 65,152, 27,206,218,159,189,101,177,248, -109,227, 51,246,184, 40, 23,129, 88,220, 7,215,126, 58,123, 96, 36,136, 76,187, 51,219, 71, 7, 97, 92, 11,114, 23,216, 95, 59, - 84,104,248,108,248, 51,139, 31,167,211,143,192,248, 27,200, 75,223,160,254,191, 23,200, 48,187, 78, 35, 88,219, 45,176,158,181, -122, 44,101,179, 80,218,170,160,155, 51,115,157,123,150,230, 25,229, 69,148, 22,115,213,186,204,190, 32,191,176, 94,116,104,204, - 26,195,186,130, 79,116,253,255,235,124,181, 15,160,243,132,236,246,174,204, 28, 28,120,211,230,217,171, 20, 51,218,233, 16, 7, -136, 0,132, 12,227, 10,142, 89,169, 99,181,184, 2,190,206,104,168,143,181, 44,100, 53,134,120,196,114, 74,180,221,158,101,127, -151, 50,236, 17, 49,210,241, 25,203,233,224,222,226,160,228,229,112, 95,244,228,184, 94, 89,245, 67, 73,141,153,105,194,153,239, - 41,103, 76, 18,165,249, 38,222,191, 44,132, 80,158, 49,159,145,193,121, 0,222, 6,174,103, 78, 36,223, 32,139,102,170, 37, 74, - 53, 74,153,177,148, 72,227, 30, 77, 3,182,156,188,136, 72, 66, 90,129, 53, 74, 21,165,116,109, 37,186,197,230,198,161,179,187, - 77,232, 48,159, 8, 49,105, 43,124,198, 86, 97, 27,154,125,116,209, 59, 71, 42,171, 77, 81, 82, 38,143, 59,119, 72,212,176, 14, - 70,229,173,154,221,186,184,230, 1,120,181,124,150,250,179,181,231,213, 19,208, 52, 90,253, 73, 93, 79,144,243, 72, 26, 38,210, - 48,248,124,124,220, 49,140, 19,105, 24, 73, 99,142, 72, 84, 71,187,150,226, 85,170, 6,168,102, 41,133,101,153, 93, 68,215, 2, - 69, 27,179,124, 81, 37,167,196, 48,100,118,211,196,126,191, 99, 26,167,240,148,103, 6, 85,246, 67,230, 42, 14,126, 39, 51,150, -121,118,199,131,193, 24,223, 87,154,235,144,114,206, 62,235, 22, 88,150, 18, 35,158,179,248, 98,117,144, 12, 41,175, 89,242, 43, -212,166, 99, 99,131,159,161,189,245, 30, 29, 64,108, 27, 21,244,103, 44,117,167,242, 0, 0, 32, 0, 73, 68, 65, 84,213, 2,117, -107, 42,235,251,106,181,185, 11,228, 67, 91,249,134,131, 94,207,149, 31,218,208, 95, 76,107,243, 93, 63,253,153, 43,253,252,208, - 23,224, 88,123,186,117,122,138,117,104,165,197, 1,163, 74,108, 20,209,221,142, 53, 45,120, 59,204,205, 71,179, 39,132, 15, 68, -120,127, 16, 30, 39, 40,183,133,225, 75,183, 12, 63,115,139,188, 85,176,215, 18,242,137, 29,242,233, 9,249,236, 8,175, 15, 8, -153, 52, 39,198, 5, 6, 19, 6, 2,152,159,226,166,235, 66,170,247, 64, 94, 85,120, 21,183,119,229, 63, 15,211,159,130,253, 23, - 16,169,112,155, 92, 16,112,219, 98,134,221,251, 91,241,165,241, 97, 76, 93,201,206,166, 72,182, 13,170,237,192, 13,231,121,203, - 24, 15,198, 40,200,133,183,234, 66,214,186, 17,184,150, 96,162,190, 26, 61,181, 67,164,222,116,224,204,201,182, 54,242,117,246, -139,245, 43, 71,108,140, 14,193,114,150,252,165,226, 27, 78,206, 36,201,200, 39,247,200,247,141,112,123, 11,151,159,112,213,254, -119,126, 17,190, 80,104, 79,139,183,164, 74, 91, 3, 95,186,152, 59, 53,208,125, 66,246, 25, 25, 18, 58, 37,116,151,209,171, 1, - 94, 30,144,251,147,223,200,143, 11,188,183, 96, 55,133,118, 91,176,165, 98,179, 69, 71,218,182,112, 22,221,114,217,123,219,175, -173,247,153,172,212,186,157,194,152,149,252,210,158,244,230, 5,124,108,231, 27,250, 85,194,254,238, 35,236,189, 35,118,135,149, -173,105,241,160,117, 69,241,230, 1, 58,123, 72,122,128,117,243,246,153, 45,109,107,213, 47, 21, 57,178, 34, 25,185, 94, 96,119, - 31,185,249, 85,168,223,138,159,251, 25,184,184,143,188,241,101,184, 56,109,145,149, 54,120, 59,113,136,154, 71, 53,108,111,178, -126, 22,146,211,246, 16,213,232, 38,245, 3, 71,104, 31,188, 13, 63,120, 39,103, 12,233,255,160, 91,103,102, 12,147,127,207,181, - 22,137, 74,221, 96,186, 15,251,143,195,248, 57,188,141, 16,237, 11,189, 2,249, 17,228,213,127,136,252,220,219,180,223,109,112, -173,180,192,180,174, 95,173, 82,173,198,218,235,236,246, 30,149, 91, 99,173,232,183, 71,147,180, 85,233, 1,247, 96,157,120,111, - 49,160,125,145,168, 56, 34,182,217, 89,115,176,123,107, 37,230, 59,226, 56, 89,157, 70,167,197,105,162,206, 39,150,195, 13,237, -120,235, 18,148, 90, 87,242, 25,165, 56, 93,110,218,249,134, 88, 74, 55,139, 97,197,199, 0, 98, 37, 58,104, 11, 58, 31, 25, 78, -183, 12,243,145,100,190,218,212, 52,178, 92,222,167, 93,222,117, 94,247,211,119, 93,113, 46,137, 66,168,219, 99, 39, 92, 44,180, -198, 42,219,134,165, 94,241,246,251,214, 85,232,158,223, 62,147,125,182, 26, 85,108, 86,103,175,215,230,115, 39, 49,200,121,192, -134,145,182, 44, 94,221,139, 31,120, 28,245,224, 64,155,138, 98,173, 80,170,183,115,251,136, 65, 74, 40,232, 37,226,118, 98, 86, - 93, 16,138,157, 41,160,109,203, 68,239, 81,198, 26,213,121, 51,191,150,222, 86, 14,154,155,122, 26, 29,154,183, 16,144,110,241, -138, 78,130,198,198, 43,195,206, 55, 44,156, 11,159,134,157,207,209,163,157,238,115,242,228, 7, 33, 81,114,192,170, 82,136,216, - 28, 2,227,204,121, 37, 88,230,113,208,243, 42, 56,251,198, 57,100, 42, 49, 87, 47,133,218, 42,165, 86,230, 90, 88,230,197, 45, -104,162,193,201, 55,150,226, 92,127,139,238, 76,206,153,253, 56,113,121,113,193,213,126,199,157,139, 43,246, 23, 23, 12,195,176, -250,196,251, 60,125, 20,225,238,110,199,245,229, 53,170,202,220,169,137,205, 65, 49, 22, 68,193, 20,162, 58, 82, 98,110,141, 58, -159, 34, 72, 65, 54, 34,167,186,242,190, 59, 3, 92,248, 23,234,253,200,117, 95,219,238, 18,136,220,222,129, 18, 65,114,246, 74, -188, 91, 20,251,159,226,118, 73, 19,175,220, 91, 35, 14,155,124, 40,143,205,206, 82,128, 55, 91,160,125,207, 60,117, 17, 33,239, - 98,156, 56,200, 22,171,106,103, 80,132,115,182,119, 23, 63,118, 10, 82, 87,102,250,201,116,203, 98, 55,131,178, 24, 79,178,219, - 49, 14, 9,222, 25,132, 87,128, 55, 30,159,120,237,111,207, 92,253,226, 51,228,207,221,135,159,190, 3,175, 79,200, 43, 35,242, -131, 23,216,151, 14,240,107, 39,244,173,147, 43,209, 91,219, 74,206,226,234,116,251,221, 19,252,140, 32,195, 53,188,121,132,246, - 15, 64,254, 11,152,254, 83,120,237,191,132, 71, 2,143, 5,158,225, 27,247, 7,177,185,166, 51, 79,192,208, 23,164,216, 76, 52, -193,212,223, 96, 72,187,171,108, 45,216,212,103,237, 81, 81,119,209, 66,238,161,212,234,149,247,189,104,179,222,148,168, 38, 3, - 54,115,178,179,244,147, 80,161,127,115,113, 40,199, 33,178,119,147,111,192, 54, 24, 66, 70, 46, 61, 45, 78,158,102,184,138, 28, -243, 19, 72,123,236,132,186,239,206,238,215, 95,249,173,177,209,196,124, 70, 76,220, 7,126,145,145, 49,123, 82,217, 20, 26,132, -189,250, 76, 87,195, 61,240,180,248,193,227,118,139,219,148,157,211,191, 82, 85, 39,119,149,104,133,169,208, 74,216,107, 86,159, -164,172, 33, 46, 3, 48, 52, 35, 93, 78,232,189, 17,238,143,174, 69,184, 84,127,157,127,126,192,174,252,100,104,183, 56,183,222, -218, 89,160,119, 59,195, 38, 57, 60,197, 85,186,113,253, 59,119,186,198,134,110,230, 93,147,249, 8, 95, 7, 85,243, 95,226,211, -111,195,229,235,112,251, 53, 56,124,205, 45, 99,211, 31,132, 87, 63,137,252,209,255, 29, 62,248, 26,246,206, 12,111, 41,242,141, - 17,121, 63, 97, 83,245,174, 76, 87,174, 43,235,136,102,221,200, 70,159,169, 59, 96, 70,253,240,246,168,248, 38,158,178,131,137, -242,128, 13, 33,154,188, 80, 23,163,132, 26,150,146, 2, 94,210, 47, 94, 8, 47,237,212,229,162,241,136, 86,176,163, 11,254, 46, -255, 67,210,127,242, 87,208,191,120, 32,213,196, 40, 71, 74,243, 5,178,214, 74, 89, 91,168,189, 96,220, 62,155,174,135,104,125, - 70,222,154,183, 9, 67,248, 70,108,128,125,230,222, 34, 73, 75,206, 89, 86,113,111,245,141,190, 43,117,155,177,250,163, 77,156, -153, 46, 75, 13,155, 91,197,202,236,226,187,195, 77, 84, 1, 46,132, 19,240,107,212,231,144, 67, 14,255,122,129,121, 38, 81, 25, -178,231, 42,139, 24,218,170,219,248,218, 66,187, 57, 80,110,158, 81,244, 3,218,229, 13,109,186,164, 45, 51,167,106,228,164,100, -131,165,134,135,124,229, 26,133, 27, 94,212,157, 21,130,207,175,123,130, 92, 8,210, 82,245, 89,184,138,103,174,183,182, 97, 77, -147,224,214,192,178,144, 38, 33,219, 66, 29, 47,105,211,222,187,114,209,102,117, 37,122, 60,134,121,240, 13, 69,220,219,159, 4, -210,180,195,202, 5,237,246, 25,205, 36,114, 10, 88, 85,210,170,189, 94,136,145, 68, 92,243,214, 29, 57,193,215, 79,254,228,196, - 97,162,219,177, 28,177,189, 30,158,204,231,197, 57, 43, 12, 3,229,120,242, 96,152, 60,162, 73,209, 97,231, 26,135,101,137,181, - 41,252,222,177,193, 73,143,142, 13,103,148,158,121,169, 65,220, 62, 38, 25,203,254,134, 19,194,110,154,184,184,186,195,126,127, -197, 48, 58,221,110, 46,133,121, 62, 80,230,197, 29, 40,213, 55,238, 82, 11,212,202, 48,122, 74, 27, 34, 92,239, 47, 92,209,222, - 26, 57,132,127,217,220,218, 88,173,113, 44,149,185, 44,204,161,164,175,103,226,179,103,214,184, 61, 30,121,101, 89,184,184,186, -230,122,183,135, 86, 93,103, 17,252,126, 75, 3,132, 35,185, 38, 63,124,154,181, 53,161, 78, 99, 12,164, 41,249,115, 82, 93,119, -181,162, 93,123,122, 95,210,237, 58,197,103,219, 31, 58, 77,234,220,133, 16,120,246, 20,182, 85, 19,212,221, 2, 61, 32,160, 61, - 95,165,219, 89, 31, 94,206,106, 77,249, 30,212,185, 30,101,107, 64,222,197,232,247, 58,109,137,107, 75, 4, 67,244, 10,227, 28, - 53,186, 86,101,103, 48,133,174,101,234,248,108, 11,203, 83,111,235,151,234,133,115,201,240,120,167,124,215,224,227,143,142,188, -250,191,125,151,221,207, 61,131,127,251, 1,242, 47, 95,193,103,118,200,199, 50,124,118, 7, 95,154,225, 75, 71,236,157,197,127, - 64,178,213, 67,206, 50,195,111,131,253, 66, 66,228, 2,222,252, 6,240,215,192,254, 44,236, 94, 69, 94,122,132,189, 51,248,139, -206,230, 11,235,108,225, 60, 59, 19, 11,204,192,253,120,130,250, 70,146,237,204, 4, 24, 87,114,136, 25,234, 62,218, 41,183,213, -231,247,187,104, 89,156,226,110,191, 86, 87,227,167, 64,189,118, 27,214,210, 21,239,108, 20, 57, 12, 30, 53,184, 19,141,147, 18, -100,161, 36,232,221,120,189, 18,191,198,189, 20,237,125, 54, 25,179, 29, 60,148,102, 62, 59,120,136, 99,101, 9,198, 52, 41, 56, -234,125, 67, 31,146,243,199,199, 72,232,233,130,194, 83, 8,249,150,176,142, 20, 59,131, 52,132, 37, 1, 67,181,209,154,172, 26, -168,185,196, 60,252, 44, 82, 50,197,121,105, 24,149,116,103, 68, 95,217,193, 75,131,111,232,151, 3,252,218, 99,236, 88,176, 87, - 60,181,204,240,195,207,243,112, 6,123, 62,254,211,154, 39, 23, 21, 86,203,217,122, 56, 82,207,148,239,226,174,242,228, 22,253, -226, 66,122, 82,253, 52,252,153,111, 34,119,222,132,229,101,152,191,230,134,247,203, 63, 7,247,254, 26,220,249, 10,242,218,207, -193,247,255, 18,246,214, 35,248,173,140,124,125, 66,134,138,105,133, 99,243,101,179,143, 88, 74, 31, 67,232,230,107,151,230, 29, -154, 67,129, 71, 10,227, 9,155, 60,241, 78,134, 12,187,132, 93, 21,223,212,159, 84,184,109,200,208,182, 78, 91, 98,227,235,150, -199, 96,203, 11,105, 13,115,196,178,254,113,228,135,255, 40,195, 79,254, 61,236,151, 43,246, 96, 38, 91, 69,205, 34,158,181, 55, - 58,252,126,232,173,247,149, 35,212,206, 44, 49,171,210,189,167,188,245, 25,185,157, 97, 10,122,230,180,174,179, 57, 43,178,206, - 94,237, 44,131,180,245,138,208, 34,235, 92,195,166, 20,203,127, 19, 79, 22, 19, 18,114, 50,100,183, 71,247,151,209,190,116, 53, -183,180, 68,109, 93, 80,229,135, 42,173,174,117,113,123, 96, 97,152, 38,114, 30, 56,156, 78,148, 22,175,187,156, 60, 33,110, 62, - 49,179,101,235,182, 88, 9,251, 28,189, 4,146,182,231,208,247,181,174,153,172,169,126,162,234,209,197, 2,201, 26, 85,101, 93, -204,106,168,164, 77,204, 55,245,189,231,127, 55, 77,232,254,138,122,186,245,116, 51,245,113, 14,106,171,173,170, 58, 38, 49,174, -171,162,163,251,234,151,186, 56,194, 87,220, 35,223,219,228,106,222,250,245,243, 86,195, 66, 32,216, 66, 67,144,194,190, 37,227, - 64,139,170,150,134, 83,212,210, 16,202,244, 77, 96,103, 64, 9,250, 89,218,237,169,203,236, 27,126, 40,214,117, 24,124,180, 16, - 29, 31,143,203,141, 20,184,206,246, 23, 11,209,156,174,161, 36, 52,243, 90,104, 55,177,155,246, 30,204, 50, 12,140,195,158,113, -116,229,187,207,195, 43, 41,121,107, 92, 46, 4, 21,111, 99,247,124,123,107,109, 85,204,215, 86, 41,167, 35,135,249,200,241,112, -160,212,194, 82, 27,183,117, 97, 57, 45,156,150,194,113,153, 61,223,188,235, 46, 82, 90,215,141, 90,141,199,225, 6,185, 79,176, - 57, 98, 32, 89,227, 57, 81, 51,146, 10, 69,149,219,211,137,122, 58,173,150, 53, 86, 93,151, 67,110, 90,140, 1,178,248,207,106, - 34, 52, 43,126,222, 34, 57,198, 59, 90,239, 62,194,243,142, 67, 19,241, 17, 66,117,251,232,234,227, 23,239,152, 52,129,186, 20, -111,191,159, 19, 45, 95, 88, 6,251,120,126, 3, 87,109, 40, 17,125,190, 81,191,118,119,254,127,190,222, 52,214,178,236,186,239, -251,173,189,247, 57,231,222, 55,213,171,170,174,158,216,221,108,138, 83,115,146,168,209,177,100, 89,146, 37,197,178, 29,197,145, -129,216,138,157,216,136,157, 1, 65,226, 0, 14, 2, 88,249, 96, 68, 64, 2,196, 8,224, 15, 73,156,192, 8,144, 15,129, 97, 4, - 6,236, 0, 65, 2,120, 72, 96, 73,182, 18, 75, 20, 69,154, 17, 73, 73, 20,155,100,119,147, 61,212,208, 85,245,166,123,207, 57, -123,239,149, 15,107,237,115,239,171,110, 69, 68,161,212, 53,188,186,239, 14,123,237,181,214,255,255,251,167, 35,191,137,173, 61, -133,237,202,111,152, 33,236,216, 28, 53,236,246,169, 45,254,187, 21,244,160,242, 30,194,221,222,170,141,236, 77, 72,242,127,122, -204,112, 63,193,246, 32,240,184, 86, 94,120,237,156, 27,255,205, 68,252,220, 9,252,165, 91,200,135, 14,224,149,132,220, 73,232, - 11, 61,242,219, 91, 99,162, 63,158,124,198,111,222, 64,173, 21,121, 99, 68, 63, 23, 16, 89,193,139,223,128,252, 63,129, 28,161, - 7, 29,242,148,152,130, 28,239,218, 46,170,101, 89, 87,143, 69,109,163,135, 18,140,252,246,216, 11, 91, 8, 54,179,110, 87,163, -236,114,201,149,255,104,106,199,177, 94, 59,240, 88, 39,184,105,163, 81, 88, 91,215, 85,196, 45, 4, 94,164,178,238, 82,111,198, - 2,111,204,232, 74, 17,141,104,170, 72, 49,208, 13,151,190,243, 47,102,133, 66,131, 25,250,131, 26, 63, 93, 86,118,216,135,118, - 9, 49, 47,187,204,141,151,229,157,213, 96,221,184, 56, 62, 87,162,237, 88,164,119, 81,215,186,119,241, 96,195,214,178, 87,172, -236, 96,146, 10,218,249, 27,161, 4, 36,215,157,150,176,238, 38,230, 13, 1,156, 68,232,181, 18, 14, 7,226,157, 1,158,233,225, -180, 67,142, 59,160, 71,127,115,131,174,212,146,242, 54,234,194, 64,189,134, 71, 92,222,224, 98,124, 0,205, 78,210,217,223, 15, - 6,183,149,197, 86, 24,119,187,191,122,150,209, 47,103,210,168,200,168,240,201,175,155,211, 64, 63, 12,249,117, 24,255, 55, 24, -254, 2, 12, 63, 1,235, 63, 2,135,223, 70,142,255, 22,220,249,101,244,185, 9, 94, 93, 33,119, 19, 28,102, 36,251,165, 86,252, -125,180, 47, 48,104,170,210,226,239,145,171, 2,143,130,177, 10,158, 1, 14, 6, 8, 3, 50,140,112,176, 69, 15, 20, 30, 72,203, - 38,222,165,176,180,208,238,114, 14,229, 93, 3,208, 44,146,181, 10,108,204,187, 62,252,123,196,191,242, 5,226,159,126,157, 58, - 87,146, 15,203,219,190,184, 5, 88, 4,175,230,139,238,176, 54,238,182,117,224,198,238, 94, 64, 3, 86,104,252,146,164,101,255, - 58, 21, 44,105,177,134, 93,112,205,123, 90, 8, 19, 7,225,163,204,230, 55,110,235, 20,233,250,101,212,172,126,139,208,121, 50, - 2,155, 19,194, 90,140, 40, 49, 17,242, 12, 49, 17, 17,162,203,123,141, 85, 63, 32,125, 2,157,169, 18,152,165,177, 36, 20, 26, - 16, 36, 27, 54, 39, 55, 22,182,152,136, 45,171, 90,170,236,146, 90, 86,119, 35, 13,217,155, 68,106,243,222, 23, 75,159,172,187, -125,115,222, 11, 53, 72, 40, 50,110,161, 27,168,146,168, 41,248, 74,163, 32, 90,156,109,212, 65, 23,173, 43,140, 62,161,153,183, -148,188,133, 20, 73,135, 71,212,203, 3,242, 52,210, 48, 36,133,157,106, 58,180,124,242, 69, 40,170,139, 82, 63,184, 67, 64, 83, - 71,154, 38,138,231, 21,104,205,198,121, 71,108,180,238,123, 91,139, 10, 53,225, 90,183, 58,160, 14, 86,216, 77,156, 85, 81, 2, - 49, 25, 17, 79,203, 68, 41,211,226, 66,210,101,167,237, 78,128, 16,136, 62,114, 79, 33, 48,116, 43, 14, 86,135,172,214, 7,196, -126, 69, 13,129,237,102,195,102,115,225,152,105,235,128,231, 82,152,199,201,128, 46,174,251, 88, 38, 72,142,121, 77,253, 0, 40, -185, 20,174,166,145,203,237,150,121,154,188,129, 44,174,132, 55, 54,123, 8, 98, 93,188, 35,146, 91,231, 95,181,146,181,114, 57, -207,232,249, 25, 67,191,162,247,203,130,230,236,169,149,246,190,222, 76, 19,211,118,227,151,131,157,106,209,226, 14,170, 43,213, -237,226, 32,177, 3,137,206,121,119, 61,149,191, 33,154, 0, 79,124, 66, 82,197,196,133,185,228, 37, 15,222,240,186, 45,187,222, -109,132, 45,150,245,125,218, 25,145, 61,182,140, 62,185, 71,223,173, 36,117, 95,141,215, 52,226,127,241,118,248,197,222,155,206, - 27,205,214,237, 63,119,190,103, 95, 5,225,160,179,198,238, 56,152,253,250, 56, 90,243,181,142,112, 16,133,195,100,117,226, 32, -218,143,195, 8,171, 40, 12,254,223,107,223,219, 55,238,113,242, 74,176, 29, 2,181, 20,134,111,108,137,159, 31, 97,165,200,179, -214,221,201,157,136,220, 73,230, 73,143,193,124,201, 77,217,158, 92, 36, 60, 41,140,130, 28,174,237, 1,220,243,241,230,224, 55, -203,236,114,253, 73, 29,106,162,230, 77,238,217, 9, 8, 86, 46,126,203, 45,227,124,127,215,238,136,211, 33, 58,248,220, 31, 67, -113,222,250,198, 23,110,119, 34,220,153,225,224, 19,118,147,185,120,199, 70, 19,155, 98, 35,237,185,122, 78,173,251,234, 31, 84, -248,173, 43,247, 59, 59,248,166,136, 83,193,220,131,125, 96, 2,183, 22, 12, 35, 31, 76,118, 64, 28,253,176,237,194,222,253, 42, -188,169,230,229, 47,238,185, 79,150, 8, 22,134, 72, 56,244,231, 45, 6,187,177,118, 22, 79, 40,125, 7, 79,155,165,141, 8,250, -184,192,187,179, 41,224,231, 74,157,219,242,213, 71,128, 77,189,227, 83,130,134,116,222,239,174,155,136,103, 85,148,190,139,164, - 91, 7,196, 15, 31,192,203,135,112,123,141, 28,245,232,197,136,254,189,251,212,131, 98, 23,133,209,169,107,237,192,220, 27,117, - 94,203, 87,204, 38, 30,212,201, 46, 62,173,160,154,127,121, 95, 65,130,233, 10,170,123,168, 47, 50,225, 93, 19, 37,202,201, 67, - 56, 56,132,238,251, 33,127, 27,194, 59,102,119, 11,167,102, 15, 28,126, 20,214, 47, 33, 39, 95, 65, 78, 31,217, 40,125,238,161, - 70,179,167,197,125,225, 91,243,195,202,110, 60,209,148, 44,201, 63, 96,157, 24,112, 38,221, 4,185,233, 69, 73,145,131,209, 19, - 73,124,247, 63, 84, 11,173,233,143,161, 95,193,240, 65, 72,207, 63,129,139,242, 23,150, 3, 56,250, 14,124,241, 43,212, 87, 11, -249, 16,143,253, 12,168, 54, 5, 47,139,125,107,153,236, 47,157,181,175,255, 61,222, 17,207,239,110,179,150,214,181, 46,123, 7, - 15, 98,146, 39,149,184,178, 99, 86,171, 23,231,230, 51,103,112, 43, 90,234, 80,209, 37, 97,203, 91, 50, 40, 5,209,106,201,105, - 93,111,190, 72, 88,124,236, 34, 66,208, 74, 71, 49,113,110, 74,212,213, 26,141,145,213,188, 33,205, 35,147, 86, 70,215, 12, 16, - 34,181,239,109,168, 85,139,137,144, 22,157,135,238, 69, 64,251,250,202,127, 95, 61,254,115, 1,159,248,143,234, 2, 41,252,174, - 91,252,207,238, 44,157, 66, 23,133, 78,109,237, 49, 13, 71,148,126,133,110, 47,108,119,234,164,178, 44,145,178, 58,180,206,110, -158,172, 3, 23, 39,211,149, 76,208, 66,153, 38,234, 60, 46,232,224, 90,118,105,124,237,158, 43,169,167, 59,190, 97,123,227, 24, -136,195, 1, 49,173,252,207, 91,218,158,150, 22, 78,227,128,152,108,238,130,176, 90,219,172,100, 79,165, 93,242,108,246,170, 82, - 40,243,108, 99,230,176,147,214,198,152,232,250,129,174, 27,124,117, 80, 22,183, 71, 8,145,224,222,243, 24,205,150, 86, 69, 24, -231,145,205,213, 21,211,184,101,154, 38,174, 54,151,108,175,174,200, 57,147, 75,113,146,163, 41,216, 55,211,150,205,118,203,229, -246,138,203,171, 43, 46,175, 46,217,110,174,152,166,201, 64, 49,202,210,157,183, 66,142, 86, 82, 8,116, 33,209,167,142, 62, 37, - 82, 76,214, 13,151,194,156,231,101, 28, 63,207, 51, 37,151,229, 8,169,236,160, 57,205,110, 55, 22,229,114,220,144,199,173, 93, - 60,119, 35, 44,227, 39, 56, 71, 95, 80, 87,218, 71, 82,138, 22, 21, 92,170,133,148,185, 82, 56,136,113,249, 13,211,236, 78,136, - 70,203,203,101,153,208,180,244, 76,117,171,158, 77, 26,174,227, 96,159,236,212,245,189,107,246,107,190, 98,217,151,197,203,242, - 93, 16,255,243, 59,225, 23,111,154, 8,151,155, 17, 78,147,193,203, 14, 35, 28,138,112,146,132, 67, 47,228, 71, 94,172,111,138, - 89,155, 79, 19,220,140,194, 13, 81,110, 6,225,166, 23,251, 3,129,195, 78, 56,242,191,119,226,100,208,163, 32, 28,251,215, 89, - 11, 68, 21, 52,194,220, 25,250, 49, 61, 24, 73, 95, 24,145, 7,213,148,222,183, 58,235,242, 78, 3,226,183, 6,233, 3, 82, 93, -100,148, 60,145,103,170,214,204,156, 56,140,230, 65,177, 98,125,224,158, 98,215, 28, 33,193, 2, 95,218, 51,181,114, 43, 82,181, -219,138,156, 36,235,162,219, 62, 33, 25,151,124,241,157,172, 45,231, 91,146, 5,142,144, 61,201,173, 11,240, 82,134,155,199, 48, -252, 25,200,223,132, 71,111,193,148,118, 49,171, 13, 17,218,251,205,232,205, 12,247,178,239,241, 13, 74,163, 23,197,206,210,228, -233, 97, 67,180,164,176, 24,225, 56, 33, 47, 70,232, 19, 28,253, 56,164, 27,144,255, 57,188,173,112,102,197, 24,245,136, 79, 87, -186,139,135, 8, 72, 12,222,169, 59,212,225, 56, 33, 79, 15,112,210, 27, 28,231,172,192,121,182,201,198, 84,157,128,183, 19,164, - 45, 69, 87, 91,119,110, 51,202, 93, 14,180,233,161,251, 2,131, 8,233,104, 69,122,238, 16,249,248, 17,124, 96,141, 28,251,173, -238,119,206,209,207, 93,160, 79, 97, 56,220,217,247,231,181,197,121, 94, 55,189,139, 91,108,150,124,157, 22, 48, 83, 93,206, 85, -119,111,228, 5, 6,212,216, 1,222, 92,242,104, 38, 60, 0,142, 58,228,232,109, 99,254,167, 31,135,250, 16,226,100,182,177, 86, -153,187, 87, 96,245,227,112,248, 0,185,245, 38,156,108,160,116, 22, 74,144, 89,132, 80, 75, 76,107,116,197,119,191,199,110,108, -147,131,212, 18,230, 58, 8,183,205,190, 17,123,235, 80,135,140,244,217, 61,235,216,133,177, 59,130,110, 5,195,211, 14,160, 89, -177, 43, 71, 13,103,153,128,137,240,202, 23,169,127,239, 2, 68,153, 58,216, 22, 37,231,189,227,161, 41,213, 69,118, 81,157,117, - 15, 64,179,103, 23, 84,127,238,100,113,180,200,242,163,186,149,170,250,239, 87, 31,165, 47,250,130, 16, 9,195,129, 89,214, 66, -112, 20,164,169,174,233, 7,131,157,148,130,150,217,241,179,182,127,143, 82, 9, 53,155,211, 36, 36,180, 89,175,180, 90,200, 71, - 8, 4,170, 81, 16,187,206, 10,216,118, 67, 87, 38,227, 86, 72, 96, 86,203, 48, 87,100, 73,166, 83,183, 36,105,240,236,117,143, -134, 85,215, 18, 52, 14, 56, 18, 60,216,200, 99,112, 99,220,123,238,100,249,251, 69,219,243, 39,110, 85, 82,162, 8,131,199, 73, -231,156, 25, 75,133,131, 19, 83,204, 95, 89, 97, 47, 18,208,216, 81,250, 3,202,184,161,110, 46, 97, 30,237,217,237,122,215, 20, - 4,106,158,168,121, 90, 70,228,138,236,249,211,237, 53,144,110,205,193,211, 31,176,206,188,186,112,102,222, 82,167, 43,211, 31, -136, 88, 0,145,234,210,208, 53,156,106,138, 61,253,193,145, 41,235,115,166,230,108,232, 94, 39,173,229, 82, 28, 70, 99,192,151, -216, 15, 38, 32, 75,201, 98,107, 83,231,224, 20, 99,206,235, 94,241, 43,165, 48,151,204, 52,141,204,211,200, 56,141,204,211, 68, -158, 70,166,217, 66, 89,230,105,164, 56, 69,174,204,217, 19,208,236,185, 79, 18,233,146,137,241, 66, 48, 21,122, 20, 33,245, 38, - 90, 77,238,139, 15, 41, 44,208,180, 6,189,156,107, 49, 50, 93, 41, 75, 81,175,217, 93, 7,213, 47,142, 14,161, 81, 9, 76,181, -178,205,153, 49,207,108,166,153,237,118,187,236,209,171,238,101,211,187,131,160,221,224,130,236, 10,122,236,122, 95,123,151,101, -204, 30, 84,233,162, 65,118, 26, 73,177,233, 4,170, 95, 94, 85,246, 4,114,109,240,187, 60,222,221,100,242, 73, 52,236, 34,146, -171,187,226,189, 68,220,182,232,229,253,247,137,236, 46, 39,241,191,190, 19,127,241, 84,132, 91, 65,184,145,132, 27, 81,184,161, -194, 77, 17,110,181, 2,142, 21,239,155, 34,156,138,112, 28,132, 35, 9,156,136,253,249,211, 40,156,248,143, 27, 34,220, 12,194, -173,160,246,251,190,102,190, 33,112, 67,132,227,160,220, 8,194,113,216, 1,213,140,178, 41,148, 1,226,148,137, 95,159,224, 27, - 5, 94,232,144,219,201,110, 10,199,130,156,116, 54, 66, 56,114,176, 75,136, 59,131,125, 21,184,172,200, 41,200,179,157,177,194, - 69,224, 72,118,144,152, 82,173,128,175,147, 7,131, 0,135,178,120,205,165, 19,228, 48,186,156, 95, 97, 37, 59,210,216, 81, 66, - 78,124,124, 17,131,237,161,213, 59,245, 65,224,197,140,156,126, 22, 89,253, 44,242,248,239,194,197, 37,140,221,174,168,171, 35, - 97,215,174,136,126,148,225,162,216,147,208,177,131,225, 68, 89, 8, 68,168, 88,182,252, 42,217, 4,227,165,100,249,219,167, 63, -101,221,156,254, 51,228,193, 5,220,139, 59,118,112, 47, 72,151,172,240,184, 13,164,185, 7,108,167,110, 62,122,121,186,223, 5, -171, 60,202, 38, 96, 27, 11, 58,249, 5, 33,239,167, 80,248,162,209, 79,140,150, 77,220, 0, 8,226, 8,210, 65,148,238,160, 39, - 61,117, 72,120,229, 8, 62, 50,216, 52, 96, 56,178,231,254,239,223, 55,246,247,145,160,219,106, 41,108,121,159,176,180,211,139, - 44,163, 57,159,206,150,186,119,107, 13,123,150, 77,109,246, 50, 53,222,115,221,203,155, 13, 30,206,114,127, 34, 60, 4, 86, 61, - 12,111, 34,235,119, 32,126, 55,212, 43,143,179,187,237, 95, 45,219,255, 63,252, 33, 88,125, 10, 57,120, 3,185,121,215, 46, 2, - 87,157,173,183,147,236,192, 70, 14,147,129,189, 46,190,129,133,122,123, 82,100,141, 41,216, 99, 15, 97,101,164,184,120, 8, 73, -145,222, 98,129, 9, 3,244, 7, 16, 87, 48, 28, 67,250,128,253,157,107,218, 2,247, 36, 79,111,193,209,111, 35, 95,191, 79,249, -221,145,121,112,190,145,238,128, 36,236, 29, 21,212,150, 70,119,253,247,218, 33,138, 91,122, 26, 72, 6,177,241, 98, 89,146,182, -118,133,254,122,244,227,206, 6, 69, 72, 4,228,154,207,177, 22, 71,226, 36,231, 60,212,217, 70,172, 49,144,162,137,138, 52,103, - 52,207,158,189, 29,237,206, 27, 3, 93,223,155,245, 43, 8,186,189,162,142,219, 5,120,147,124, 74, 98,247,116,211, 91, 4,137, -164, 97, 77, 23, 45, 37,209,194,140,124,255,233,223,131,132,214,169, 57,124, 38, 8, 93,136,212,152,124, 48,221, 14,210, 93,215, -190,140,228,155,207,216, 1, 47, 93,216,109,211,230,121,178,143,199,241,169,133,128,108,174,204,174,213,173, 44, 58,116,220, 88, - 86, 65,240, 56, 87, 47, 34, 50,172, 44,154, 51,103,167,218,201, 53, 4,171, 29,105, 70,166, 43,243, 76, 25,175, 80,223,193,147, -199,165, 3,148, 16,150, 53,138,236, 3,107, 28,116, 19, 82, 79,119,116,195,116, 14,101, 38,196,222,117, 1, 6,117, 73,195,138, -180, 90,145,134,181,105,104,124, 25,111, 96, 23,118,113,161, 13,110,227,220,244,170, 74, 45, 6,137,209,236,222,110, 7,238,228, - 82, 40,217,252,248,165,100,114,206, 76,243,188,216,215,218,153, 81, 29, 8, 99,124,126, 27, 77,167, 96,231,111,110,169,125,222, -249,182,110,124,204, 51,227, 52, 89, 71, 94,118,226,196,234, 86,228, 20,157,104, 23, 77, 15, 80,114, 89, 32, 54,165,148, 37, 63, - 93,247,114,214,245,218, 85, 87,174, 43,201,163,197,176,106,136,212,146, 45,118, 53, 38, 15,225, 17, 98,215,163, 18,252,235, 22, -114,245,201,212, 94,224, 13,206,101, 48,158,193, 76,157,235,222, 68,189, 94, 19,199,237, 79,195, 68,127, 63,149, 81, 43,123,118, - 6, 73,104,186, 24,239, 29,251, 79, 30,152, 7, 77,217,121,216,102,167,159, 53,207, 48,251, 65, 38,114,109, 62, 32,253,254, 94, -211,131,145,197,119,180,163,171,132,155,168, 38, 58, 45, 44,251, 97, 27,236,133,213, 89,169,157,223, 66,214, 66,221,100,228,139, -143,224,191,154,225, 47,220, 66,254,240,177, 33, 97, 7,133, 67,224,169,104, 66,184,135,197, 84,199,147,119, 15,231, 25,190, 22, -224,149, 98,130,187,251, 62,114,251, 64,135, 36, 31, 45, 94, 84,168,131,181, 46,219,201, 8,115, 39, 17,201,106, 98,166, 67, 69, -142, 48,232,204, 70,119,123,143,149,223,167,170, 63, 7,226, 2,184, 22, 18,127, 80, 33,125,175,221,156,198, 7,150,167,222,210, -223,148,107,163, 91, 83, 1, 71, 99,135,215,138,110,117, 71,191,155,247,148,136, 45, 29, 76,124, 49, 90, 35,172,110, 66,247, 12, -132, 19,179, 64, 61,245,142, 89, 80, 82,132, 97,199, 95, 94, 72, 80,109, 15, 93,188, 24,117,238,161, 79,113, 39,228,203,117, 39, -146,208,253, 24,198, 22,251, 19,216, 95,130, 5, 44,144, 33, 4, 33, 36, 11,191,137,170,164,190, 35,157,172,136, 47,174,225,101, -115, 52,208,221, 54,238,247, 91, 15,209,239,204,232, 45, 65, 71, 19,144,180,128, 24,221, 11,209,104,133, 92, 60, 80,164, 77,109, -117, 47,171,189, 61,198,208,132,143, 51,232,176,255, 24, 29, 48,164,230, 9, 45, 2,242,230, 21,233,171, 29,178, 93,163, 31,125, - 21,158,191, 11,235, 15, 33,250,174,189,118,253, 39,140,214,167, 87, 38, 76, 91,253, 40,244,159,132,245,223, 71, 14,255, 54,122, -120, 1,191, 51,192, 3,236,144,238,195, 46,212,103, 9,175,247,238, 61, 99, 26,141,195,100,236,239,244, 16,120,193,200,134,210, - 65, 60,242,194,254, 16,210,185,249, 99,131,123,211,235, 5,212, 71,182, 87,151, 97,175, 91,247, 99, 64, 11,100, 8, 63,127, 72, -252,229, 13,105,206,196,110,119, 20,233,158, 14,212,198,237, 74,173,114,141, 36, 29, 68, 40,209,215, 40,190, 83, 39,154,152, 76, -179,119,244,126,200, 62, 89,204,131, 23,155,165,132,148,226,182,210, 72, 12,214, 41,217, 97,157,169,115,203,185,174,206,156, 80, - 58, 17,122,183,245, 77,185, 50,215,153,176, 61, 35, 72, 37, 29, 28, 17,125,228, 91, 83,164, 22, 23,220,249, 90, 96,235,145,157, -157,216, 99, 78,193, 53,156,243,134, 88, 86,196,131, 3,122, 81,174,198,137,169,218,254,217,238,228,118, 27, 45,197, 82,216, 66, -234,232, 67,187,187,203,254,179,187,244, 66,230, 79,111,197,166, 45, 43,141, 62, 86, 66, 37,138,135,233, 0,243,197, 35,106,234, -137,167, 79,219,101,102,187,177,254,161, 78, 54, 98,245,203, 79, 93,220, 47,198,215,151,217, 50,231,107,176,125,108,197, 56,244, -193,149,250,241,224,152,154, 6, 74,158, 60, 44,199,188,212, 17,167,172, 9, 6,100,145,184,216,175,180, 88,167,106,159,155,194, -120,113,198, 60,207,196, 97, 77, 90, 31,218,216, 55,171,137,230,250,129,126,117,176,187, 84,227,246,171, 82,150, 85,129, 21,144, -232,199,126, 94, 70,241,210, 80,177,218,108,184, 97,185, 76, 52,116,176, 74, 52, 77, 78,132, 92, 11,185, 88, 81, 22, 7,235,104, -131,185, 52,139, 30,182, 30, 72, 41,121, 76,105, 3,162, 5,136,145,226,150, 56,234,142,159,174,150, 22, 99,174, 1, 17, 59, 7, -125, 18,177, 80, 21,231,226,217,231,181,129,138, 23,172,181,190, 39, 14,165, 57, 29,204, 19, 31,251,100,152,223, 50,123,170, 95, - 90,244,173,209, 53, 36, 54, 41, 48,232, 78,241,238, 95,170, 46,132,199,224,177,191,213, 59,120,125, 34, 39, 93,246, 69,114,123, - 72, 14,105, 19,199,186, 19,165,202, 19, 64, 26, 89,106, 11, 11,214, 54,201,159, 57,177,110,115,220,139, 20, 93,137, 21,250,141, - 31, 18, 90, 77, 53,221, 36,237,121,207,163,122,225, 75,171,196, 78, 16,134,141,175,245,202, 35, 12, 54,190,223, 86,179, 76,233, -214, 47, 2,213, 18,184,100,178, 81,172,122,166, 57, 43,207, 54,127,115,131,254,183,247, 8,175,101, 83,200, 63,213, 33,183, 65, -215, 30, 16,114, 50,195, 73,183,228,142,147, 3,122, 89,145,111,122, 36,233,211,130,156,217,139,172,207,116, 72, 23,208,251, 46, - 68,219,244, 22, 94,178, 5,142,246,118,229,163, 35,244,214,193, 46, 17,217,121,238,115,113,161,158,238,102, 65, 67,176,231,237, -150,194,193,128,198, 15, 34,245,109,184, 58,131,122,219,139,190,143,132, 27, 6, 23, 39,179,156, 4,184, 8,240,184,192,153,137, -176,164, 19,116,242,240,152,214,237,225,143,233,184, 21,216, 59, 86, 20,100,101, 86,167,147,223,116,113, 94,178,137,196,204, 46, - 12,102, 73, 23,245,199, 58,196, 29,206, 52,237, 21,160, 73,159, 72,103,107,170,217,230,121,119, 92,107,139, 10, 20, 33,184,238, - 64, 92, 69, 25,250, 72, 58, 93, 17,159, 61,130, 87, 6,228,165, 8,235, 15, 64,125, 26,228, 53,248,173,115,203,157, 63, 4,222, -245,203,157,243, 41,155,245, 72, 91,198,124,221,249, 51,117,190, 94,208, 5, 22,101,175,202,206,113,193,182, 58,132,123,239, 55, -240,139, 87, 18, 74,202,132,199, 91,226,183,129,199, 43,248,224, 4, 47,126, 25,189,249, 59, 48,254, 26,114,244, 39, 97,253,199, - 32,158, 88, 60,169, 94, 66,184, 9, 71,127, 17,186, 87,144,244,215,209,195,239,192,239, 14,112,127,176,149, 79, 44, 11,186,150, -196,226,148, 88, 46, 97,231, 21,189, 81,144,254, 49,164,167,108,127,207,104,157,121,124, 10,234,202, 46,103,245,204,247, 26,226, -223,240, 6,123, 99, 14, 79, 44,211,170,253,250, 56,195, 83,145,248,177, 3,210,171,103,244,201, 18,134,213,231,114, 82,119,130, -250, 39,243, 32,116,145, 70,136,167,129,217, 68, 65, 85,144,234,130,187, 54,134,220, 27, 9,239,168,113, 78,224,171, 24, 19,188, - 78,132, 96,192,150,230,199, 93, 40,122,154, 45, 67, 61,103, 98,201, 36, 81,151,175,236, 44,156,166, 31,153, 8, 87,103,132, 58, - 65, 50,159,180,122,196,102,238,214,150,125, 93,205, 67,158, 75, 38,186, 20, 38,137,144,162, 26,110,118,123, 70, 92,245,200,250, -144,174, 86,166,113,166, 54, 50,100,234,118, 97, 55, 77,229,222, 5, 27, 89,186,137,191,168,137,201, 8,182, 34, 48,124,194,110, -130,212, 46,218, 53,154,143,220, 38, 31,142,116, 85,200,103,247, 9,177,167,123,250, 37,242,249, 67,202,217, 67,148,108,154,133, -234,207,111,232,150, 52,178,178,185,128,209, 32, 66,161, 52,159,115, 52,145,149, 22,232,215,132,213,161,141,137,125,124,173,101, -182,243,187, 27,136,221,218,244, 6,181, 82,242, 68,215,173,145,126, 32, 76, 35,108, 54,104,193,161, 65, 48, 95,156, 17, 54, 23, -172,110,220, 54,130, 95, 81,194, 48, 16, 98,103,220,113, 79, 62, 83,137,246,245,102,139, 63,221, 23,233,181, 98,109, 2,200,226, - 52,205,176,211,146,180, 34, 89, 91,130, 90,112,253,231, 46, 66, 85,171,248,200, 91, 22,187,100,241, 14,187,122,163,176, 29, 71, -250,156,145,148, 22,174, 65,206,230,175,111, 48, 23, 80,139,115, 14,201,199,247, 38,218, 83, 17,230,106,239,145,154,235, 66,133, -171,194, 46,231,221,171,165, 44, 4,204,157,243, 38, 56,130, 51, 58,122, 86, 82, 52,151, 68,153, 13, 78,228,211, 35, 99,152, 88, - 64,203, 92,173,251,183,132,188,253,108, 3, 22,170, 94, 65,204,233, 80,202,110,229,245,196, 39,243,189, 81, 46,215,241,219,242, -158, 92, 23,217,233, 85,155,191,222,247,234, 73, 62, 59,236,172, 83,165, 9,127,194,174, 61,178,100, 69, 36,121,128, 69,183,231, -101,155,177, 78,119, 18,244, 74,204,198,213,174, 18, 91,255,199,139, 23,154,217,113, 86, 37,152,192,172,197,164, 94,250,210,160, -169,211,139,154, 4,255,188,160, 15, 43,220,155,169,255,203,187,132,111, 21,248,143,111, 27,176,230,164, 64, 15,122,146,224,150, - 34,103,201, 46, 23,219,178, 3,204,188,153, 65, 18,114, 71,208, 53,200,198,119,232,235,136, 62, 2, 30, 7,163, 94,181, 66,222, -169, 9,216,130,139,212, 98, 48, 15, 58,109, 58,225, 62,161,150, 6, 82,176,139,196, 36,214,233,197, 53,196, 59,232,230,171,246, -248,115, 52,160, 70, 51,242, 39,150,132, 46, 14,125, 10,208,205,240,182, 47,140, 7, 31, 17,174, 89,248,174, 18,247,140,255,205, - 62, 21, 79,119,163,216,244,156,141,243, 79, 4, 25, 13, 93,107,118, 20,221, 19,147, 7, 15,219,136, 86,220,163, 91,243,146,123, -190,103, 87,110,203,245,162,126,237,255, 74,176, 76, 97,143, 99,107,158, 72,131, 93, 8, 66, 36, 30, 13,164,103, 14,225,123,123, -248,184,192,141, 15,129,188, 2,221, 21, 92,158,195,151, 71, 56,182,168,220,154,125,158,190, 23, 62, 99,159,109,185,142,209,175, -215,169,177,251,221,232,190,182,206,132, 43, 62, 97,122, 82,120, 18,247, 72,116,165,160,219,217, 82,222, 30, 38,120, 45,194,119, -101,120,225, 53,244,198,127, 7, 71,255, 4, 57,253, 79,237,178, 36,157, 23,215, 4,171, 31,134, 91,255, 5, 18,254, 6, 28,252, - 30,250,214, 4, 15,123,184, 18,123,110, 26,145,176, 83, 27, 51,224,162,199, 9,179,185,173, 55,208,157, 65,255, 52,132, 99,243, -158,135,104, 35,246,144,236,107,212, 43,203,133,103,107,111,200,122, 14,241, 96,207,243, 86,221, 91,105,121,233,114,161,196,207, -174, 72, 95, 63, 39,170,237,122,155,235,174,236,239,228,124, 87, 29, 90, 8, 69, 27,165, 47,226,119,135,255, 4, 93,162, 62,197, - 85,209,203,110, 30, 75, 97,171, 94, 36,170,175,138,212,193, 40, 53,136,191,158, 5,149,184,219,145,135,106,190,245, 58, 19,169, -244, 2, 61, 74, 71,117,113,150,239,245, 85, 16,157,209,205, 76,145, 64, 9, 29,165, 95, 83,186,158,210,117,148,212,251,168,126, -178, 78, 46, 91, 84,171,173, 93,252,125, 48,142,212,199, 15, 72,167,119, 72,135, 39, 48, 63,244,125,241, 78, 11,160,112,205,247, - 6, 0, 0, 32, 0, 73, 68, 65, 84, 49,184, 97,162, 18,155,103, 29, 69,197, 30,143,120, 91, 84,170,169,151,235,222, 56,219, 38, - 67, 74,165,146, 3,100,148,185,216,207,234, 96,145,122,118,223,178,194, 79,110,145, 85,169,103, 15,145, 16,137,233,208,138, 65, -236,168,211,104,222,125, 42,193,241,162,180, 81,182,136,121,227, 99, 36, 29, 28, 83, 98, 79, 45, 27, 43,188,158,154, 23, 14, 79, -137,199,167, 22, 76,130, 16,181, 18, 75, 70,130, 21,248,164, 64,236,169,219,209,140, 66,221, 64,108, 62,236, 90,144,212, 35,125, - 71,201,133,105,123,102,148,180,174,115, 91, 86,211,140, 36,160,144,167,201, 46,101,173,140,168, 49,228, 21, 35, 57, 74,104,143, -223,223,155,254,121, 44,234, 98,200,230,111,246, 66, 95, 90, 90,158,191,171,170,178, 20,236, 37,248,196, 45,116,195,106,101, 98, - 63,133, 46, 26,226,181, 79,137,218,245,104,177, 48,157,206, 31,119,174,117,241,170,199, 16,152, 68,152, 37,163, 69,252,189,213, - 86,123,123,250,160, 16, 23, 85,191, 44,133,222,207, 53,215, 98, 52, 32, 82, 20,139,141, 53,164,114,113, 75, 97, 36,139,144,167, -217, 50, 13,212,166,207,237,123, 85,143, 57, 86,127,124,213,237,109,139, 64,245,154, 9,141, 39, 6,241,123,213,123,111,106, 43, - 79,136, 86,101, 15, 21, 41,158, 68,135, 4,146, 60,221,153,141,197,115, 51,101, 25,230,199, 37, 35,214,254, 59,129, 30, 1, 39, -246,123, 58,250,225,179, 5, 29,205, 78,181,241, 39,172,184, 98, 90,154,183,215,111,238,181, 56,204,195, 37,212,165, 66,238,224, - 42, 34,179,154,239,250, 74,208, 51, 51,182,203,187, 25,125, 56,195,215, 11,250,235,151,240, 11, 21,126,225,150,225,101, 15,214, - 72, 63,195,225, 6,110, 22,155,154, 94,120,203,178,241,162,123, 63,163, 29,200,237, 14, 93,137,217,194,186, 96,138,242,181, 90, -231,186, 31,113,218,186,111,221, 69,232,217,124,109,143,238,148,189,187, 25,129,183, 50,108, 29,144, 17, 86, 16,159,134,205,255, -128,206, 62,122,111,233,108, 77, 17,221, 40, 63,135,105,201, 80,215,199, 25,110,123,224, 71,241,189,123,220, 75,121, 80, 87,160, -143, 5,202,100,130,170, 32,222,226,216, 88, 74, 86,160, 41, 64,182, 34,187, 36, 59, 53,145,156,103,168, 19,204,174, 32, 43, 3, - 81, 48,101, 19,197,201,222, 69, 45, 63, 33,187,148,189,229, 78,139,180,117, 17, 10,157,137, 92,210,170, 35,124,224, 8, 62, 43, -200, 71, 20, 78, 62, 9,225, 15,184,253,240, 30,250,237,135,246,220,159, 84,244,194, 32, 55, 90,212, 17,148, 62, 5,216,219,163, - 47,238,169, 6,228, 41, 92,187,225,134,228, 5,223,255, 76, 81, 8,179,238, 30,110,244,174, 95,174,243,218, 85, 43, 53, 43,161, -155,141,104,246,122,128, 7, 17,222, 90,193,199, 20,110,127, 14,182,255, 17,220,250,203, 86,200,227,205,221, 88,160,255, 44,220, -252,107,208,253, 93,228,224,215,225,242,161, 93,222,198,176,176,235, 81, 7,249,204,205,203,105, 23, 66, 61,155,172, 91,239,174, - 32,173, 33, 29,237,177,118,111, 67,126, 8,122,207,108,138,201, 63, 95,136, 77, 11,228,198,222, 71, 57,154, 93, 50, 12,232,168, -200, 58,210,221,233, 73,143, 70, 82, 15,163, 24, 14, 51,239,157, 5,178,175,112,108, 59,111,159,180,148,182,142,173,234, 93,173, -109,214,203, 34,182,243,159,107,165,196,128, 70, 7, 0,249,254, 61,164,206, 46,198, 45, 69, 13,252,207,212,229, 82, 25, 82, 71, -210, 66,151, 71,250, 96,235,146,166,113,237,130,216, 40, 63,196, 69, 68, 84,137, 76, 69,153,166,145, 50,207,132,110, 64,250, 21, -161, 79, 30, 48, 50,195, 60, 81, 74, 97,148,200,236, 54, 62,213,194,106,115, 69, 12,239, 18,110, 62,139, 28,222, 64,207, 30,249, -229,195,188,222,109,159, 37,216, 69,163,230,138, 22, 49,223,178,183, 67,217,193, 58, 45, 83,220,161,243,246,171,254,121,210, 96, - 94,227,226,225, 42, 38, 26,180,196,179,242,238,219,164,227, 76, 92, 29, 19,179, 41,211,101, 24,208,121,164,206,147,249,245, 61, - 79, 60, 58,104,166,165,158,137,211,199,218,229, 54, 12, 3,113,107,241,169, 5,156,165,127,100,150,190,162, 80, 50, 41, 40, 49, -246,166, 28,247,120, 87, 9,193, 84,234, 85, 45, 92,135, 96,189,218,106,229,120, 86,150,180,176, 82, 10, 93, 48,203,214,226,135, -142,201,102, 26,253, 64,201,209,148,224,186, 19,181, 72,112,231,134,219,229, 52, 25,207,162, 20, 3, 14, 89, 18,155,186,207,126, - 39, 18,171,222,205,182,122,208,222, 95,210,200,161,178, 75, 41,139,170, 12,253,202,178,208, 75,118, 62,187,169,252, 39, 41,156, - 79, 19,211,102, 99,123,245, 90,220,183, 45,116, 41, 18, 83, 67,209,122, 38, 61,123, 99,119,246, 14,153, 86, 22, 27,255, 94,119, -227,112,123,109,146, 81,244, 60,117,173, 22, 43,232,125,215, 81, 99,100,158, 51,197, 83,239,212,147,227, 26,209,211,190,121, 49, -157, 69,158, 22, 32,216,251,152,215,118,112, 88,121,162,159, 82,150, 38,234,122,173,151,107,182,113, 43, 19,150,126, 39, 26, 72, -245, 31,159,155, 16,109, 91, 97, 16,244,212,228,233,114, 18,173,243,233, 61,194,180,207, 72, 26, 33,140,102,173,225, 96, 17, 81, -216,193,151,145,195,214,241,123,135, 88,247,158,188,136,143, 19,147,197,135,134, 54,186, 25,237,199, 60,219,223,155, 42, 92, 5, -203,153,190, 0, 57, 83,244,251, 11,188, 54,195,175,110,209,191,246, 46,252, 39,167,200, 31, 22,232, 94,178,127, 48,157, 33,135, - 87,112,115, 3, 23, 51,250,168,179, 11,194, 12, 60, 82, 52,101,228,116, 13, 71, 61,112,233,197,162,183,199,182,153,151, 17,180, -190, 91,144,219,158,186, 85,253, 29,222, 21,223,153,186,119, 92,124,153,187,194, 2, 74,186, 0, 79, 77, 16,191, 11,164, 71,207, - 95,133, 50,120,204,170,143,182, 27,133,167,224, 69,181, 71,211,108, 22, 59,181,189,187, 32,230,253,107,251,145,171,186, 40,189, -161,120, 12,212,108, 65, 46,116,126,177,138,215, 32,253, 18,108,220, 37, 26,118, 92,213,228,193, 53, 41,236, 86, 43,235,180,187, -234,205,205,163, 46, 59,145, 53,187,188,120,209,104, 32,150,186, 67,158, 74, 76, 72,114,180,228,193, 64,248,240, 33,124, 47,200, -203, 43, 88,127, 22,134,159,118,110,202,219, 80, 30,192,107, 19,218, 91, 46, 51, 89, 77,136, 87,119, 31, 34,220,130,116, 77, 44, -178,183, 62,160,218,122, 34,204,123,159,197,180,123,235,209,226, 97,219,174,189,161,101,221,195,101,225, 82,230,137,183,220,110, - 63,164, 99, 69,182,130,188,158,161, 30,192,139,207,160,183, 30,195,244,215,145,211, 31,128,131,159,131,254, 51, 54, 34,151, 0, -221,119,193,141,255, 16,214, 63, 10,235,127, 0,243, 91, 48, 95, 88, 46, 88,197, 46, 93,185,216,123,121, 59,249,180,198,191,177, -241, 17,116,247,161, 27, 96,248,184, 69,173,214,251,246, 89, 24,110, 67,125,206,186,240,120,195, 19,218,130,117,244, 76, 32, 79, -237, 41,220,142,253,239, 36,200, 51,233,217,142,225,225,184, 36, 26,102,125, 18, 99,177, 11, 38,145, 38, 40, 13,166, 97, 8,197, -186,240,220,254,148,238,124,186,186, 11,155, 55, 1,169, 68, 43,135, 49, 44, 16,146,216,175,220,222, 88,172, 8,122, 86,117,221, -110,108, 30,144, 58, 98,136,116,235, 21,253, 38, 35, 90, 41, 34,100,148,132,208,249,228, 54, 7, 33, 99, 95, 63, 87,101,150,202, - 84, 21,242, 68,205,153, 88, 10,105,181, 38,118, 29,162, 7,150,152, 88, 38, 74, 46,100, 13,126, 21, 9,118,151,218, 94, 17, 31, -223, 39,222,120,150,120, 18,200,103,143,208,146, 17,241,228,185,154,109,199,238, 69, 77,202, 46,183,160, 74, 34, 19, 12, 58, 35, -134,105,182,105, 84,103, 69,147, 93, 23,134,184,232, 84,227,178,139,182,240,147,153,233,241, 61,226,173,142,238,246, 51,212,237, - 72,222,156, 81,167, 9,165,216, 22,190, 20, 42, 74,242,240, 26,245,118,177,248,197, 83, 42,232, 52,162,235,186, 64,160,240,100, -178, 50,141,214, 37,214,108, 35,225, 52,216,152,221,249,225,161, 27,200,115,134,216, 25,242,214, 97, 62,161, 31,144,110,112, 21, -252,214,142,153, 97,181, 84,147,138,141,221,197,147, 38,237,130,160,132, 20,209, 26,208,146, 23,222,185,248,254,187,161, 79, 53, - 4,106,158, 45, 98, 85,213, 97, 97,102, 85, 22,183, 41,182,247,148, 56, 12, 70, 28, 0, 84,197, 46, 93,161,121,174,221,189,176, -153, 38,143,151,236, 25,231,217, 94,175, 61,198, 64,138,129,185, 70,247,146,183, 21,138,229, 32,196,217,108,123,178, 48,237, 27, - 48, 74,247,151,212,187,222,141, 29,205, 15, 60, 11,194, 49,185,134, 24, 54, 24, 79, 39,145,174,239, 40, 65,216,142, 51,121,158, -141,239, 32, 98,221,120, 41, 75, 51,166,106,180,191,156,103, 3,208,236,237,191,244,218, 86,253,253,202,188, 59,125,244, 58,219, - 93,126,255, 80,214,221,146, 76, 42, 41,255,103,247, 60, 64,163,101, 64, 67,186,217, 81, 63,177, 66, 38, 65, 31,168, 21,248,151, - 35,242,153, 11,120,230, 1, 60,229,251,245, 77,112,252,170, 23,255,222, 81,169, 7,209,160, 41,238, 5,151,232, 59,199,208,192, - 44,183, 64,111,130, 62,211,124, 71, 16, 51,112, 5,199, 35,114,235,161,117, 47,211,140, 94, 9,114,149,224,211,135,240,195, 25, -253,194, 22,253, 59,151,112,145,145,159,121, 3,134,207,194,252, 97,144,115,232, 30,195,233,183,144,225, 2,125, 24,224,210, 59, -230, 51, 69,229, 28,185,113, 12,199,199, 32,143, 64, 59,100, 18,152, 12, 79,201,161,143, 75, 71,239,128,211, 19,177,117,189, 79, - 27,162,154,130,254, 57,255,243, 67,128,213, 22,226, 7,161,220,131,135,111,128,222,112, 52,108,221,189, 18,157,123, 11, 79, 6, - 91,226,135,115,227,126, 39,168, 91,211, 3, 72,106,109, 86,241,152, 86,105, 50, 81,167,168,101,144, 35,175,116,157,141,111,147, -123,236, 7,215, 58,204,123,240,156,230,177, 79,126,129,234,124,175,222,187,107,160,205,106,103,174,239,212, 61,209,110, 9,143, - 40,209, 97, 75,123,232,200, 20,136, 7, 61,225,249, 3,248, 76, 64, 62,124, 4,199,255,186, 21, 60, 57,130,252, 22,212,119,208, - 71,111,195, 93, 67,168,106,246,247,153,115, 85,212,189,179,251, 26, 61,226,130,196,182,207,192,188, 71,215,107,111, 97,223,237, - 47,172,246,253, 27,174, 68,170, 68, 66,153,177,134, 98,199, 21, 96,107,118, 61,137,123,144,149, 4,108,183,240, 14, 72, 60,128, -139, 27,112,121,129,222,248,127,144, 91, 95,128,211, 79,195,240, 51, 38,164,139,183,237, 57, 95,253, 65, 19,209,213,183, 96,126, -219,196,109,122, 14,211, 59, 48,127, 7,166, 71,112,112, 9,121,130, 58,185, 88,114, 54,229,250,112,234,227,247,151, 33,222, 1, -189,239, 1, 46,207,239,101, 41,174,188,192, 42,232, 99, 83,205,203,137, 95, 40,159,130,176, 70,142, 2,122, 27,194, 65,164, 63, - 10,116,219, 74, 31,217, 9,224,124, 28,216,108,130, 97, 25,189,123,104,144,143,126, 85,212, 5,105,174,157,144,182,183,140, 22, - 43,234,163, 15,109,123, 12,159,128,132, 16,157,149,110, 89,222, 57, 8, 69,130,113,222,183, 27,159,230, 8,177, 42,131, 88,120, - 70,113,165,120, 16, 33,123,238,124,160, 90,104,139, 56, 49,109, 54,143,114,219,173,148, 32,200, 54, 35,117, 36, 12, 43,211, 80, -116, 61, 26, 35, 57,206, 72,217,141, 80, 53, 8, 85, 42,108,206, 9,161, 39,157, 60,109,249,227,103,239, 82,203,180,236,118, 89, -122,182,246,191, 64, 14,145, 18,123,136,206, 51,119,223,124,157,204, 99, 78,173,232, 60,249,228,171, 67, 67,178, 66, 59,141,228, -105,180, 49,181, 8, 26, 7,100, 56,176, 20,180, 16,145,254, 0,166,129, 82,206,208,249,138,234, 23,167,216, 2, 37,117,145,152, - 45, 22,166, 32, 66, 26, 6,223,250, 25,129,174, 19,219, 33,211, 69,139, 83, 45,149, 90, 11, 41, 4,210,224,118,179, 96, 49,183, - 90, 3,121,218,144,231,201, 67, 90,140, 67,222, 50,226, 91, 87, 45, 82,141,225, 30, 58,132,106,151,164,217,152,251,203,100,209, - 39, 10,213, 45,109,197,129, 44,173,211, 7, 40,217,126, 45, 40,196, 62, 89,134,185, 79,110,234,222,250,162,185, 11,218,122,176, -250, 78,189,214,234,162, 87,215, 22, 84, 53,130,228,102,195,161, 8, 93, 63,176,189,186, 34,133,106,222,120,148, 84, 42, 93, 76, -108, 82,100,154, 60, 66,182,148,107, 35,234, 90, 42, 34,213,243,213, 77,131, 81, 99,244,238,190, 46,103, 71, 88, 70,124,190, 78, -108,137,107, 46,252, 75, 2, 93,234, 33, 38,182,165, 48,141,166,115, 16,159, 52,213, 82, 22, 69,189,131, 33,188,160, 79, 80,178, - 71,184,202,251, 84,101,225,247,255,149,157,224,240, 61, 37, 95,158,164,206, 57,254, 86,236, 93,157,222, 28, 10,131,128,172,132, -203,217, 68, 54, 39, 23,149,227,175,101,228, 78, 68,223, 41,240,166, 16,222, 73,200,107,157,249,193,159,235,172,155,125, 75,209, - 11,181,238, 90,156,175, 94,197,154,248,163,100, 93,225,179, 29,124,184, 67,158,143,240, 92, 64,110, 95,192,241,125, 56, 92, 33, -253,202,196, 72, 50, 0,167, 80,111, 65,237, 44, 71, 58, 61,128,248, 22,178, 62,135,211, 11, 19, 94, 62, 51, 32, 47, 13,240, 67, - 35,252,230,140,254,195,251,200, 79,253, 6, 28,253, 33,152,111,251,119,245,105, 88,127, 19,137,111,193,186,162,151,189, 21,132, -179, 8,114,142,220,232,144,227, 15,160,188, 9,115,132,210,217,190,189,100,180,137,157, 26,101,173, 41,142, 22, 84,143,207,136, - 59,221, 65,193,181, 56,236,225, 37,216,190, 13,151,179,121,155,103,103,169, 87,221,243, 96,249,248, 93,231, 29,224,166,119,123, -215, 69, 70, 52,217,161,179,113, 26, 87, 10,168, 70,139,132,173,225,122, 36, 41,186, 43,234,235,178,203,234, 22,139, 76, 52, 56, -143, 88, 87, 19, 92,193,222, 57,239,189,139,150, 12,215, 42,105,218,217, 96, 22, 38,121,149,221,247, 55,237, 50,224, 37,186, 77, -174, 75,132,163, 30, 94,136,230,159, 63,252, 19,112,248,175, 65,184, 97, 62,191,250, 8,228, 46,188,117, 31,238, 71, 52,206, 54, - 21,169,142,222,100,207, 50,164, 59, 83, 73, 45,239,129, 44, 45, 67,135, 29,212,204, 61,242,169, 13, 20,148,128,184,163,162, 99, - 39,139,182,142, 65, 60,177, 75,167,138, 92, 41,154,108,215, 74,149,197,147, 47,219,201, 4,148, 53,193,213, 10,222, 88,161,113, - 11, 47,127, 14,121,233,203,176,126, 9,186,239,134,245, 79,193,240, 49, 43,200,241, 25, 72,243,110, 23, 80,183, 86,220,243,235, - 48,125, 9,174,190, 2,243,185, 93,180,106,181,223,159,223,128,122, 10,242,125,150, 32,135, 23,118,237, 77,161, 41,105,231, 75, -215, 75,223,235,191, 11,241,216, 39,240,207, 67,247,148,249,192,111, 77, 72,151,232,110,116, 12,155,145,173,191,204,197,239,127, -181, 81,192, 84,233, 16,215,183,170,125,207,170,230,195,142,178,224, 92, 9, 22,202, 98,171, 50, 64, 50, 82, 92,184, 21,213,161, - 50,209, 64, 49, 62,202,111, 65, 23, 69, 3, 58, 95,161, 87, 23,246, 34,198,158,160,217,146,207,242, 12,142, 47, 21,204, 53, 49, - 19, 23,145, 25,218, 64, 35,251,157,139, 46,137,181,137, 10,121,164,214,108,250,137, 24, 45, 5, 45, 68, 98,138, 36,191,184, 69, -157,161,206,204, 85,201,231, 15, 17, 2,221,173,231,209,212, 49, 61,124,199,172, 96, 13,154,227,139,214,140, 48,213,106,217,226, - 82,173,185,232, 43,148,108, 17,162, 37, 35, 49, 18,251, 21,169, 95, 19,251,142,128, 50, 79, 51,101,187,161,204,141, 27, 30,237, - 60,235,143,237,251,217, 92, 50, 94, 94, 16, 14, 79,208,148, 8,235, 3, 19,222, 77,163,119,130,118,177, 41,110,175,139,146,144, -186,139,133,141,253,202,146,156, 15,143, 77,161, 94,103,219, 86,250,202,138, 24,168, 57, 51,109, 46,145,228, 23,144,121,182,203, - 86,180,124,249,198, 20, 8,221,128,196,222,137,139,133, 24,211,178, 94, 80, 96, 46, 70,109,139, 41, 17, 83,191,139,143,109, 43, -171,146,151,110, 51,165,222, 0, 42,165, 16, 90, 65, 22,183, 16,214,234,107,181,234,142, 22,251,108,135,150, 59, 46,215, 5, 50, - 18,133,168,137,216, 60, 24,173,168, 7, 3,221, 32, 1, 41,133,227,213, 1,225,240,144,237,102, 67,170,149,213,208,147, 99,101, -202,133,131,216,177, 90, 37,178, 86,166,108,105,133, 82, 93,133,142, 93,124,164,212,197,142, 24,163, 77, 72,170,211,238,100,223, -162,201,110,220,237,238,111, 82, 52,246,252, 12, 76,211,104, 19, 17,173,182,230, 36, 44,217, 11,162,126, 33,118,164,112,206, 51, - 58,103, 87,247,239,119,233,240,126, 82,185,247, 5,186,235,123, 75,190,136, 92,203, 91, 87,103, 17,214,189,110, 62,189, 21,196, -132,209, 1,102, 17,206, 29, 73,254,114,169,156,204, 48, 31, 42,227,182,178, 46, 74,216, 86,228,204, 88,175,225,227, 29,156,128, -110, 10,234,150, 17, 38,181,157,229, 28,144,115, 23,101,189, 29,144, 47,119,104, 67,213,137,249,188,229,102, 64, 94,137,240,241, -183,144,167, 3,220,234,225,228,208,201,109,135,182,163, 14,213, 14,186,116, 12,221,165,249,122, 87, 9, 61, 94,193,139, 3,188, - 58,162,255,252, 2,249,254, 95,129,211, 31,135,242, 28,132,183, 64, 95, 48, 58, 87,119, 23, 89,159,163, 23, 9,198, 1,221, 36, - 36, 62, 52, 16,201,241,135,208,252, 13,184,244, 14,182,136, 21,175,206, 5,125, 97, 15,180,139,238,197,127, 6, 91,242,186,133, -128,185, 9,217,158,131,241,243,150, 16,215, 72,119,237,235, 37,255, 58, 3,206, 48,159,109, 60, 63, 66,221, 20,139, 25,157, 42, - 28, 90,161, 85, 15,131,145,117,176, 17, 96,239, 58, 5, 85,208,139, 93, 91, 29,143,161, 91,195,209,165, 21,234, 80,156,164,231, -175,120,111,227, 61,243, 98,123,236, 94, 31,247,114, 56, 23, 0,246,162,118, 38,201, 50, 94,213,108,121,198, 82,117,207, 35,110, -185,227, 97,136,166, 13,184, 9, 28,156, 88, 80, 74, 60,222, 61, 79,245, 18,174, 62, 15, 95, 25,161,118, 22,162,145, 45,129,139, -154,109,247,218, 40, 88,173,160,191,143,206,141,125,171,214, 94, 97,183,200, 86,159, 36,184,157, 50,136,189,150, 58,244,134,108, -173,101, 15,163,232,254,117,203, 30, 53,162, 93,181,110, 83,163,119, 15, 83,177,204,249,171, 10,155,138, 94,116,240,234, 0, 31, -201,240,241, 87,145, 27,175,194,225,175,192,241,207,192,225,207, 65,252,192, 46, 0,136, 96,171, 17, 57,134,248, 28, 12,159,129, -245, 59, 48,126, 1,166,175,192,252,200, 47,128,231,192, 55,129,135, 16, 62,224,182,134,167, 65, 31,250,184, 61,238,201,214, 71, -208,119,172,219, 15,207,218, 30, 33, 28, 64,255,221,208,125, 1,110,157,193, 97, 34,174, 35,235, 36, 92, 86,101,148, 29,156,208, -242,201,189, 19,209, 93, 90,147,237,132,155, 90,217,118,164,154, 2,237, 86,219, 12,134,185, 85,221, 96, 91, 89,149, 72,110, 40, - 88,221,241, 0, 10, 66,221,110,209,121,235,124,116, 43,248, 93,205, 12,209,192, 24,165, 76, 8,193,212,234, 18,152, 37, 90, 38, -184, 35, 67,231,118,181, 8, 46,102,107, 20,221, 96,157,162, 77,116,204, 54, 84,107, 33, 75,166,120,158,120,236,204,158,213,165, - 53,154,131, 21,220,170,212,243,119,141,188,120,243,121, 11, 49,121,248, 54,184, 47, 30,129,210,224, 60,190,239, 45, 45, 71,123, -220,186,165,205, 60,149, 49, 25, 52, 40,228, 12,213, 98,100,179, 88,174,186,148, 98, 26, 33,247,187,151,243,135, 6,149,113,145, -161,204, 91, 66,191,166, 59, 56,130,213,177,165,143,229,173, 61,247, 5,178, 4, 75,108, 22,217,189, 68, 53, 48,111,206,169, 85, -136,199,167,132,131, 3,168,106,202,238, 75, 3,217, 72,103,233, 97,217, 73,209, 18,237, 82, 48,231, 76, 17,179,237,117, 26, 40, - 90, 92, 75,225,153,236,177, 51,112,148,119,119, 45, 92, 71, 20, 7,204,224,130,174,157,117,172, 98,132,180,226,204,245, 90, 89, -138, 93,187,216,213, 90,125,252, 93,201,222,249,198,101, 50,178,163,185, 73,179, 89,138, 21,214,144,170,175, 48,118,161, 52, 49, - 37, 91, 35,186, 0,174,215, 74,127,116,196, 35,181,243, 35, 41,244, 93, 79,144,204,228,197, 57,170, 16, 16,102, 9,228,154, 77, -252, 89,138, 9,232,156,183, 27, 36,144,107, 48, 0, 78,140, 22,218,211, 40, 12, 98,176,153,184,100,181,219,132,163, 32,140, 45, -218,184,113, 1,170,173, 11,179,103,200,155,117, 54,184,138,223,136,120,117,158,237,220,148,253,204, 5,253,125, 67, 89,158, 20, -194,233, 30,146, 70, 91,216,177, 92, 23,212,233, 94, 14,235,110,199, 46,164, 92,119, 13,153, 79,136, 57, 87,184, 8,202,113,168, -200,161,145,155,250, 78, 9, 87,246,141, 49, 43,186, 13,200,105,178,189,113,169,232,166, 48, 7,101,219, 97, 99, 18, 12,110, 17, -178,216, 14,171,120, 49, 31, 77,224,171,239, 8,250, 53, 49,212,220, 65, 68,142,183,240,252, 6,189,115,128,222, 1,185,117,134, -156,142,200,177, 32, 55, 58,184, 97,200, 83,214,213,146, 41, 59,224,123,214,232,163, 30,125,227, 2, 41,255, 4,110,253, 36,240, - 33,224,235,118, 80,202, 51,112,112, 23,233, 94,131,241, 18,221,174, 97,234, 96,188,107,135,247,233,243,232,230,219,240, 86,179, -118,249,104, 55,184,173,173, 5,165,180,133,173,250,220,120,222,185,139, 12,243, 26,140, 57,191,253, 26, 20, 27,203, 49,122,167, -184, 0, 57,246, 98,239,166, 43,120, 87,225,145,101,160,163,216,158,121,107,193, 9,250,112,164, 62,206,200,105, 79,172,106,227, -177, 41,160,155,138,148, 7, 94,225,162, 21,144,238, 24,250, 75,239,212, 3, 18, 20,205,123,243,232,125,188,105,220, 89,217,180, -229,188,143,102, 43,220,221, 12, 93,229, 63,202,110,223, 94,118,153,206,162, 30,239,216, 59,136,103,104,170,108,113, 81, 76,133, -242, 8,242, 23,209, 55, 95,131, 55, 58,180, 47,158,205,222, 2,121,212,187,106, 27,131,235,123, 60,154,186, 3,203,236,143,214, - 91, 97,247,193,135, 54, 97,120,217, 9, 94, 68, 4, 73,189,105, 63,212,187,113,247, 6, 83, 48,116, 99,113, 75, 75,240,238, 93, -130, 57, 36,122, 19,124,105,142,246,189, 20,129, 81,208,175,173,224, 98,128,211, 13,220,120, 27,249,174,191, 13,183,127, 3, 78, -254, 42,244,175,248,251, 98,222,137,234, 8,118,131,235,190,203, 64, 50,235,127, 9,242,183,160,220,117,241,219, 5,112,215,191, -145,198,146,127,202,226,116,235, 3,127,160, 29,148,183,160,190, 10,241, 19, 54, 1, 48,107, 4,244,159,134,120,108,193, 69,167, - 25,190, 19,233,214, 66,188,220,187,208,181,240, 10,183,169,213, 61,158,123, 91,173,171,236,104,105, 82,132,162,217, 46,116, 41, -162, 41, 81,114, 37,116, 16,164, 67,163,197,103,106,158,151, 93, 59, 85,169,157, 91,143,218,175, 71, 59,220, 18,149, 21,202,160, -194, 40, 66,173,149, 46, 84,130,122,182,185, 43,200, 43, 38,168,170, 62,154, 13, 65,232, 37,120,114,154,113,212, 3,214, 81, 55, -135, 90,240, 81,166,184, 90,160,150, 74,183,205,196,213, 10, 82,231,154,146,217,198,204,103, 15, 64, 18,233,198,211,228, 24,168, - 15,223,129, 50,154, 64,207,159,131, 42,106, 90,128,118, 79,172,217,239,175,226,112,157,104, 54,172, 60, 81,199,201, 30, 75,191, -118, 61,139, 32,193,214, 1, 58,110,209, 98, 43, 6, 13, 54,233,210,108,162, 62,219, 21, 71, 66,234,157,193, 48,146, 75, 38,107, - 37, 68, 49,145, 56,129,185, 42,105,181,182, 46,143,128, 76, 19, 33,246,206, 49,168,132,213,218,117,198,197,209,179, 9, 73, 61, - 49, 36,106,176,132,187,185, 20,230,185, 16,253, 57, 43, 87, 23,196,212, 19,250, 97,161, 1, 6, 32, 13, 43,214, 7,199,244,131, - 41,205,203, 92,216,110, 47,152,234, 22,212,108, 93,177, 75,206, 52, 55,113, 93, 94, 10,187,217,197,196, 85,236,181, 20,211,171, - 56, 44,166,214, 76,206,101, 25,211, 43, 59,177,106,219,203,183,233, 95,104,113,184, 94,212, 67, 8,134, 82,173,106, 96,165,121, -230, 36, 38,230,213,138,203, 77,101, 44,133,224, 29,241, 14,233,106, 96, 35, 9, 16,138, 16,164, 16, 66,160, 22,115, 5,152,229, - 78,246,118,222,118,132,166, 96,197, 61,133,176,192,163,218, 78,187,248,101,165,199,244, 7,147,154,128,211,148,251,213, 60,232, -152,123,160, 46,148,189, 74,158, 38, 19, 41, 62, 9,130,218,211,189,255,126,241, 85,215,164,240,203, 17,168,123,244,184, 61,107, - 94,219,165,239,123,219,137,164,140, 18,171, 44,225, 45, 7, 2,227,158,248, 58,246, 74, 10,234,249,205, 14,175,152, 11,122, 47, - 35,183, 34,242, 84, 64,167,128, 94, 22,255,160,122, 98,155, 71, 3, 70,160,155,149, 48,219,184, 69,171, 80,170, 34,197,139,126, -157, 9, 36,170, 36,228, 91, 19,252,238, 21,178,186, 64,159,126,138,154, 14,225,236, 10, 25, 39,136, 21,121, 94,144, 31,238, 9, - 31, 79,200,109,139, 74,149,161,135, 27, 39,232,163, 11,228,221,127, 4,183,126, 2,228,135,128,239, 88, 34,151,222, 54,250, 90, -250, 58,210,223,181, 46,185, 14,144,223,134,238,121,228,185,231,168,211, 91, 22,215,170,150,181,110,241,134,123, 50,236,165,178, -236, 5, 65,204, 30,206,178, 6, 89, 31,217,179,250,240, 45,208,149, 23, 75,221,129,122,100,143,244, 57, 1,239, 22,184, 59, 81, -239,205,118, 24,138, 53,105,234,254,174, 58, 86,242,182, 16,238,111, 76, 97,189, 82,226, 16,144, 71, 64,249,246, 94, 92,216,129, -119,110,174,218,223,216,165, 67, 34, 59, 21,166,236,217, 21,147,119,234, 45, 70, 54, 59,108,122, 73,255, 48, 85,175,110,117, 23, - 49,235, 93,141, 68, 47,234, 67,176,130, 46,201,218,229, 62,219,250, 68, 39,179, 97,213,115, 24,191, 12,231,255, 7,124,181,122, - 22,113,177, 21, 67,118,213,187, 96,170,247, 37,157,109,135, 31,109, 42,214,253,205, 39,123,247,147, 86, 51,165,114, 45,124, 4, -113,238,123,114,127,109,112, 33,225,126,120, 71,195,200, 78,160,189,151,186,224, 47,118, 27, 13,150,106, 23,159,236, 43,141,222, - 11,252,121,133, 71, 17,206, 87,232,183,102,248,190, 47, 33, 47,255, 2,156,254,151, 48,124,175, 79, 40,182,123,159, 72, 23,128, -146,172,203,238,239, 88, 97,214,251, 54,134,103, 6,238, 3, 47,238,169, 75, 87, 86,184,235, 99,123,204,227, 47,217,107, 29, 94, -114, 40,142,211,136,210,203, 48,124, 8,142,222, 36,188, 88,224,247, 18,129, 64,175, 13, 60,180,203, 94,217, 57, 10,196,176,204, - 93,135,206,121, 73,255,106,118,180, 37, 26,178,218,123, 67,165,218,158,174,216,231, 90,243,236, 93,181,227, 96, 5,180, 75, 54, -222,205, 51, 69,108,252,184,184, 38, 69, 22,115, 73,213,221, 24,189, 74,100,174,118, 0, 22, 95, 21,181,184, 82,212,236, 67, 49, - 37, 75,124, 43, 21,130, 46,217,218, 79,180, 36, 14,231, 16,146, 40, 93, 80,164,108, 33, 24,141, 78,114, 89,102, 14,245,241, 61, -163,131,221,124,142, 26, 2,250,240, 77,170, 23,118,162,175,109,234,206,175,220,128,155,193,179,209, 21, 65,156,158, 70,205, 38, - 24,172,149, 48, 12,148,170,148,237,149, 23,243, 22,108,211,140,136,254,252,170, 50,111, 46,156,238,216, 91,135, 27, 7,234, 28, -209,121, 7,168, 81, 42, 50, 28, 18,143,111, 83,183, 87, 11,194, 54, 87, 69,231,173,237,200,135, 53, 97, 88,163,211,214, 10,181, -199,215,230,121,180,221,174,135,178,162,222, 93, 74, 52, 1,158,139,186,114,173,104,169,190,113,179, 51, 98,154, 70, 66, 76, 84, - 53,177, 92,243,194, 39, 9, 38, 78,108,179, 27,223, 99,151,190, 50, 59, 30,182,228,217,128, 62, 34,164,212,177,228,200,186, 82, - 61,123,242,155,209,220, 10, 82,101,209,115,180,136,224,253,177,251,114,220,170,193,131,156, 89,198, 58, 70,182,195,138,113, 59, - 82,146,178,157,103, 74, 53,197,119, 3,207,224, 83,170,152, 2,189,167,201,217,197,204,186,248,224,164, 78,117,204,116, 23, 2, - 41, 24, 80,104,246,149, 66,174, 74,214,106,184,217,170,164,104,175,205,182, 86,166,105,132,106,159,149,166, 53, 8,126,217,205, -165, 50,151,153, 50,206,203, 90, 67,222,131,137,227, 90,108,241,255,255,244, 93,223,143, 6,239,161,183,122, 77, 72,247,100, 54, - 67,202,106,246, 1, 92, 59,181,138,194,202, 39,182, 90,236,236,142,193,254,145,217,155,214,132,208,159, 27, 47,156,219, 29,114, - 51, 16,206, 3,105, 83,204, 82,227,206,175,169,133,170,181,129, 65,221, 75, 33,141, 74, 47,202, 80, 43,195, 69, 33,229,130, 30, - 4,131,153, 48, 33,103, 19,220,184, 65,205, 9,238,206,112, 57,193,215, 20,253,229,142,186, 78,200,103, 2,225,103, 6,228,149, - 1,185,145,144,131, 99, 56,223,192,227,127, 4,199, 23, 16,255, 21,235,134,228, 29,224,131,160, 31,131,238,235, 16,191,100,135, -102,237,188,176, 63, 67,120,233, 14,250,232, 30,250, 45,127, 90, 98, 53, 79,171,132,235,166,104,217,251,113, 96, 99, 24,142,170, -237, 70,235,119,224,209,235,118, 97,104,223,228,210, 45, 7, 59,195, 59, 15,152,185, 63,193,131,209,198,236,106,123, 17, 29, 43, -122, 81,151,119, 66,233, 76, 40, 21, 74,166,142, 16,106, 68, 30, 70, 75,241,210,173, 89,157,164, 55,144,137, 56, 20, 40, 98, 79, -190,232,142, 94, 39, 59, 56,138,237,211,221, 58, 55, 22,227, 10,140,126, 1, 96,207,210,150, 29,150,211, 9, 82, 93, 8,217, 70, -185, 93,178, 76,246,152,224,164, 26, 68, 39, 60,103,197,107,190, 11,243,215, 97,252, 71,232,215,223,129,111,117,104,200, 38, 80, -115,145, 90,187, 23, 45, 22,182,125, 24,195,242, 65,223,137,188,158,244,113,162,120, 76,237,245,203,146,186,237,205,132, 71,158, - 72, 87,154,229, 96, 9,232,178,127,116,202, 86,240, 15, 35,210, 86, 66, 88,106,156,133,235,120,136, 76,241,231, 45, 57,235,158, -106,169,111,191, 19,224,221, 1,253, 3,175, 35,159,250, 43,112,235,111,192,240,131,254,141,108,159,248,120,238, 41, 80,229,196, -138,182,220, 7,238, 1,103,192, 99, 12,196,236,170, 69,185,101,157,252,230,127,134,243,175,194,250,123, 32,157, 65,124, 23,240, -113,127, 56,130,245, 31,132,139, 47,193,203, 35,114, 59, 17,239, 37, 86,151,153, 74, 32, 39,155, 60,197,234,239, 45,191, 51,100, - 81, 84,178, 25,156, 90, 39,233, 89,246, 90,240, 84, 49, 7,180, 84, 47,166,101,246,199,229,172,247,152,208,212,147, 5,243, 91, -207,121, 73,247, 17,177, 78,125, 21,132,163, 40,196, 46, 50,230, 74,204,153,222, 95,132, 82,161, 96,200,204,186,151,198, 39, 46, -160, 18,117,107,142, 43,200,236, 82,224,118,161,234,151,203,246,150, 84,107, 26,146, 88,162,155,212, 66,157, 38,232,147,241,232, -167,201, 87, 48, 21,125,120, 23, 81, 33,221,126,150,148, 6,120,248, 29,202,120,229, 39,147, 34,209,120,228,197,253,243,193, 25, - 12,100, 83,125,167, 16, 44,128, 6, 59,200,101,125,140, 14, 3,170,151,212,121,182, 29,117,158,140,191,230,133, 4, 9,166, 14, -247,231, 39,231,130,150, 45, 93,234, 12,217, 28, 59,130,154, 98,181,184, 7,188, 63,126,202, 82,225,106,165, 27, 44, 47,160,186, - 98, 58, 68,131,161, 72,201, 84, 9,244,195, 26, 73,145, 92,148,162,230, 43,159,171, 82, 66, 90, 46,182,226, 66,179,154,231, 37, - 39,158,100, 2,213,113,156, 24,183, 38,232,139,157,103,140,135, 64, 74, 29,161,249,192, 29, 2, 20,170,177, 32,146, 11, 21,195, -106, 77, 85,101,158,103,230,121, 98,154, 39,242, 60, 51, 23,131,228, 52, 34,220, 16,141,155,110,200,146,202, 84, 10,197,197, 99, -141,250,182,104, 51, 60, 88,166,122,119,159,130,112, 35,118,220, 57,185,193,176, 58, 64, 46,206, 65,212, 26,199, 82, 40,185, 77, - 84,204,102, 56,187,159,191, 93,208,163,152,183,189, 11,145, 16,133,136, 16,196, 44,190,234,232,216,109, 41,100,173,204,213,126, -100,199,220, 26,144,199,214, 51,185, 90, 4,171,197,118,135,197, 5,160,130, 69,197,214,194, 60,153, 83,131,170,239,201, 57,223, -157,117,250,190,181, 92,121, 66, 71,212,178, 45,174, 65,107,119, 54,211, 38,254,181,231,184,219, 35, 83,216,229, 40, 77,186,151, -183,220,153,144,186,129,123,202,236, 60, 13, 49,224,132,224,184,187,168,196, 92,145,123,133,176, 22,228, 52,162, 87,149,244, 78, - 37,141,186,131, 95, 40, 20, 21,182,218,130,190,236,131, 28, 69,232,170, 48, 5, 97, 20, 88,169,178,218,206,164,109, 32,117,130, - 92, 5,228,234, 2,185,191, 37,164, 3,234,233, 9,156,246,176,157,237,240, 43,138,126,169,162,159,191,180,130,254, 99, 3,242, -199, 15, 9, 47, 28, 89,177,222,254,223,208,223,133,238,207,249,206,242, 45,235,106,229, 71, 64, 94, 6,249,191,172,216,215, 9, -230,123,144,158, 66, 62,125,104, 35,250,111,121,129,156, 20,142,117, 81,128,238, 60, 94,123,210,236,206, 70,222,196, 3, 24,127, - 13,222,245,217,112,206, 22,148,210, 2, 62, 74,181, 91,210,141, 30,206,172,168,235,189,217, 20,179,157,171,145,175, 10,122,149, - 45,196,229, 72,232, 6,161,230, 54,181,247,248,195,139, 4,211, 99,239, 0, 39,239,142,247, 96,192,109,204,238,182,165,133,247, - 73, 48, 11,212,202, 15,243,234,214,193,246,194,204,186,151,161,234, 74,250,162,206,149,110,194, 57,219,239,135,163, 1, 57, 30, -224, 52,192,199,102,228,230,243, 48,252,128,189,121,198,175,192,244, 91,112,247,171,240,197,104, 35,119,205, 6, 73,107, 30,206, -246, 33,174,126,107,189, 38,150, 50,145, 16,125,114,112,200, 94, 65,126, 2,169,212, 36, 46,193,209,189, 34,230,145,150,220, 38, -140,201,199, 34,126,201,137,178,227, 35, 87,215, 77,108,130,241, 10,210,222, 5, 97,244,223,155,125,138, 17,162, 77, 95, 92,163, -160, 43,167,142,223,235,224,159, 30,160,243, 93,228,123,254, 50,220,254,239,189, 99, 15, 30, 8,240,164, 89,165,209,150, 34,200, - 29,175,112,175, 66,253,135, 16, 62, 1,241,211,254,228,251, 56,103,254, 85, 19,207,233,224,153,222,231,246,186,139,133,166, 48, -124, 10,142,239,192, 7,207,144,143, 9,233,141,158,213,227,137,195, 45, 92,134,224, 73, 99,106, 20, 47,236,114,110, 22,225, 4, -201,248,223, 58,109, 13, 42,212,202,123, 21, 52, 68, 99,194,199,232,185,230,189, 21,172, 96,254,223, 18, 18, 37, 23,230,121,132, - 92,155, 81,194,144,193,173, 75,239,132,222,157, 77, 33, 4,250,176,131,251, 21,177,139, 70,245,241,121,179, 59, 5, 85, 7, 25, - 41, 81, 77,197,156, 21,230,178,231, 31, 14, 59,228,126,140,248, 24,217,132,102,226,241,129, 90, 11, 58,110, 32,249, 40, 62, 27, - 52,165,212, 74,126,124,151, 33, 6,134, 59, 47, 66,215,163,239,124,147,122,117,101, 95, 39, 38,235,220, 21, 35,208, 5,183, 62, -133, 74,234, 6, 82, 55, 32, 90,169,209, 86, 77, 26,204,179, 31,135, 3, 27, 55, 79,227,114,122,167,208, 48,204,182, 72,170, 82, -209,160, 11, 14,185,250,123,182, 32,132,174, 39,106,180,116,198,216, 33,195,154,105,220, 26,192,167, 27,168,106,232,211, 42, 70, -124, 11,254, 53, 66,111, 48,148, 80,246,146,192,250,222,222,183,165,154,250, 92,133,152, 58, 66, 63,120, 8,137,249,209,107, 41, - 30, 42, 98,153,228,193, 59,203, 24,109,205,144,231,217, 62, 50, 49,185,115, 66,137, 24, 23,126,118, 12,109,244,213, 68, 31, 19, -235,174, 67, 56, 98,170,133,105,158,153,199, 43, 74,174,204, 53,147,231,201,198,209, 98,192,150,117, 76,164,174,167, 11,150, 79, - 81,213, 10,120,192,179,228,177,245, 94,215, 69,142,250, 21, 7,253,138,208,117, 92,109,174, 88, 9,140,195,138,237,118,227,211, - 1,131, 7,141, 90, 25,199,140,186,143,188,105, 38, 50,202, 84,202, 50,221,169,110,163,221,239,122,131,135,117, 53,183, 72,109, - 83,164,182, 54,208,166, 44, 23,183,236,205,136, 71,181, 26,193,174, 24,129,111,206,239,203,106, 23,185, 38,102,127, 95,167,250, -147, 96,173,221,172,104, 79, 14,228,220,108,105,178, 96,221,249,213,209,110,207,237, 14,241,207,223,137,191,216, 7, 97,149,132, - 30, 33,133,221, 4, 37,185, 78,126, 42, 70,101,202,123,177,174,162, 98,109,126,117, 91, 87,167,200,133,137,195,178, 55,131,185, -194,168, 98, 31, 78,245, 4,210,197, 2,189, 75,128,202,200,222,206,204,189,196, 27,133, 77, 65, 98,129, 35, 69,110,172, 97, 53, - 88,251,209, 85,184,217, 33,199,197,118,160,191, 51,193, 63, 30,209, 71, 17, 94, 88, 35, 55,215, 16,222,132,250, 37,144, 79,130, - 60, 15,114,233,190,250,103,205, 62,196,125,144, 51,107,241,106,129, 97,128,167, 19,220, 47,240,157,178, 83,104,118,114,157,140, - 18,247, 82,193,146,219,247,110, 36,244,242, 46,252,222,149,253,165, 11, 47,148, 1, 47,164,158, 81,251,204, 0,239,108,225,219, - 35,250,206,214,195, 12,116, 23,160,162,246,231, 91, 55,194,228,225, 7,158,161, 28,110,245,200, 39,176,148,182,112,106,226,170, -139, 95,134,179,199,240,174, 39,194,213,186,167,214,247, 19,119,101, 20, 59, 57,237,209,181,195, 66,206,178, 97,114, 47, 76,168, -183,248,202,252, 16,221,117,249,118,179,141,177, 35,220, 92, 33,119, 14,224,165, 8,159,152,145, 23,143,224,232,167, 97,253,125, - 80, 46, 96,250, 50, 92,253, 26,250,169,114,251, 17, 0, 0, 32, 0, 73, 68, 65, 84,107, 27,120, 75, 80,201,232, 88,168, 91,191, -228,108,138,223,208,237,178,167,123, 84, 87,109, 35,180, 61, 32,133,244,105,137, 56, 92,118, 71,254,184, 44,149,104, 23,188, 32, -205,237,174, 1, 14, 79, 32, 87, 36,111,175, 97, 21, 5, 75,192, 67,157,177, 31,205,174,101, 95,203,158, 3,105, 56, 76, 45,254, - 92,218,141, 97,137,235,221,248, 42, 97, 16,184, 12,200, 55, 18, 12,231,200,237, 95,130,244, 65, 27,141, 91,138,203, 19, 81,137, -126,243, 88, 62, 65, 39, 16,158,183, 63, 91,254, 25,212,175, 65,248,144,173, 50,194, 83,144, 62, 11,252, 6,232, 35, 72, 47,218, -154, 37,220, 48,187, 32, 2,233, 0,134,111,131,124, 19,206, 70,248, 54,232,121, 70,199,153,243, 86, 12,171,239,138, 37, 80,131, -197,161,198,104,169,104, 90,157, 97,239,183,123,195,178, 58,239, 59,244,150, 15, 30,130, 23,115,203,238, 46,170,228,113, 36, 79, -219, 37,175, 92,154,205,209, 59,135,149, 8, 7,193, 21,241, 53,147,176,168,202, 73, 97,110,137,126, 33,238,184,222, 65, 12,247, - 42, 74,223, 80, 8,126, 47,173, 40, 99,109,124, 40,117,210,178,253,108,130,166, 96, 50,145, 40, 22, 45, 28,130,195,136,204, 98, -100,128,164, 97,103, 49, 82, 53,159, 55,133,238,240,148,178, 62,102,206,179,115, 16, 58,163,225,121, 54, 55,121,178, 93,109,236, -124, 20,109, 83,136,130, 51,188, 85,208,144,108,199,188,185, 68,203,228, 81,157,178,224, 70,139,154,184,144, 16,173,227, 13,174, - 71,113, 70,135,166,158,212,175,232, 87, 43, 66,236, 72,135, 39,164,147,167,200,170, 70,130,235,250,229,220, 41,213,226, 58, 67, - 12, 72,215, 67,232,150,176, 41,155,100, 24, 33, 79,252,223,104, 83, 21,130,115,209, 99,180, 11,198,108, 29,187, 41,213, 11,129, - 64,236,122,186, 24, 57, 60, 57,229, 71,127,254,207, 50,172, 15,120,116,247, 29,138,136,165,175,213,194, 39,127,234,143,240,185, - 95,250, 63,185,247,224, 46,119,239,190,205,219,119,223,226,157,187,111,114,247,193, 93,238, 61,188,207,221,119,239,114,255,193, - 61,206,206, 30,113,181,217, 50,205, 54,170,142, 98, 52, 56,245,154, 48,123,168,138,122, 34, 95, 31, 34,171,212,177,238,122, 14, -251, 21,167,195,138, 59,199,167,220, 58,189,197, 48,172, 44,222,118,115, 73,158, 70,219,159,107, 69, 84, 57, 61, 62,225,199,255, -220,159,229,213, 47,127,197, 59,244,178,156, 31,226,147, 18,107, 70,171,103,163,151, 61, 84,172,122, 70, 59,187,145,123,105, 49, -177,197, 71,239,117, 7, 31,114,146,162,106, 93,152,248, 5,152,243, 68, 25, 39,211,233,236, 21,230, 39,169,112,186, 31,210,242, - 62,230,181,182,250, 86,239,118,228,201, 77,186, 88,189, 21,194, 14,138,166, 21,149,226,188,196,221, 24, 89,130,144, 14, 61, 57, -178,209,185,216,195,186,103,255, 64,181,228,208,236, 93, 97,135, 9, 59,194,172, 12,239,100, 27, 91,222,244,177, 93, 18, 27,213, -136,144,189, 25,212,165, 25, 18,206,171,237,237, 69, 76, 68,227,182, 87, 70, 31,215,231, 96, 92, 23, 91,219, 9,177, 40,146, 55, -232,168,232,234, 20, 14, 14,108,204, 94, 42, 58,116,136,142,246,111,231,130,254,250, 25,250,165, 45,252,200,128,252,203, 55,145, -103,206,161,252, 77,208,159, 7,249, 12,240,192,138,123,120, 14,248, 9, 40,255, 0,120,219,104, 88,219, 13,178,234,145, 31, 89, - 25,138,251,181,209, 58,236,117,128,126,159,110,178, 36, 97,120,135, 28, 80,221,194,131,201, 70,186,115,221,117,191,157,236, 58, -227, 67,127,146, 31, 87,244,188, 80,183, 21, 58, 93, 70,210,210, 57,237,110, 72,190,151,171,132, 42, 30,219,231,212,178,123, 1, -206, 46,225,206,107, 86, 64,242, 35, 3,158,148,189,180,141,208,172,111,123,124,250, 46,182, 48,123, 15,219,241,123,226,236, 35, -235,232,168,206,104,143, 63,212,134,165,245, 98,152, 2,161, 27,224,233, 21,124, 12,120, 57, 35,199,119,224,240,143,195,250,199, -236, 11,108,127, 11,166, 47,163,191,253, 8, 94,239,160, 27,225,170,152, 16, 45,219, 30, 79,252, 18, 83,159, 12,104,121,226,131, - 32,186, 23, 10,148,146, 69,107,182,240, 16,252, 2, 20,158,128, 37,183, 55,123, 23, 27,208,244,186,114, 30, 15,142, 40,123, 41, -166, 62, 61,208,236,170,255,192, 46,143,122,210,189,165,216, 8, 99,112,156,170,203, 83,174, 50,162, 51,114, 25, 8,255,251, 33, - 90, 30, 33, 63,240, 11,112,243,207,195,240,115,198,122,151,190,209,115,124,106,224,214,207,234, 59,119, 18,132, 87, 44,160,167, -252, 42,148, 95,129,244,211,182, 91,239, 62, 3,199,127, 21,182,127,211,213,242,207,216,100,198, 4, 29,198,123,168,159,133,241, - 55,224,233, 51,228,131,137,244,118,199,193,163,137,195,154,217, 22, 89, 6, 18, 82,131,183,182, 74,165, 16, 82, 93,178,196,171, -159,110, 26,219, 94, 82,172,227,147, 72, 80,139,230, 44,192, 56,110,209,121,244,104, 83,217,177,173, 91, 78,128,182,139,153, 79, - 93, 36,208, 73, 32,105, 97,171,187, 97, 80,231,251,239, 33, 6,211,214, 44,251,241,176,100,193, 77,234, 69,172,217, 20,219, 39, - 79,219, 68, 1,178, 86,186, 8, 67, 8,203,251, 85, 37, 18, 82,164,211, 66,168, 74,174, 19,193, 5, 86,121,154,137, 85, 81,205, - 76, 15,239,153, 92,226,246, 75,172, 63,240, 41, 54,247, 95, 39,159,221, 71,197,233,107,193, 32,254, 18, 19,178, 58, 48, 11, 87, -181,116,175, 50, 57,195, 91,146, 61, 31,243, 72,168,217, 27,146,232,145,174, 30, 39,171, 97, 81,123,107,173,182, 74,243,209,110, -198, 86, 27, 21,208, 48,208,157,220, 38, 29,223, 68,227, 64,127, 96,194,194,178,189, 68,199, 43,164, 91,161,253, 26, 21,243,127, - 75,177,195,188, 74,235, 52, 27,107,223,172,117,209, 97, 84,115,182, 84,183, 34, 24, 49, 14,155, 58,118,222,185,183, 61,120, 5, -234, 60,115,231, 67, 31,226,222,183,223,224,198,179,207,112,118,126, 70,201, 51,115, 54, 75,223,118,115,193,246,226,140, 32,214, -241,215,146, 45,143, 93,240, 75, 68, 0, 13, 11,141, 79,213, 82,248, 68,108,114,145,186,142, 33,245,196,100, 89,236, 83,136, 92, -205, 35, 41, 68,250, 24,137,203,215, 80,130, 60, 32, 73, 96,136,145,148,204, 31,191,201,153,139,105,107, 32,154,156, 73,195, 64, - 86,184, 28,183,182,235,102,183,117,212, 70, 8,109,110,138,134,123,209,221,123,169,161,101,151, 81, 58,187, 11,234,114, 14,133, -176, 20,226, 36,130, 74,178, 49,125,206,228,236,197,188, 33,110,247, 36,112,239,217,152,251,170,104,247,165,229,125,187,244,107, -169, 86,187,227,215,173,108,238,244,105, 99, 78, 41,123,171,250,188, 56, 12,170,118,196,191,248,108,252,197, 5, 12,231,147,214, - 46,226,111, 12, 24,171,176, 45,215, 19, 68, 77, 16, 45,254,228, 9, 97,171,132,173, 46,208,139, 17, 97,204, 62,110,115,203, 75, -138,118,200, 92,150, 93, 10,105, 23,109,156, 63, 86, 97,198,240,166,234,170,249, 78, 28,112,226, 34, 48,161,194, 52,219,205,187, -239, 29, 18,131,225, 85, 59,103,167, 31,250,112,235,247, 38,248,167, 19,156,156, 34,207, 22, 24,126,211,111,188, 63,232, 42,162, - 11,199,111, 86, 19,212,213, 45,148,222,254,123,165,240, 76,130,111, 84, 56,159,144, 99, 15,151,175,251,123,117, 31,171, 15, 98, -187,245, 62,193, 55, 71,239,208,205, 14,101,194, 1,177, 98, 90, 5,158,239,172, 48,124,107, 68, 31,249, 62, 29,221,169,194,241, -224,149, 24, 60,103, 59, 32, 67,180,159,147,221,192, 67, 72,240,145,138,220,121,202, 70,189,243, 59,112,249,107,240,232, 18,185, -240,130, 85,116,201,243, 54,216,182,141,221,229, 32, 89,142,186,143,214,185, 40,240,200, 11, 88,187,117, 21, 89, 30, 11,209, 31, - 67, 76,132, 97,128,103, 87,240,169,138,124, 12,228,244,135,224,244,223,135,131, 63,108,225, 50,229, 62, 76,191, 14,111,126, 1, -190, 96,139, 83,205, 5,221, 90,148,171, 69,186,170,223,154, 93, 4,255, 62,206, 53,217,171,205, 44, 59,214,106, 62,125, 28,160, -145,134, 38,242,240, 27,185,143,113,147,253,121,243, 11,175,145, 57,195,188,181, 61,152,143,121, 23,108,108,240,215, 47,201,146, - 75,108,100,228,128, 36,208,209,237,136, 52, 53,121, 53,229,108, 8,203,250,135, 90,209, 41,163,204,212,115,144,175,172,145, 56, - 33,183,190, 8,252,115, 35,233,213, 51, 8, 87,166,123,224,166, 91, 42,216, 79,189,246,125,245, 33,132,143,218,239,235, 35,239, -198,171, 89,222,226,167,128,215,124,236,126,211,185, 14,106, 23, 6,141, 48,253,142,237,232,231, 25,222, 86,228,108, 70,230,202, -165, 68, 54, 26,125, 5,100, 7,166, 86, 93,118,189,209,139,186, 6,179, 50, 73, 50, 21,181,136, 41,223, 69,132, 50,110, 41,243, -104,176,147, 58, 47,128, 20,133, 37,230,182,229,109, 55, 15,173,101, 5,217, 62,180, 75, 70,227,218, 54,243,131,143,183,187, 0, - 67, 74, 38,158,107,217, 59,162,118,166, 99, 54,162,162, 59,105, 74,117,161, 86, 11,193, 67, 96,242, 27, 97, 75, 91,171,109,194, -226,224, 16, 66,192,254, 87,221, 38,213,155, 77,169,157,179,121, 50,192,206,250, 24, 57,186, 77,206, 35,249,234,177,189,231,146, - 21,116,186,149, 89,213,230,217,244, 3,139,247,210,214,105, 33,245,198, 77, 7, 98,234,209, 52,144,250,193,214, 20, 68,106,195, -202, 56,196, 71,177,177, 61,146, 60, 1, 77,136, 53,219,158,247,232,212,148,241,213, 34, 75,231,201,166, 76,105, 88, 17,134, 3, - 52,152,205,171,230,108, 43,147,102, 41,116, 91, 95,241, 34, 37,213,147,241,180, 46,113,163,165, 84,166,105, 75,222,110,141, 35, -239,244,183,121,158,184,188, 60,231,226,236, 17,151,151,231,124,215,247,125, 47, 95,250,229, 95,166, 91, 13, 76,219, 13,143,238, -221,163,230, 76, 74,137,151, 62,249, 41,190,241,197, 47,129,192,234, 96,205,103,127,226, 39,249,232, 15,254, 0, 47,127,242,187, -121,250,165,151,120,240,250, 27,148, 60,115,122,251, 54, 63,241,243,255, 6,111,127,235, 91,228,113,228,163,223,255,253,188,240, -202, 39,120,245,171, 95,225,114,179, 37,163,124,236,135,127,132, 23, 62,253, 41,158,254,232, 71, 56,122,230, 25,222,126,253,117, -202, 60,241,194,167, 63,197, 83, 47,191,204,219,111,188,193,166,100,230, 24,248,238,159,253, 89,190,246,255,126,137,243,237,150, -139,105,203,229, 56, 50, 78, 19,164,200,243,159,120,133,223,250,220,111, 56,163,222,214, 16,171,195, 67,126,250,223,252,183,248, -237,223,252, 60, 90, 43,253,225, 1, 63,249,103,255, 28, 95,249,252,231,153,114,230,248,246, 45,254,224,207,254, 44, 31,248,232, - 71, 88, 31, 29,241, 67,127,244,143,242,213,207,255, 6,170,149,211, 59,119,248, 67, 63,251,175,242,145,239,249, 30, 94,248,240, - 71,185,247,198,235,104, 41,188,242,131, 63,196, 51, 31,122,153,215, 94,125,149,113, 28,137, 49,240, 39,255,237,127,135,175,125, -241,139,104,173,220,124,250,105,126,236,231,254, 20, 31,251,222,207,242,226, 71, 63,202,155,223,252, 22,121,158,249,228, 15,254, - 32, 31,250,196, 39,248,246, 55,190,137, 96,143,237, 79,254,165,127,151,223,253, 23,255,194,116, 22,123,133,123, 73, 50,117,171, - 97, 59, 21,131,236, 5,194,198,232,239,193,249, 9,202,220,110,127, 40, 18, 73,165,168,147,152, 92, 20,109,124, 2,170, 43, 87, -199,106, 2,236,169, 81, 71, 27, 67,165,205,253,147,141,156, 58,103,156, 23,129,109, 22, 11,125, 51, 70, 2, 81,149, 80,205, 76, -211,183, 20,209,176,171, 37,179,154,253,102,242,244,167,161,229,167,208, 40,116, 94,100,100,134,237, 35, 52, 29, 64,191,182, 67, - 38, 21,100,188, 50,113, 91,113, 21,213,105,178,162,255, 63,222,167,126,254, 24,249, 83, 7,200, 7,127,201, 44, 67,250,167,125, - 60,122, 31,194, 7,129,143, 64,250, 42,228, 45,228, 21, 16,145, 91, 21,254,196,128,254,157, 9,125,187, 88,142,123,220, 59,135, -219,146, 35,248,188,112, 84, 43,144,213,139,116,131,181, 68,159, 57,117, 30,229,250,218,136,190, 53,161,103, 5, 93,155, 93, 10, -164,189, 70, 46,110, 46,118, 82, 13,150, 14, 39, 93,103,227,248, 34,168, 6,228,221, 10,243, 55,160, 92,238,120,169,169, 29,220, - 46, 51,214,186, 3,221,236, 61, 86, 93, 38, 7, 62, 73, 16, 7, 7,101,191,101,121, 11, 45, 37, 44, 1, 52, 97,232,224,176,183, -203,196, 7,129, 27, 63, 6,199,255,129,165,197,169, 47,161,235, 25,108,190,136,190, 54,195,198,149,240,179,123, 56,103,143, 64, -156, 43,185,168, 79,127,246,111,181,187,118,125,129, 46,197,134,199,109,169, 74,106, 24, 98,143,153, 36, 13,176, 26,108,143, 62, - 79, 80,231, 37, 34, 87,106,240,184, 96,221,237,180, 90, 37,106,226,187,102,122, 15,126, 9,242,236,102,185, 84,116,112,159,248, - 16, 96,170,214,197,119,134,182,211,130, 93,146,250,201,112,183, 83,166, 94,100,216,206,166, 21,249, 95,123,226, 55, 11,242,211, -175, 34, 79,127, 27,214, 71,112,122, 8, 39,127, 12,248, 99,254,133,254,191,186,222, 45,214,178,235, 58,207,252,198,156,107,173, -189,247,185, 86, 21, 89,188, 20,201, 98, 21, 69, 21, 73,241, 38, 81,150,168, 72,109,155,146,124,105,201,185, 57,134,221,128,186, -129,142,131,110,244, 67, 39, 8, 16, 32, 15,121,243, 67, 16, 32, 15,121, 72,128,228, 45,221, 9,130,238,192,157,216, 29,199,136, -218,138, 36, 43,113,219, 84,100,138,142, 69,145,180, 68,177,138, 34,171,120,169,219,185,159,125, 89,107,206, 57,242, 48,198, 90, -123,159, 18, 93,130, 64,137, 85,117,206, 62,231,236, 53,231,184,252,255,247,223,107,130, 57, 61,230,164, 55, 50,248,251,209,119, -179,253,239,197,139,192, 47, 67,121,217,232,114,218,250,199, 73,182,130,105,158,128,230, 42, 92,188,140, 60, 82, 19,174,143,216, -152,103, 78,119,202, 60, 86,148, 90, 73, 26,157,144,149, 76, 35, 32,209,166,110,154,157,228,102,187,232, 92, 58,219,119,183,166, -188,214,156,145, 98,138,119,237, 61,183,254, 83,139,197, 29, 11, 30,140,210, 79, 70,250, 85, 74,244,125,126, 43, 13,109,132,226, -227,164,133, 66, 72, 86,240, 86,177, 70, 82, 59,188, 71, 75, 81, 22,142,229,108,197, 34,115, 85, 44,136, 38,123,182,118, 12, 80, - 7, 75, 54,235, 9, 90,201,149,230, 22,214,178,116, 84, 12,164,219,188,160,202,137, 80,143,232, 70,149,137,223,114,135, 30, 94, - 39, 86,145,209,250,221,196,115,151, 56, 30,111,208,221,252,177, 41,220, 43,227,142,247,121,232,161,167,140,149,132, 84,145, 56, -217, 68, 70, 19, 11, 73,233,230,180,139, 25, 93,107, 14,129, 76,241,248, 9, 25,224, 35,254, 54,243,206,214, 19,198, 98,244,130, -170,161,180,115,114,136,132,102, 50,236,190,213, 85, 37,154, 18,185, 36,114,182,137, 87, 73, 29, 85, 93, 19,234, 49, 85, 61, 54, -138, 98, 76,195, 52,128,156,137, 33, 18, 37,146,154, 17, 26, 42,142, 14,118,153,207, 14, 17,137, 44,102,199, 94,152,197,129,132, -182,125,215,221,160,176,243,193,251,140,214,198, 60,112,233,113,174,190,241, 3,162, 10,113,109,157,170,170,104,214,214,200, 41, -241,220,207,253, 34,111,189,250, 42,239,189,117,133,110, 49,227,220, 35, 31,225,153,207,127,129,151,190,250, 31, 56,220,221,225, -181, 23, 95,228,147, 95,252, 34,111,190,252, 50, 23,159,124,138,255,255,183,126,139,201,218, 58,109, 78,124,242,191,255, 18, 63, -250,147, 63,225,221,203, 87, 40,100, 30,190,244, 56,143,124,252, 89, 94,254,143,255,145, 27, 47,190,200,207,127,229, 43,236, 77, -167,212,170, 60,240,177,143,113,237, 71, 63, 98, 54,159,179, 40, 5,205,137,113, 8,104, 29, 76,136,157, 50,109,215, 90,110,188, -136, 71, 47, 20, 83,241,123, 30,124,202,133,236,202,118, 84,249,228, 23,127,142,239,191,248, 71,188,119,249, 10, 79,124,234, 83, - 54,173,136,145, 40,129,207,126,233,151,248,225, 75, 47,241,238,149, 43, 60,241,252,167,121,250,167,127,154, 23,127,239,247,120, -253,123,127,202, 23,127,245, 87,105,231, 54, 33,190,240,228, 83,188,119,249,178, 21, 72,192,103,190,244, 37, 94,121,241, 69,174, -253,232, 71, 60,243, 23, 62,199,115, 47,188,192,183,191,250, 85, 46,191,242, 10,191,244,235,191, 78,252,207,127, 64,234, 22,124, -228,233,167,249,241, 15, 94, 39,185,192,111,245,204,147,161,103,148,225,200,150,213,229, 97,127, 94,149,229, 92, 64, 48, 59,158, -196, 56,152,179, 80,165, 42,120, 44,170, 91,181, 23, 62, 46, 24,251,244, 49,123,211,146, 28, 8,145, 87, 48,230, 5, 15, 70,203, - 30,189,238, 49,153,237,114, 61, 11,197,167,208,193,238,219, 94, 76, 67, 92,222,143,149, 96,251, 58,215,160, 45,130, 75,164,150, - 12,197, 37,102, 53,117, 72,119,132, 78, 64,227, 6, 28,131,182, 53,194,194, 42, 16, 85, 24, 39,116, 18,225,158,132, 94, 62, 64, -254,143, 9,242,215,198,132,167,191, 13,117,130,252, 63, 88,144, 6,173,141, 63,117, 10,241,170,115,232, 39,208,173, 33,231, 90, -248,139,235,232,239, 30,193, 65,134,237,149, 60,244, 30,126, 82,123,149, 51, 93,185, 36,211,170,242,221,193, 36,181, 5,125,232, -213,150,114,203, 61,158,163, 62,170, 83, 76,141,153,250,200,213, 94, 44,237,179,164,144,173, 2,170,163, 93,248,183, 35,204,111, - 66,153, 25, 78, 52,142,140,128, 85,121,164,107, 81, 55,112,251, 62,165,128, 76, 2,172, 85, 54,241,136,149,245, 61,125,136, 79, -101, 88, 89, 19,154, 69,164,246,207,215, 91,215, 38, 13, 92,140,200,133, 14, 78, 61, 9,155,255, 43,212,247,184,101,203, 79,205, -124, 5,110,127, 0, 59,166,196,215,146, 41,157,243,181, 83,166, 28, 38,186, 69,166, 11, 70, 30, 43,170,119,136, 69,164, 39,188, -218, 94, 59, 47,203, 80,233, 25,239, 14,201, 65, 18,116, 5,201, 17,105, 70,230,122,104,231, 72, 59,245, 34, 83, 44,124,130,100, -223,207, 85,164,131, 56, 5,168, 91,193,133, 54,203,149,133,246, 35, 41, 17,100,156,125, 93,209, 71, 13,123, 78, 65,235,158,252, -218, 58, 36,157,250, 90,170,206,196, 80,136,127, 84,168,174, 84,196,231, 21, 57,119, 0, 15, 28,194,163,255, 10,214,254,173,147, -228,190, 4,205,151, 45, 97,143,145, 19,227,122, 94,111,190, 67, 66,147, 13,157, 28, 31,128,176, 14,229, 74, 31, 41,104, 84, 66, -198,208,156, 55, 47,252,230, 13,120,100,143,120,101, 68,115,212,113,122,127,193, 94,154,179,183,112, 44,104, 31,214,225,151,176, - 89,253,178,119,239,234, 35, 73, 89, 42,227, 83,231, 63,222,176, 92,229,244,188,217,149,104,223,210, 79, 83,252,105, 14, 82, 17, -130, 41,234, 51, 74,194,247,249,161,178,174,180,168,213,176,185, 80, 99, 35,219,156,178, 1, 19, 17,186, 12,173, 7, 97, 20, 39, -174,225, 32, 18,139,173,112,113,179,119,249,125, 8,203,188,152, 22,101,210,199,162, 6, 43, 46,178, 8,170,166,224, 46,139,169, -233, 3,154,145, 1, 86,114, 71,218,123,159,160,133, 90,206,178,121,250,126,218,166, 97,113,251,154,141,142, 83,231,171, 18, 75, - 24, 11, 36, 66, 51, 38,174,159,178,216,208,249, 33,101,118, 76,119,180,107,246,174, 30, 30, 41, 50,132,178,104,233, 69, 86, 12, - 92,115,113, 34, 98, 41, 74,110, 2,180, 11,255,250, 2,218,182,228,146,173, 95, 11, 1, 98,133,212, 99, 36, 7, 98,207,189,232, - 83,213, 98, 99, 5,151,139,205, 52, 39, 35,224, 41, 3,252,198,232,139,153, 24, 2,245,120, 98,233,217,205,200, 39,131,145,140, -249,170, 31,126,242,105,222,191,252, 38,177,110,184,126,245, 93,158,252,220,207, 48,158,172,209,205,230,158, 22,105, 69,205,104, - 50,225,236,131, 15, 50, 90, 95,227,177,231,159, 39,251, 74,161, 20, 19, 65,171, 42, 63,126,237, 53,238,186,239, 62,158,251,133, - 95,224,197,223,249,119, 38,252, 3,154,209,152,123,207, 63,196,120, 60,230,169,207,126,118, 56,163, 66, 12,204, 75,226,120,119, -151, 55, 95,123,157,241,189,247,240,246,235,175,243,204, 3,231,248,246,239,254, 46,243,163, 35, 34, 66, 21, 45,227, 92, 36, 80, -151, 66, 37,194,233,201, 4, 29,143,135,248,214,241,120,194,168,170, 89, 27,217,191, 27, 53, 35,154,170, 98, 99, 52,166, 26, 53, -156,189,251, 44,179,235, 55,217,222,216, 96,255,221,247, 24,127,234,211,108, 78,214,169, 70, 35,182,238,186,139,119,174, 92,102, -145, 18,127,246,202, 43,252,244, 95,250, 75, 28, 31, 31,161, 7, 7,236, 93,191,193, 3, 15, 95,224,189, 43,111,241,200,147, 79, -242,221,255,244, 45, 10, 74, 61,106,216, 58,125,134,171,111,252, 8,128, 31,191,241, 3, 62,255,203,191, 98,209, 23,139, 5, 87, - 47, 95,230,226,199, 30,231,205, 87, 94,225, 35, 79, 63,195, 55,255,237,191, 57, 49,154, 15, 39,158,120, 93,225,116,200, 9,171, - 90,191,110, 12, 49, 64,170,135,181, 71, 47, 30,237,105, 70, 90, 18,149,246, 0, 8,135, 66,244, 54, 52,245, 70, 47,137,178, 80, - 25,104, 95,209,127, 63, 9,236, 36,223,133, 23,243, 41,110, 87,246,185,107,241,148,163, 21, 24, 91,238,201, 93,253,125,181, 18, -104, 83,121,128, 91,167, 58,160,233,219, 98, 92,147,152, 10,212,213,202,168,201,159,148,217,145,117,100, 97,211, 14,230,131, 5, -210,167,179, 29, 36,168, 5, 61,213,152,113,241, 22,240, 59, 35,202,124,130, 60,251, 50,178,190, 3,229, 43,230, 97,103, 14,241, - 89, 59, 40,203, 21,179,139,149, 49,116,155,200, 37,129, 47,102,120, 57, 25, 61,173, 89,129,180, 52,193, 70, 10, 85,128,195,206, -170,155,232, 21, 80, 15,117,214,108,161, 30,141,123,252, 14, 91,116,209,218,186,160,117, 65, 88, 16,116,179, 70, 22,217,246,235, - 43, 63, 64, 67,109,249,188, 58,250,232,228, 38,144,102,118,184,199, 53, 11,248, 88, 27,193,150, 26,160,166,213,101, 54,119,194, - 46,159,245, 8, 19,243,152, 59,205, 99,153, 31, 95,123,124,168,152,149, 15,169, 96,228,127,118,173,134,115, 17, 30, 93,192,246, -189,176,245,235, 80,159,243,253,112,178,139, 38,239,195,236,235,232, 78, 54,175,127, 40,104,167, 30,228,167,148,189, 68,187, 40, -119, 92,232,186, 28, 50,137,220, 17, 51,200, 48, 46,151,168,195,221, 38, 39,242, 6,253, 13,218, 46,236,123, 61, 26,153,182,160, -237,236,235, 45, 62,158,119,105,118,112, 43,138,136, 85,182,182, 28,119, 87, 66, 27, 93,124,233, 69,155, 65,155,205, 96,112,106, -130,108,143, 12,243, 58,243, 50, 86, 58, 35, 48,116, 17,138, 41, 81,187,166,161, 85, 33,146,105, 54, 43,154,219,145,234,155, 45, -241, 66, 38,110,213, 48, 73,240,192, 46, 92,216,133, 7,255, 57,172,127,221,194, 98, 38,191, 8,241,140,119,223,126,185,175,202, -252,135,242,187,179,117, 81,124,108,153,184,134,216,220, 43,156, 50,209, 92,125, 31,242,208, 1,156,171,136,183, 27,214,102,137, -179,154, 57,204,234,186, 21,165, 45,203,172, 55,165,143,209,237,147, 0,123,126, 80,111,116,183, 29,156,250, 8, 79,122,142,129, - 8,145,228, 53,150,107, 75, 98, 52,176, 74,172,136,149, 80,185, 13,104,142,208,246,133,173,216,239,143, 67,178, 21, 93, 81,166, - 40,157, 6,203, 74,215, 94,226,144,201,206,239,183, 37, 69,241,145,186, 37, 83, 23, 9,182, 25,113,112, 76, 31, 2, 51, 47, 74, - 69, 96, 96,147, 21,122,124,153, 91,147,132, 76, 36,183,115,155,238, 52,107, 72, 61,182,139,245,120,215,212,247,245, 58,147, 83, -247, 19,183,238, 35, 95,253, 30,229,248,144, 48,218,160, 84, 35, 52,181,212,107, 27,200,250, 22,237,238, 7,164,131,219,196, 30, - 96, 83,213, 70,170, 83, 37,137, 89,167,162, 31,186,134,225,237, 87, 60, 38, 62, 52,149,127, 64, 99,101, 66,183, 98, 81,176,185, -100,210,124, 74,187,152, 19, 84, 9,205, 4,169, 71, 72,157, 8, 85,141,132,202,134,110, 33, 24,128,167, 20,180,180,214, 71, 56, -193, 71, 17,138,102, 82,215,145,146, 93,184,226,209,165,177,174,141,135,142,129,188,138,143,235, 65,184,255,226, 35, 20, 85, 30, -122,226, 99,131,214,225,129, 75,143,243,206,107,223, 55,226,160,170,179,228, 27, 20,248,246,239,252,123, 74, 49,149,120,215,195, -104,234,134,146, 77,176,182,121,247, 89, 22,139, 5,213,104, 68,151,179, 77, 89, 60, 13,242, 91,191,249,155, 75,209, 90, 16, 98, - 12,142,183, 21,174,188,246, 42,159,254,249, 95, 96, 49,155,114,251,198, 13, 62,120,255, 93,155,112, 12, 34, 53, 43, 46,214, 23, - 91,204,231,115,142,142,142,136, 49, 16, 99,101,221,122, 49,132,107,116,106, 98, 83, 87,182,206,173, 34, 77, 85,185,150, 68, 76, -157,159, 51,109,201, 28,204,103,144, 90,166,243, 25, 59,251,123, 20, 85, 42,135, 42,145,109,137,242,214,107,175,114,241,169,167, - 56, 62, 56,160, 30,141,184,113,237,218, 9,189,199, 29, 75,240,225, 40,251,225,127,253, 19, 62,247,229, 47, 51,155, 78, 57,216, -185,205,209,222,222,114,156, 46, 63, 25,163,170, 3,138, 97,121, 70, 14,186,160,212,111, 91, 60,191,190,116,148, 54,163,234,193, - 57,254,193,170, 62, 11,186, 56,169,169,117, 65,123,113,182,118,239,224,202,197, 8,174,136, 13, 11,167,157, 53, 53,123, 30, 98, -118,166, 86,102, 89,140,184, 26,150,152,199,192, 74,152, 91, 30, 72,163, 52, 50,232, 34,136,186,172,186, 43,143,193,107,139, 9, -166, 99, 87, 8,199,201,226, 79,163,154, 85,132, 98, 23, 56,251, 48, 81,116,109, 11,109, 54, 96,182,139,134,108,232,233,133, 34, -251, 45, 52, 53, 90,101,184, 90,224,183, 18,188,211,192,207, 92, 65,238,251,167, 16,255, 6,228,243,214, 49, 5,239, 72,202,187, -118,177,231,117,208, 45,228,217,128,238, 31, 88,234,219,186,227,100,139,239,211,215, 21,198,121, 57,114, 15, 43,182,173,122,165, - 20, 27, 11,236,122,130, 87, 40,131,175, 87,181,216, 30, 55,138,117,210, 51,247, 99,213, 50,132,158, 80, 44, 7, 90,251, 64,149, -164,118,129,233, 28,170, 51,208,156,131,230,199,134,138, 61,170, 60, 79,158, 97, 68, 34, 19, 87,222, 79,188,219,119,100, 34,125, -208, 75, 21,236,117, 39,123, 24,192,255,252,168,130,123,106,120,116,129,156,217,130,237,191, 98,232, 83, 60,148,135,177,253,239, -238, 7,112,252, 14,124, 48,182,105, 68,127, 58, 31, 36,216,107, 73,243, 76, 23,196, 56,227, 3,220, 35,252,185,236, 5,237,249, -198,125, 74,104,210, 15,205, 62, 16,108,156, 38,101,102,130,166,186, 70,218, 14,105,154, 21,213,126, 24,234, 93,211,128,217,229, - 98,223,131,176,236, 60, 75,180,247,215,154, 87,165, 71,166,166,229, 32, 89, 97,116,255, 22,108,174,193,222, 20, 22,115,116,102, -246,162, 50,222,134,109,235,116, 75, 46, 44, 82,102, 33,133, 73,187,203,104,119, 78,220, 47, 84,167,107,194,164, 65,190, 95, 17, -238,169,225,217, 57, 60,245, 6,114,246,159,192,228,119, 97,227,127,129,241,231, 44, 9,142,185,173,136,250, 75, 91,100,168,192, -151,123,156,213, 75, 93, 44,238,119,125,211,145,193,155,200,227,251,196,107, 13,213, 97,199,233, 46,115,186,134, 15,186,101,184, -224,176,233, 9, 22,211,154, 89,126, 72,193,222,123,170,142, 23, 30, 58,114, 67,103,230, 42,130,227, 64,251,102, 32, 98,234,117, -154, 53, 68, 51, 81,109,106,212,166, 68,171, 66, 23,204,122, 36, 34,228, 80, 51,207,230, 69, 87,167,196,165,178, 76,145, 54,134, -249,114, 63,172, 20, 15,141, 49,117, 62, 30, 0,212, 39, 93,149, 96,112,151, 84, 10,173, 71,196,214, 30, 36,131,132,161, 46,182, -241,189,160,177, 70,101,196,162, 93, 80,230, 51, 98, 46,196,181, 45,104, 38,174, 10,159, 18,118,174, 81,159, 57,207,246, 71,127, -150,246,120,135,249,254, 7, 38, 0, 28,109, 16,183,239,231,232,250, 27,164,131, 93,123, 7, 86,181, 77, 58,162, 19, 12,179,119, -216, 18,237,162, 18,161, 83,233, 33,234, 75, 15,134, 7,233, 80, 10,217,213,225, 82, 85,142, 91, 53,159,126,145, 72, 46,201,242, - 18, 22,115, 83, 14,171, 9, 30, 99, 48,129,220,224, 32, 50,111,128, 89,228,202,138,109,180,255, 79, 74,102,193,115,155, 86,151, - 23,230, 74,113, 30,193,125, 23, 31,225,248, 96,159,151,126,239,255,179,221,127, 46,108,157, 57,205,199, 63,255, 5,222,251,225, - 15,134, 85, 70,140,145,156, 50,183,223,123,159,139,207, 62,203,155, 47,127,151,128, 48,170, 71,172,157,218,102,239,246,109, 82, -215,241,228,103, 63,203,238,205,155, 92,254,250,215,248,220, 95,254,203,236,253,246,111, 51, 59, 62, 38, 45, 90,110,190,123,141, - 75,159,254, 52,175,127,231,191, 16,138, 82, 85, 53,219,103,239, 97,127,103, 23, 68, 56,222,223,167,109, 23,124,252,103,126,150, -151,126,255, 27, 14, 36, 98,136,101,205, 69, 41,218, 17,218, 57,139,174,101,255,248,136, 16,123, 71, 1,132,227, 35,142,231,115, -102, 34, 28,238,239,114,246,177, 75, 28,205,102,220, 58,216, 7,224,250,141, 27,212,119,159,225,250,155,151,121,252,177,143, 50, -157,207,217, 63,180, 92,249,189,155, 55,121,240,194, 69,174, 94,126,147,243,151, 30,227,198,181,171, 67,223,124,245,205, 55,120, -238, 11,159,231,241, 79,253, 20,151, 95,125,213,126,126,222,141, 31,222,222,225,193, 71, 31,229,218,229, 55, 57,127,233, 18,215, -223,189, 54,156, 83,123,183,110,179,152,205,248,169,207,127,129,151,190,249,141,159,244,158,175, 68,172,246,239,143,176, 18,132, - 51,140,233,139, 82, 74,187,100,202,101,203,101,248, 9, 85,158, 64,252,159,207,202,111,200, 0, 21,147,165,181,217, 59,234,165, - 69,192,206,187,185,159,215,187, 25,142,146,189,128,181,101,250,231,240,162,131,255,157,190, 1, 18,159, 80, 39, 12, 96, 48,142, -125, 67,234, 36,160,126,141,235,127,183,239, 40, 34,182,131,211,185, 45,248,165, 95,242, 47,178,169,161,103,157,121,113, 39,155, -254,244,154, 93, 34,140,100,136, 17, 52, 52,107, 7, 55, 90,120,179, 69,119,199,112,230, 24, 57,253, 26,132, 79,128,222,239,115, -222,202,198,157,204,236, 51,151, 13, 8, 99,228,108, 11,187,157, 47,123,197,170,155,211, 25,182, 55,145,250, 44, 92,191, 5, 31, -184,244,107,102,228, 52,233,179,211, 43, 79,174,123,171, 93,114,242,143, 12,190,208, 11,219,164, 10,198,108,239,245, 3,213,138, - 48,175,216, 44, 81, 42, 49,166,254,153,136, 60,211,192,246,207, 65,117, 47,200, 20,218,183,108,133,208, 9,210,133,229, 52,161, - 10,200,164,130,237, 10, 78, 69,168, 93,100,213,181,230, 47,156,103, 15, 35, 95,138,188,169,131,253,112,238,169,225, 98, 65,206, -173,193,246, 47,192,214,175,153,160,203,140,236,254,207, 3, 56,250,199,232,251, 87,225,213,218, 71, 50, 11,116,127, 65,185, 62, -163, 59,232,232, 68, 78, 96, 74, 7,251,211, 10,237,108, 53,254, 80,124,228, 27, 60,130,146, 85, 27,199,202,155,190, 7,213, 72, -233,119,148,193, 10,128,245, 45, 19,247,165,185,125,140,222,230, 35,158, 41, 95, 87, 78,157,115, 59, 91,175, 49,232,127, 30, 56, - 77,174, 3,102,115,216,107, 97,154,208,173,109,116,115, 11, 93, 84,104, 25,153, 96,179, 82, 56, 94, 80, 22,135,148,249, 33,233, -240,128,197,209, 49,157,118,148,144,208,160,148,131,142,178,200,232,108, 78,185,221,193, 85, 8,239,215, 48,202, 72,184, 9,229, - 15, 32,127,207, 82,254,234,251,188, 96, 10, 12, 34, 14, 89, 29,199,223,145,242, 32,209,216,230,205, 12, 38,235,176, 89,193,232, - 26,114, 53, 32,183, 11,210,218,131,191,147,127,114,176, 95, 92,145,219,111,241, 42,177, 78, 86, 9,253,118,156, 74,139, 89,161, -212, 70,232, 18, 45,105, 45,231,228,148,174, 96,197, 84, 51, 70,169,168, 52, 49,198, 20,193, 93, 81, 19,198,185,120,135,170,161, - 84,145, 46, 21,218,146,232, 52,120, 71, 30, 28, 60, 82, 67, 61, 54, 38,124, 78, 3,152, 70,135,253,162,119,235,110, 13,235, 11, -141, 24, 2, 29,193,115,208, 25, 44,115,161,106,208,102, 76,142, 21, 89, 42, 24,109, 18,214,182,144,102, 66, 71,164, 45,133,174, -109, 45,164,195, 5,115, 97,253, 52, 52, 91,166,234,143, 53,245,169,243,132,241,182,197,110,174,159, 69, 54,207,177, 56,248, 0, -157,238, 33,213,200, 44,128,174,207,208, 1, 88,184, 98, 73,213, 62,216,100,185,142,147,170, 34,122,193,145,179,137,226,200, 9, - 66, 69,219,117,180,211, 3,180,155,123, 62,183, 27, 53, 67,244,160, 20, 67,159,246, 96,151,148, 18,109,219,210, 45, 22,204,167, -199,180,243, 25, 41, 27, 4,165,148, 52,124,191, 76,156,106,122,148, 80,213, 4,137, 75,218, 90, 8, 60,254,153,207,240,254, 59, -239,176,119,253, 58, 82,148, 24, 43,186,197,130,139, 79, 61,195,225,206, 46,139,249,156,135,159,120,130, 43,223,123, 5, 68,185, -241,246, 59,156,123,228, 35,124,244,211,159,230,252, 19, 79,112,254, 99, 31,163,107, 23,236,124,240, 1,247, 94,184,200,131,143, - 61,102, 99,243,233, 49,169, 77, 60,254,252,243,188,243,250,235, 20, 85, 62,248,241, 91, 60,116,233, 18, 79,126,246,115, 92,124, -234, 41, 62,242,236,179,148,212,113,251,250,141, 33,212,165,168,114,246,193, 7,248,211,255,244,159, 17,145,161,136,233,173,106, - 34,194,104, 60,230, 99,159,126,158, 71,159,121,134, 75,159,252, 36, 31,253,196,115,220,119,225, 2,111,189,246, 26,179,227, 41, - 63,245,197, 47,242,192, 71, 30,101,127,103,135,211,247,222,203,171,223,249, 14,165, 20,110,223,184,193, 39, 95,120,129, 11, 79, - 60,206, 98, 58, 99,227,212, 54, 63,248,238,203,136, 8, 55,223,123,159,231, 94,120,129,199, 63,241, 28,163,241,152,151,190,241, -117,243,236,139, 33,114, 55, 79,159,225,226, 19, 79,242,226,215,126,143,206, 21,247, 0, 55,223,123,143,231,126,246, 5, 30,123, -238, 19, 52,163, 9,127,252,245,111,144,187,165, 80,170,148,196,125,231, 31,246, 75,125,229, 90,239,247,230,186, 44,212,205, 94, - 43, 67,218, 27, 20,180, 24,208, 71,115, 70,115,177,233, 65, 89, 30,139,119,198,178,202,215,158, 8,238,100, 19, 55, 2,217, 27, -114,236,211,229, 24,237,110, 42, 42, 28,103, 99,167,180,142, 54, 79,197,124,166,107, 22, 0, 70, 19, 44,152,160,241,255, 95, 71, -131, 80,244,217, 40,243, 2, 71,157,208,212, 54,205,150,225, 11,179, 14, 95,188,147, 16,167,119, 54,149,176, 30,237,227,244, 71, -122, 40, 86, 93, 88,225, 30, 28, 12, 48, 34,159, 61, 11,227, 13,194,205,219,132, 60,181,139,169, 75, 54,199,111, 92, 25, 62,183, -110, 84,198, 53,124,124, 11,249, 53, 37, 92,216,130,240,119,161,108, 3, 87, 65,255, 12,202,159, 65,158,131,158,178,220,248, 42, -163, 7,111,195, 27, 83,219,185,111, 70,184,119,134,172, 63, 15,213, 58,250,221,175,193, 15,124,113,121,208,162, 11, 65,198,254, - 77,220,176,177,189,190, 62,183,113,205, 88, 41,215, 22,232, 97,235,223, 36,183, 78,172,185,229,236,184,179,241,117,113,108,172, - 11,107, 66,172,137, 90, 33,207, 52,200,175,222, 5,231,254,161,121,162,211,251,176,247,127,195,193,107,176,187, 7, 55, 28,112, -211, 57, 68,103,171,130,123, 35,108,175, 25, 11,159, 29,216,219, 71, 63, 72,182, 63,233,220,166,208, 22,175,101,196,138,128,243, - 1,185,168,112,230, 83,112,234,111, 65,125,214, 5, 93, 35,255,175, 64,247, 13,184,254, 15,208,239,204,224,135, 53, 58,202,148, -119, 15, 41,239, 77, 73,211,100, 30,227,158, 10,118, 7,140,161, 47, 78,195,157,118,110,207, 62, 14,189, 7, 90,203,137,183,108, - 16,245,221,187,215, 96, 26,236,144, 10, 35, 27,185,111,157,182,143, 49, 59,132,118,134, 52,209,240,251,157,207,174,106, 43,242, - 36,228, 37, 19,134, 98,107, 11, 95,230,155, 11, 67,209,206,225, 45, 97, 12,219,247, 16,238,218, 68, 70, 29,204, 14,225,248, 24, -142,230,232,180,163,107, 23,204,115,199,188,133,105,142,164, 16,105,164, 48, 10,197, 38, 82,165, 16,179, 18, 90,165,150, 64,179, -209, 80, 93, 92, 71, 46,141,224,241,130,220,159, 77, 80,119,215, 23, 97,243,239, 0,231,253,133,237,184,118,161,156, 4,224,175, - 94,234, 18,252,207,101,224,107,176,243,127,193, 31, 28,192,127,152,211,190,115,204,124,119,198,149,185,114,173, 27,190, 84, 27, -115,159, 48,215,136,193, 8,253,132, 80, 15, 85, 9,170,212,177, 2,137,116, 85, 67,201,234, 74,248, 68,168, 27, 15, 3, 9,238, -193,174,153,148,150,237,104,153, 81,139, 46, 81,122, 68,103,168, 13,246, 34,193, 97, 29, 11,180, 88, 7, 79,221,216, 69, 93,212, - 88,240, 69, 93,188, 85, 6,104,136, 12, 19, 28, 83,145, 23,191, 32,131,152,194, 62, 75,164,195, 70,196, 81, 19, 35,148,170, 54, - 94,189, 18, 40,213,136,220, 76,204,187,156,230, 44,102,199,204,230, 51,139, 12,117, 1, 92, 61, 89,103,114,247, 67,212,247, 92, -178, 61,243,108,207,244, 1,107,103,144,102, 29,169,215, 8,163, 45, 22,121,202,222,229, 63, 98,250,254, 27,148,174, 51, 17,112, - 20, 82,202, 44,146,141,188,163,168,193, 85,130,251,178,251,176, 71,223,167, 7,255, 58, 59,195,167, 81,215, 13, 97,125,155,174, -107,209,197,220, 79,105,219,165,211,140,237,176, 31, 82,238,252,231,158, 90, 52,183,110,227, 54, 73, 0, 0, 20,143, 73, 68, 65, - 84,148, 34, 36, 45,228,118, 97, 3,168, 88,217, 88, 62,119,182,202,236, 35, 68, 9, 38,104,172,226,114, 18, 83, 12, 27,155,181, - 80,138, 18, 84,137, 85, 53,248,157, 87, 5,172,154,242, 96, 9, 43,217,241,172, 49,184,118, 74, 45, 72,166,109, 17,132,132,105, -105,144, 37,185,173,248,170,199, 92,192,209, 95, 87, 15,128,137,131, 13, 13,129,103, 95,248, 89, 14,119,118,121,227,229,151, 93, -223,106,187,250,226, 83, 92, 99, 93,232,128, 1,238, 33, 49, 61, 96, 94, 7,130, 91, 30,158,152, 8,182,134,168, 27, 23,184, 41, -143,125,226, 57,238, 58,247, 0,223,250,119,191,181,130, 34, 81,183,101,174,184,114,188,161, 69,101,128, 7,157,200,164, 24, 2, -167,194, 74, 28,234,242,215,243, 63,255,115, 28,237,239,241,250, 75,127,220,211, 50, 78, 92,234, 22,152, 85, 78,116,229,246,204, -151,165,239,183,156, 28,213, 7,249,240, 0, 87, 1,226,255,116,143,252, 70, 41, 75, 55, 84,235, 65,247,189,158,181,232, 50, 64, -126, 0,130,233, 82, 5,223,219,207,154, 21, 1, 93, 29,100,240,165, 87, 97,136,170, 53,155,138,255,249, 53, 15,109,235, 59,243, -232,175,200, 39,103, 78,181,147, 97,132,100,144, 26, 75,115,106,135, 41,183, 29,186,228, 14,230, 29, 58, 30, 19, 70, 19,100, 92, -112,181,136,141, 27,212, 42,104,197,225, 34,109, 66,110, 39,104,182,144,251, 91,100,242, 18,196,159, 54, 92,167,140,150, 57,214, -154, 65,215,160, 84,200,218,189, 80,239,218,152, 98, 35,192,166, 32,213, 11,168, 28,192,229, 55,224,182,197,107,234, 84,151,190, -243, 70,150,222,240,219,254,141, 27,121,103, 56,205,195,190,161,135, 72, 12,251,136,185, 99, 59,251,216,214,108, 15, 68, 40, 53, -242,164, 32, 79,220, 11,155,127,213, 45, 78,107, 14, 33,123, 7, 56,178,203, 57,123,183, 62, 10, 86,128,108, 41, 52,150,195, 13, -115, 11,148, 57,102,176,109,245,168,114, 68, 60,121, 45,194,195, 9, 57,117, 31,156,250,235,208, 92,242, 11,221,125,214, 52,144, -175,194,254, 63, 66,175,222,130, 63,173,161, 18,244,120,134, 94, 61, 38, 29,182, 6, 29,186,227, 66,239, 15,136, 62,136,236,206, - 11, 29,196,196,111,245,200,197,129, 50,168,224,135,200,227,254,177,232,167, 73, 18, 9, 82, 76, 52, 50,217,128,122,205,108, 61, - 17, 83,204, 7,223, 53,245,203, 42, 7,114,144,210, 82,124, 71,131, 6,235, 36,181, 4,114, 87, 76,103, 18, 27,186,102, 68, 75, - 36, 29, 29, 34,239,189, 79,220,187,137,132, 57, 18, 19,228,130,116, 9,237, 90, 27,129, 22,161, 43,202,162,179,177,170,132,138, - 80,217,116, 39, 99,153, 10, 11, 32, 31,117,132,253, 22,217, 83,228, 70, 5,135,149, 9, 61,229,135,150, 2, 23,239, 7, 57,229, - 93,123,239, 67,253,144, 8, 8,193, 83,104, 4,248, 17,116, 95, 51,102, 68,125, 8, 83,129, 27, 25, 89,100,154, 82, 56, 54,150, -211, 16, 71,176, 90, 35,244, 65, 38, 1, 37,107,191,223, 86,167,136,171,139,178,106,138, 56,227, 59, 54, 84,163, 53, 74,172,124, -215, 25,168, 66, 69, 29, 3,212, 53,139,148,200,169, 91, 78, 6,197, 72,101, 37, 4,114,168, 76, 65,174,106, 35,228, 80, 65, 51, -182, 11,189, 51, 31,190,198,106, 96,193,179,146,117,173, 3,188, 37,250, 22, 44, 24, 18,194,187, 89,234, 6,173,199,150, 92,216, -152, 29, 45, 52, 35,114,181, 70,231, 72, 92, 45,230,175, 78, 57, 15,212,182, 28, 43, 82,206, 44,142,118, 72,135, 55,200,221,212, -215, 1,141,189,230,233, 1, 90, 18,117, 51,102,114,234, 33,214,238,255, 24,163,237,123,104,182,238,162,222, 58, 99,144,152, 24, - 73, 18,141,111,158, 18,161,182,253, 81,155, 50,201, 67, 84,204,198,102, 93, 95,246,139,169,138,129, 48, 94, 3,177,215, 64,207, - 50,175, 71, 84,155,167,237,235, 8,113, 24,207,171, 90,166,121,106,103,134,110,142, 21,197, 45,108, 18, 42, 19, 36, 74, 48,255, -122, 8, 67, 76,170, 41,194, 77, 13,158, 82,103,162,186,254, 76,207,217,190,197,209,177,182,170, 43,113,200,206,114, 24,152, 1, -118,134,246,187,237, 97,134, 52, 68, 40,171,107,133, 60,226,214, 71, 45, 85, 8,196, 24,169,171,134,170,170,137, 49,154,234, 60, - 70,215,189, 8,147,141,117,126,230, 87,126,133,170,174,120,229, 15,255, 16, 41,101,136, 96,101, 69, 21,190,234, 55, 31, 94,171, - 95, 76, 58, 92,236,197,255,185, 12, 61,137, 34,220,251,240, 69, 62,251,229, 95,226,177, 79,124,130,245,237,109,190,243,251, 95, -167,157,205,221,147,174, 39,102, 98,220, 65, 6, 63,113,125,202, 79, 70,172,157, 80,171, 3,147,245, 9,191,248,149,175, 80,215, - 53,223,253,214, 55, 61,120,102,229,163, 13,225, 50, 38, 90, 45,165,184, 93, 49, 19,244, 36,251, 93,244,142,215, 35, 39,197,118, - 43, 71, 41, 85,151, 78, 98,236,122,126,118,111,182, 81,215,120,173, 69,165, 66,152, 88, 68, 55,173, 66, 85,150,152,240,232,123, -244,210, 87, 26,209, 84,183,197, 73,155, 82,150,128,179,222,127, 87,245,182,181,232,184,144,180, 92, 37,247,138,191,164, 98, 66, - 9, 79,240,201, 78,154, 66,133, 88,148,177,100,154, 32,196,197, 20,185,117, 11,125,244, 33,202,214, 25,194,219, 59, 80,101,251, - 36,211, 76, 41, 9,245,240,134,144,149, 48, 93, 32, 95,223, 65, 55,238,129, 47, 28, 32,155,127, 31,194, 63,128,112,193, 20, 9, -113,102,177,151,150,254, 97,130,183,187,158,131,197, 31,155, 80, 45,110,219,158, 91,111,218, 40, 27, 93,222, 96,125, 85,149, 87, -102,157, 99, 96, 38,118,153,175, 87, 70,201,155, 39, 47,187, 92, 4,167, 5,105, 34, 26,141, 90,102,251,119, 29, 86, 20,140, 3, -220, 93, 96,116,214,132, 83,106,144, 12,234,103, 97,237, 53, 88,236,193,214, 14,180,161,143, 32, 50,210, 79,179,102, 59,240,176, - 6,229, 86,239, 59, 90,122, 7,219,108, 55,236, 72, 96, 43,194,217,130,108, 52,176,246,180,167,144,173, 42,179, 71,198,206,223, -255,167,176,243, 22,252,176,178,172,251, 73, 66,119, 22,164,221,150, 69, 22, 22,142, 37, 45,189,170, 61, 47, 7, 79,154, 79, 18, -147,134,177,124, 83, 27,212, 35,119, 4, 77, 72,231,127, 34,248, 28, 73,117,233, 53, 95,189,226,138, 26,132, 40,156,177, 13, 73, -231, 3,255, 92,160, 88,199,130, 84,198,131,239,171, 10, 26, 84, 91, 83,205,106,182,148,173,106,141, 44, 53,121,148, 41,243, 57, -105, 49,165,235, 22,104,155, 16, 45, 36, 85,210,190, 50,234, 10,213,182,225,114,117,180, 70,216, 89,163,242, 31,255,184, 4,242, -162,208,118,137, 46, 4, 66,105,169, 82,242,247,117,160, 4,165, 27, 5,186, 89,102,237,234, 1,163,157, 57,213,187, 19,226,187, - 99,228, 17,129, 91,151,225,252,255, 6, 27, 79,195,250,223,134,209,199, 65, 55,176, 42,236, 14, 58,133,170, 23, 89, 11, 96, 27, -218, 11, 48, 63,182, 81,252,227,251,200, 59, 19,226,113,102,179, 43, 60,144, 50,135,153,161, 32, 22,129,174,232, 18,144, 24, 92, -197,175,106, 26,115, 9, 67,170,116, 6,130, 11, 85,173,129,243, 4,171,156, 76,208, 85, 27,149, 44,136,146,170,134,188,104, 79, -226, 56, 52,147,169, 40,120,184, 8,110,195,241,189,179, 21,183, 35, 7,195,231, 19,159,183,191,228, 76,104,214,239,163,173, 96, - 42,106,130,188, 92,212,108,141,201, 68, 97,165,170, 81, 34, 85,176,174, 56,229,153, 51,231, 11,162,201,212,229, 65,236,245,100, -179,183, 81,236,235, 91,236,188,143,222,122,151,166, 25, 51,185,231, 97,226,221, 23,236,210,235,166,148,116, 68, 61, 63, 96,180, -253, 0,167, 31,120, 10, 46,126,202, 72,155,199, 59,164,233,174,101,122, 75,225,224,237,239,113,240,250, 31, 80,186,185,125,189, -214,222,158, 8, 60,200, 67, 46,196,200, 58,249, 60,243,247,113, 70,170, 17,113,188, 14, 33, 14, 9,134,169,107,237,185,241,221, -106, 46,197,207,201,228,243, 85,179,253,169,154, 69,173,228,100, 53,184, 66, 8, 53, 69,194,176,186,210, 82,252,251, 40,148,148, - 41, 41, 13, 16,155,226, 9,112, 20, 87,218, 59, 6, 68, 42,139,173, 84,205,195,179, 91, 74,182,199,169, 40, 33, 88,170, 27,197, - 86, 12,217, 9,108,125, 7, 29,253,243, 13,187,254, 21,112,145, 96, 78,128,249,241, 49,223,252,215,255,122, 73, 41,140,113,165, -192,232, 19,253,138, 39,179,249,191,115,244,107, 63, 9, 24,136,113,220,193, 96,247, 49,224, 7,239,188,205,187, 63,126,203,240, -180,168,137,225, 60,183,160,172, 38,175,200,114, 3,234, 42,174,225,212, 9,238,250,232,215, 46,114,167,151, 71,140,123, 49, 63, - 62,230,171,255,242, 95,220,153, 67,228,103,142, 39, 82,149,178,178, 79,255,201,174, 91, 62, 36,141, 90, 62,164,182, 88,157, 26, -196, 95, 59, 35,191,177,114, 23, 81, 84, 92, 76,179,252, 48, 69,122,138,233, 82,189, 46,158, 83, 82,123,167, 93,133, 59,232,164, - 14,248, 80, 21,162, 95,222,115,160, 51,232,243, 32, 28, 23, 31,129,170,202,224, 93,199,181, 91, 61,220,102,136,253,246,138, 80, - 4,114, 49,241, 85,231,189, 91, 29,148,208, 38,100,123,140,158,218,132,133, 32, 83, 27, 47,167, 89,161, 45, 74, 30, 2,125,149, -208, 58, 77,231,106, 7,247,157, 70,206,237, 64,248,190, 7,193,172,219, 65, 41,135,160, 9,180,241,113,224, 3, 48,234,160,188, - 13,163,187, 44, 18,179,251, 51,248,254, 45,243,156, 39,139, 79,181,149,168,152, 0,174, 14, 48, 9, 72,171,182,107,207,138,172, -245,249,237,101,105,143, 11,190,243,141, 1, 90, 69, 23,101,217, 70,169, 18,186, 72,220, 30,193,103, 4,121,240,203,208,124,198, - 15,243,108, 1, 31, 36,104,223, 48,171, 83,206,144, 42,216,176,179,158,234,148,239,211, 11,148, 35, 88,204,236,116,239, 60,118, -117,225, 42,248,141, 10, 78, 87,112,182, 67, 54,239,134,237, 95,134,230,209, 21,239,180,235, 14,142,254, 61,236,255, 14,122, 5, -248, 81,132, 81, 70,119,231,148,183,166,204,167,137,105, 37,203,159,151,172, 20,140, 75,178,204,201,203, 92, 34, 52,181,189, 23, -218,185,141,199, 87, 43, 96, 31,201, 15,221,252, 48,167,247,199, 45, 23, 83,186,111,157,177,215,167, 45, 34,174,202, 76,221,160, -150,215,226, 57,226,145, 65, 16,148, 67, 69, 38,208,117,129,182, 8,139, 54,209,150,138, 69, 28,145,230, 29,186,232,108,215, 92, -143,161, 94, 35,175,175, 3, 19, 36,172,193,230,105,244,244, 22,170,181, 69,238,142, 54,208,209,216,136, 97,237,140, 46,181, 14, - 45,233,195, 78,150, 99,188,206, 81, 10,165,205,232,222, 2,217,203,200, 13, 8,183, 26, 91,135,196,235,208,125,219,116, 11,245, - 37,115, 57, 12,155, 91, 61, 57,250, 80, 32, 31,128,174,195,252, 6,164, 41, 84,135,246,189,154, 67, 56, 86, 38,179, 66, 46,194, -129,211,177,196,159,231,158,221,222, 63,119,253, 92, 81,252,251,171, 30, 4,161, 37, 19, 37,208,169, 69,157,230,212,145,125,132, -155, 85, 77, 36, 86, 50,165, 30, 89, 49, 95,140,245, 93,213, 13,161, 30, 91, 65,147,179, 75, 68, 26, 67,120,106,191, 47, 78,246, -214, 12,209,108,112,197,188,216,214,228,219,251, 67, 98,133,198, 6,141, 53, 37, 68, 47, 24,151,196,107, 27,231, 6,183,197, 25, -115, 92,157,168, 86,210,130,182, 93,176,104, 59, 82,215, 13,103, 93,231, 84,180, 92,242,137,227,209,104,190,166,234,158, 30,239, -113,188,251, 62,237,241, 46,121, 49, 37,205, 15,232, 22, 7,148,197, 1,165, 77, 4, 10,213,218, 54,213,218, 22,218, 76, 88,164, -150,195,119, 94,165,189,125,205, 18,189,220,150,167, 43,151,141,122,152,141,132,218, 46,170,236,225, 38, 10, 18, 26,194,100,157, -148,149,118,122, 76,110, 91,114,106,173,160,141,145,210, 45,204, 99,175,253,152,214,169,127, 69, 45,246,115,177, 48, 22,121,234, -134,175, 45, 97,244,190, 16,140,113, 79, 63,133,237, 89,232,197,155, 42,199,169, 90,181, 96,111,138, 80,138, 9, 81, 67, 88, 42, - 58,180, 12,123, 95,213,158, 15,178, 18, 19, 26,130,107, 54,204, 47, 31,162, 79, 86, 92, 32,105, 95,235,146, 22,104,218,190, 66, - 46,217, 63,127, 89, 82,215,202,178,251, 46, 62,234, 79, 57,155, 13,210, 39, 16, 69,203,201,203,109, 40,254,151,180,194, 62,210, -117, 16, 80, 34, 38,200,212, 37,222, 82, 87,135, 96,194,159,219, 26,175,102, 22,220,121,177,202, 48, 75, 60,121, 9,171, 23, 57, - 57,123,131,233,209,181,171,221,182,252, 57, 23,251,234, 72, 63,172, 20, 8,114, 39,184,171,183,136, 39,189, 67,127,227,173,114, -118,133,169,122,188,118, 39, 66, 22,165,113,147, 63,197, 47,247,136, 43, 84,197, 85,155, 12,123, 16, 16,114,112,223,186,199,109, - 15,239, 23,150,222, 89,252,135, 85,178,244,233,167,148, 96,132,179, 94,204, 45, 62,205, 54,152,196, 73, 42, 89, 31,215,185, 22, - 10,241,189, 91,150,115, 50,222, 64,171, 9,180,153, 84, 23,102,179, 98,163,216, 74,204,150, 92, 67,140, 5, 61, 90,192,191,217, - 71, 31,186, 11,121,248, 77,232,254, 25,212,127,199,160, 52,122, 8,114, 21,149,100,157,110,190, 5,213, 83,176,113,205, 58, 3, -237,108,244, 63,235,145,163, 50, 92,194,140,117,169, 54, 92,175,160, 46, 72, 93,108, 93, 48, 23,194,134, 80,180, 50,178, 92,244, - 93,166, 4,100,108,195, 1, 57, 84, 74,107, 99,248, 16, 60, 93,109, 29,228,116,128,250,169, 21, 31,179,223,152,245, 5, 27,177, - 87,199, 48,105,173,192, 88,199,242,214,171, 45, 8, 99,175,158,202,242, 93, 91, 28,124,211, 99,185, 54, 35,156, 74,200,198, 24, - 38, 15, 65,243,209,147,254,233, 48,134,242, 30,204,127, 27, 14, 18,114,121,100,157, 65,238, 40,239,206,232, 14, 59,142,235, 48, -144, 7,195,138,223,242,206,234,178, 63, 0, 52,212, 48, 89, 71, 84, 41,243,163,161,122, 47, 62,153, 17,239,110,150,251,196, 21, -193,167,167,179,105, 12,150,161, 45,238,251, 72,153,178,232, 92,116, 98,193, 27, 84,160,173, 65, 98,148,198,212,192, 57,163, 33, -144, 52,210,230,204, 98,158,205,227,158,167,134, 35,158,108,194,246, 61,200,120,203,246, 94, 85,160,180, 29,139,212, 82, 4,154, -157, 41,213,193, 28, 25, 67,104, 2, 85,183, 32, 79,143,168,167,199,196,156,233,146, 37, 27,106, 48, 28,107,232,148,170, 95, 51, - 33,148, 90, 56,208,194, 34, 41,107,187, 83,198,199, 45,205,126,162, 62, 90,135,182,130, 75,183,161,252, 38,164,107,112,234,127, -135,234, 60,203,242,120,101, 80,216, 43,172,217,132,250, 60, 76,119,160,190, 9,247, 76, 9, 15,140, 8,199, 74,245, 72,228,163, - 63,110, 57,124,187,227,182, 31, 74,181,152, 54,134, 30,215,186, 18, 23, 53,236,238,176,233,152,148, 66,206, 45,226,113,162,214, -176, 25, 87,190,170,215, 41,117, 77, 14,134, 72,149,201, 6, 50, 50,123, 83,234,195, 90,202, 2, 41, 74, 53, 26, 51,143, 21,121, -145,125,100,107, 84,181, 72,182, 68, 50, 44,228,163,223,153,139, 11,134, 76,197, 30,220,239,157, 78,112,244,251,189,238,208,145, -133,202,172,110,209,146,219, 52,103, 83,224,135, 72,215,119,177, 57,123, 66,157, 34, 33,218, 26,167,105, 28,153, 57, 67, 36, 82, - 98,197,124,122, 64, 59, 63,182, 67,245,246,117,234,102,196,120,227, 20,245,218,186, 89,204, 98,133,134,138,249,236,136,195,253, - 29,186,195,219, 72,106,105,234,106, 56,248,251, 17,116, 63,186, 78, 30, 16,130,191,182,130, 9,224, 66,109, 43,141,110, 62,179, -167, 46,171,165,186, 53, 35,194,168, 38, 39, 79, 15, 43,198, 43, 86, 31,177, 11,129,210, 45, 12, 22, 20, 2,129, 72, 81,191,240, -130,217, 72, 11,153,180, 48, 80, 72,239,147,215, 21,252,168, 1,136, 12, 31, 44,190, 50, 34,103,219,209,135,224,151,231, 10, 26, -216,135, 94, 41,217,247, 56,136, 5, 1,101,177, 68,189, 12, 6,202, 81, 23, 73,245,190,121,197,109,103, 1, 41, 66,161,144,197, -236,124, 37, 89, 78, 64, 22, 49, 12,110, 63,154,246, 19,163,167, 71, 87,206,224,207,217, 47, 21,231,172,232,202, 9, 51,116,251, -125, 80,140,120,234,166,163,145,139, 90,250, 30,197, 3,118,134,221, 32, 39, 46,119, 86, 39,199,171,207,133,234, 9,152,187,172, -172, 3,150,151,188, 23, 28, 89, 7,209,164, 14,207,127,127,225,203,106,146,203,135, 95,232, 39, 38,154, 39,163, 86,249,144,110, -190, 18,150, 88,115, 5,162,119,180,125,135,149,220,157, 85, 84,153,187, 21, 35,246, 49,156, 43, 1,102,161,156,172, 88, 50, 56, -245,201, 35,234,130, 12, 49,135,165, 8,217, 65,104, 41,247, 1, 50, 66,206,253,110,207, 71, 30,193, 35,191,157,203,210,174,252, - 94,171, 38,130,239,173,112,227,190, 16,208, 5,178,183, 71,184, 59,192,233,177,229, 49,239,103, 22, 36, 42, 85,195, 91, 74, 48, -241,155, 22,164, 42,112,245,136,242,255,212,196,191,117, 14,214,126, 31,218, 39,160,254,239,128,123,209,176,239,249,215, 78,133, -209, 5,132,207, 66,249, 19, 68, 94, 71,231, 71, 62,238, 54,117,106,207,106,151,226, 34,133,224,227, 12,140,246, 38,168,143,209, - 2,225,116,176,177,111,242, 78, 7,207,173,245,232,178, 92,220,209,157, 10,210, 4, 56, 19, 96,173,177,137,193,157,144,146,224, -246,182,120, 3, 70,199,214,161, 78,214, 32,222,109, 40, 87,169,122,138,143, 67,110, 86, 60,132,184,200, 97, 91,145, 83, 1,154, -187, 96,252,156, 5,136,244, 69,128, 7,171, 16, 94,130,173, 15,224,242,196, 26,248,168,148,119,231,228,155, 51,142,138, 50,147, - 64,209, 64, 20, 99, 83, 87,206, 30, 64, 7,186,171, 63,128,246,160,105,255,186,114,242, 17,154, 12, 35,225,101, 66,156,117,168, - 69,252,101,228, 21,255,122,191,112,106,156,128,150, 11, 26, 4, 73, 29, 37,116,214, 97,228, 76,153,183,100, 21, 91,231,164,150, - 92, 53, 38,200, 91, 36,148,108,151, 69,168,208, 18,173, 88,235, 90, 27, 76,164,117,239,246, 35,154, 10,218,182, 16,133,197,236, -136,210,205,105,214, 55,168, 51, 4,233,136, 58,165, 74, 51, 66, 84,234, 98, 19,166,226,180, 68, 77,182,159, 46, 98,212, 51,196, - 38, 83, 37, 11,243,168,116, 33,144,187, 12,183,142, 8,149, 18,159, 62, 5,111,143, 96,122, 12,247,253, 33,164, 93, 56,243, 55, -161,126,220,160, 67,204, 86,142, 28,119, 36,200, 1, 52,103, 96,116, 14,202,109,228,204, 85, 19, 73, 86, 35,184, 84, 51,254,127, - 11,231,175,117, 28,182,194,169,173,200,250,134,240,246,245,196,113, 42,196,149, 89, 99,208,129, 91, 73,150,229,161, 26, 17, 74, -172,109, 50, 82, 7,170, 56, 34,132, 10, 25, 79,172, 72, 41,153, 60,157, 65,233,108,215, 94, 58,178, 66, 83, 69, 66, 53, 34,212, - 35,114,206, 70, 6,172, 70,230, 17, 87, 99,251, 84,165,163, 42, 86, 52, 8,193,133,117, 14,157, 9, 66,171, 22,127, 73,172, 16, -137, 68,205,132, 98,151, 70, 17,177,132, 53,239, 38,135,208,152, 24, 40,146,172, 83, 11,193, 20,254,173,141,223,251,130, 79,170, - 96,187,249, 30,255,170, 74,116,140,107, 81, 69,114,231,163, 99,243,130, 47,186, 57,233,224, 22,245,254,117, 82,234, 92,100, 86, - 28,184,229, 86,186,186,182, 66, 72,151,125,146,138, 69, 2, 19,107, 75, 99, 19,147, 39, 22,130,249,218, 39, 19,138, 6,186,249, - 20, 41, 9,234,145, 63,162, 54, 34,238,186,133,235,153,116,105, 79,114,190,123, 94, 76, 13,149,234,168,227, 32,134, 7,206, 33, - 90,177,163,105,165,243,237, 63, 70, 25, 86, 44, 5, 99,185, 15,200, 81, 53, 49, 27, 85, 88, 78, 24, 68,150,184,229, 40, 22,203, - 91,242,112,111,100, 31,147,103,247,164,211, 39, 46, 14, 86,186, 94, 72,230, 22, 69,207, 15, 89,105,148, 79, 76,135,251,177,123, -242, 98,163,191, 44, 69,130,133,249,212,129, 42, 42,165, 24,195, 68,125,242, 80,252,230,151, 21,229,109, 20, 59,107, 66, 8, 30, - 52,150,141,139,191,210, 41,235,170, 79,124,229,198,236,179,173,202,170, 13, 93,197,166, 84,114,114, 19,102, 76, 4, 91,211, 81, -124, 93,184,114,201,243, 19,161, 46, 44,167,120,119, 52, 60,171,191,130,124,152,165,247, 67,215,250,214,169, 31, 55, 99,143,171, -243, 75,156,147, 6,122, 17, 12,168,224,202,211, 62, 15, 35, 4, 60,159,246,164,149,173, 31, 17,228,202, 15,135, 21, 1,156, 6, -232,212,254,206, 34,152, 15,126, 53,124,171, 13,134,151,173,221, 13, 86,130,208, 58,192,170, 79, 21, 13, 46, 69, 76, 89,152,149, - 62,213, 73,152, 71, 24,141,204,110, 86,102, 25,142,167,118,209, 54, 99,142, 42, 56,168,231,108,199, 68,138,197,194, 43,114,182, - 73, 67, 21,140,137,254,189, 5,242, 85, 8, 63,127, 6,194,255, 9,245, 8,229,148,197,110,102, 44,166, 85, 1,221, 1, 61,131, -148,123,160, 92, 69,247, 61, 18,117,226,106,233, 54,192,196, 30, 88,201, 1, 98, 99, 29,124, 29, 96, 35,217,174,156,226,104, 62, - 65,199, 54, 62,211,206, 61,127,199, 70,246, 73, 90,152, 42,132,160,140,163, 81,160,170, 51, 35,132, 13,131,161,228,206,161, 37, - 44,243,174,203, 5,208,183,109,252, 94, 31,129,222, 13,229, 44,228, 26,178,115,192, 91,160,173, 44, 43, 92,176,203,188, 17, 24, -215,176, 85,144,250, 12,132, 75, 32, 79, 56,236,127,230,212,131, 9,112, 13,184, 2,225, 65,152, 30,193,180, 51,108,254,187,133, - 89, 27,217, 13, 21,173,135, 6, 84, 10, 18, 77,225, 91,245,218, 12, 89, 42, 55, 75,191, 43, 15,181, 29,242,173,239,240,134, 14, -205,246,116, 34, 86, 56,200,170, 58,190,146,165, 13, 78, 21, 73, 9,105, 54,109,140, 15, 38, 8, 28,103, 72,115,138, 38, 83, 51, -231,134, 86,160, 75,138,230,128, 38, 19,205, 5, 41, 86, 68, 4,123, 42, 83,172,209, 81,131,106, 68,170, 9, 18,199, 72,137,132, -186,166,228, 22,169,106, 66,108, 16,153,210,141, 55, 56,102,196,248,104,202, 72, 23,132, 74, 41,163, 26,109, 43, 19,126, 5, 60, -198,177,191,122,237, 98,143, 81,135, 17, 83, 9,234,227,111, 37, 53,208,102,101,235,160,208,124,107, 1,177,134,251, 38,240,241, - 22, 46,188, 2, 71,127, 15,238,254, 31, 97,244, 5, 23,200,245,130,152, 9,148,202,222, 19,237, 28,242, 6,232, 57,136,187,112, -166,131,131, 0,223, 92,160,135, 35, 54,239, 19,206,239, 22,170,179, 53,177,142,108,205, 91,230,199, 38, 26, 12, 94,108,228,232, -157,156,101,225, 26,180,135,128,214, 53, 42, 53, 49,103,234,209, 58, 57, 86, 6,173,242,100, 52, 45,157,129,167, 42,161,202, 32, -213,136,166, 25, 33,227, 53, 74,168, 77,156,149,210, 32,172, 11,193,170,246,162, 62,146,212, 66, 83, 5,106,137,110,135, 19,239, - 2,173,174, 75, 89,145,186, 49, 21,179, 91,238,106,181,168,214,164, 86,241,169, 55, 36,189,163,102, 92, 85,148, 24, 72,177,177, -140,237,197,145,169,235,251, 17,188, 8, 41,249,197,225,107, 6, 81,235, 80, 67, 85, 67, 12, 84,185, 16,163,216,123, 32, 84, 20, - 45,132,212, 50, 86,163,227,117, 41, 83,123,176,199,137, 5,170, 10,181, 79, 60,113,156, 39,161, 50, 77, 64,172,236,140, 81,140, - 24, 87,215,104,206,228,182,163,116,115,155, 86,169, 35,124, 83, 50, 59, 90, 93, 13,153, 8, 37, 23,218,156,144,197,140, 74,198, - 52,205,216,214, 17,210, 43,215,109,141, 58, 68,145,170, 12, 98,189,129,209,224, 19, 48, 45,106,130,212,176,220, 17, 7, 49, 55, - 78,201,166,235,137,209,255,174,150,225,239, 20, 45, 52,120,170,157,247,187, 37, 91,145, 19,156,126, 22,252,153,214,254,107,241, - 75,183,191, 4,203, 80,248, 26, 2,119,200, 84, 17,251, 59,157, 22, 74,178,113,181,222, 57, 98,247, 88,212, 97, 53,224,171, 89, -237, 87, 40,234,119,146,219,225,138, 64,151, 11, 33,117, 52,121,252,231,129, 50,126,162, 61,150, 21,206, 91, 24,174,127, 25, 46, -255,129,232,231,106,117,209, 1,200,177,154,139, 53, 12,213,238,188,140,131, 79, 10,250,187, 83, 79,216,207,181,223, 24, 15,161, -113,194, 10, 6, 91, 87, 9, 31,246,235,191, 1, 3, 19, 63,235,194,153, 66, 72, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, +int datatoc_splash_png_size = 229594; +char datatoc_splash_png[] = { +137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, + 0, 0, 0, 8, 90,206, 70, 0, 0, 10, 79,105, 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111, +102,105,108,101, 0, 0,120,218,157, 83,103, 84, 83,233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66, +139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,161,217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, + 44, 12,138, 10,216, 7,228, 33,162,142,131,163,136,138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243, +157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,128, 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, + 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, 60, 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28, +135,255, 15,234, 66,153, 92, 1,128,132, 1,192,116,145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, + 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, 80, 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, + 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, 0,172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, + 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,178, 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0, +132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,231, 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, + 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,154, 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17, +224,131,243,253,120,206, 14,174,206,206, 54,142,182, 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0, +225,116,126,209,254, 44, 47,179, 26,128, 59, 6,128,109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0, +160,233,218, 87,243,112,248,126, 60, 60, 69,161,144,185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95, +192, 87,253,108,249,126, 60,252,247,245,224,190,226, 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, + 98,220,230,143, 71,252,183, 11,255,252, 29,211, 34,196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34, +137, 66,146, 41,197, 37,210,255,100,226,223, 44,251, 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, + 16, 88,116,192,226,247, 0, 0,242,187,111,193,212, 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, + 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, 63,199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, + 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, 66, 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, + 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, 46,194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, + 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, 8, 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, + 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,114, 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129, +178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, 70,162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161, +231,208,171,104, 15,218,143, 62, 67,199, 48,192,232, 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34, +172, 12,171,198, 26,176, 86,172, 3,187,137,245, 99,207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, + 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, 9, 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, + 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, 16,123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, + 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, 72, 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228, +195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, 64,113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, + 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,143, 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, + 75,165,173,162,149,211, 26,104, 23,104,247,105,175,232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3, +244,119, 12, 13,134, 21,131,199,136,103, 40, 25,155, 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, + 49,235,152,231,153, 15,153,111, 85, 88, 42,182, 42,124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222, +170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,174, 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103, +169, 59,168,135,170,103,168,111, 84, 63,164,126, 89,253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, + 99, 25,179,120, 44, 33,107, 13,171,134,117,129, 53,196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, + 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,227,152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, + 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,151,150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, + 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,143,206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170, +107,165, 27,161,187, 68,119,191,110,167,238,152,158,190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109, +250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, 12,206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67, +165, 97,149, 97,151,225,132,145,185,209, 60,163,213, 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, + 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, 41,166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50, +231,155,231,155,215,155,223,183, 96, 90,120, 90, 44,182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89, +165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,187,173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182, +169,183, 25,176,229,216, 6,219,174,182,109,182,125, 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, + 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,114, 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, + 16,207,216, 51,227,182, 19,203, 41,196,105,157, 83,155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, + 46,155, 27,198,221,200,189,228, 74,116,245,113, 93,225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135, +220,159,204, 52,159, 41,158, 89, 51,115,208,195,200, 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103, +181,231, 35, 47, 99, 47,145, 87,173,215,176,183,165,119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, + 89, 95,204, 55,192,183,200,183,203, 79,195,111,158, 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3, +137,129, 65,129, 91, 2,251,248,122,124, 33,191,142, 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130, +229,193,173, 33,104,200,236,144,173, 33,247,231,152,206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, + 39,133,135,133, 87,134, 63,142,112,136, 88, 26,209, 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, + 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, 55,186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, + 42,174, 54,110,108,190,223,252,237,243,135,226,157,226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, + 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, 65, 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47, +209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, 42, 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144, +188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,109, 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103, +230,102,118,203,172,101,133,178,254,197,110,139,183, 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, + 40,215, 42, 7,178,103,101, 87,102,191,205,137,202, 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18, +194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,230,189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60, +184,138,182, 42,109,213, 79,171,237, 87,151,174,126,189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229, +133,125,235,220,215,237, 93, 79, 88, 47, 89,223,181, 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220, +120,229, 27,135,111,202,191,153,220,148,180,169,171,196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, + 14,110, 13,217,218,180, 13,223, 86,180,237,245,246, 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167, +201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, 54,238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91, +188,247,253, 62,201,190,219, 85, 1, 85, 77,213,102,213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78, +109,113,237,199, 3,210, 3,253, 7, 35, 14,182,215,185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157, +239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,112, 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, + 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,155, 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, + 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,233,130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182, +123,231, 99,206,223,106, 15,111,239,186, 16,116,225,210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87, +184, 87,154,175, 58, 95,109,234,116,234, 60,254,147,211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247, +233, 27,158, 55,206,221,244,189,121,241, 22,255,214,213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39, +253,206,203,187,217,119, 39,238,173,188, 79,188, 95,244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192, +119,160,243,209,220, 71,247, 6,133,131,207,254,145,245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, + 63,114,253,233,252,167, 67,207,100,207, 38,158, 23,254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151, +242,151,147,191,109,124,165,253,234,192,235, 25,175,219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, + 29,239,163,223, 15, 79,228,124, 32,127, 40,255,104,249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, + 45,219, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, 7, +220, 4, 26, 17, 37, 54, 89,161,235,246, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,189,123,184,110, 87, 93,223,251,249,253,198, + 24,115,206,119,173,189,119,216, 33, 23, 18,238,225,242, 88,180,162, 36, 94, 16,139, 96, 55,167,199,123,233, 49,248,148,199, 43, +167, 36, 94,122,144, 99,213,192,169, 85,218,199,138,212, 99,165, 96,149, 68,212, 90,107, 61,199,160, 85,171, 88, 32, 41, 94,224, + 40, 98,138, 90,193, 90, 32, 4, 80, 2, 9,201,190,173,245, 94,230, 24,227,247, 59,127,140,119,101,175, 44,118,246, 45, 59, 9, + 9,243,243, 60,235, 89,239,251,174,249,142, 57,199,156,115,141,239,239, 54,199,128,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, 51, 71, 30,138,157,250,175,191,228,133,100,127, 25, + 74,135,250, 27,248,251,255,238, 63,136,224,211,229,152,152,152,152,152,152,120, 24,137,186,255,198, 55, 63,159, 99,219,255,149, + 35,219,206,254, 11,224,162, 11,133, 50,254, 71,198, 99,215,202,139,110,220,154, 46,201,196,196,196,196,196,196,185,161, 15,250, + 30, 63,118,235, 38,183,223, 6,119,254,205,130, 15,255,213,156,219,110,157,227,225,197, 12, 7,255,220,127,251,165, 79,159, 46, +201,196,196,196,196,196,196,195, 69,212,191,253, 29,191,205, 76, 95,201,190,110, 3, 33,114,231,199,140, 91,255,114,206, 50, 63, + 9, 75,127,233,191,253,210,255,109,186, 44, 19, 19, 19, 19, 19, 19,103,143, 60, 84, 59,246,215,127,241, 87,176, 44,111, 98,229, + 61,181, 44,232, 6,229, 9, 79,141, 92,248,232,142,186,122, 45,218,189, 66,190,242,245,171,233, 18, 77, 76, 76, 76, 76, 76,124, +154,139, 58,128, 95,127,229, 83,216, 14,111,102, 89,159, 78,174,115, 66,128,203,159,172, 60,230,242, 1,203,127, 70,240,191, 47, + 95,241,134,219, 30, 46, 39,211,221,175, 4, 14,174,223,222, 42, 34,183, 62,146,111,158,207,180,254, 78, 76, 76, 76, 76,162,126, + 58, 97,248,177,207,221, 36,165,255,192,220,191,150,236, 75, 48,184,244,241,194,101, 79,152, 17,100, 36,149,175,150,191,119,253, +219,206,179, 24, 93, 1, 92,113,134,155, 31, 22,145, 91,206,176,221,183, 1,135,214,111, 95, 33, 34,175,121,132,139,250,103, 84, +127,207,211, 57, 19, 17,153,158,244,152,152,152,120, 64,136,247,123,144,122,251,243, 34, 31,237,250,147,254,241,248, 40,236,239, + 28, 46,133, 75,129,163,203, 19, 70, 68,191, 95, 72, 43,129, 11,193,239,122, 57, 31,249, 72,207,150,253, 47, 24, 35,135, 63, 9, + 27,251,150, 60,234,226, 68,237,222,234,255,229, 31,255, 32,253, 95,188, 90,158,255,187,229, 60,245,251,106,224, 71,207, 98, 32, + 6,184, 17,184, 73, 68,110,152,110,155, 71,132,184,170,136,216,158,168,195, 55, 0,207, 94, 27,124, 7,129,158, 19,117, 39, 6, + 44,128, 15, 2, 63, 37, 34,215,159,147, 21,125, 26, 65,119,247,207, 91,223,159,135,128,199, 2,151, 0, 35,240, 49,224,189,192, + 59,128,223, 18,145,191,186,143,239, 95, 14,124, 33,240, 5,192,149,192,229,192, 69,192,163,129, 79, 2,183, 2, 31, 2,222, 2, +252,242,238,115, 48, 49, 49,241, 25,236,169,251,171, 94,165, 28,184,249, 26,170,252, 83, 68, 46, 34, 4, 67, 4, 84,219,143, 8, +132, 32,168, 66, 88,191, 87, 5, 93,127, 38, 2,178,179,173, 86, 66, 88,225,178,137,236,218, 54, 4, 48,148,161, 75, 72,253, 61, +102, 92, 45,207,125,253,157,231, 97, 64,191,238,108, 68,125, 15, 55, 1, 47, 18,145,195,147,167,254,200,233,175,175, 45,183,179, +224, 40,240, 66, 17,121,251,121,218,255,229,192, 79, 0, 47, 58, 67,227, 64,206, 67, 63,222, 7,188, 82, 68,126,115, 26, 10, 39, + 38, 30, 25,156,123,245,251,163,110,254,110,208,159,166,112, 9, 38, 66, 37, 80, 37,180,223,235,215,133, 64,241, 64,246,246,122, +244,192,104, 74,118,101,164,125,222,126, 58,114,221,135, 59,109, 10, 26,105,191,221, 65,197,200,117, 69,213, 47, 99, 46,255,195, +111,254,174,103, 61, 0,231,225,166, 83,252,236,229, 16,240, 54,119, 63, 56,221, 62,159,209, 92, 0,220,236,238,223,112, 30, 4, +253,179,129,247,156,169,160,159, 71,158, 1,252,186,187,127,221,116, 57, 39, 38, 30, 25,156, 83,248,221, 95,133, 98,254, 29,204, +179, 83,115,166, 26,136, 72,243,251,165,249,255, 66,243,184, 17,230,185,110, 16, 20,125,244, 37, 16, 35, 84, 71,154,135, 14,106, +237,119, 85, 80, 95,191,151, 29, 15,158,126, 72, 43, 4,168,140, 84, 14, 66,186,197,111,126,217,119,240,229,255,230,250,243,149, +155, 20,145, 23,156,102,208,221, 9,215,239,228,225,175, 4,174, 1,166, 28,242, 35,147,191, 1,126,151, 22,162,126, 55,240, 17, + 90, 2,233, 31, 0,255, 24,120,210,206,173, 3,252,146,187,191, 93, 68,238, 56, 71, 65,127, 10,240,118,224,226,245, 71, 35,240, + 70,224,215,104,225,246, 79, 2, 3, 45, 20,255, 12,224, 57,192, 87,159,162,201,143, 1,239, 90,255,220, 2,220, 14,220, 1, 28, + 3, 30, 71, 11,205,191, 10,120,250,174, 62,252,123,119,255, 2, 17,249,159,211,165,159,152,120,120,115,238,225,247,215, 61,231, + 90,142, 47,223, 64,169,107,241,222,213,154,200,137,215,165,218,124, 68,101,255, 65,100,255,254, 19, 97,247, 16, 16, 13,160, 2, +178, 78,149,171,180,144,187,106,107, 76, 35,125, 63, 91,177,179, 29, 65, 16, 81,134, 24,193,222,196,252,130,111,145,175,125,213, +252, 28, 6,210,123,133,223,239, 43,148,185,231, 59, 87, 0,127,194,137,106,239, 91, 68,228,170, 61,219, 76,225,247,135,207,177, +119, 34, 50,238,122,191, 5,252, 50,112,157,136,220,125,154,239,254, 24,240,189,187, 62,122,179,136,124,213, 57, 28,131,172,141, +135,231,174, 63,250, 0,240,149, 34,242,254, 7,184,239,195,250, 94,254,236, 93, 31,255,107, 17,249, 39,211,144, 56, 49,241, 25, +232,169, 3,200,203,222,121,189,255,235,103,221, 76,208,167, 98, 42,136,237, 42,184,209,245,235,186,162,219,124,246,106, 57,252, +232, 70,154, 97,102, 77,180, 5, 48,195,199, 45, 36, 8,250,248,103,162, 23, 63, 21, 57,240, 24,100, 56, 0,101,133,109,223,137, + 31,191,157,213,157,255,179,103,181, 5, 97, 6, 82, 65, 3,178,101,116,155,253,215,179,239,216,147,253, 45,223,251,101,242,247, +254,239,237, 7,220,250, 17,185,213,221,111, 92,123,232, 59,222,250,249, 24, 96, 15,238,105,235,150,147,229,235,207,161,221,221, + 21,254,231,244,184,217,249,104,227,193,232,239,158,227, 60,163,246,118, 11,250,250,253,190,179,184, 23,190,207,221,159, 67, 43, +170, 99,151, 40,159, 45,223,186,235,187,119, 3,207, 23,145,191,126, 16,238,229,165,187,127, 63,240,219,187, 62,190,106, 26, 14, + 39, 38, 62,131, 69, 29, 64,190,231,191,125, 96,237, 93,156,124,176,253,133,175,253, 92,150,229, 27,247, 5,167,152, 55,111,123, +185,196, 87,219, 80,183, 9, 79,255, 59,196,171, 94, 76,120,242, 23,127,202,119,119,146,253,126,247,109,148, 15,222, 76,253,240, + 59,145,208,129, 59, 46, 48,206, 71,186,141,238, 74,130,191,217,255,228,154, 67,114,213, 13,249, 65, 56, 95,231,229, 57,236,181, +176, 93, 67,171,114,190,242, 36,127,191, 21,184, 1,184,225,190, 4,202,221,127,116,215,119,111, 20,145, 27,118,181,123, 13,123, + 30,217, 91,183,249,154, 51,169,222,119,247,107,128,235,238,163,141, 83, 30,215, 3,209,223, 83,244,245,186,117,187,187,235, 27, +110, 2, 94,240, 32,220, 11, 63, 4,188,117,253,122,243, 28,219,120,217,174,215,215, 61, 24,130,190,139,255,182,231,253,231, 77, +195,225,196,196,103,184,168,159,114, 32,255,185, 23, 92,203,214,242, 13, 20,169,165, 58,158, 87,248,114, 14,101, 5,209,233,191, +242,149,196,171,254,225,233, 13,135, 11,159, 68,186,240,127, 71, 31,243,185,148,119,191, 17,180, 54,201, 23,129,209, 70, 54,210, +115, 57,188,241, 67,192, 15, 60, 8,231,107,183,120,156,147,119,233,238,135,128, 95,217,211,214, 94,174,160,165, 7,174,113,247, + 23,221,199,115,242, 87,114, 34,244,125,211,250,145,172,235, 79, 17, 65,184, 2,184,222,221,175, 20,145,107, 79, 33,190,215,175, +197,247, 84,199,117,181,187,191,224, 65,236,239,201,250,250,182,211,180,249, 64,243,174,221,183,233, 57,220, 7, 87,237, 18,210, +187,128, 95,124,144,143,127,175, 17,252,201,105, 56,156,152,152, 68,253, 83, 7,171,235,191,122, 3, 91,188,158,109,127, 9, 85, + 86,120,174,190,181,181, 65,201, 32,142, 36,232, 95,248,106,194,231,156, 72, 65, 30, 91,172,120,203,159,222,198, 91,254,236, 54, +238,222, 90,144,130,240,183, 46,191,144,175,189,234,169, 60,235, 41,151, 1, 16, 30,255, 5, 72,183,159,252,142, 31,135, 46, 2, +222,220,249, 69, 46,164,248, 79,253,237,255,231,191,147,231,255,196, 7, 30, 48, 35,165, 9,222,213,123, 60,194,179,109,227,234, +181,192,237,230,150,117, 91, 59, 70,194,110,111,246, 10, 90,165,253, 11, 78, 51, 1,206,193,117,187, 59,158,245,141,235,118,119, + 4,113,247,113, 95,227,238,183,222, 71,254,251, 71, 79, 34,232,187,219,218, 57,182, 43, 79,210,143, 7,171,191, 7,247, 8,250, +225, 93,199,119,197,131,248,191,243,249,187, 94,215,115,248,254,151,239,122,253,159, 68,228,193,158, 18,249,153,123,222,255,233, + 52, 28, 78, 76, 76,162,126,239, 65,252, 13,207,125, 26,171,173, 55, 83,244,169, 56, 11,234,220,201, 43, 48,131, 24,144,178, 77, +122,206, 63,186,151,160,255,209,251,111,231,251,126,233, 15,184,245,147,199, 25,250, 68,138,138, 58,252,217, 71,239,230, 77,127, +248, 63,248,154,171,158,194, 63,187,250,239,176,209, 39,244,210,207, 34,126,206,139, 40,239,249,121,216,127,233, 78,133,189,225, + 2, 37,252, 27,224,171, 30,136,147,180,203,131,221, 45, 26, 55,156,101, 27, 87,172,219,216,225, 86,224, 90, 17,217,107, 28,188, +102,143,119,187,179,239, 83,229, 60,175,219, 37,192,215,238, 13, 97,175,247,253, 43,187,196,243, 58,119,191, 87,168,123, 29,114, +191,102,143,248,190,104, 79, 30,125,247,177, 29,122,136,250,123,221,174,246, 94, 33, 34, 55,158,228, 90, 61, 24,236, 46,148, 59, +151,185, 19,190,112,215,235, 63, 88, 31,251, 69,180, 60,251,215,175,239,181, 3,180, 92,251, 7,105, 5,117, 63,127,158,234, 26, + 34,247,158,167,193,128, 31,158,134,195,137,137, 73,212, 79, 12, 20,255,246, 75,255, 87, 22,254,235, 20, 34, 90,231,148, 17,106, + 89, 87,180, 11,120, 69, 46,122, 60,241, 11,191,249,158,239,188,255,227,135,249,230,127,251, 22,238, 88, 20, 54, 54,103,228, 16, + 72, 41,208, 5, 33,120,135,212,194,175,190,235, 3, 4, 85,126,248,197,207,107, 30,251, 83,159, 79,253,171,255, 2,117, 11,210, +190, 38,236,181, 22,130, 28,242,223,127,249,101,242,220,215,222,126, 14,131,220,117,167,248,243,161,147, 8,216,201,196,233,116, + 92,191,199,187,188,234,190,242,210, 34,114,211, 58,188,189,227,145, 94,233,238,215,156, 38, 31,126,147,136,188,232, 62,218,187, +213,221, 95,177,110,111,199,219, 61,180, 54, 2,246,138,229,142, 96,190,224,100,199,183,235,216,254,228, 33,236,239,173,247,213, +222,249, 40, 50, 60,131,251,229, 82,224, 43,118,125,244,230,115,104,230, 25,187, 94,255,249,250, 89,241, 55,210,102,127,219,205, +101,235,159, 47, 5, 94,233,238,111, 0,254,201,217,122,246,238,174,180, 71,218, 62,159,246, 72,219,231,237, 18,244,239, 21,145, +247, 76,195,225,196,196, 36,234,248,245, 87, 38,150,179, 31,102,229,223, 79,145, 21,161,172,168, 45,212, 78,218, 41,119, 19, 60, +143,196,167, 63, 23,217,119, 98,204,122,197, 47,189,147,247,255,245, 81,184, 96, 31, 71,183, 10, 72, 37, 8,108, 4,225,162,205, +200,193, 89,228,130, 11,246,241,235,127,252,126,158,247,217, 79,228,208, 51,159, 12, 33, 18,174,120, 46,229, 79,127, 1, 54, 15, +128, 91,155,160, 38,133,142,108, 95, 7,188,225, 28,186,113,166,179,203,221, 64, 43,212, 58, 43, 65, 95,231,128,119, 27, 6,175, + 56,157,248,136,200, 45,238,126,195, 46,177, 61,116,154,232,192,181,167,105,239, 38,119,191,133,123,135,186,119,142,239,234, 61, + 81,136,215,156,234,248,118, 29,219, 53, 15, 81,127, 95,243, 96,136,247, 41,120, 39, 16,214,175, 51,240,221,231,208,198,133,123, +188,246, 55,112,250,220,124, 0,190, 11,248, 60,119, 63, 36, 34,203, 51,184,247, 78, 53,151,195,123,214,215,230,173,211, 80, 56, + 49,241,200,224,126,173,167,238,175,251,162,199,113, 60,189,147,101,253,126,178,207,145, 90,169,185, 13, 61, 81, 32,136, 16, 69, + 36, 40, 18, 5,189,252,115,238,249,238,135, 62,113,132,223,249,211,143,192,198,236,196,179,233, 33, 80, 81,142,175, 42, 31,186, +115,206,173,119,204,201, 46, 88, 8,220,252,223, 63,124, 66, 0, 46,122, 42,190, 56, 6,148,117, 8,222,161, 24,216,189, 66,154, + 15, 4, 87,175,189,200,179, 13,241,238, 22,184,195,103, 49,127,252, 77,123,246,125, 95,220,114,134, 97,217, 91,238,227,152, 14, +237, 17,216, 51, 57,190, 27, 31,162,254,222,250, 80,206,191,239,238,191, 14, 60,101,215, 71,175, 20,145,173,115,104,234, 81,187, + 94,191,118,151,160,223, 12,124, 29,109,178,155,110,253,251,235,128,255,186,107,251,231, 0, 63,121, 63,187,242,139,192, 63,156, + 4,125, 98, 98,242,212,219,224,246,250, 47,126, 14,243,122, 51, 89, 19, 81,230, 4,107, 94,179, 35, 20, 17,162, 56, 65,214,179, +195, 85, 36,118,232,193, 39,220,243,253,219,238, 60,198, 98,158,225, 64,207, 61, 83,208,237,248, 20,170,224,206,145,173, 76, 30, + 11,143,187, 32,114,124,121,162, 88, 87,246, 95,218,156,150,213, 54,204,246, 11,224,228, 2,145,103,186,191, 74, 69, 94,117,182, +139, 84,188,226, 20,127,187, 98, 45, 82, 59,139,124,220, 83,253,125, 22,222,226,161,251, 16, 86,206,192,187,190,151, 7,124, 31, + 5,100,103, 26, 57,184,245, 20,125, 60,171,182,246, 30,219,131,216,223, 91, 30,170,127, 22,119,255,169,181,192,238,240,123, 34, +242,227,231,193,160,158,173,127,255, 11, 17,249,161, 61,219,221, 1,252, 38,240,155,238,254, 47,128,127,182,254,252,219,220,253, +181, 34,242, 23,231,184,255,111, 2,190,105, 29,189,249, 54, 17,249,239,211,112, 56, 49,241, 25, 40,234,254, 43, 87, 7, 62,252, +161,239,225,120,249, 87, 84, 25,233, 89,162, 38, 84,119,178, 9, 65, 58, 18,135,169,190, 73, 12,205,107,183,181, 27,226, 39, 22, + 89,187,228,130, 13, 66,151,168, 6,184,112, 98,222,247,245,111, 23, 8,202,246, 60,243,225,229,146,254,153,187, 14,213, 43,120, +134,178, 4, 61, 0, 94, 5,170, 83,253,114,126,231,174, 4,156, 85,190,241, 76,102, 66, 91,231,221,175, 91, 11,251,206, 35, 85, +103, 58, 97,199,238,199,204,174, 88,207,196,118, 46,220, 87,132,224,254,134,162,207, 73,132,215,219, 94,249, 32,247,247, 33, 17, +117,119,127, 45,240, 29,187, 62,122,159,136, 60,239,126, 52,121,156,123,135,224,223,118, 18, 65,223,123,159,254,160,187, 63,123, +125,189,148, 86, 84,247,189,167,249,142,172,143, 63, 2,143, 95, 27,112,255,136, 54,207,188,174,175,213,187,221,253, 37, 34,242, + 31,167, 33,113, 98,226, 51, 72,212,253,250, 43, 47,224,182, 15,190,137, 81, 14, 33,178, 96, 22, 64, 17,178, 57,171, 26,233,180, +163,151,151,130, 95, 65,229, 21, 56, 75,180,133,223,201, 25,251,228, 7,208,199,127, 1, 0,127,235,177,143,230,139,158,118, 9, +255,223, 95,222,217,230,131,119,105,115,191,123, 51, 2, 0,176,230,233, 47,239,222,230,105,143, 57, 49,190,251,177,143,193,234, + 24,140,115, 95, 91, 4, 96, 56, 10,204,142, 63, 32,107,196,139,200,107,214, 94,228, 78,254,253, 76,138,215, 78, 38, 78,103,179, +150,251, 67,193,225,243,176,237,195,169,191,103, 34,232,175,167,205,249,190,195,135,248,212, 71,194,238,175,168,191,238, 12,191, +247,186, 93, 70,216,243,207,226,254, 45,235,227,254, 16,109, 33,154,235,105,147,231, 36,218, 18,179, 55,184,251, 31,138,200,135, +166, 97,113, 98,226, 51, 64,212,253,199,191,240,153,220, 85,255, 51, 69, 30, 79, 10,115, 6,109,226, 57,154, 51,214,129, 65,150, +204,228,107,229,255,248,227,183,248,143, 95,245,195,152, 8,130,180,202,119,129,168,248, 39, 78, 68, 10, 85,133, 31,120,225, 85, +124,229,251,126, 11,150, 25,250,174,109,199, 90,212,141, 22,206,223,154,243,249,207,120, 44,223,244,101, 39,166,169,182, 59,254, + 18,247, 12,117,108, 27,186, 3,166, 32,183,243,188, 39,141, 15,212,201, 90, 11,251,238,162,186,171, 57,203, 71,219,104, 33,240, +115,125, 44,233,240,195,240, 30,123, 88,247,215,221,127, 26,248,246, 93, 31,253, 13,240, 89,107,145,188, 63,252, 53,240,196, 93, +239,255,232, 12,191,183,123,187, 39,220,143,123,249,119,221,253,135,128, 31, 89,127,180, 73,155, 37,239, 91,167, 97,113, 98,226, + 17, 44,234, 14,194,143,125,254, 75, 88,214,159,193,164, 48, 11,115,122, 21,220,157, 69,117,204, 55,217, 23,254,138,153,124,141, +124,251,187,214, 11, 81,200, 7, 16, 7,199, 81, 17, 84, 96,216,160,222,246, 14,226,225,219,144,131, 79, 2,224, 43, 62,255, 73, +220,240, 29,207,231,229, 63,251, 7,204,143,172, 96,232,219,218,235,238, 48,102,152, 47,120,214,103, 93,202,155,190,239,171,216, + 28, 82,107, 58, 47,168,239,251, 85,164,235,219, 92,240,110, 96,214,188,244,232,239, 57,135,124,250,217,114,211, 46, 79,233,208, + 57,124,255,134, 71,250, 66, 47,143,148,254,186,251,207, 1,223,182,235,163, 79, 0, 79,223, 59,111,252, 57,242, 23,180,130,183, + 29,142,156,225,247,118,111,119,193,253, 60,134,223,222, 37,234,112,158,214, 51,152,152,152,120,232, 56,125,245,251,143, 95,117, + 13, 89,223, 8,186,100,127,202,204,130,224, 56,219, 21, 84, 54,217, 8,191,198,197,242,133, 39, 4, 29, 24,120, 47,218,210,220, + 64, 19,234, 24,161,108,145,223,241, 19,247,106,254,165,127,247,179,249,195, 87,127, 61, 47,255,234,191,205,147, 47,236, 25, 60, +179, 79, 43, 95,242,180,139,248,201,239,252,114,126,255, 95, 94,205,147, 47, 61, 49,118,149,119,191, 17, 63,114, 27,164, 30,164, + 89, 14,148,245,243,240,226,183,124,154,158,231,251,170, 58,127,184, 31,223,161,135,105,127,207, 68,208,127,121,143,160,223,185, + 22,244,249,121,218,197,222, 25,220, 30,117,134,223,123,212, 57, 24, 2,247,197,222, 80,251, 19,167, 33,113, 98,226, 17,236,169, +251,245, 87,110,112, 71,253, 17, 76, 70, 14, 4, 72, 34,100,119,230, 57,208,105, 79,210,127,197,144,127, 64,190,241,150,123,207, + 35, 29,237,189,136,126,148,106,143,193,189, 14, 93, 88, 34, 64,191,143,229, 71,126,127, 40,239,124, 45,241, 57, 47,191,103,243, +207,125,226, 69,252,196, 75,158,203,171,191,169,240,241,187,183,233, 82,228,242, 11, 63,117,141,140,250,190,223,160,252,249, 47, +194,176,177, 54, 73, 66, 43,208,171, 38,120,206,168,255,214,131,112,206,206, 37, 63,188,187,160,236,144,187, 31,124,136,159,179, +222,203,173,187,142,239,140,188,181,245,179,232, 15,215,254,158,174,111,191, 6,188,112,215, 71,119,173, 5,253,216,121,220,205, +127, 6,126,138, 19,143,178, 61,123,253,217,233,120,246,174,215, 31,190,159,199,240,185,123,222,191,111, 26, 18, 39, 38, 30,201, +158,250,130,139,112, 14,130, 20,204,157,121,117,230,165,163, 19, 97, 63, 47,146,239,254,163,235,228,218, 91, 62,101,117, 52,185, +246,150, 57,189,188, 30,241,196,178,250, 58,136, 47,168,138,108,236,167,254,249,191, 39,223,244, 3,248,252,222,107, 72, 12, 41, +242,164, 75, 47,248, 84, 65,207, 11,234,187,126,138,242, 7,255, 18,233, 59, 36,132,182,132,123,234, 33,103, 48, 75, 80,223, 44, + 47,184,225, 35, 15,240, 96,191,183,232,235, 76, 35, 3,123, 31, 19,187,230,211,236, 62,216,125,124, 7,215,211,182,158,171,151, +254,112,232,239,169,174,241,111,157, 68,208,159, 42, 34, 71,206,231,126, 68,228,111,128,119,236,250,232,101,103,248,213,221,219, +221,124, 63, 15, 99,239, 92, 0,239,158,134,196,137,137, 71,178,168, 95,190,248, 56,179,112, 27, 73, 54,216,206, 27,152,109,176, + 33,199,217, 31,158, 43,215,254,241,141,167,142, 1,116,111, 36,112,148, 85,137,100,107,207,171, 7,218,148,177,155,251,177, 15, +254, 14,227,175,126, 51,245,189,191,138, 31,251,155,147, 15,176,219,119, 98, 31,188,137,241, 63,189,132,242,158,159,129, 97,128, + 16,219,100, 51, 34, 32, 73, 88,100, 33, 56, 56,175,124,128, 7,251,157, 69, 83,118,115,227, 25, 14,224, 55,114,239, 98,177,235, + 78,227,233, 62,216,220,200,189,139,210,174, 59,131,115,113,221,195,184,191,247,213,175,183,114,239,245, 3,118, 60,244, 35, 15, +208, 46,119,207,183,126,200,221,255,249,105,142,239,159, 3,127,119,253,182, 2, 63,123, 63,250,250, 82, 62,117, 38,188,223,155, +134,196,137,137,135, 55,167, 12,191,203,139,222, 55,250,245, 95,250, 60,150,249,123, 48,125, 44,157,190,155, 89,250,121,121,201, + 31,156,118, 1, 11,249,206,119, 28,246,159,122,246, 75, 89,217,175,176, 85, 10, 81, 33, 4,105, 46, 54,176,113, 0,202, 81,242, + 59,126, 4,233,246, 33,143,254, 44,244,194,167, 64, 28,192, 50,118,228, 35,248,157,239,133,229, 17, 72, 9, 54,119,213, 4,237, + 20,187,143,234,244,116,120,121,181,124,205, 47,252,229, 3,232,157, 31,226, 83,215, 23, 63,204,217, 85,190, 95,203,189,231, 94, +127,219,122,153,209,155,206, 96,255, 87,175,197,242, 1, 41, 56, 19,145,195,238,254, 26, 78, 60,174,119,200,221,175, 63,217, 18, +173,107, 65, 63,147,101, 79, 63,109,251,123, 31,251,125, 59,240,188,147, 8,250,221,247,163, 77,223,117,142,229, 36,231,253,173, +238,254, 27,156,152,208,230, 7,221,253, 75,104,143,173,253, 33, 45,103,254, 40, 90,200,253,101,123,162, 35, 63, 41, 34,239,223, +179,191,219,104, 11,191,252, 30, 45,148,126,247,186, 31,199,105,115,202, 63,150,246, 40,222,119,113,239, 85,230, 0,126, 81, 68, +222, 52, 13,137, 19, 19,143, 96, 81, 7,144,107,223,241, 17,224,229,231,212,250,119,254,225,155,248,201, 47,122, 45,197, 95,206, +177,113,193,254, 78, 8,180,162, 54, 28, 82, 66, 82, 2, 55,252,174, 63,163,220,113, 11, 59,211,202,137, 70,136, 29,108,238,219, + 51, 82, 2, 99,197,109, 6, 26,122, 40,111,103,177,120,213,253, 28,208,253, 28,190,118,237,217,228,137,215,179,165, 93,203,137, +149,203,118,132,238, 38, 90,184,122,119, 40,127, 39,204,127,136, 19,185,233, 87, 60,192,247,194, 13,220,123, 25,212,107,214, 97, +248, 27,118, 29,219, 33, 90, 40,253,224,218, 19, 63,204,125,228,224, 31, 6,253,221,203,243,246,188,127, 52,112,215, 89,220, 26, + 79, 19,145,115, 89,250,247,155,214, 66,252,172, 93,231,248,116,233,143,183, 2,223,119,146,207,159, 8,124,203,250,231,108,120, + 23,240,210,105, 56,156,152,248, 12, 16,245,251,229, 1,130,123, 42,223,143,166, 75, 24,253,197, 28, 27,151, 62, 4,100, 8, 45, + 12,191,227,187,136, 66, 55,156,122, 53, 11, 7,204, 97, 85,177, 99, 35,179,203, 46,133, 80,111,161,196,127, 32, 47,186,113,124, + 16,207,217, 45,107, 65, 63,235, 74,123, 17,185, 97,215, 4, 54, 7,207, 98, 16,127,192, 89,123,235, 47, 90,123,215, 87,236, 18, +219,147, 45,118,115,152, 54, 35,217,143, 62, 92,251,251,233,130,136, 28, 95, 27, 79,175, 3,190,241, 52,155,231,245,118,175, 56, + 15,207,201, 3,124, 4,248, 9,224,103, 30,130,245,220, 39, 38, 38, 30,110,162,222, 60,253, 91,178,191,234,121,223,194,197,203, +191,166,240,253,233, 88,102, 92, 25,186, 17,219, 42,110, 1, 68,228,228,235, 83,173,157, 36,175,109,193, 22,159, 87,116, 62, 50, +187,232, 32,108, 12,191, 6,199,190, 85, 94,248,155,199, 31,132,243,116,211,218, 51,189,105,239,250,221,231, 40,236, 55,209,194, +249, 87,115,250, 48,246,141,235,253,223,248,128, 95,171,182, 68,235, 85,107, 17,190,230, 20,231,226,218,245,182, 15,235,254,126, + 26, 9,251, 97,218, 60,236, 63, 9,188,152, 54, 83,220,229,180,245,212, 15, 3, 31,160, 21,197,253,172,136,156,170,226,253,113, +192, 23,209, 86,125,123, 22,240,152,117,196,225,209,192, 98, 45,226, 31, 93,255,188, 19,248,127,206,147,113, 48, 49, 49,241,233, + 50,158, 60,152, 59,243,159,254,146, 47,255,240, 29,243,155,159,120,176,167,172,156, 18, 5,134,128, 68,109,158,187,238, 58, 28, +119,168,224,197, 96, 89, 9,217, 72, 73, 56, 86,225,192, 19, 47,123, 49,127,241,121,255,175,188,234, 1,159,104,230,129, 63, 39, +205, 75,219, 27,194,190,149,182,186,217, 77, 15,225,113,237,132,195,119,175,137,126,211, 25,174, 6,247,176,235,239,196,196,196, +196, 36,234,231, 50,168,191,238,139, 14, 48,200, 55,176,240,255, 11,243, 39,181,169, 97,221, 81, 53,148, 19, 34,109, 40,102, 74, +123, 24, 14,130,222, 73,228,181,204,134,159,147,111,251,221,143, 79,151,110, 98, 98, 98, 98, 98,226, 33, 22,245,123,196,253,205, + 95,209,243,209, 35, 79, 39,219,215,131, 60,135,234,151, 97,246, 40,156, 14, 36, 19,229, 40, 65, 62,129,249,159,210,201, 47, 83, +134,247,202,119,253,238,214,116,201, 38, 38, 38, 38, 38, 38, 62,205, 68,253, 83, 68,254,237,207,139,220, 70, 36,220, 29, 24, 54, +141,195, 99, 57,217,196, 54, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19,159,134,200, 51,174,124,182,111,198,128, 16, 48,173, 36,132, 98,224, 46,168, 10,130, 80, 53, 35, 34, 4, 7, 71, 49, + 51,196, 21, 19,192, 4, 13,142,168, 32,110,136, 7,140, 74, 64,113,218,228,242, 70,193, 92, 81, 93,175,157,238, 17, 23,199, 13, + 36,128, 6,144, 42,184, 64, 80, 48, 4,149,128,148,140,170,146,113, 36, 9, 81, 3, 54, 86, 28, 33,196, 64, 80,197,221,136, 34, + 72, 72,168, 84,106, 5, 84,136,193, 32, 37, 48, 8,102, 24,142,152, 83,129, 90,156,216, 13,196,206,160, 10,227, 98, 4,169, 72, +138,168, 42, 86, 42, 67, 18, 86,217,136, 8, 32,148, 24, 81,169,152,181,229, 96, 85,149,106, 70, 10, 74, 12, 29, 8,152, 26,162, +142,102,197,107,197,113, 92, 5, 17, 65, 76, 17,117, 60, 40, 29, 48, 86,195, 67, 59,167, 34, 14,169, 67, 16, 52,130, 84, 99,149, + 43, 33, 40, 73,132, 98, 21, 65, 41,222,182, 79,106,140,213, 8, 4,170, 27, 42,142,116, 9,149,132, 68, 69,168, 4, 17, 16,193, +179, 3,134,163,184, 26,193,149,226, 5,178, 97, 26, 41, 86, 32, 8, 82, 32,198, 13,106, 93,146, 98, 36,231,140,171,162, 81, 41, + 89, 25,130, 96,140,228,234, 68,237, 48, 55,132, 17,243, 72, 80,197,172, 29, 47, 65, 48, 23,130, 5, 68, 12, 79, 66, 39, 80,106, +129, 16, 81,119, 52, 38, 4, 3,119, 28,152,197, 30,196, 89, 25,164, 88,177,209,209, 16, 25, 98,192,131,226, 84, 98, 23,240, 10, +101,171, 16,250, 72, 13, 70, 48, 65, 61,226, 81, 9, 17,194,160,212,121,165,170, 48, 4,161,122,160,246, 78,153,103,186, 16, 48, +119, 82, 7, 33, 5,198, 45, 33,170,227, 22,136,189, 80, 23,133,106,198,232, 25,137, 3,170,129,153,116,100, 27,241,100, 12, 26, +153,111, 87,102, 73, 40,106,120, 31, 25,106,207,241,213, 28,239,149,224, 61,212,140,104, 66, 80, 22,121,129,231, 5,146, 4, 43, +145, 40,138,107,193,179, 48,204,122,132, 64,208,142,176,161,232,166, 33, 38,196, 18,136, 30, 81,150,228,156,232,146, 51,103,100, +195, 35,210,193,188, 20, 54, 82,164, 22,167,142,130,121,134, 90,177, 20, 97,125,175,205,100, 31,230, 35,227,184,100,144,136,118, +142, 75,162,100,167,134,202, 16,123,204, 32, 5,199,197, 41, 49, 49,235,103,248,124, 27,168, 20,153, 97,121,139, 94, 55,169,238, + 44,243,138,136,179, 18,240,234,172, 22, 35,243,178,196, 67, 96, 53,102, 58, 82,235,119, 20,196, 4,241,158, 28, 70,168, 21, 92, + 16,119,172, 75, 68,156, 52,204, 24,231,133, 24, 19, 42,134, 27,148,114, 28,151,192,254,212, 51,175,130,139, 17,220, 41, 53,211, +111,236,163,138,224, 57, 19, 24, 64,231, 96, 17,179, 64,149, 66,192, 48,173, 72,136,248, 98,196,112, 98, 12,120,113, 42, 70,215, +109, 50,142, 43, 76, 42,158,231,228,218, 35, 1, 66,239, 96, 25,169, 51, 54, 14,244,132,234,184,247, 8, 75, 8,138,121, 32,120, +164,248,138, 46,129,229,192, 42,103, 66,116,136, 3,238,149,152,122,196, 12, 74,197,235,138, 18, 7, 60, 67,218,220, 64,210, 2, +219, 90, 33, 26,112, 2,157, 20, 86,210, 49,136, 16, 83,135,108, 84,108,140, 48, 86,250, 65, 40, 18, 80,239,232,170, 18,162, 16, + 58, 69, 7, 97, 49,135,253,170,212,206,128,192,144, 2, 75,139,132, 40, 12,226,140,222, 35,131, 18,115, 32,106, 38,104,101,181, + 50,186, 11, 34, 62, 42, 65, 21,197, 81,141,232,160,104, 5, 73,129, 94, 20, 69,144, 46,226, 42, 28,216,119,128, 75,174,120, 26, +161,219,100, 83, 29,237, 20, 87,240,218, 86,196,222, 89, 33, 68, 12, 98, 0, 23, 40,208,198,239,245,235,163, 35,204,111,191,131, +188,125, 4, 74,225,242, 75,246,179,113,217,227,219,178,155, 14,189,182,149,181, 29, 16,111,223, 3, 48, 64, 79,236,226,158,247, + 59,220, 97,112,215,109, 71, 41,199,111,103, 51, 85,158,240,228,199,146,102,143,186,103, 57,207,184,254,237,235, 31,217,245,158, + 93,109,237,252,125,231,253, 22,112,251, 49, 88,222,254,113,124,251,110,158,116,105,199,129,199, 94,177,103,239,231,206, 28,248, +139, 59,224,174,247,221,138, 47, 63,132,213,145,229,241,145,213, 18,186,153,145, 92,217,178,145,186,170,132, 44, 44,181, 82, 61, +113,112, 83,176,101, 97,107, 25,160,135,217,190,202,246,177, 66, 62,186,192, 83,160, 32,228,156, 9,117, 69, 73, 16, 45, 81, 74, + 69, 60,226, 62,103, 94,141,168, 33, 96, 94,193, 42,110, 70, 9, 9, 95, 75,177,139,129, 41,110, 1,193, 17, 12,167, 96, 4,144, +138, 22,105, 23, 31,199,115,187, 90, 81, 29,171,142,168, 98,193,241,234, 36, 9, 68,192,220, 41,102,168, 20,100,125,183,136, 10, +216,218, 40, 16,193, 49,130, 56,138, 82, 36, 80,176, 54, 32,186,128, 56, 34, 1, 9,109, 95,213, 10, 65, 3,174,138,215,145, 16, + 19, 67, 82, 22, 94, 49, 4,169, 59,119, 73, 32,186, 81,196,137,162, 72,114,140, 21, 99,110,219,196, 62, 96,197,209, 10, 65, 29, + 51, 97,185,172, 16, 64,136, 84,119,118, 44, 16,181, 74, 49, 3, 23, 98, 8, 20, 51,198, 58, 71, 60,172, 13, 15,197,172,160,162, + 84,109,119, 93, 66,112, 19,170, 56, 4,161,152, 17, 98, 51,108, 2,160,234,212, 90, 40, 4,196,140,190,182,155, 83, 35,140,185, +130, 7,164, 90, 19, 73, 2, 99,109,255, 21,230,138,138,224,226,168, 9, 34, 32, 53, 83, 1, 98, 34,105,196, 40,132, 20, 41,165, + 80, 75,197,165, 73,124, 12, 74, 41,134,122, 64,196,201, 24, 90, 22,136, 56, 6,132,152,176, 82,192, 42,169,119,106, 81, 74, 81, + 16, 71,125, 5,162,152, 8,181, 26, 34,138,132,128, 85,163, 74, 37,104,162, 83,200, 56, 88, 96, 52, 7, 2, 18, 28,149,136, 89, +165, 75, 16, 70, 97, 25,140, 76, 70, 67, 64,139,161,213, 80, 87,162, 10, 5, 67,172, 82,170,227, 69,219,181, 28, 34, 85,160,221, + 81, 21, 87, 16, 81, 40, 5,173,142,204, 54,232, 74, 37, 84,195, 8,248,214,138,144, 34, 34,134,141,134, 75, 71, 17,167,214, 17, +173,138, 41,140,163,209, 97,104,175,200, 50, 16, 36, 17,186, 66,193, 81, 42, 37, 11,115, 28, 73,149,133, 25,213, 5, 86,134,204, + 64,106, 66,138, 97, 33, 99, 82,208,226, 64, 36,152, 99,105,131, 33, 4,150,227, 10,250, 8, 42, 4, 79, 84, 45,116,217,200, 86, +241, 85, 96,179, 15,228, 18, 17, 95, 33,170,104, 80, 82, 40,148,218, 17,107,192,197, 24,151, 77,192,243, 16,145, 33, 96,115,129, +133, 81,180, 32, 57, 17,168,136, 58, 43, 91,226,181, 66, 7,163,102, 82,223, 81, 74, 66,124, 65,159,148, 98,214, 78,227,198,126, +242,184, 98, 35,175, 8, 6,161,219, 96, 21,230,164, 34,140, 37, 81,125, 69, 82,129, 3,130, 45, 29, 89, 26,149, 66,148, 14, 17, +131,220,145, 68, 17, 81, 34,198,144,122, 86,181,176, 44,153,154,149,212,181,235,148, 60,224, 14, 86,115, 51,206, 6,197,234, 8, +197, 48, 53, 98, 8,184, 7,138,197,102, 36, 26, 12,155,145, 98,210, 6,225, 84,214,134,121, 97,158, 71, 72, 25,177,128,214,200, +104, 43, 92,155,193, 59,132, 72,149,230,104, 20,182,152,197, 77,130, 11, 53, 4,196,141, 28, 3, 27,169,195,163, 83,114, 38,165, +158, 66,161,203, 3, 26, 14, 82,226,138,213,202,241, 82,232, 21, 60,100, 74, 72,104, 46,108, 70, 67,124,160, 74, 70,180, 9,222, +184,189,160,239,155, 97,140,247,136, 87, 52,129,231, 45,130, 9,157,244,152, 3,106,104, 84, 54,131, 50, 35,176,240, 74, 25, 33, + 5,101,227,130,158,154, 35,145,128,233,156,106, 70,169, 1, 17, 97, 22,149,110,191, 50,206, 29, 49,163, 80,137, 54, 35, 81,200, + 25, 86, 14,110, 14, 22, 33, 8, 81,193,164, 3, 10, 86,122, 66, 16,196, 87,132, 46, 34, 26, 48, 7, 29,148,128, 19, 98, 27, 79, + 59,109,162,254,184, 75,102, 92,246,232,125, 59,126,222, 9,101, 10,167, 81,174, 93,250, 23,103, 48,118, 3, 62,143,204,122,229, +226, 11,247, 33,247,165,143,167, 88, 70,108,239, 46, 55, 20,182,162, 32,154,184, 96, 51,210,207,134,189,187,190,167, 73, 57,197, + 46,246,254,125,216, 49, 8, 4,102, 93, 96,223,129,254,188, 9,250, 78, 63, 20, 67, 37, 51,142, 5, 23,135,160,232,144,169, 42, +148,209, 89,137,226,139, 37, 49, 10, 51, 13,212, 8, 43, 27,145, 89, 33, 34,108,244,251, 24, 23, 78,204, 66, 60,216,115,220, 20, + 61,178, 77,206, 75,180,131, 80,132, 84, 42, 5,160, 23, 60, 12,232,209, 54,118, 18, 93, 24,189, 32, 33, 80,202, 72,144,216, 60, +219, 44,132,232, 77,144, 69, 41,213, 16, 5,241, 74, 8, 97, 61,160, 86,188,130,144, 48,140,234,165,157, 46,119,180, 86,204, 20, + 83,193,212, 80, 73,116,209,169,185, 98, 89,144,224,136,183,193, 90, 83,243,250,161,137,183,249, 72, 8,177,121, 98, 82, 17, 4, + 43,160, 98, 72, 74, 4, 4,138, 99, 46,136, 68,130, 26,213, 42,230, 70, 76, 1,119, 3,183,118,114, 67,196, 9,104, 6, 87, 24, +196,192, 2,243,177,137, 44,106,164,117,255, 86,185,121, 77, 30, 65, 76, 49, 45,184, 8, 62, 58, 53, 8,157,116,184, 84,170, 26, +234,144, 80, 50, 32, 24, 86, 64, 58, 80, 89,123,174, 34,184, 40, 54, 22, 92, 3,162, 80,115,165, 6, 39,136,182, 78,135, 74, 40, +134,155, 19, 28,138, 85,114, 16,162, 4,188, 52, 27, 83,215,215,198, 9,212,154, 81, 29, 80, 42,149, 74, 34, 98, 42,132,181,209, + 69,234, 8,185,144,164,226,237, 62,162,100, 67, 36,145,218,101,193, 77,154,160,136,163, 81,219,117,145,178, 54,186, 28, 86, 75, + 98,136, 24, 32, 10, 49, 8,102, 5,204,233, 82, 36,133,158,108,149,106, 43, 84, 65,107,187,190, 18, 59, 58, 28,241,102, 36, 84, + 7, 47, 11,148, 68,236,148, 50, 86,138, 56,196, 66,174,138,105,196,179,182,123, 77, 32,168,225, 69, 40,161, 35, 38, 69,139, 97, + 94,154,137, 89, 33, 12,134,187,175,163, 64, 21,130,226, 42, 12, 42,100,131,229, 24, 72,201,232, 85, 41,193, 72,230, 8, 29, 70, + 65, 81,130, 56,213, 5, 29, 3,170, 21, 83, 71,171,144,199,140,199, 64,113, 65,134,212, 12, 31, 7, 33,131, 68, 74,133, 96,129, + 24, 7,188,203,216,106, 65,172,206, 56, 86, 48, 69,187, 64, 93,140,224, 78,181, 37, 21, 37,136, 50,200,140, 72, 68,122,195,163, + 17,101, 64, 28,180, 24, 57, 25, 81, 19,148,204, 56, 55,116, 16, 92,218,144, 54, 90, 4,182,169,171, 76,236,135, 38,110, 26,216, +232, 19,171, 60, 82,139, 0,133,144, 18, 93, 13,140,221, 72, 94,122,139, 54, 85,103,136, 27, 88,223,162, 56,178, 12,224, 25,137, +198,134,110,144, 25,169, 37,179,181,117, 20,145,136,153, 19,107,198,234,146,161,239, 24,139,177, 57,236,167, 75, 74, 8,219,220, +181, 5, 38, 17,153, 45,177,197,138, 98,214,238, 7, 89, 65, 78, 72, 52,164, 19,108,116, 48,193,213, 17, 29, 17, 87, 98, 73, 16, +156, 20,140,133, 5,108,233,104,116,200,205,129, 16,171,200,144,136, 12, 20, 12, 47,112, 32, 14,132, 40, 88,141,200, 40,152, 71, +162,100, 74, 82, 54, 57,128, 5, 69,171, 49,218,136,196,129, 33, 21, 74,152, 45,132,206, 0, 0, 32, 0, 73, 68, 65, 84,134,130, +161,150,154,225, 29, 55, 9, 30,168,158,177,224,216, 88,233, 92, 25,125,132,170,136, 11,165, 38,102, 93, 36,234,140, 81, 87,100, +150,196,174, 25,202, 33, 42,121,229, 12, 62, 50, 22,225, 88, 40, 72, 74, 72,137,132,188,194, 7,197,123, 40,150,168,121,197,108, +232, 9, 36,196, 97, 75, 42,137,128,211, 81,226,138,228,138, 17, 25,231, 32,131,181,254,199, 68,172, 61,190, 90, 82,108, 36, 12, + 3, 27,125,100,126,108,100,216,175,120, 89,177, 56, 26,233,135,125,172,100,139,200,140,125, 34,216, 56,178, 10, 25,181, 30, 24, +208,148,200, 46,104, 41,120,152, 81, 99,193, 54,149, 20, 90,164,178,212,136,104, 7, 81,233, 53,227,174, 68, 87,212,123,138,173, +218,184, 33,176, 49,219,184,223, 34,230, 14, 17,167,170, 50, 75, 5,233,186,243,163,142, 6, 1, 33,196,200,108,166, 64, 58,111, +194, 27,189, 69,136,251,160,104, 63, 59,175, 33,240, 12,248,104, 32, 5, 73, 2, 57, 34,201,217,140,137,237, 60, 50, 95, 25,209, +132,112, 32,177,176,202,254,208, 67,133,237,121,102, 51, 69,102, 27,153,213,246,156,149, 37,234, 0,146, 87,244,195, 1,124,182, +193,102, 12,172,242,113,134, 24,169,161, 71, 10,216,226, 24, 58, 40, 78, 79,184,248,242,199,189, 42,184, 67, 8,132,144,214,230, +140,180,171,100, 77,116,171,181,176,178,155, 83, 76, 8,205, 97,195, 69,144, 16,136,170, 32,149,160, 1, 83, 5, 1, 85, 65,109, + 45,208,193, 16,148, 24, 90, 72, 54,168,131, 74,243, 40,125,237, 29,227, 84, 7, 9, 10,190, 35,122,218,140, 39,131, 24, 20,241, + 10, 26, 80, 73, 68,117,240,230,185,167, 96,136, 64,206, 21,213,212, 66,153,205, 72,166, 90, 94,135, 95, 42,238,118, 79, 56, 72, + 20, 52, 40, 81, 3,201,156, 42, 80,130,160,185,133, 49, 53,208, 68, 57,128,187, 99, 98,152,131,107,109,131,101, 16,148,128,136, + 18, 66, 66,131, 96,162,184,129,209,172, 99, 80,194,144,112, 3,151,128, 74,160,223, 49, 23, 37,180,200,131,183,192,208, 50,151, +181,161,232, 72,208,123,194, 69, 81, 4,119, 72,125,104,226,183, 78, 77,168, 8, 49, 6, 50,153, 32,144, 52, 96,234, 72,140,136, + 37, 60, 59,117,157,242,136, 24, 65,140,106,172,195,243,173,241, 22, 41,112, 28,195,131,222,243,223, 41, 30,240,224,235,176, 88, +135,215, 54, 24,137, 8,230, 80, 28, 60, 8, 93,144,102,144,105,139, 24,152, 22,204, 13, 93,219,219,170,237, 62,170,107, 67,135, + 42,196,168,212, 10, 42,130, 56,152,121, 75,219, 84,161,186, 99, 82,137, 33,160,181, 9,176, 72,215,250, 26,104,169, 2,169,168, + 42,177, 8, 67,215, 65, 53, 82, 20, 66,151, 64,132,152, 4,143, 78,165,182, 72, 67,181,118, 28,210, 53,227,195,155, 72, 5, 42, + 21,165, 70, 65, 93, 49, 75,107,195, 66,200,238,148,209,155, 33, 87,154, 97,164, 65, 24,203,146, 90, 90, 28,171,235, 59,198,177, + 67,106, 33,134, 21, 49, 9,145,216,162, 0,120,187,249,196,241, 42,100, 31, 97,149, 9,149,102,212,248,136, 6, 33,154,225, 30, + 41, 54, 50, 11, 61, 42,144,151,115,164, 55,162,119, 88,140,164, 78, 72, 26, 16, 77, 44,243, 72,175,149, 88, 67, 51,102,131, 81, +179, 99, 99,166,132,245, 45, 37,142, 57,228,170,104,105, 6, 56,140, 72, 7,203,226, 4, 21,186, 24,161, 42, 85, 71,186, 16,209, +126,147, 36, 10,181,162, 58, 32, 33, 35, 29,100, 9, 96, 35,106, 29,117,125, 93, 86,197, 64,157,136,224,182, 66,106,166,139, 3, + 85, 34, 85,156, 56, 11, 12, 26, 48, 15, 52,231,196, 72,169, 39,132, 22,161, 49,105,158, 51, 4, 60,116,148,146, 41, 94,233, 66, +130,212, 17,131, 82,165, 25,113, 9,195,125,164,170,160,125, 34, 13,145, 96, 61,206,136,166,158,104,142,122, 32,196,158,236, 43, +136, 74,112,167, 75,137,209, 43,170,134,164,128, 75, 5, 21,108, 29, 65, 81,117, 82,216, 71,220, 31, 49,148, 90, 87,136,104,139, +178, 8, 72, 12, 72, 14, 72, 48,102,113,134,133,136,185, 19,135,128,149,130, 86,161, 51, 33,151, 72,112,135, 40, 72, 85,114, 82, +250, 40,104, 84,164, 8,163, 21,106,132, 46, 6, 52,130,107, 64, 67, 15,227, 72,139,111,128, 72, 70, 29,182,142, 45, 80, 4,180, +237, 67,150,109,140, 29,235, 72, 68,217, 63, 27,144,226,160, 1, 87,129, 89, 71,119, 96,131,222,157, 52, 27,145, 62, 18,170,209, +139,225,170,216,152, 91,100, 72, 2,226,153,150,172, 11,132, 36,136, 87,220,133, 62,118, 12, 93,224,178,199, 94, 66,236, 55,239, + 95,184,217, 96,117,108,142,231, 21, 7, 6,101,227,224, 5,187,130,227,231,206,162,192,246,177, 5, 82, 22, 92,120, 32, 18,103, + 7, 56, 31, 43,134, 87,224,248,182, 49, 46,183, 56,144, 50,251, 46,220, 0, 61,127,194, 62, 7, 14,127,114,197,226,232, 39,208, +186,162,122, 97,116,163, 46,173, 69,107, 11, 68, 83,100, 22, 24,151, 6,209, 32,130,198, 64,170,138,140, 45, 50,231, 1,186,153, + 98, 57, 51,120,101, 65,166,174, 70, 0, 74,236, 25,116, 31,149,163, 20,132, 89, 80,182,115,104, 41, 99, 7, 84, 28,188, 34, 85, + 64, 11,168, 32,180, 27, 72, 2,168, 27,182, 14,149,123,139, 8,163, 65, 9, 40, 42, 21, 68,209,216, 18, 44, 6,205, 43, 10, 45, +119,163, 82, 17, 81, 92,192, 11,136, 10, 65, 13,173, 45,239,107, 34,168,213,245,128,100,168, 87,140,174,185, 75, 72, 19, 87,179, +182, 83,111, 97,122,139, 1,220, 16,111,225, 89,237,215,255,104,158, 49,154, 97,209,199, 1,195,201, 99,203,233,167, 24, 81, 49, +178,173,197,168,253, 15, 1, 66,178,128, 25,100, 42,186, 54, 42,106,169,120, 21, 8, 17, 73, 16,170, 96, 82, 16, 17,180, 40, 33, +181,208,183, 81, 1, 39, 6,193,139,144,146, 96, 18, 48,171, 48,142, 4,119,172,229, 12,168,166,232, 0,120,203,241,162,181, 69, + 64, 16,240, 74,146, 72,112,193,196,113,132,168,130,161,140,235, 28,101,144, 4,234,160, 78, 10,138, 72, 36,155, 50, 55, 35,136, + 32, 11, 71, 67, 37, 36, 35,214,204,106,177,164, 20,105,209,148, 46,210,185,224,154,192,154,248,182,136,132, 33, 57,147,171,161, +162,104, 52, 76,192, 10, 80, 70, 36, 65, 29, 91,193,131, 32, 20,117,130,107,179,140, 4,138, 4,188, 84,116,108, 3,156, 37, 67, +108, 64, 44, 35, 49,210,249, 58,252,149, 12, 51,176, 90, 90,152, 57, 42, 93, 82,106,161, 25, 77,181, 16,102,145,202, 72, 94,180, + 16,127, 87, 33, 87,199, 99,165,154, 82, 86, 43,178, 87,168,129, 71, 93,114, 41,179,161, 71,189,133,222,157, 74, 44, 61,171,229, +136,132,192,124,107,139, 35,199, 14,115,241,129, 11,216,216,127, 33,113,136,204,139, 96,186,194,189,226,121, 64,107,166, 22, 37, +132, 64,246, 17,207, 66, 55,236, 35,216, 72,233,106,171, 37, 88,129,121, 69,212, 48,115, 66,106,198,103,223, 57,154,103,148, 49, +163, 93,108,225,100,153, 33, 82,112,150, 96,153,108,153,152, 4,141, 3,110,134, 89, 33,224,104,129, 94, 7,114,202,120,215,163, + 40, 99,206,168,182,218, 1,201, 16,101,133,210, 17, 58, 33,231, 37,209,157,232, 27, 88, 52,130, 25, 30,193, 18, 4, 29,216,164, + 96,157,226, 75,167,154,161, 10, 41, 10,133,145,129,158,226,173,102,102,149, 3, 99,103,136, 86,186,110,131, 32, 6,203,109,114, + 82,138, 24,125,153, 19, 36,145, 23, 6,193, 41, 33, 65, 93, 17, 76, 48, 13, 12, 7, 34,203, 99, 11, 66, 80,124, 72, 45, 58,150, +157, 28,115, 11,183,214,132,229,138, 6, 65, 67,196, 10,172,130, 35,217,113, 7,106,203,169,215, 82,137,234, 20,221, 32,212, 17, +145, 64,164, 99,105,133,125, 18,161,135, 42, 35, 86,123,162, 87,164, 66, 30,141,101, 57,134,171,145,106, 33, 12, 1, 31,157, 98, +133,160, 61,125, 72,184,143,148,108,184, 20, 10, 80,151,145,106, 17,234, 18, 15,134,155,182,240,184,174,232,150,155, 20,113,146, + 25,150,156,210, 41,113,169,140,101, 36,165, 25, 49, 12,148,228, 40, 1,219, 42,172,242, 10, 73, 61,244,138,174, 42,157, 26,101, +213,181, 52,145, 6, 76, 87,152,117,104, 86, 86,186, 69,223,247,212, 26, 17, 23,246, 15,129,185,101, 40,134,123, 38,151, 99,224, +137, 62, 5,204,149,216, 67,234, 18,226,133,100, 1,223,152,161, 2,155,117, 31, 23,236, 75,228, 26, 40, 41, 82, 93,232, 6, 88, +149, 37, 54, 79,196, 26,136,105, 70, 89,174,176,218, 97,227, 18,157, 69, 98, 23, 72, 37, 82,212, 8,235,208,147, 14,218,234,138, + 66, 27, 7, 85,133,161, 31,208, 24,238,191, 72,174, 12,183,220, 66,204,225, 60,122,188, 25,130,228, 86,247, 19,187,243, 34,232, + 0,163, 67,205, 25,165, 69,255,206,103,232, 29, 96, 81,161,140, 43,200, 14, 21,162, 27,169, 58,121,128, 88,148, 33, 26,177, 87, +200,142, 23,167,215, 22,117, 17,135,229,170,213, 72,213, 84,169, 73, 25,150,128,110,176, 8, 66, 89, 44,240,110,147, 78, 5,182, +182,240,176,197,144, 18,197, 20,179,237,150, 14,243,236, 72,171,179,193,204, 48, 23, 34, 9,113,167,120, 37,122,128, 10, 30,148, +128,224, 33, 16,104,131,176, 10,152, 85,220, 50, 30, 59,172,180, 80,137,136, 96,230,205, 80,160,121, 71, 74,165, 90, 11, 57,160, + 96, 30, 81,154,215, 95,165,229,131, 93,215,169,107,109,161,172, 10,116, 2,174,134, 75, 11,135, 7,137,205, 10,201,133, 40,130, +133, 0, 94,176,108,184, 43,130, 83,154,107,140,120,110, 65,135, 38,153,235, 1, 21, 98,140,136,181, 34, 45, 36, 16,164,146,243, + 58, 68, 27, 66, 43,226,208,132,135, 57,234,218, 78, 78,113, 98,132, 92, 65, 44,224,238,100, 27, 81,137, 80, 5,141,130,173, 11, + 71,188,100,136,235,188,185, 53,175, 30,175,120, 85,138,192,204, 34,172,163, 6,226,235,200, 4, 21,143,129,234, 21,163,229, 34, +171, 11, 85, 2,142,209,187, 32,162,212,104,120,113, 20, 39,163, 84,247,230, 20, 38,109,121,181, 58, 71,114, 97,235,174, 35, 28, + 93, 56,166,105,157,247, 83,130,172,232, 59,101,163, 75,136, 36,232, 20,109, 81, 91,196, 91,184,220,204,176,146,233,250,141, 54, + 8,187,227, 46, 68, 81,242,168, 96,133,216, 69, 92,157,156,141, 72, 32, 4,163, 72,110,213, 48,157,226, 43, 16,150,184, 58, 93, +140, 72, 85, 36, 9, 57,183, 99,237, 52, 98,177,146,205, 24,250,117,200, 51, 84, 74, 54,242,209,109, 86, 11,103, 57, 63, 78,149, + 74,201, 74, 33, 35, 14, 73, 19,102,198,162, 20, 66, 63,240,216,191,189,159,139, 83,224,240,145, 45,114,110,181, 19,243,220,138, + 37, 85,157, 59,238,254, 4,159,248,228,156,143,221,113,152,139, 47, 57,194,229,151, 95, 74, 31, 15,160, 68, 86,217, 48, 90,205, +128, 57,184,143, 80, 58,186, 32,200,114, 93,216,153,148,213, 88,214, 69,142, 70,135,160,161, 67, 66,162,150,177, 69,146, 98, 70, + 98,162,230, 22,209,137, 82,154,129, 59, 12,212,149, 65, 17, 74,134, 33, 8,197, 90, 78, 83,130, 48,154,160, 98,132,210, 68, 99, +206,146,160, 51, 54,102,155,228,178, 98,244, 57, 51,113,146,119,172,182, 71, 66, 12,164, 16,168, 94, 40, 53, 97, 35,152,141, 40, +149,148, 18, 35, 74,210, 68,208,142,101, 90, 32,106,176,161,248, 86, 79, 13, 21,239,156,148, 21, 99, 73,144,129, 26,149, 90, 51, + 67,104,255, 95, 99,201,196, 24,232, 59, 90,196,101,110,148,222, 41, 8,154, 51,113,232,216, 62,226,140, 94, 40, 46, 45, 85,102, +218,238,237, 40, 12, 68, 68,157,101,172, 45, 99,105, 35, 26, 64,181,167, 19,165,178,164,118,145, 90,189, 21,116,166, 74,117, 39, +185,226,253,128,196,142,213,184,160,235, 35,174,180, 98, 82, 15,168,131,149,136,164, 74,164,178,169, 61, 75, 45, 4, 43, 56, 25, + 98,196,169,148, 12, 50,174,240, 80,208,216, 82, 31,203,177,165, 29, 24, 91, 4, 43,169, 98, 99,165,168, 48,247,138, 82, 80, 45, + 84, 47,120, 21,196, 5,247, 76, 74, 9,196,201,203,145, 82, 34,155,177, 9,161, 97,132, 90, 8, 4,180, 11,164,101, 97,177, 79, +176,226,212,186, 34,154, 65, 89,146,221, 24,147, 96,219, 75, 82,236,240, 46,112,248,216,162, 85,129,244, 74, 41,129,161, 19, 98, + 63, 99, 89, 35, 33, 4,102, 41,160, 67, 34,120, 70,150,137,126, 38,212,234,196, 82, 89,149, 86,243, 84,103,145, 92,140,152, 51, +221,178, 96,143,158, 51, 31, 35,157, 9, 34, 61, 27, 51, 97,105, 3, 75,131,125,174,152, 20,186, 16,241, 40,116, 8,193,109,157, +110, 19, 52, 70, 74, 23,208, 24,136, 97,184,127,161,119, 90,244, 46,210,156,180,216,199,243, 18, 38,223, 41,241, 21,167, 21, 70, +167,254,188,137,110,109, 46, 22, 90,141,141,205, 8,247,243, 28,156, 36,107, 64,174,160, 82,112, 9,237,127, 63,209,198, 74, 12, +117, 97,233,176,223, 13,143, 66, 89, 22, 74, 16, 66, 8,132,141,202,220,156,154,141,205, 0, 94, 11, 93, 13,148, 85, 75,225,185, + 47, 9, 86, 89,216,136, 14, 70,239, 61,228, 57,177,223,135,149,163, 68, 81,199,188,133,217, 53, 40,238,165, 9,145, 52, 15,189, + 82, 17,147,245,223,104, 5, 71, 42, 4,243, 86,249, 41,134,135,208,170,111,173, 21,184,137,180,220, 89,147,127, 97,180,102,165, +107,144,150,159,174,235, 66, 55,117, 28, 71,221,113,109,129, 96, 49,199, 5, 52, 42,110, 45,103, 94,139, 19, 66,196,131, 80,169, + 68,105, 66, 83,173,213, 74, 6,109, 21,247,230, 17,213, 76, 31, 91,248, 78,140,117,117, 56,132,216, 34, 4,209,149,162,237, 31, +216,220, 40, 53, 55,143,199,149,178,174,206, 15,162,212, 85,133, 24, 33, 4, 48,195,179,145,139, 97, 34,120,208, 22,209,200,144, +146, 81,181, 21,178, 17, 90,214, 98, 92, 23, 15,105, 13,116, 23, 62, 1,205,119,177,216, 62, 70, 76, 45, 82, 81,106, 38,105, 36, + 68, 69,106, 5,107,245, 8, 82,155,181,232,102,172,162,183, 10, 85,175,184, 86, 52,117,212,172,152, 87, 66, 7,190,180,118,103, + 26,152,103,146, 37,198,213,156,213,124,155, 99, 71,140,227, 34, 36, 85,162, 45,201,101,108, 6,140, 71, 86,139,192, 34, 69, 98, + 76, 72, 15, 27, 49, 49,196,158, 16, 91, 38,176, 87,216, 30,141, 82, 43, 42, 21, 13,161,213, 69, 72, 70, 61, 96, 34,237,105, 2, + 17, 36, 54, 35,174,138,173,207,181,208,229, 30,247,138,197, 66,136,161, 21,255,100,103, 8,210, 12, 17, 51, 98, 23, 17, 89, 23, +139,212,130, 70, 97,156,111,115,236,174,227, 28, 91,117,108,110,238, 99, 85, 90, 74,194, 37,162,235,168, 69,174, 43, 68, 19, 49, + 69, 44,175,184,228,130,253, 60,254,224, 38,159,252,248, 17,114,128,228,235, 28,183,116, 28,191,235, 19,220,126,231, 81, 54, 30, +117, 57,125,136,204,183,143,241,209, 15,222, 70,234, 6, 46,126,204, 99,216,119,193,197,140,139,145,236, 5,233, 3,193, 21,245, +246, 79,213, 6,249, 2, 99, 11,193,166, 52, 80,124,196,149, 38, 72,210, 19,146, 65,137,228, 58, 18,226, 58,239, 43,125, 75,199, +228, 12,181,195,195,136,228,130, 81, 89,209, 55,175,192, 50,173, 74,197,113,109, 69,137,102, 70,116, 1, 70,198, 26, 49, 5,199, + 88, 89,100, 30,150,116,162, 4, 15,204,197,232, 76,153,251,146,141,125, 61, 41, 43,110, 17, 20, 66,173, 48,182, 58,128, 16, 91, + 97,107,222,106,181, 24,125,236, 24, 87,149, 81, 42,251,117,134,176, 65,149, 5,163, 45,241,212, 17, 61, 17, 61,224,181,213,115, +228,117,137,178,148, 17,151, 74,145,196,184,204,140,101,217, 60, 62,239,218,255, 69, 40,136,111, 96,186, 36,206, 6,202,184,162, + 11, 27,104,167,176, 20,136, 21,195,113, 81,100, 95, 66, 77,137, 25,146, 27, 43,235, 90,154, 65, 2, 30, 35,186, 26,177, 0,193, + 33, 91, 33, 58, 80, 29,223,232,137, 56, 35, 35, 53, 27, 9,199, 70, 97,236,105,199, 98, 61, 49, 26,162,165, 25, 85, 52,195,175, +172,203,181,163, 67, 10, 21,186,196,106,158, 33, 20,130, 7,156, 72,214,142,104,133, 49, 26,189,206,208,218,147,217, 34,142, 70, + 77,173,202, 91, 81,138, 85,250,184, 46,160,204,133,124,116,201, 50, 26, 93,104, 79, 33,104, 22,170, 23,196,135, 22,205,202,149, + 16,133,162, 74, 20, 39, 58,148,174, 99,144, 30, 75,129, 46,118,100, 59,202,102, 95,153,177,201, 98,181,141,205, 43,165, 70,220, + 70, 58, 89, 17,242, 6,139,232, 16,140, 33,111,128,192,106,105,216,152,241,141,128, 95,160, 32, 61,145, 14, 17,167, 4,103, 89, +188,229,247, 99, 70,139, 16,246,117, 45, 74,164, 66, 52,109, 85, 55, 30,128, 74,180,136,122, 97, 24, 28,237,226,121,144, 49,199, + 35, 68, 51,250, 20,206,155,231, 43,214, 82,181, 73, 32,166,120,222, 68,215,141,123,106,185, 82, 60,191,185,122, 0, 51,168, 37, +227,222, 34, 51, 26, 34,203,229,146, 96, 10, 38, 84, 10, 94, 71,142,199, 66, 23,133, 42, 66, 94, 25,186,168,204, 54, 54, 16,151, + 22,145, 21,133,161, 99, 57,102,198,156,155,147,103,199,241, 60, 96,195,128,213, 5, 98,133, 65, 58,142,215, 57, 33,116, 68,168, +248, 58, 92,237,102, 45,204, 46, 77,108, 52,134, 86, 69, 46,180,220,175,182,240,141,172,159,101, 48, 49, 68,194, 58,111,211, 66, +164,110,134, 75, 59,200, 90, 11,130,182,112,181,234,218,238,106, 23, 9,113, 4,199,204,113,137,136,210, 30, 45,145,102, 73, 86, + 49,204, 29, 83,105, 85,182, 42,235, 4,124,179,130,146,180,160,183,212, 17,183, 64, 81,232, 82, 69, 44, 96,165,162, 8, 53, 52, + 35,195,112,130, 64,169, 74, 22,133,149,177,180,202,108, 22,169,185, 80,150,137, 16,140, 40, 21,243,212,142, 73, 13,169,173,224, +206,173,172, 31,229,232, 91,228,193, 10,170,177, 21,212,137,181, 71,235, 20,186, 96,216,168, 56, 74,176,140, 5,184,236,241,151, +242,180,164,252,201,159,207, 57, 94, 13, 66, 19, 58, 17, 65,157, 22,154, 39,147, 84, 25,173, 34, 26,136, 49,144,180, 85,255, 86, + 10,120,171, 63, 48, 17,124,149,169, 93, 98,232,218,113,206,196, 89,141,115,142, 29, 94,114,116,203,200, 12, 84, 32,132,140,212, + 5,243,197,138, 85,117,204,140, 64, 89,187,229,129,161,235,209,206, 24,187, 13,134, 80,233,251, 68,232, 2,105,150, 72,177,165, + 94, 70,175,104, 49, 66,215, 66,239,129, 86, 84, 41, 2, 86, 28, 9, 52,207, 77,157, 32,130, 86, 33,196, 74,169, 21,207, 1,145, +138,105, 32,104,165,140,161,229, 81,125,132,234, 20, 11,104, 39, 88, 94,113,228, 19,135, 57,124,236, 24,139,165,209,111, 30, 64, + 67,199,170, 44,201,117, 36,174,115,143, 59, 6,147,149,150, 30, 25,129,237,197,130,203,159,113, 25,183, 94, 52,227,246, 59,182, + 8, 2, 46, 17,100,201,209,163, 71,208,126,131, 11, 47, 24,216, 47,129, 44,151,176, 61, 6,238, 62,114, 23,135, 63,244, 97, 46, +185,248,110, 46,189,248,113,244, 27,155,148, 85, 69,129, 24, 30,133,198, 57,105, 44,108, 85, 3,156, 32,177, 25,169,210,211,245, +153, 82, 86, 88, 30,233,215, 79, 95, 72, 8, 4, 28, 82, 68,215,145,140, 81, 87,212, 26, 8,204,168, 97, 78,151,189, 21,235, 69, +176,249,255,207,218,187,245, 72,150, 29, 89,122,159,217,190,156,227, 30,151,172, 11,139,108,146, 98,179,187,213, 45,116, 79,235, + 50, 45, 13, 4, 12,160,145,158,244,191,248,167,244,162,223,160, 7, 61, 8,141,145, 26, 28, 77, 95,201,170,188, 71,132,187,159, +115,246,222,102,122,176,157, 73,189, 8,146, 80, 25, 0, 1, 22,193,204, 10,143,112, 63,123,219,178,181,190, 69, 60,252,138,226, + 24,228,202,169, 14, 52, 17,198, 38,187,145, 60,129, 62,210,184, 49,198, 1, 57,179, 12, 65, 49,186, 88,236,189,173,199,234, 32, + 85, 74,137,207, 88, 58,194, 72, 34,181,211,110, 3,115,167,214,196,182, 59,105, 93, 89,134,179, 15,208,250, 68,238, 17, 61,124, +249,120,144,189,160,201,227,194, 41,194,154,160,229,193,117, 55,212, 20, 74, 65, 84,168,165,177, 15,167,230, 19,227, 56,208, 90, +176,110,160, 21, 21,165,228, 74, 86,167,177, 33, 75,165, 31, 27, 75,209,240,215,164,133,235,209,201,201,145, 28,254,154, 36, 11, +167, 7, 97,219,122,188, 95,186,114, 28, 66, 89,194,157,109,105, 39, 17,207, 26,241, 48,104, 30,227, 25, 89, 64,151,132,111, 66, +247,103,170, 36,106, 94,105,182,113,236,157,211, 90,226, 18, 91, 43,227,114,197, 51,120,235,177,225, 77, 57, 46,128,169, 96,118, + 76,149,232, 20,134, 51, 49,202,249,132,121,166, 30, 79,116,205,208, 43, 35, 13,134,221,232, 71,167,171,226, 61, 46, 93, 55, 55, +180,213, 48,227, 46,149, 86, 22, 28,227,180,156,121, 76,149,151,219, 65, 33, 33,154, 73,169,208,172,177,206, 11, 3,174, 92,183, + 78, 25, 23,100,141,203, 15,251,142,202,142,164, 19, 47,251,134,237, 78, 57,125, 5,115,152, 89,164, 80, 30, 23,188, 11,108, 30, + 41,128,118, 69,234,202,121, 45,216,101,196, 51,112, 81,212, 19, 36, 97, 59, 58, 15, 57, 97,110,120,142,213, 78,169,133,161, 66, +113,229, 84,214, 31,125,160, 25, 17,243, 13,123,129,144, 74,249, 98,211,174,185,225, 54, 88,138,198,100,246,165, 14,117, 15,191, +137, 26,228, 90,190,184,252,126, 52, 16,107,148,228,108, 12,220,102,242,234, 20,178,134,238, 32, 46,236,215, 65, 90, 42,231, 82, + 80,117,174,190,115, 60, 93,184, 63,159,177, 62,120,105,157,243, 93, 98, 32,120, 63, 81,229,160,237, 66, 83, 71,181,160,253,129, +131, 27,221, 55,106, 46, 28, 71, 33, 35, 25,241,136,148,185, 15, 64,195,192,164, 26,147,245,208,207,175,215,220, 64, 50, 88, 11, + 73, 91,115, 28,248,128, 15, 99,140,216, 53, 38, 28, 12, 4,197, 60,166,244, 33,131,146,231,131, 61,129,245, 61,114,133, 26,242, +157,247,129,251, 64,139,226, 3,116, 76,243, 93, 6,119,101,152, 32, 24, 41, 73,196,153,188, 77, 9, 59,178,219,106, 48,114, 39, +229, 18, 89,249, 41, 81,187,199, 69,193,136, 9,188,211,201, 25,150,145, 66,174,215,185, 66, 72, 48,218,148,163,177,240, 18,244, + 78, 31, 29,205, 25,247,200,124,138,247, 57, 65, 11, 84,193, 40,168, 59,102, 74, 34,145, 5,154,109,180,174,164,212,120,243,219, +255,149, 81,157,125,186, 11,173, 77, 53,255, 56,200,178,132,241,110,116,208,138,168,161, 73, 25,195, 73,150,145, 20,145, 48,215, +144, 94,146,128,166,152,168,205, 26,251,190,241,241,165,241,225,121,103,179,153, 2, 72,141, 36, 59,182, 15, 46, 35,162,125, 70, +248, 25,134,132,148, 37, 46, 92,143, 3,237,198,222, 52,190,191,227, 64,114,226,252,205,119,220,221, 87, 62,190,190, 6, 43, 64, + 51,168,227,219,193, 48,161,219, 65,169, 43,146, 50,227, 0,211, 48,196,173,185,114,120, 28,246,174,130, 74, 15,222,193,209, 99, +106,177, 30, 43, 30, 28, 90, 39, 73,231,250,242,129,167,167, 15,124,120,238, 28,230,136, 56,185,111, 56, 95,163,105,161, 95, 14, + 70,106, 97,104, 36, 51, 92, 65, 58,221, 28, 21, 37,201,193,127,253,159,255,148,209,158,249,159,254,231,255,157,102,160, 90, 24, +199, 21,183,196, 87,231, 19,169, 29,188,125,121,225,116,122,224,235,175,190,227,187,239,254,154,143, 47, 47,188,249,253, 63,242, +230,245,191,231,143,126,246, 13,223,126,253,115,206,143, 95,209,246, 43, 38,198,186, 22,206, 30,174,119, 81, 71,108,167,212,130, +250,202,170,202,166, 47,136, 74, 68,182,214, 21, 90,199,219,149, 83, 17,182,230, 72,202, 20,156,222,183, 88, 65, 45,153,126, 27, + 72, 17,252,172,113,136,102,197,117,128,118, 92,194, 45, 47,119,138, 30, 70, 59, 6,235, 84,202,142, 22, 70, 20,243, 48,144,105, + 90,168,230,248,165,179, 87, 69, 52,209,111,142, 90,225,112,200,107, 24, 45, 87,117,182,222,232,125,112,174,225,141, 41, 77,216, +211,206, 80,143,239,161, 43,195,116, 94, 94,130, 49,208,198, 1,182,144, 79, 39, 82, 51,196,148,209, 54, 68, 79, 48,156, 49, 12, +147, 75,172,157,172,163, 37,179,228,132,221,118,242,233, 1, 31,141,197,157,230, 70,202, 15,148, 82, 40, 52,158,111, 27, 85, 87, +198,233, 32,159,156, 59, 18,125, 52, 76, 50,218,140,242,237,137,227,221,109,122, 38, 10, 35, 37,178,117,106, 79,236, 52,198,136, +235,185, 72, 13,207, 65,135, 68, 39,167, 76,111,225, 77, 41,154,169,107, 24, 1,251,238,184, 14, 54, 55, 82, 3,225,140,248, 65, +202,141,145, 11, 73, 51,218,149,221,110, 44,114, 66,232,160,157,222,194,124,123,115,167,111, 59, 75,238,100, 81,110,192,144, 30, +198, 57, 95, 88,115,194,252,133,113, 50,170,148,240, 27,245, 22, 23,226, 82, 57,110,157,236,194,230, 87,186, 23,216, 14, 74, 27, +108, 98, 28, 99,193, 77, 41,192,177, 30,208,157, 98, 32,169,144,238, 31,177,214, 24, 55,208,154, 72,105, 39,121,230, 65, 87,158, + 85,209,190, 65, 90, 80,132,147, 14,236,225, 76,139,253, 17,101, 41, 88,118, 14,230, 10,205, 18, 57,103, 54, 19, 74, 10,246, 72, +169, 25, 73, 57,100,136, 84,168,107,249,209,123,234, 49, 71, 83,117, 67,220,191,200,142,254, 15,151, 5, 34,107,159,132,255,231, +140,220,255,255,175, 62, 96,140, 78, 86, 35, 45,235, 23,219,213,127,250,121,140, 14, 58, 58,189,247, 80,185,213, 73, 35,225,123, + 35, 37,167, 38,199,199,160,120, 5, 51,174,215,131, 34,194,157,172,152,108,112, 26,220,146,147, 13,218, 21,172, 56, 35, 95, 41, +205,120,113,168,115,197,109,150,200, 86,131,111,144, 43,164, 51,233,143,126,241,199,191, 41,105,198,246,199,244, 87,167,216,111, +171,134, 49, 42, 79,121, 69, 16,146,204, 7, 64, 4,168,208,153,197,150,252, 73,130, 23, 82, 73,161, 90, 11,184, 42, 57,101,210, + 92,195,185,143, 48,181,187,204, 76,110, 10,202,129, 7,140, 6, 97,238,160, 53,114,242,238, 1,234, 40, 5, 45, 74, 34, 99,222, + 2,176, 66,194,100,238,173, 73,136, 38,134, 9, 41,205,139, 9,196, 63,139,146,167,187,144, 17,113, 49,106,138, 9,208, 70,236, + 86, 82,152,119,204, 13,173,225,106, 55,111, 97, 28, 35,148,134, 54,122, 56,180, 61,192, 25, 38,241, 51, 48,226,127,179,153,217, + 30,238,211,221, 45,236,163,243,254,186,199,228,111,134,117, 67, 25,177,103,105, 7, 46, 66, 82, 97, 31,206, 24, 17, 49,241,102, + 52,179,152,142, 36,209,123,184, 85,201,153, 84, 29,235, 79,124,120,243,196,247, 31, 14, 94,122,130,162,241, 90,180,225,182,113, +244,169,136, 76,233, 74,145,128,226, 0, 18,118,248,216,253, 15,167,143, 3,243,193,222, 99,106,249,197, 79,127,202, 47,190,174, +188,127,190,177,223, 54, 94,158,223,113,187,190,240,244,241,137,231,203,133,143,207, 23,158, 95, 94, 24, 14,119,107, 65,181,198, + 95, 54, 52,128, 55, 22, 38, 30, 18,216, 16,186, 55,204,103,254,212, 59,163,117,182,231,143,124,120,255, 3,223,191,121,207,251, +107, 15, 94,193,132, 29,229, 82,249,238,155,175,184, 91, 86,142, 99,139,181,132,135,145, 83, 61,110,111,214, 27,244,198,162,133, +191,249,203, 95,241, 39, 63,251,138,191,251,199, 39,222, 94,247,144,133,199,198,240,131,156, 43,215,219,198,205,140, 54, 58,151, +203, 27,164,191, 80,214,133,199,243, 79,233,238,188,121,243,129,143,111,127, 79,178,198,122, 87,169,158,240, 97,116, 31, 97,128, +114, 35,159,214, 80, 85,134, 98, 73,200,222,145, 2, 62, 4, 59,224,126,133,214,226,189,159,165,162, 53,147,221,208,113,112, 76, +178,131, 15,137,196, 69, 62, 49,134, 35,214, 25,110,228, 97, 12, 22,202,168,228,210,145,228, 88, 75,184, 77, 16,202,112,164, 19, +123,113, 19, 24,194, 41, 47, 52,160,119, 71,151, 18,224,166, 30, 38, 69, 39,140,120,153,140, 46,149,222, 19,106, 78, 89, 6,189, + 31,244,121,105,204,106,212, 84,241, 84,177, 53,226,160, 41, 37,214,101,165,213, 20, 81,206,139,177,245,193, 16,165,181,131,205, + 99,253,208,183, 13, 81, 39,245,202,146, 87, 82, 54,198,176, 88,215,168,147,181,224,201, 89, 24, 36,133, 77, 2, 16, 85, 82,162, + 97, 20, 77, 20,207, 32, 39,228,214, 64, 11, 3, 98,191,222,143, 48, 18, 10,248, 72,241, 41, 55,167,239,161,106, 68,230,253, 96, + 45,113, 57, 53, 83,146, 41,146, 70,172, 79,236,142, 61, 53,134,117,116, 79,180, 30, 23, 74,119, 65,164,179,141,131,222, 65,165, +134, 74, 54,182,112,199,219,224, 44,101,174, 27, 21,215, 59, 78, 53, 5, 19, 33, 43,231,122,138, 11, 14, 22, 23,251, 28, 74,136, + 31,134,168,146,206, 25, 29, 59, 93, 29,219,140,209, 15, 52, 45,145, 18, 34,163,230,140, 69, 24,217,168, 67,168, 89,112, 93, 66, +124,172,133, 69, 5, 74,198,215,133,180, 9,181,156,201,154, 80,205,184, 20,138,215, 88,103,121,192,183,150, 44,156,239,148, 75, +111, 12,115,106, 2, 58,200,110,164,109,160,165,224, 38,156, 22, 9,181,117,178, 31,210, 92,107,230,148, 88,180,240,147,111, 31, + 88,239, 31,127,156,153,205,224,242,124, 99,244,131, 34,131,135,199, 59, 72, 63, 62,210,214, 28, 46, 79, 59,118,220,184, 95,149, +122,119,255, 69, 14, 95, 3, 94,110, 70,191, 94, 41,222,120,120, 40, 72,185,251, 98,135,122, 3,222,188,111, 92,222,190, 99,180, + 43,230,198,190, 31,140,209,226, 12,114,231,198, 32, 75,101,119,167,103,163,223, 2,110, 52,138,176,109,141,102, 47, 17,183, 59, +223,177,223,174,232,166,140, 28,166,206,228,149, 38, 3,247, 28,151,190,179,210, 7,236,151, 39,182,235, 59,210, 79,126,254,199, +191,201, 51,130,150,210,148, 89, 85,113,139, 55,130,194,220,241, 41, 37, 41, 62, 65, 48,174, 78,174,133,164,142,183, 17,123,107, +143, 75, 64,164,205,226, 67,230, 6,168,199,100,251,233,224,158, 57, 53,145,132,206,195, 81, 68,200,154,227,154,147, 4,117,139, +184,146,228,121, 11, 49,242, 8, 83,153,121,184,237, 19, 57, 60, 0, 51,226,158,210, 39,192, 73, 2, 27,177, 91,148,136,108, 73, +174,244,214, 34,202,229,130, 73, 33,143, 1, 35,148,130,125,239,241, 32,241,120, 45,195, 27, 54,156, 82,115,196,213, 90,143, 7, +108, 73,145,145, 86,157,119,145, 78, 74, 11, 69,116, 26, 8, 7,185,156,226,114, 82,148,156, 64, 75, 66,143,142,117,137, 67,214, +253,243, 53, 41,139, 48,136, 41, 85, 20, 36,231,184,116,184, 7,145,202,231,238, 80, 5,177,141,203,199, 55,252,238,119, 55,158, +246,133,161, 9, 77,176,172,137, 36,141,190, 31, 28,157, 9, 15,154,210,213,167,108, 54, 25,153,196,189, 16,114, 45, 36,202, 17, +106,137,217, 96,223, 55,236,104,177,191,237,198,245,227, 19,111,222, 63,243,114,221,216,154,209, 71,120, 28,122,173,124,245,211, + 87,124,247,112,230,184, 28, 17, 69,148,198,104, 35,124, 9,132,223, 33,232,119,142,123,199,108,208,219,193,203,251, 55,124,255, +230, 53,239, 94,118,204, 39,188,100,102,236, 98,194, 87,198,237,133,235,229,153,235,237,133,125,116,122,111, 28,183,157,253,104, +225,129,240,240,129,124,124,255,145,114,255,138,255,225,191,251, 11,164, 57,127,247, 47,111,177,105,154,234,214,200,170,180,227, +160,245,142,245,206, 72,202,211,118,227,118,123,135,182,141,188,156,184,187,251, 9,221, 18,191,127,253,134,167,119,175,201, 58, +184,171, 39, 60, 45, 72,249,164, 74,229,136, 90,114,101,120, 35,175,107, 92,230, 90,163,139,211, 70, 67,150,204, 72, 43, 93,149, +214,118,250,110,152, 36,134, 57, 72,162, 46,105, 78,186,113,120, 38, 58,201,136,139,154, 84,234,146, 40,192,229,104,168,198,131, + 1,132,243,114,199,176, 22, 83, 62,198,209, 7,121,105, 84,237,248,176, 88,222,137,179,222, 45, 20, 45,248,216,201, 82, 64, 50, +186,196,231,184,212,160,199,221,118,167,150,206,216,226, 66,172, 8,199,209, 81, 9,176,210,162, 74, 19, 56,110, 59,214, 6,123, +151,152, 50, 59, 28, 42, 28, 22,123,110, 12,186, 27, 85,149,130,241,210,246, 9,131, 2, 41,107, 76,251, 9,106,169,164,147,210, + 53,179,228, 21, 45,130, 22,200,150, 89, 79, 5,245, 51, 71,143,125,124,213,206,209,156, 70, 99, 61,173,161, 94, 20, 1, 73,184, +159, 41,169,227,218, 16,141, 72,220, 80,193, 74,161,158, 18,227, 24,225,201, 73,130,143,193,190, 95, 16, 27, 36,113, 54,187,146, + 90, 24, 29,199,100, 72,157,114,162, 42,168,156,130,135,224, 21,207,137,162, 39, 76, 13,242, 2, 42,172,229,192,250,136,103, 70, +238,100,171,140,222,232,214, 24, 12, 48, 67,172, 49,124, 32,229,196,184, 12, 36,133, 54,182, 15,199,178,147,151,149, 98,145, 54, + 89,238, 86,242,169,178,172, 15,152, 15,244,124, 38,141, 65, 42, 80,101, 33,121,192,142, 74,142,100,140, 75,227,252, 80,208,180, +224,117,144,186,208,125, 65,178,179, 32,124,120,110,200, 80, 30,214, 66, 61,192,199, 96,152, 80, 78, 39,238,139,144,242,140, 28, + 39, 72,154, 40, 75,250, 67, 28,182, 86, 78, 53,243,147,111,191,161,252,200,156,250,165, 67,219, 54,122,111,172,234,220,189,122, + 12,114,214,143,252,218, 28,110,151, 6,125,231,126, 77,148,243,221, 23, 57,212,119,224,118, 25,180,118, 35,251,193,227,227, 25, +201, 95, 46,206,118, 1, 62,126, 24, 92, 63,126,192,246, 23,108, 42,219, 85, 74, 92, 32,187,147,125,112, 28, 17, 51,190,211, 28, +145,229,220,185, 28, 7,173, 9, 71,235,148,121, 33,189,202,141, 62, 4,233, 27, 89,140,161, 3, 93,148,109,187,210,112, 84, 23, + 56, 6, 42, 43,102,144,126,254,235, 63,251, 77,118,139,105, 78,102, 28,102,146,162,196,231, 1,238, 80, 74, 72,211, 17,237,153, +128, 62, 15,171, 62,104, 76,204, 30,121,116,149,136,100,105,170,177,167,159,230, 57,155,217,100, 33, 12,105,174, 22,217,113,211, +153, 37,118, 72, 97, 30,242,153, 96, 27,102,152,196, 60,220, 90, 28,180, 72, 69, 75, 33,137, 33,195, 24, 90, 98,183,157,156, 42, + 51,235,169,147,234,227, 4,121, 46, 43, 62, 12, 41, 74,170, 14, 1,181,194, 11, 20,141,201, 62,238, 17,131, 97,142, 90, 28,174, + 41, 49,205, 14,142, 89,153, 59, 62, 71, 78, 9, 29, 3, 36,192, 47,137,200, 98,143, 20, 7,166, 72,162,148,105, 36,235, 3,213, +128,139, 4,148,102, 34, 19, 75, 32,119,179, 13, 84,202,140,158, 52, 92,116,238, 92, 35, 38, 40,169,128,238, 92,223,191,225,251, + 15, 74, 75,103,114,145,160, 82, 45, 5, 31, 55,142,126,224, 54,147, 6, 30,153,250, 88,129, 88,208,222,122,251,188, 53,178, 57, + 57,206,197, 18,195,140,251,187, 7,206,119,143,116, 73, 52,235,236, 47,239,121,243,225,194,112,161,164, 76, 78, 53, 94,203,112, +126,249,103,127,194,255,248,239,254,138,124,249,200, 63,188,121, 14, 85, 39, 71,244, 44,140, 45, 13,233,113,120, 41, 17,227,186, +188, 60,241,254,245, 27,222, 61,239, 33,181,187, 78, 73,109,174,111,156,112,233,139,243,244,114,225,233,118,176,247,192,219, 98, +206,152,223,103,146,132,106, 60,152,250,232,216, 72,252,155,191,249, 19,254,252, 63,253,138,223,254,159,239,121,253,230,198,178, +158, 89,180,208,143, 78,235, 35,176,182, 2,226, 33,165,154, 65, 27,141,214,175,164,190,115,127,126,164,222,125,195,232,198,247, +191,251, 23, 62, 60,255, 64,173,194, 82, 79,156,239, 87,164, 75,100, 13,106, 76, 76, 48,200,233, 20,138,210, 72,120,239,164,225, + 28,214,113, 14,100, 12,108, 76,184, 82, 50, 24,161,110, 45, 57, 50,195,162,145, 6,168,249,132,138,145, 37, 83, 52,115,140,128, +205, 8, 32,169,134, 95, 37, 67,206, 74,183, 20,239, 53, 13,200, 75,235,138,187,163,106,104,174, 72,201,236,251,129,118, 65,244, +158,230, 91, 92,106,135, 33, 57, 81,199, 74, 75,145,141, 85, 73,193, 65,144, 68,210,206,210, 65, 88, 35,159,223,161,183, 78, 58, + 58,187, 42,154, 51, 99,187, 49, 36,194,227,169,198,251,191, 44, 11, 99,190,223, 4,199, 60,145,215,138, 53,135,197,144,155,161, + 57,211, 44,179,236,241, 75, 30,101, 48,154,227, 73,200,167, 76,245, 48,145,157,214, 48,138,110,251,152,175,121,141,201, 56, 41, +194, 17,176,161,226,184, 4,177,177, 31, 7, 70, 99,108, 7, 34, 70,235, 13, 90,103,219,247,121,216, 6,186,121,248,192,123,227, +192,240, 84,201, 75,152,106,207,229,142,114,127, 79,146,196,146, 6, 35, 13,234,162,192, 96,223,198,140,240, 54,250,109, 48, 10, + 28, 7,248, 1,105, 52,198,128, 65,236,121,157,142,119,195,122,193,117,204,149,228, 58,221,246,149,122, 62,145,123, 40,116,105, +209,216,169,114, 38,175, 43,232, 32, 31, 3, 22,161,166, 12,135,209,115, 13, 38, 65,114,238,152, 70,222, 53,209, 94,174, 88, 18, +186, 11,125,187,114,151,148,230, 61, 20,128, 83,172, 96,214, 85,233, 75, 9,111, 75,118,200, 9, 75, 78,238, 33,127,202, 52,250, +253,225, 80, 47,156,150,194,119, 63,251,246, 71,187,202,119,131,118,219,176, 54,184, 95, 19,235,195,195, 23,217, 81, 31, 6,219, +181,225,253,202,227, 93, 37,175,231, 47, 35,189, 3,215, 91,103,220, 54,238,115,227,252,245, 99, 80,195,190,212, 62, 29,120,243, +177,113,121,251, 26,111, 47,184, 88, 80, 39, 85,233, 30,135,114,247, 66, 27,157,189,109,144,140, 13,197,181,114,186, 9, 66, 67, + 74,130,182, 96, 99,199,250, 9, 49,199, 82, 97,116,231,168,141,211,178, 80, 53,135,113,243,184, 34,154,113,137,132, 81,250,217, + 47,126,254,155, 58,163,106, 17, 61,179,216,239,105, 24,204,116, 2, 45, 2, 37, 30,147,183,144, 99, 7, 15, 49,221,231, 68,177, + 21,194, 0, 0, 32, 0, 73, 68, 65, 84,132, 16,135,122,210, 12, 89, 80,151,208,230,221, 64,193,199,204, 47,234,188,107,185,144, +116, 58, 1,125, 26,211, 84,241,110,100,137,105,210,231, 3, 3,203, 65, 66, 83, 38, 99, 62,205,195,111, 96, 34, 51,203, 62, 66, +142, 99,238, 4,154,131,102,180,132,201, 79,154, 51, 98,150,142, 15,153,134, 41,200,124,238,180,201,193,150, 47, 57,216,243,180, + 64, 78,182, 17,152, 63, 98,202,144, 20,210,188, 90,142,125,158, 13, 36, 7,234,154, 4, 57, 39, 20, 13,167,123, 82,220,131, 37, +143,200,204,250,134,220,214,123, 76,202, 33,203, 58,147,178,139, 23, 69, 44,190, 79,215,248, 51, 99,127,225,233,253, 51,175,159, + 18,105, 89, 88, 39,188,231,180, 56,139,237,188,108, 59, 71,159,224,155,222, 17,143,139, 80,100, 11, 36, 30, 64, 62,232,198, 52, + 57, 6,109,207, 49, 82, 86,212,149,245,116,207,207,190,125,197,154,225,250,244,150,119, 79,183, 88, 93,168,163, 58,141, 26, 34, +172,175, 94,241, 55,255,234, 79,248,235,111,132,191,255,167,183,188,185,244,240, 37,244,184, 68,237,163,135,234, 51, 34,171,127, +187, 62,243,238,245,247,188,126,247,204,203,209,255,192,120, 22, 72,162, 51,187,173, 80, 79,156,214, 19,231,229, 20,108,112,133, + 84,106,252,238,166,146,148, 83, 10,208,141, 74, 80,187, 4,110, 47,207,252,228,171,159,242,223,252,247,127, 5,183,157,255,240, +247, 55,150,124, 98,185, 91,192,149,247,239, 63, 48,218, 17, 25,243,137,239,209, 65,236,231, 81,142,113,176, 31, 47,120,187,178, +148, 68,215,149, 91,203,124,255,230, 45,251,245, 61,171, 36,238,238, 86,212, 66,137, 74, 54, 87, 36,214, 49,155,188,128, 18, 80, +165,173, 53, 24,157,165, 46, 65, 81, 28,193, 2, 72,105,161,151, 18, 10,211, 17,236,248, 69, 43, 37,215,169,153,236,116, 61, 2, +102,148,133,179, 69,212,104,117,195,108,160, 18, 24,213,172,137, 83,130,158,192, 69, 67,121, 74,137, 84,238, 56,174, 7, 41, 67, +173, 39,204,157,180,148,144,216, 70,164, 20,186, 55, 52,103, 52, 13, 84, 22,154, 25, 49, 64,198,229,128,212,217,122,167,119, 99, +191, 29, 52,119,218, 62,240,113,196,159, 21,165,230,130,119,137, 11, 77, 73, 48,110,248,161,236, 99,114,255,213, 97, 55, 18,209, + 7,208,236, 50,209, 90,157,230, 7,226,133, 34, 66,147, 22, 88,227, 4, 89, 19,125, 20, 46, 91,172, 27,214,114,166,232, 96,244, + 62,213,190,129,143, 78,167, 80,122,101,140, 27, 41,221,147,125,208,199, 17,208,165,174,200,114,194,250, 96,169, 43, 57, 87,210, + 42,113, 33, 28,193, 67, 88,242, 61,140,142,211,233, 22,234, 68,215, 45,232,126,163,115, 88,166,237, 1,231,233, 54, 98, 79, 47, +112, 52,167,106,152, 26,135,218,132, 7, 13, 82, 73,147, 73,176,204,174, 9,101,121, 88, 88, 79, 25,151,232,108,168,229, 1,181, + 74,150, 70,185, 91,112, 18, 37, 67, 27, 91, 12, 58, 61, 46,111,167,197,130,137,225, 7,212, 19,227, 58, 56, 68,216,125, 96,215, +128, 15,229, 57, 28,136,194,122,206, 36, 93,145,243,202,114,142,157,184, 29, 70, 89, 75,100,128, 37,145,151, 66,150,132,245, 88, +129,174,121,198, 3,179, 33, 20,114, 41, 60,156, 50, 63,249,238,187, 31, 61, 85,111,221, 57, 46, 27, 98,131, 87,119,153,188,222, +127,145,195,113, 27,112,123,217,200,182,243,234,171, 19,146,215, 47, 38,143,239, 91,195,142,141,251,234, 44,143, 15, 95, 4,148, +243, 57,163, 14,188,121,119, 99,123,247, 6,250, 5,213,248,252,185,135, 15,196, 59,236,109, 64, 13,117, 73,119,135,214,216,135, +177,239,161,138,221,221,175,236,109,208,201, 20, 77,236,126,227,118,187, 48, 42,228,177, 34,239,131,155,208, 44,206,179,163,237, +164,227, 66, 27, 78,250,238, 23,127,252,155,172, 97,116, 19,141,188,117, 87, 13,200,134,195, 32,226,108,250,153,160, 27,211,171, + 38,254, 80, 86,226, 51,163,155,130, 80,198,176, 57, 5, 8, 33, 46, 71, 30,219,108, 96, 35,136, 96,146, 34,215,109,170, 72,142, +189,152, 89,144,112,212,163,168, 69, 82, 69,179,196, 11,159,178,212,128,192, 97,166,112,144, 74,206,104, 17,100, 26,243,196,161, + 58, 12, 29,225,206,111, 62,127,168,134, 90, 24,234, 28,157,228,179, 17,248, 71,162,112, 37,101, 16, 73, 44, 89, 40,165,196,116, +167,160, 86,130,158, 39,177, 23,197,162,232, 70,240,136,228,232, 64, 72,168, 6,136, 70, 52,152,232, 17,145, 82,188,143,208,185, + 71, 60,140,149,248,128, 53, 59,102,236,203, 25,189,135, 44,159, 37, 28,251, 30, 12,252,254,252,158, 31,222,124,228, 67,187, 99, + 89, 22,138, 6, 63,191, 36, 7,105,124,120,186,226,158,240,110,147,159, 31,174,236,214,108,210,231, 36, 32, 55, 22,135,178, 58, + 33,188, 10, 81,194, 49,226, 66,247,234,171,123, 30, 11, 60,191,125,207,219,231,107,196,144,194, 66, 5,169, 96,110,156, 31, 95, +241,175,255,171, 95,243,215,191, 56,241, 15,191,253, 71,254,246, 31, 46,104,138,233, 90, 45, 12, 90, 38, 30,234, 73, 63,184,124, +124,205,239,191,255,158,151, 13, 36, 71,114, 32,105,130,233,189, 20, 55, 68, 11,229,124,226,254,116, 71,241, 17, 4, 64,159,166, + 76, 15,243,141, 38,141, 98, 16, 55,210,188,140,184, 12,178, 42,219,209,184,236, 27,255,230,191,248, 51,254,242,175,190,229,119, +255,241, 13,175, 95, 46, 0,188,249,151,127,226,210,131,116,182, 93, 55, 70,143,134,138,154,227, 33, 45, 3,198,112,172,135, 99, +191,181,141,170,202,221,253, 35, 57, 21,158,159,119,190,127,251,154,109,127, 38,139,112,119,122, 69, 90,163,244, 39,149, 37,232, +103, 99, 4,157,109, 57,131,134,161, 79,114, 65, 75,236,191,145,138,233,129,140,240,108, 8, 30,101, 38,147,160,152,212, 40,185, +208,243, 18, 46,239, 38,156,139,114, 48, 24, 85,177,173, 97, 30,114,111, 94, 78, 52,115,236, 56,230,132, 44,148, 82, 81,194,189, +175,245, 28,148,186,180,161,169,112,186,143,226, 28,245,240, 79,248, 24, 72,170,127, 88,249, 12,129,222,217,186,114,244, 29,134, +209,117,193,199, 62,119,193,225,117,144, 92, 81, 21,122,115,186, 24, 9,227,216, 15, 52, 79, 21,204,194,125,143, 10,122, 90,241, +174, 12,185,198,229, 88, 87, 22, 79,129, 17, 30,202,112, 13,197,100, 31,108,222, 3, 63,124, 28,152,183,224,253,223, 58,253, 8, + 41,183, 75,167,219,224,104,157, 84,207,208,199, 76,153, 58,102, 11,186, 36,116, 77,104,201,164,126, 71,169, 30,252,126,107,180, +230,208, 91, 68, 51,147,210, 83,199,124,224,118,144,180, 82,206,103,186, 23, 60, 13,164, 15,112,229,104, 71,196, 12,151, 68, 26, + 74,254,116, 9, 55,133,106,184,100,170, 66,170, 9,215, 19, 73, 50,233,161,178,228, 28,193,250,102, 97,100,237, 18,114,191,221, + 40, 89, 96, 81,218, 17,189, 25,227,118,141,105,138, 6, 75,194,196,233, 28,216, 40,148,226,241, 57, 78,137, 45, 53,114, 77,156, + 61, 62, 44, 41,223,147,150, 5,151,194,121, 89, 65, 32, 77,224,150,245,206,233,241,204, 87,119,117,238,234, 35, 26,103, 29, 36, + 23, 74,137,213, 27, 9,114, 73,212,146,209, 82,184, 63, 23,190,250,201, 79,254, 63, 64,222,255, 95,228,230,230,244,219, 6,214, +121, 56, 23,210, 23, 66,174,222, 58,244,109, 35, 99,220,223,175, 19, 62,243,227,191,118,135,253,210,232,251,198,195,234,212,187, +199, 47,234,126,127, 30,240,241,245, 70,187,188, 71,199,206, 49, 66,249, 13,119,103,248,167,180, 57, 69,160, 23,192, 22,170, 54, +146,102, 92, 42,244, 78,187,193,182, 95, 72,106,208,158,113, 63,200,174,212, 81,169, 52,154,100,246,108, 80,149, 85, 10,126, 90, + 16,140,109,111,164, 63,250,229,175,126, 83,167, 28,158,202,167,232,153,131,197,193,226, 56,202, 39, 51,154,207, 29,237, 60, 64, +244,211, 99, 63,220,213, 89,226,160,235, 76,227,154, 77, 64,205,136,195,206, 52,114,159,154,210,116,207, 70,169,131, 78, 73, 81, +211,116,183,165,233,138,247,224, 52,151, 20,113,187, 46, 66, 21, 13, 24,136, 8, 42, 1, 39,183,225,164,160,174,130,148,207, 25, +224, 56,212, 74, 28, 78,243,242,145,178, 32, 75,228,137, 73,144,194,189, 23,235, 7,155,251,250,249,109,228,156,200, 58, 39,238, +225, 20,145, 9, 68,144, 56,112,150, 40,106,137, 86,180, 68,111, 18,136, 70,130, 79,173,181,196,195,212,199,103, 50, 31,163, 5, +105, 78,230,129, 59,129, 13,138, 99, 35, 94,143,228,184,184, 28, 31,222,240,253,251,157,139,223,177, 36, 37,219,136,105,211, 7, +162, 74, 27, 78,235,246, 25,160, 98,163, 7, 27, 94, 50, 74, 96,110,101, 86, 35,137, 50,131,183, 66, 74, 30,175, 95,227, 50,180, +220,223,243,221,227,153,231, 15,111,121,255,180, 49,200,136,134,244,173,105, 65, 53,184, 0,223, 60, 86,254,244,107,184,188,254, + 23,254,151,255,227, 13, 77,239,169, 37,246,152, 34,147, 79,128,209,182, 11,223,191,254,158, 55, 31,158, 57, 92,200,105,101, 89, +114,196, 2, 61,156,178, 99, 56,185,156,169, 53,202, 95,232, 7,173,221,184,109, 55,182, 30,201,134, 49, 26,163,199,110,124,111, + 61, 34, 96, 46,225, 46, 79,159,248,254,202,203,229,198,119,223,126,197,127,249,111,255, 21, 15, 57,243,219,223,126,207,232,198, +239,191,255,129,189,109,172,229, 12, 26,110,246,118, 8,189, 53,212,133, 82,148,148, 66,212,145, 20, 68,249,222,110, 88, 31,148, + 2,231,135, 7,100, 57,113,185, 28,188,121,251,134,235,126, 33,171,243,187,127,254, 39,222,189,123, 77,126,184, 99,189,123, 64, +204,104,199, 17, 49,173, 37,146, 26,227,165,227,222,105,132, 41,212, 49, 52,101,146, 70,140,209, 61,179, 22, 33,151, 5,242, 9, + 21, 33, 81, 57, 21,161,105,236,208,185, 29,236, 99, 74,210,122,162,141, 29,183, 35,218, 4, 61, 83, 52, 14, 77,151,131,161, 14, + 35,212,129, 90, 21, 70, 35,155,177,155,208,110, 1, 86,146, 44,156,165,206,188,249,137,222,133, 62, 12, 27,141,177, 43,116, 24, + 82,209, 26,200,225,156, 43, 58, 34,115,109, 10,205,140,202,220,221,165,232, 15,136,230,174, 20, 23,153,229,132,245,142,217, 21, + 92,112, 47,152, 24,187,120,168,114,253, 22, 14,125, 39,168,106,158, 2, 99,235,157, 99,187,209,231, 37,135, 68, 76,184, 37,163, +235,153,180,174, 60, 44, 25,177, 40,124,145, 10, 69,150,144, 53,113, 82,143,203,134, 9,152,109,120, 19,178, 39, 6, 78,239, 55, +246, 35,214,103,234, 18,158,143, 34,209, 46,119, 75,140,110,152,100, 10,176,148, 59, 52, 21,180,119,146, 68, 33,213, 82, 22, 74, + 81,114, 93,144,226,148,165, 70,204,177,197, 67,116,164, 6,217, 41, 61, 46,113,174,142, 14, 67,178, 51, 90,168, 42, 57, 45, 88, + 3,219, 27,150, 66,113, 9,207,148, 80,124,197,233,228,164,148,116,226,160,147, 79,128,157, 88, 84,112, 93, 65, 51,119,165,196, +243,151,131,181, 46,164, 85,216,172,227, 93, 56, 37,184, 63,135, 65,115,213, 26,112,163, 54,216,247, 61,220,248, 22, 3, 80, 94, + 99, 40,114, 19,178, 22,190,126,120,224,225,171,111,126,212,158,218,129,151,109, 48,182, 27,202,224,225,126, 65,203,143,159,168, + 29,184, 29,206,126,121, 33,211,184,127,188,155, 5, 33, 95,224, 80,183, 80, 0,218,177,241,234,164,148,243,151, 65,207,126,250, +250,216,224,195,247, 31, 57, 46, 31, 25, 22, 30,160,222,183,207,235,236,222, 15, 14, 55, 40, 3,187,118, 6,138,228, 26,165, 85, +190,177, 62, 20,236,230, 52,235,129, 79,214, 78, 89,206,184, 20,218,209,105, 99, 58,229,207, 9, 1,246,113, 71,118,193, 24,120, + 55,210,207,127,253,171,223,100, 9, 3, 20, 8,210, 7,166,130,203,136,221,110, 14, 83,143, 78,221, 92,146,198,110,203,163, 34, +212, 92,226,128,246, 22,132,180,185, 7,246, 17, 92,243,195, 12, 73, 57, 14,154,208,211,113,157,211, 60, 97,124, 15, 73, 56,218, +209, 66,110,148,207, 85,176,242,201, 54,255, 89, 45,152, 13,102, 30,111,113,243,112,119, 39, 36, 80,130, 2,221,123,152,238, 44, +118,151,163,119,146, 57, 75, 46, 72,142,190,185,236, 97, 96,242, 96,148, 70,117,234,228,102,143,201,173,143, 3,153,144,206, 83, +180,101,185, 89, 60,240,146, 34, 35,152,240,197,149, 49, 39,208, 92, 34, 69, 32, 4, 49,206,198, 17,181,163,125,150, 1,142,168, + 97, 49,137, 70, 40,108,204,127, 71, 33, 73,138,239, 99,127,225,229,221, 91,126,120, 50,142,114, 71,214, 20,134, 64, 21,180, 6, +125,205,199, 39,183,125,200, 73, 89,125,250, 1, 18,154, 11,238,113,251,142,182,179,120,109,193,150,158, 30, 9,210, 36,224, 9, +167,101, 69,198,141, 55, 31, 94, 48, 41, 81,127,235, 18, 28,253,164,147, 69, 32,220,158, 95,248,251,127,120,205,255,246, 31,223, + 97,245,145,199,243, 18,211,143, 4,233,239,216,158,121,255,246, 7, 94,191,123,226,178,247,104,246,211,132, 36, 69, 69,241, 17, + 40, 90, 16,202,178,176,164,224,110,111,251, 78,235,141,214, 7,109, 76, 50, 95,104, 31,216, 24,180, 17,233,136,164,177,246,145, + 89,235,203, 84, 34,156, 65,223, 7,255,237,191,254,115,254,147,255,236,103,188,253,251,247,188,127, 26,172,167, 59, 62, 60,189, + 13,233,122,185,139,203,164, 10, 93,102,196,110,214,215,230,186, 48,124, 48,182,142,229,232, 34,196, 6,163, 55, 42, 11,231, 90, + 89,239, 94,241,124,217,249,253, 63,255, 51,255,242,230,137, 15, 79,207,188,188,127,139,238,141,188, 20,150, 83,161,212,115, 72, +197,251, 49, 83, 17, 35, 46,159, 6,201, 67,169,193, 21, 41,137,178, 46, 48, 7,188, 92,107, 48,249, 75, 71, 74, 67, 85, 24,150, + 25, 45,222,167,154,227,194, 52,128,146, 18, 75, 73,147,116, 56,216,221,195,244,169, 53,240,198,147,140, 37, 41,162, 50,163,119, + 12,101,247, 9, 80, 74, 7,151,173, 49,142,198, 62,118, 26, 61, 62, 87, 93, 73,185, 64, 9,102, 66, 73,209, 2,213,109,144,150, +130,179, 70, 15,132,100,178, 57,229,156,226,242, 59, 12,203, 70,201, 57, 34,167, 12,218, 0,247,112,173,251,126,155,165, 73, 39, +250,245, 5,115,231, 54, 47,167, 39, 3,100,165, 21, 33,105,225, 84,239, 57,165, 96,173,215,243,202, 82,156, 37, 9, 53,175,208, +110, 44,105, 33,105, 20, 48,221,218,193, 96, 80,189,145,115, 72,252, 62, 90,168, 47, 20,250, 98,220,246, 78, 59,118,100,173,168, + 20,180, 31, 51,154,154,162,242, 56, 65,249,116,209, 79, 74, 87, 37,157,156,251,165,198,192,144, 21,107,123,148,162,152,224,150, +162, 25,173, 57,102, 29, 43, 13,245, 76,239, 59,189,197, 26, 99,120,163, 51,104,173,161,203,138, 30,206,201,157,203,104,113,233, +211, 40, 13, 93,203, 35,217, 59,156,141, 85, 43,126,190,103, 77, 5,183,138, 13,227,188,102,146, 13,140,142,155, 82, 93,169,119, +133,156, 42,101, 12,110, 99, 96,162, 88, 55,214,187,196, 90,114, 76,249, 34,108,219, 1, 14, 85, 3,193,253,105,109,133,164, 32, +126,162, 44,185,240,245, 55, 15,220, 61,188,250,209,241,173,235,203,134,143, 3,177,193,253, 93,249, 34,135,186, 1,151,203,160, +237, 23,150,228,156, 31,239, 34, 78,253, 37, 20,128, 22,235, 2,252,224,225, 36,228,211,195, 23, 59,212, 13,120,251, 60,120,121, +251,129,126,123,194,245,192, 13,154, 55,220,140, 91,100,138, 73,187, 49,186,224, 57, 33,214,233,215, 70, 74, 80,236, 64,110, 7, +151,124,163,100,160, 4,246, 58, 12,171, 55,118,110,136, 8,235,114,162, 90,134, 22,102,200,177, 95,240, 60, 11, 93,126,241,171, + 63,254, 77,206,130,247, 9, 90, 17, 80,153,249,115,143, 9, 85,230, 55,130,199, 58, 86, 73,145,145,251,212,127, 62, 26, 46, 66, + 65,104, 12,204,108, 78,227, 18,187,230,249, 7,117, 70,220, 2, 63, 26, 83,146,230,104,120, 83,205, 32, 22, 38, 21, 98,207,158, + 36, 98, 24,195, 66,138, 21,241,217,228, 54,235, 54, 5,146, 24,185,204, 7,189, 24,101,102, 4, 99, 47, 62,240,168,152,195, 83, + 16,166,134, 43,244, 56,116, 69, 67,150,180,217,102,230, 18, 7, 50, 54,226, 48,243,136,233, 49,156,180,230, 72, 75,245, 6, 35, + 20,135,195,156,164,179,192,195, 52,254,172,198, 37, 39, 17,255, 46,153,197,195, 18,237,163,241,115, 67,166,115, 54,104, 96, 42, + 35, 30, 54,217,145,253,194,229,253,123, 94, 63, 43,190,124, 77,201,225, 91,144, 42,212,236, 44, 26,185,251,162,144,147,115,180, + 30, 56,206,225,116, 9,156,171, 8,179,109,106,129,148, 16, 41,164,153,106,136, 5, 74, 40, 10,104, 20,183,200,216,217,183, 78, +159,107, 15,119, 65, 74, 33,231, 48,239,185, 15,108,236, 28,189,179, 53, 48,148,187, 87,175, 56,175, 65, 46, 43, 24, 79, 79,239, +120,251,246, 53,111,159, 55,246, 99,252,161,207, 88,102,251, 15, 62,163, 84,153,156,194,233,123,236, 55,142, 99,208,137,139,134, + 77, 42, 68,236,217, 37,204,137, 51, 44, 33, 18, 70, 41,141,107, 35,130,145, 85, 98,253,146,224,195,135,143,252,252,155,111,249, +171,191,249,107, 22,223,249,219,255,240, 3,235, 87, 95, 49,172,243,238,237, 59, 78,245,140,150,130, 89, 99, 73,133, 92, 23, 26, + 25, 27, 29,119, 35, 91, 40, 80,119,223,252,148, 68,229,216,119, 64,113,139,149, 64, 54,103,173, 11,229,238,129, 82,214, 32,141, + 53,231,253,135, 15,188,123,251,154,236,177, 75,247,180,124,246, 44,160, 5,179, 68, 73,160,158,217, 37,100, 89,201, 11,248,129, + 91,167,214,115,236,178,246,184, 48,230, 44,220, 47, 43,205,156, 46, 7, 42, 5, 87,161, 22,199,114,157,253,242,138,246, 96, 64, +104,206,129, 80, 62, 6, 57, 11,110, 71, 56,193,139, 81,134, 17,214,177,152,198,155, 89, 32, 94, 75,142,131,175, 57,121,241, 89, +242, 19,114, 78,145, 80,206, 78,231, 20, 60,136, 96,189, 66,107, 28, 30, 85,183, 73, 15,132,120, 93,133,216,221, 38, 61, 49,218, +142,154,145,189, 68,221, 41,141,126, 4,134,150, 36,208, 52,126,247,101,137, 53,132,103,214,116,130,121, 73,233, 57, 69, 67, 96, +118,154, 58,158,102,197,241, 22,151,151, 75,187,197, 10,165, 40,216, 65,201,145,135,247,158, 73, 56, 71,119,108,148,160,198,141, + 24, 30,196, 18, 69, 42, 73, 7, 53,215,112,229,159, 86,210, 90, 65,160,158, 50,230,131,181,156,177, 17,125, 22, 34, 11,251,113, + 65, 70,152, 24,247,100,193,207, 16,197, 24, 52,219,163,220,167, 29,100,117,100,100,172,244, 96,124,175,161, 92,164,188,146,125, +150, 93, 49,184,171,149, 36,142,231,133,186, 4, 81, 81,114, 13, 72,149, 20,178,158, 73,205,104, 62,168,167, 66, 46,198,118,117, +178,220,179,172, 9,201, 25,215,134, 47, 53,222, 83, 18,126,165, 36,194,178,172, 92,175, 27, 46,137,214, 6,251,136,231,120, 73, +225,141, 74, 37,124, 62, 90,148,148, 43,226,137,245,156,249,230,155, 87,172,231,251, 31, 45,101, 95, 47, 59,214, 27,201, 7,247, +143,167,185,106,251,241, 89,239,235,181, 99, 19, 96,116,186,191,255, 34, 57,245, 1, 92, 54,167,111, 27,222, 14, 94,221,159, 72, +203,249,139, 77,233, 59,240,246,217,184,124,124,130,237, 18,173,165,210,241,214, 57,134, 99,195,232, 61, 81,117,198,200, 55, 97, +180,144,209,181, 24, 55, 41,236,123, 39,149,196,169,221, 33, 45,206, 76,109,141, 37, 59,139, 59, 62,140,135,229,196,199, 22,230, +228,193, 51, 57, 59, 69, 6,173, 85,210,207,127,249,235,223,100,241,217,170,149,230, 35,127, 26,226,116,230,153, 93, 63,115,210, + 61, 71, 32,234, 83, 67,154,166, 0,184,248,164,195,137, 76,119,173,164,233,148,143, 73, 91,197,201, 85,131, 2,103, 97, 14,227, + 83, 97, 12, 78,250,108,139, 87, 52,167,217, 16, 22,187,250,148, 35,202, 70,207, 33,183,123, 64,104,164,132,105,169, 16, 46,114, + 60, 5, 2, 54, 7,113,202,124,174, 1, 36, 26,198,240,196,154,163,174, 51,226, 94, 18,120,206, 52,226,112,183,216,125,135, 50, +173, 33, 37,210,195, 84,214,227,181, 40,225, 98, 31, 62, 62,119,244,154, 27,163,183,248, 89, 77,226,158,155,127, 86, 19,178, 66, + 55, 67, 36,227, 62, 72,174, 84,141,150, 52, 21,157,253,240, 80,188,115,123,122,207, 15, 79,224,245, 43,238,214, 68,182,131,163, + 13, 74, 86,170,166,224,101,167, 18,253,188, 71,103,140,193,214,162, 61, 15, 15, 32, 65, 38,248,250,250, 9, 4,132,144,103,163, +156,187,135,179, 94, 9,251,191, 38,124,174, 34,100,170, 23,193, 4,136,201,207, 90,163,247, 3,179, 96,247,187, 15,114,202,124, +243,234,107,150, 53,115,123,249,200,235, 31,126,199,155,247, 79,220,142,160, 0, 78,205,103,174,116,194, 80,232, 61, 10, 87, 96, + 70,111, 70,195, 70,195, 52,135,188, 63, 2,151, 26,239, 51, 1,140,148, 38,141, 76, 34, 94, 41, 26,168, 75,239,125,122, 2,210, +103,179,102,223, 7,125,119,254,221,191,253, 11,190,249,246,158,223,254,221, 91,110,251,224,171,239,190, 98,223,111,188,121,251, +142,122,119,199,185,174,180, 54,102,212, 50, 24,246, 46,112,220, 26,121,169,252,228,171, 71,220, 32,157,239, 17,148,219,229, 25, +243,198,101,108,140,118, 99,205,153,243,233,196,178,222, 5,189, 78, 59,173, 27, 31, 62, 62,241,238,205,247,152,118, 78,165,134, +107,220,163, 64,164,164,130,201,193,222,111,104,248, 74, 3, 60,131, 99, 18, 85,196,203,242, 42, 98,154,222, 98, 66,235, 53, 74, +121,206, 5,107,209,120, 70, 79,152,237,172, 37,209,123,195,106,133,226, 36, 51, 20,168, 10,187, 27,169, 40,119, 9,172, 21,134, +100,140,193,184, 5,213,106,200,244,122,144,163,166,216,227,146, 80,207, 41, 14,163, 20,128, 35,241,132,244,184, 26,163,131, 49, + 34, 39, 94,172,133,252,108,209,113,208,145,105,168,212,240, 85,176,208,251,141, 92, 10,230,194,178, 60, 34, 39, 65, 44,192, 86, +154, 50, 89,194, 75, 66, 45,108,227,134,181,141,190, 55, 6,157,158,133,222, 21,219,247,152,186, 15,184,141, 35, 96, 61, 30, 21, +184, 90, 22,250,209, 88,169,216,128, 81, 98, 37,151, 52,145,179,178,230,168,115,246, 52,168, 90,201, 37,136,119, 94,149,187,111, +238, 88,206, 95,131, 57,165, 84, 76, 50,230,137,210, 58,121, 73,136, 21,246,125, 99,152, 35, 26,172,237,228, 3,187, 54,124, 12, +142, 61,158, 5,195,140,156,239, 73, 90,102,220, 87, 24, 54, 34,123,223,149,164, 21,179,152,190, 68,157, 37,159, 25,101, 97, 89, +239, 73, 73,105, 35, 46, 97, 41,215, 88, 1,202, 64,170,227,116,138, 9,178, 27,141, 28,106, 89, 54,154, 43,150, 19,146,161,220, +165, 96, 65, 12,153, 42,152,211,250, 76,248, 88,128,182,114,157,105,133, 20, 41, 19,213, 32, 62,230,153,135, 63,157, 78,124,247, +237, 43,202,143,220,127, 15, 96,187, 70,157,239,162,198,253,171,251, 47, 18,103, 27,192,229,229,192,142, 27,143,119,153,114,250, + 50,113,182,144,245,141,125,219, 88,232,188,250,250,203,100,234,255,239,206,250,119, 47,131,151,247,239,144,254,204,176,142,249, + 65,107,131,225, 97, 12, 94,134, 65, 82,142,222, 32, 39,198, 28,168,245,206, 40, 71, 97,147,134,228, 19,151,235, 7,204,118,210, +169,146, 10, 92, 71,133,154, 89, 87, 56, 88, 56,182,157,158, 78, 28,118,163, 54,165,114,166, 31, 27,233,143,126,253,167,191, 17, + 27,241,166, 34, 42, 53,133,142,248,236,244, 78,241, 97,205, 42, 72, 9,135,117,128, 68, 20, 77, 37,100,120,201,224,105,190,121, + 34, 98,225,248,140,197,197,154, 59, 14,104,141, 27,227, 52,105, 33, 26, 86,127,241,120, 96,127,218, 39,143,152,144,181,196, 20, +178, 38,197, 38, 39,155, 36, 44, 41,118, 43,158,162, 45,204, 45,104, 91,136, 80, 74,138,102,247,230, 36,139, 73, 82,210, 64,166, +155, 85, 83,166,141,241,185, 49,202,103, 78,187,225, 32,153, 44, 6, 57,232, 85, 54,140,241,233,118, 51,121,190, 33, 99,199,161, +159,138,146,137,135, 80,184,145,132, 36,177,146, 24, 35, 34,122,154,102, 73,138,133, 92, 28, 38,189,129, 17,125,235,145,213, 14, + 95,194,126,125,207,235,247, 59,123,126, 96, 41,130,183, 43,221,102,116,173, 36,242,186, 70, 92,237,176, 9, 52,216,184,236,159, +192, 26,193,218,207, 51,238,229,113, 46,198,195, 24, 67,137, 61, 59, 50,163,137, 54,232,163,147, 83,249,124, 25, 49,139, 24, 98, + 89, 42,171, 68, 87,116, 31,141,222,123, 0,125, 36, 38, 87, 93, 42,143,143,103,246,143,239,120,251,254, 3, 47,123,159, 53,169, +194,108, 83,137,184,154,235,140, 74,198,229,108,244, 30, 44,248,209,233, 30,242,225, 12,212,199, 84, 53, 83, 15, 50, 49,181, 50, +223, 79,238,127,152,208,153,221,235,228,144,244,179, 72,228,159, 83,230,242,124,229,207,127,253,115,254,244, 23, 63,229,223,255, +237,247,120, 55,202,186,112,247,240, 53, 31, 62,188,227,122,121,102, 21,193,146, 16, 1,131,142,122, 9,247,183,100,214,211,137, +177,109, 28,125,231,103,223,125,203,126,188,240,244,252, 68,242,224,235,119,139,142,238,225,157, 90, 18,181, 44, 20, 57, 81, 31, + 31, 35, 31,189,117, 62,188,127,226,249,205, 91,220,140,243,249, 14,213, 5,147,157,156, 18, 99, 8,165,220, 35,122,224,166, 72, + 15, 21,163,228, 26, 80, 32, 29,113, 72,137, 4, 74,119, 24,213,207,120,115,116,169, 88,219,105,132,236, 45, 53, 62, 35, 41,105, + 92, 2,204,217, 61,250, 24,232, 6, 86,241,147,176, 95,119,246,190, 35, 53, 7,134, 57,173, 17,215,179, 68, 57, 37, 78,121, 33, +165, 65, 45,137, 53, 21, 78,181,208,232,228, 28,210,251, 49,169,141, 93,132,228,241,158,237,233, 76,187, 93,145,114,130,217, 29, + 97, 12, 52, 71, 79,173,106,172,112,244,148,145,146,162,184,198, 50, 3, 67, 37,145,203, 39, 18, 86,163, 15, 65, 77,241,234,100, + 25, 28, 91,143,194, 17,140,194, 9, 23,167,206,244, 13,229,204,242,120,162, 28, 35,212,155,156, 89,214,202, 16,229,148, 11,185, +206,139, 90,214,248,121, 29,157,243,114, 38,223, 69,203, 99, 53,165,239,142,136,113, 46,130,245,131,253, 22,196,175, 97,129,164, +109, 54,224,232,108,121, 67,134, 96,187,210,116, 71, 60, 32, 62, 94, 4, 60,147, 21,242, 57,192, 89, 34,131,106,137,187,122,130, +188,132, 17, 82, 64,181, 83, 82,102, 80, 67,221,233,141,146, 34,203,238,226,208, 5,125, 88, 41,165, 35,195,105, 67,168,118,166, +123, 99,179,142,100, 65,233, 12, 87,210, 41,158, 71, 92, 59, 39, 34, 22,120,119, 58, 33, 67, 57,223, 9, 11, 5,177, 66, 87,161, + 86,161, 2, 78, 92, 46, 85, 61,146, 7,249,140, 76,236,118, 74,202, 79,127,246, 77,168,121, 63, 50, 75,126,220,110,120, 31,156, +146,179,190,186,255,209,198,187, 79,123,239,237,218,160,109, 60,156, 43,105,253, 50,230,187, 1,236, 55, 99,236, 55, 22,233,156, +191,186,155, 62,172, 47,231,124,127,255, 97,231,246,241, 25,179, 43,105, 24,251, 17,229, 69,184, 71,111,135, 57, 62, 18,173, 25, +189, 26,168,114, 90, 19,126,105,112, 51,198, 82,192,141,179, 15,242,131,210,155,193, 67,133,182, 33,253,160,249,100,248,203,153, +114,223,240,125, 32,102,244, 82,121,185, 61,147,126,249,199,191,252, 77, 78, 25,199, 41,146,167,227, 56, 0, 45, 51,199, 70, 77, + 50,203, 90,102,174,108,182,158,185, 59, 99,180,248,115, 4, 81,234,147,179,156,153,199,158,231, 8, 54, 34, 22,149,136, 15,213, +167, 26,214, 20,218,234,148,187, 67,214,206,162, 65,219, 74,153,146,106,132, 16,220, 98, 79, 44,128,134, 81, 76, 71,236, 44,155, +199,148,169, 50,144, 20,117,169,237, 48, 44, 65,205,204,250,206,193, 16,159, 77,110,132,145, 77,130,210, 35,204, 3, 57, 11,181, + 8,160,180, 99,246,181, 47, 33,161,125,202,232,227,225, 42,151,153, 16,208,154, 35, 27, 58,223, 50,161, 14,132, 67,247,147, 67, +223, 62,253, 76,230, 62, 75, 92,208,249,128, 12, 6,126, 66,182, 39,222,188,123,226,201,206,172,235,138,200, 1,250, 64, 93, 87, + 78, 69,226, 16,203,153,146,230, 30, 63, 11,183,163,197, 94,102, 86,201,250,188,212, 12, 62,237,210,136, 30,233,249,223,221, 71, + 52,216,165,169, 94,104,250,220, 96, 87, 92, 49,205, 44,229, 76,146,192,208, 90, 50,124, 68,164, 39,215,105,244,243,136, 33,113, + 92,121,255,225,194, 97,243,226,166, 78, 22,226,205, 75, 96,135, 83, 42, 56,134,245, 49, 47, 50,161, 96, 32,142, 72, 72,144, 19, + 59, 19,112,162, 79,198,190, 32,228, 68, 92,201,163, 3, 62, 37,137, 73,222,237,115, 79,187,166, 0, 22, 5, 19, 64,217,246,141, +119,111,174,252,236,241, 91,126,120,234,188,185,117,124,100, 78,167,202,215,175, 30,121,121,255,196,219, 15,239, 80,235,148, 20, +177, 49, 27,241, 26,115, 81, 94,173, 75,252,253, 34, 12,107,124,124,251,251,176,124,214, 18, 43, 41, 66,250,210,148, 81, 58, 62, + 6,231,245,158,191,252, 87,127, 77, 89, 31, 57, 90,244, 4,140, 49,248,248,252,204,243,135,183,208, 27,231,187, 51,230,131,101, + 93, 40, 57,212, 45, 52,212,147,122, 82,210, 90,195,252,216, 59,218, 13,187,171, 68, 82, 84,241,209, 41, 98,228, 53,147,146, 82, +151, 59,180,109,104,130,118,219, 81,115, 32,199, 69,210, 19, 57, 27,157,198,216,194,221,223,218,160, 38,157, 77,116, 43,119, 37, + 6, 19, 95, 66, 49,169, 89,209,228, 84, 73,228,147,194,112,108,115, 68, 15,250, 41,222,187,126, 52,218, 40,209,231,224,198, 80, + 71,107,139,136, 41,134,247, 78,174, 10, 82,195, 69,159, 27,154,203,188, 56, 94, 97, 3,134, 49,124,199,247, 30,117,200,122, 48, +134, 49,100,208, 92,201,221,232,107, 70,205, 98, 60, 39,161, 90,209,101,153,139,111,135, 10,107, 78, 49,225, 62, 20, 70, 90, 66, +245, 51, 33,149, 51, 70,116, 83,156,171, 66, 86,110, 71, 15,114,221,225,116,223, 3,185,236, 30,106,227, 17,201, 15, 75, 7,200, + 65,117, 97,183,198,232, 97,248,181, 49,137,113, 37, 62,199, 82, 3,222, 18, 43,192,206, 90, 11,178,199, 64,112, 62,223,115,244, +206, 16,161,164,131, 98, 9, 77,117,254, 39,214, 77, 34, 3,145,194,214, 14, 22, 9,178, 99, 87,195,142,107,184,249,147, 82,100, +161,209,161,116, 74, 90, 33, 13, 44, 9,203,140, 16, 10, 70,154, 0,172,135,181,210,247, 57,141,175,209, 18, 56,122,139,109,201, +140,103,105,214, 32,125, 78,179,165,171,225,196,244,126, 94, 51,223,125,247, 93,164, 87,126,204,225,219,103,178,100, 52,238, 42, + 44,119,247, 95,196, 73,190, 15,216, 46, 55,164, 31,220, 63, 44,164,186,126,177, 73,250,122,109, 28,251,198, 89, 7,167, 87, 15, + 97,174,248, 66, 95,215, 1,207,111,174, 28,207,207, 28,219,133,214,119, 68,156,162, 18,102,206, 99,160,199, 44, 26, 27, 10,199, + 96, 79, 87, 60, 37,122, 83, 90,143, 40, 49, 26,113,228, 37,156,157, 60,191, 24,119,122, 34, 23,103,219, 19,180, 65,117, 99,244, + 29, 77,142,101, 37,231, 29, 25, 78,250,229, 47,130, 40,247,169, 82,214, 60,220,210, 62, 31, 98, 34,177,219,140, 46,233,185,207, +211, 40, 50, 17,145,144,234, 36,118,220, 99,102, 41, 17,155,221,219, 68,172,205,137, 15,201,188, 39, 12,143,189,178,164,132,228, + 20,123,198, 56, 11, 80,145,184, 79,249,148,217, 25,211, 44, 21, 7,165, 70,112, 30,245,105, 12, 27, 81, 52,195,136,202, 82,235, + 19, 51, 27,139,101,178, 36, 58, 18,132,174, 17, 53,118, 41,167, 48, 2,150, 28,153,239,217, 21,239,201,145,254,105,122, 54,172, +123, 76, 28, 40,189,219,188, 80,232,188,137,202,244, 19,204,137,115,150,222,216,236, 73,119,226,161,208, 71, 32,101,139,214,200, +210,231,248, 25,139, 70,146, 0,132,108,131, 15, 31,222,242,182, 47,172,231, 71,178, 93,130, 4,118,119,230,254, 28,123,123, 23, + 69,117,230, 84,243,224,182, 53, 30,191,251,150,159, 62, 40,207,215, 3, 47, 57,186,237,213, 62, 99,106, 53,197, 78, 92,100,102, +232,165,144,209,144,211,221,200, 17,226,143,219,123, 45,228,178, 6,209, 78, 51,163, 93,113, 83,150, 28,149,154,102,145,107, 64, + 19, 62,226,247,220,198,248,124,128, 99,246,153,158, 38,170,164,148,195,213, 48, 34, 74, 52,204,131, 38,244,121,205, 19, 44,127, +199, 35,190, 40, 18, 63,115, 62,173, 74,130,176, 87,210, 92,189, 76,233, 65, 98, 81, 31,239, 21, 52, 50,226, 81,161, 67,206,137, +119,207, 87,174,214, 40,245, 1, 43,153,222, 12,117, 37,173,153,111,127,242, 71,148,122,226,249,253, 71,246,219,141, 97,141,164, + 81, 67, 9,157,164, 70,213,194,253, 82,120,126,126,226,195,243,109,238,139, 97,201, 37,218,148, 60, 86, 38, 46,177,242,209,190, +211,219,133,135,135,123,190,126,248, 26,175, 57,136,134, 24,219, 24,188,127,247,150,203,211, 91,126,120,255,134,203,211, 7, 94, + 61,124, 75, 22,101,213, 4,218, 73, 75,101, 41, 29, 79, 78, 41, 5,205,153,147, 59,137,138,136, 80,178, 98,139,225, 71,166,158, + 50,181, 15, 88,148, 29, 71,252,204, 41,101,250,112,134, 54, 16,225,184, 70, 50, 37, 75,162,215,168,128, 37, 25,244,142,148,130, +150, 66,219, 27,107, 86, 30, 78,143, 49, 85, 6, 11,149,253,118,176,155,161,107,193, 70,141, 9, 97, 56,201,157,182,117, 6, 78, +118,103,116,103, 77,137, 67,140,163,141,104,169, 59,194, 12,232, 75, 66, 70, 66, 77,176,237, 8,229,203, 58,189, 53,122, 15, 40, +202, 90, 79,244, 91, 24,208, 82,142,125,250,189,156, 98,106,215,204,178, 70,186,225,112, 1,233,104,141,202,222,220, 2,153,139, +164, 48, 92, 14, 65,220,103,236,199,241, 50, 88,214,130,155,243,114,233, 65, 18, 20, 24,253, 32,137,114,219, 59,169,128,250,194, + 97,141, 54,241,201,203, 88, 73,146, 25,185,144, 69,194,211, 42,144,181, 34,213, 89,150,133, 59,114, 96,161,211, 3,153,196, 54, + 58,139,174,211, 56, 12,249, 20,184,103, 63, 42,182, 4,131, 65, 60, 74,139,106, 25,220,246, 29,146,112,242, 2, 37, 98,114,150, +140, 69, 86,144, 74,223, 6,148,140,165,140,141,134,186, 83, 83,101,185, 95,144,107,163,121, 37,201,194,227,253, 29, 57,175,236, + 87, 11, 86, 65,178, 48, 72,137, 98,105, 80, 36,179,212,244,185,238, 25,148, 60,235, 86,133, 17,165, 59, 37,113,127, 90,248,246, +187,111,127,244,129,118, 61,140,227,186,225,222,185, 95,132,114,254, 50, 40,215, 91,119,110, 79, 55, 10,141,199,135,245,139,236, +233, 63,161,103,111,215, 70,219,119, 30,171, 83,191, 16, 40,231,211,215,135, 1,207,239,158,185,189,188,167,219,117,174,106, 60, +146, 18, 67,105,195,104, 24,108, 54, 89, 7, 70,219, 58, 91, 19,134, 42, 99, 7,218,129,152,210,113,210,128, 75,106, 72,191,197, + 37,180,117,154,247,168,250,178, 30, 60, 15, 75, 84, 41,228,205,184,108,157,244,211, 95,253,234, 55, 49,129, 79,110,123,138, 3, + 91,103,107,155,169,205, 58,210,192,185,106,154,230, 50,137, 76,183, 50, 93,225,201,144,233, 34, 23,209, 9, 9,153,242,111,138, +155, 51,234,209, 64, 69, 0, 33,146, 70,155,144,216,192, 44,140, 44, 62,101,111, 62, 81,213,231, 78,213, 37,148, 2,225,211,222, +218, 63,205,120, 84,173,161,144,103, 69,107,130,209,162, 77,110,238,185,162,127, 60, 12,126,154,192,109, 96,157,153,123,158, 59, +220, 2,185,199,255,247, 19,182, 69,101,102,231, 53,178,242,146, 52,100,102, 79,177,211, 23, 24, 71,240,219, 37, 23,176,128, 87, + 0,241,218, 82, 10, 68,174,197,170,192,109,204, 28,119, 68,218,178,134,114,113,123,121,205, 15, 31, 21,150, 7,214,124, 99,140, + 78,210,194,253, 67,230, 62,199, 19,166,148,200,188,215, 42,200, 56,216, 44,243,167,191,254, 57,127,241,179, 51, 31,158, 95, 72, +185, 96,162, 81, 85,170,137,154,211,108,199,171,224,198, 34, 39, 28,167,141, 3, 81,231,180,172, 33,197, 79, 31, 68, 42,143, 36, + 45,129,185, 84, 99,223,142,160,251,169,211,134,205,140,117, 28,112,189, 7,217, 79, 38, 26,183,207,200,158,207, 75,153, 68, 75, + 14, 71,239,211,103, 56,189, 22,159,126, 99, 18,235, 2,183,120,109, 41,110, 68, 97, 84,156, 74,202, 39, 47,169, 32, 1,244,209, + 50, 47,155, 51,111, 79,236,216,179,166,144,247,137,247,211,209, 54, 46,205, 57,127,251, 45, 53, 29,108,109, 76, 45, 34,113, 42, + 5,236,153,223,255,240,154,158,206, 65,240,243, 35,154,208, 12,142,163, 49,128, 54, 58, 79,215, 27,157,130,229,144,205,197,102, +175,124,157,181,181,226,244,126,176,245,198,251, 15,207, 60, 63,253,128, 31, 55,150,186,112,126,120,164,212, 51,210, 99,197,177, +217, 96, 63,140,219,214,232, 45,254,254,203,243, 19,248, 96, 52, 99, 59,140,197, 21,205, 80,178, 80, 40,140,179,224, 35,133, 25, + 12,153,242,233,137, 61,117, 90,107, 97, 56,235,133,231,237,138, 75, 96, 40,123,219, 35,167,236,137,221,123, 64, 96,114, 71, 83, +162, 8,156,151,202, 82,132,180, 38,210,150,232,121,196, 82, 99, 24, 67, 50,142, 48,198,160,156,148,100, 97,194,204,186,176,117, +240,201,117,239, 51,145,178, 31,145,101, 95,180, 83,164, 32,189, 35,139, 96, 86,233, 71, 35,173, 2, 68, 73, 81, 78,144, 78, 5, + 19, 97, 41, 18, 81,215, 82, 57, 45,103,196, 14, 50, 9,207, 37, 64, 62,154, 41,231,132,105, 34,175, 37,216, 17, 71,184,207,149, + 83,148, 10,181,151,184,231, 81,162, 65, 15,235,208,156, 0, 0, 32, 0, 73, 68, 65, 84,177, 74,112,231,107,124,207,251,177,115, +140, 62,115,249, 17, 87,236, 35, 16,198,247,247,143,104,183, 32, 36, 86, 67, 45, 69,215, 69,118,106,173,161,170, 17,112,160,240, +115,156,168, 75,194,118,101,200,142, 18,234, 66, 78,194,186, 22, 18, 97,140,141, 5,154, 97,148, 9,205,137,247,254,222,250,132, +211,212, 0,118,141,192,132,186, 53, 50,202, 80,167, 75,166, 72,166,181,134,211, 40,227,142, 69,238, 40, 94, 88,213,217, 83,226, + 62,215,160, 54,110,157, 94, 66,177, 40,139,145, 74,225, 76, 32,136,179, 42, 82,167,163, 69, 62,213, 70, 15,178, 46,225,223, 24, + 78,201, 5, 69,185,187, 91,249,250, 39,223,254,168, 3,205,128,203,173,195, 30, 13,118,231, 69,169, 95,224, 80, 55,224,122, 29, +244,237,138, 90,231,254,254,244,197, 50,234,183, 6,251,243, 13, 27,141,115, 26, 44, 15, 95,102, 93,240,233,251,254,248,113,240, +244,254, 45,215,203, 71,220,110,140,225, 12,194, 32,235,238,216, 30, 24,232,156, 43,151,100,108,210, 65,207, 84,203, 12, 57, 16, +239,113,158,173,112,108, 87,252,188, 34, 35,207,129,106,112, 53, 35,157, 87,250, 6,153, 30, 83, 44, 3,124, 99,219, 14,140, 74, +142,178,140,140, 43,140, 22,192, 2, 36, 32, 6, 33, 55,199, 84,101,115,207, 53,154, 71, 60,109, 76, 82,172, 31,179, 60,100,238, +224,125, 10,186, 46,243, 97, 30,221,235, 35, 15,100,132,147, 93,243, 4,192,244,246,217,192,134,135,123, 91, 52,238, 0, 99, 56, +163, 27,170,138,149, 76, 50, 65,122, 72, 86,185, 6,183,122,180, 30, 49, 27,143, 31,148,154, 96,173,205,143,215,108, 46,114,229, +255, 98,237, 93,123, 52, 75,175,243,188,107, 61,167,189,247,123,168,170,238,158,158,238, 25,246, 12,135,164,117, 0, 21, 69,176, + 12, 57, 78, 16, 56, 65, 28, 36,254, 89,250,158, 31,148,111, 9, 16, 5, 65,108, 41,144,109,201, 36,101, 82, 34,103, 56,167,158, + 62, 85,213,123,218,251, 57,173,124, 88,187,155,148, 19, 3, 6,212, 5, 16,232, 30,206, 84, 87, 23,234,125,247,243,172,117,223, +215,213,229,237,224, 95, 17,111, 62,225,222, 42,210,189, 25,142,156, 85,112, 82,143,212,160,235, 11,221,210,187,189,118,156, 38, + 66,247,116,223,241, 42,166,143,244,206,242, 4,206,211,123,167,149, 66, 8,182,211,124,203,161,199,217,139,205, 5, 59,224, 4, +103,183,133,170,157,168, 30,231, 61, 75, 57,243,205,155, 76, 30,158,112, 21, 27,189, 46,228, 62,112,117,181, 97,183, 77,104,110, +132,104, 24,203,224, 6,180,158,121, 94, 60, 15,110,174,217,199, 70,240, 3,211, 52, 50,202,200, 33, 47, 28, 15,106,226, 24,105, +246,144, 14,110,245, 64, 43,229,114, 36, 4, 33, 14, 9,212, 17, 69, 81, 31, 33,237,136,126, 64,122,179, 85, 75, 93,152, 9,168, +111, 76,155,192,249,214,104, 71, 97, 8,107,226, 94,168,170, 56,111, 1,157,134, 9, 34, 88, 25, 6,181,118,171, 59,245, 53,236, +182,194, 99, 84,127,195, 54, 48,249,143,190, 11, 64,233,186, 91, 71,204,244,164,118, 37,183,112, 94, 45, 54, 38, 14, 3, 26,196, +156,228,235, 65,176,181, 85,213, 91, 59, 89, 28, 55, 15,191,199,147,143, 62,195, 17,240,218,205,102, 36,153, 40,112,255,230, 21, +127,253,215,255,158,219,195,194,199,159,124, 68, 62, 31,185,125,121, 7,162,132, 21,116, 84,202, 66,238, 14,117,129, 16, 26,173, +130,223, 4, 50,130,228, 74, 60, 45,104,202, 12,209,222,244, 75,237,208, 26,247,247, 11,151,185, 48, 29,239,185,222,236, 25,175, +118,164, 71, 55,248, 49, 81, 46,103,206,231, 35, 93, 50,175,223,124, 65,153,247,116, 17,210,113, 99,164, 48,113,236,246,123,110, +198, 13,222,119,198,171,192, 62,222,176,117, 9, 66, 98,236, 66,118, 51,151,195, 5, 29, 71,234,165, 50, 5,199,161,157, 77,135, + 28, 70,202,229,100, 7, 27, 25, 40,209,177,241,142, 73, 32,151, 78,138, 29, 25, 35, 73, 96,110,150, 95,113, 67, 64,115, 91, 91, + 44,178, 78,223, 34,165, 22,220,108,172,131, 32, 43, 73,141,153, 82,103,156, 58,150,174,108, 92,167,246, 21,106,228,225,146, 11, + 42, 74,184, 40, 62,101,163,203,181,128,164,104, 36,186,105,196,183, 74,203, 51, 18, 58, 18, 35,254,210,105, 37,147,210,214,216, + 23,222, 19,157,199, 23,240,217, 1, 21,205, 51,125,116,180,230,104,117,102,179, 79,176, 52,154, 8,146, 23,220,176,208, 24, 88, +150, 78,136, 29,189,171,118, 89,240,222, 4, 39,105,161, 75,178, 31,171,105, 32, 70,143,199, 19, 71, 7, 13,138,118, 24, 61, 42, +138,234, 72, 47,133,208, 65,252,150, 48,218, 4,169,149, 72, 61,157,112,201,209, 23, 71,218, 0,101,139,196,194,220,192,235,130, + 23, 65,245,138,210,160, 75, 65,154,135, 9, 26, 13,157, 21,170,226, 39,129,165,208,195,218,134,105, 3,234, 3,234, 43, 3, 5, +239, 39, 51, 72,198,100,221, 14, 87,152,181,155, 55, 91,103, 84,132,235, 7,158,118, 41,156,123,197,109, 19,253,226, 81,231,152, +181,224,147,160,206, 91, 77,211, 55,155,126, 57,143,200,250,176,232,230, 85,120, 75,248,156,166,244, 15,166,168,153,150, 66, 41, +221, 4, 65,113,156,222, 91,152,173,170, 53,133,220,154,157,120,111, 6, 53,125,155,113,106,248,228,223, 43, 73,110, 1,230,174, +132,102,104,178,222,213,104,157,189,210,122, 51,252,114,178,203,205, 41, 23,187,176, 54,143,239, 13, 21,165, 95,128,224,209,166, + 52, 7,131, 75,118, 49, 40, 11, 65, 71,203,173,232, 45,253,238,192,180,221, 35,243,192,236, 20, 39, 25, 45, 30,134, 66, 57,207, + 4,175,250,110, 79, 28, 87,159,138,168, 73, 49, 88,109,106,173, 22, 16,103,207, 94, 58,244, 98, 29,206,181,174,166,130, 73, 79, +180, 34,106, 2, 17,161,128,170,225, 15, 67,180, 14,122,235,132,232,214, 52,185,183,207,169,205,248,234, 85,233,213,106,107, 66, +131, 30, 86,198,183,213,234,236,135,213,250,226,174,175,220,111,177,209,180,169, 79,109, 23, 6,110,213,200, 86,180, 55,196, 69, +240, 66, 47, 29,188,217,146, 84, 76, 15,104, 9,253,106,211, 4, 21, 22,239,209,238,109, 4,220,141,231,174,193, 66,122, 56,251, +111, 92,239,235,215,101,245, 43,137,163, 5,238,180, 17,130,103, 22, 79,207,118,115,117,216,186,192, 98,119,141, 82,173,134,133, + 26,121,173,228, 51,175, 95,188, 97,241, 55,220, 92, 69, 56, 29,200,213, 18,227, 67,176,233,200,116, 51, 33,231, 76,139,142,109, + 80,222, 28, 50, 67,216,241,225, 46,145, 23,211,243, 13,227,104,189,242,197, 49, 36, 69,122, 48,132,110,179,215,152,119, 29,213, + 11,155,113, 36,166, 13, 93, 42, 57, 47,224, 60, 46,140,196,112,133, 11, 66,110, 71,142,167, 51,222,119, 98,114,228,166,112,168, +134,225, 12,214,221,174,181,173, 35,244,142,214,181, 26,167,106,107,136,174,235,238,118, 29,169,175, 92,255,213,135,135, 58, 75, + 94, 59,177,232,158,136, 61,252, 13,112,180, 86, 45, 68,241,226,105,116,188, 58,154,216, 94, 40,215,130, 11, 48, 18,185,190,217, +178,217, 36,238, 79, 51,247,135,153,162,194,239,254,232, 25,143,159,126,194,254,106, 71, 12, 74,111, 11, 75, 9, 4, 47,120, 31, + 56, 30, 15,252,228,167,127,205,183,207,143, 56, 47,188,250,234, 23,212, 90,184, 95, 50,131, 56,156, 84, 92, 80,198,100,201,255, + 40,118,112,244, 13, 90, 46,168, 83,162, 79,212, 22,201,217, 42, 77, 33,218, 11,207, 77,145, 82, 5,109,157,211, 60, 51,247,204, +118,185,231,106,220,113,189,191,226,234,217, 15,185, 28, 78,124,247,237,231,156,151, 19,167,243, 61,165,194, 16,108,151, 22,135, + 45, 75,109,148,113,166,247, 78, 58, 94, 49,189,250, 14,105,103,246,215,215,140,251, 61, 83, 24, 80, 2,229,120,162, 19,152,107, +161,212,108,147,161, 34,184,224,205,166,230, 6,118,195, 68,168, 25,100,102, 28, 61,177,120, 22, 42,151,106, 83, 44,154,141,170, +123, 24,232, 93,168,117, 97, 76, 1, 41,153,193, 55, 84, 43,151,222,240, 89, 57,182,163,153,234, 42,148, 10,113,152,104, 37, 51, + 13, 27, 46,161,112, 57,207,196, 20, 8, 41,209,234,140, 2,195, 48,225,199, 68, 61,157,215, 62,187,178,204, 74,242,129,158,187, +185,190,135, 68,107, 29,245,217, 36, 37,120,114,185,216,254, 63, 76,198,158,183,183, 16, 54, 94, 24,247,137, 59, 61,209,115, 6, + 95,105, 26,145,147,146, 70, 51, 51,150,101,161, 55, 72, 65,144,170,196, 94, 41, 68, 82,132,222, 2,105, 52,133,107,208,140, 79, + 55, 44,249,140,248,193, 42,187, 4,156, 70,194, 38,194, 37, 91,160, 85,149, 56,141,244,122,161,104,103,240,227,218, 16, 1,245, + 23,106,177,209,118,211,198,232,175,172,142,232,160,196,134,239,145,128,105,147, 93, 84, 36,116,166,228,169,205,177,212,142,236, + 35,110, 46, 12, 91, 71,244,123,202,105,198, 57,101, 12, 19,190, 38,138,191,167, 54,207,102,124,136,200,140,195,147, 37,163,135, + 13,110, 10,184, 12, 75, 93, 51, 23,100,196, 21,171, 6,146, 40,245, 98, 32, 32,181, 85,133,138,245,117,157, 42, 99,136,104,176, +160,165,143,254,189,220, 76,123,181,195,181,211, 70,140,239,231, 1,169,216,148,184,105, 35,122,236,150,247,158, 62,122, 55,171, +166,168, 29,160,222, 39,116, 38, 96, 53,202,170,141, 0,152, 75,180,226,131, 82,171, 88,134,108,116,212, 37, 83,179,226,134, 70, +111,142,208, 3, 69, 51, 41, 57,212,205,212,115, 39,223,123,154,116, 54, 13,156,102, 52,120,242, 41,147, 52,162, 94,168,151,133, + 22, 60,132, 4,151, 45,165,157,104,162, 56, 42,193,112,149,197, 70,139,128, 91,251,177,130, 61,225, 43,153, 16,236,116,195,186, + 39,106, 52, 27,109,173, 26, 64, 36,208, 74, 71, 29,132, 16,173,114, 20,236, 13,177, 75,160, 54,219, 13,138,211,149,126,230, 32, + 85, 75, 83,183,138,115, 38,164,160, 90,138, 79, 93,164,162, 12,211,202,121,175,138,123,215, 7,175,168,243, 52,181,240,151,136, +210, 74, 39,122, 99,228,170,179,221,110,148, 64,117,250, 91, 61,121,135,115,149,218, 96, 8,158,236,108, 79, 39, 42,120,137,107, +168,160,209,168, 68,231,169,174, 35,205, 32, 52, 54,219,111,180, 12,201, 59, 60,141, 86, 59,173,174, 61, 34,215,145, 22,200, 75, + 39,186, 96,181,174, 21,174, 19,213,129, 87,154, 42,181,153, 34, 50,138, 65, 85,110,111,239,185,171, 55,108,246, 27,250,229,110, +245,129, 79,140,201, 19,146, 1, 90,118,227, 68, 74, 3, 46, 53, 94,125,247,154,251,182,225,211, 15,119,214,223,119,194,233, 88, +104, 75,103,209, 78,232,137, 18,172,119,174, 56,162, 56,242,114,226, 88, 23,123,160,199,209, 86, 37,216, 56,176, 57,199,184,125, + 72,116,142,186,156, 9,117, 54, 8, 75,105,214,207, 94, 10,111, 58, 86,171,112, 1, 5,150,197,152,248, 93, 27,170, 30,215,140, + 43,208,189, 39,136, 39,250,192, 37,159, 44, 91, 97,155,164, 53,181,110,117,186,190,190, 49,202,186,139,183,204,134,173,125,186, +128,107, 54, 14, 29,136, 4, 31, 86,213,165,185,203,187, 86, 90,233, 28,142,182, 18,122,124,179,225,102,136, 60,127,147,249,244, +163, 71,124,255,147,199,220,157, 13, 47,234,156,129, 57, 74,104,148,211,137,191,249,233, 79,248,226,171, 23,116,239,233,234, 56, +228, 70,171, 22,218, 43,189,153,151, 32, 43,181, 84,134,209,250,244,226, 28,195, 96,237,138, 75,235,171,108,168,225, 67, 50,118, + 66, 85,186,171,164, 80, 9, 49, 32, 14,154, 88,230, 98, 62, 23,150,124,199,208, 46,108,183,145, 63,252,189,223,225,248,209, 15, +249,119,191,250,183, 28, 95, 63,167,204,197, 12,116, 75,134,218, 40, 30,206, 71,147,190,236,107, 39, 15,182, 83, 59,180, 11,254, +190,144,176, 7,158, 79,145,221,246,134, 48,142, 68,157,232,173,146, 82, 66,106,103,244,138, 31, 43,190,221,147, 91,103, 28, 18, +170,182,246,202,213,214, 46,222, 21, 74, 24,161,204,180, 84,208,217, 17,186,146,253,145,224,214, 38, 73, 53,192,252, 92, 10, 18, + 28,125,182,206,189,132,142,250, 74,119,141,238,149,168, 3,108, 4,231, 61,158,142, 31,134,117, 85,213,233,213, 17,125,160, 55, + 80, 87,137,226,233, 67,160,229, 11,189, 71,146, 66,205, 51,179, 84,252,232, 8,249, 98,253,122,141, 72,174,228,160,116,159,144, + 57,147,203,137,154, 61, 89, 26,161,218,131, 35,197, 96,175, 81,245,171,234, 21, 92,175,214,227,239,208,124,198, 15,129,228, 70, +100,241,244,101, 97,196, 51,108, 70,154,120,124, 28,215,189,246,133, 92, 33,184,102,232,102,201, 84,109, 36,133,114, 94,167,129, + 9, 90, 91,144,230, 57, 29, 10, 93, 10,174, 55, 3, 70, 57,207,162, 51, 78, 58, 18, 61, 65, 18,218, 58,205,219, 84,202,139, 64, + 74, 28,238,206,164, 52,154,149, 16, 33,142, 3,229,212, 8,155,137, 16, 45,104, 28,213, 81, 68, 72, 97, 48,192, 77,155,145, 49, +224, 43,180,161,242, 34, 31,153, 14,138, 31, 38,100,177,247, 65, 31, 60, 9,207, 69, 59, 99, 44,196, 24,105,218,137, 56,196, 69, +243, 30,104, 32,165, 96,196,130, 38,132,104,245,197,127,240, 3, 82, 49, 76, 50,188, 19,117,189,175, 49,118, 47,213, 2,126, 81, +215,138,235,123,250,220,213, 50, 90,210,186, 17, 76,223,227,135, 98,218,236,185, 45,228,101,198,105, 99,166,209, 22, 19, 59,233, +224,184,116, 91,221, 8,192, 18, 80, 95, 8, 77,200,173, 83, 60, 72, 27,216, 70, 71, 47,103,188, 84,106, 19,250, 16, 88, 80,252, +224,241,167,145,115, 57, 81, 59,164,232,208,185, 82,229, 2, 97,160,229, 76,233,130,255,248,123, 31,255,169,243,193,116,153,205, +120,212,125, 69,138, 54, 93, 49,140,106, 35,210,190,222,170, 44, 53,237, 8,193,170, 70,109,133,202,184,213,177,142, 55,146,153, +116, 93,249,236, 22,110, 97,165,197, 53,175,246, 67, 32, 66,175, 6, 59,113,221, 33,174, 65, 20,171,190,121,235,121, 39, 93,193, + 35,120,186,184, 21,148, 33,171,126, 13,106,209,149, 96, 84, 86,189,162, 82, 90, 67,156,199,247,183,196, 49, 59,144, 4,231,201, +205,186,212,136,174,228, 55,121,167,115,117, 43,119, 30, 81, 67,151, 74, 64, 74, 71, 89,113,150,235,238,150,119,123,225, 68,213, + 66, 88, 3,134, 94, 28,126,221,201,251,181,166,103,251,102, 59, 41,183, 86,109, 31,175, 74,155, 79,188,188, 43,200,120,197, 20, + 10,229,178,160,126, 98, 24, 60,219,113,228,106,123,195,131, 93,196, 41,164,125,192, 45, 51,223,124,119,100,247,240,134,135,215, + 86, 80, 75,195, 68,140,202,113, 46,220,221, 53,122, 85, 98,156, 24,134,104,221,213,229,158,115,153,137, 97, 36, 72,162, 73,197, +105,183, 55,201,165,146,136,136, 20,242,229,118,173,124, 29, 41,117,166,148,202,146, 51,173, 89,106,221, 33,212,108, 62,110,149, +192,219, 45,245,176, 25,240, 62, 48,164,193, 76,110, 33,226, 98,176, 44, 65,107, 52,167, 70, 41, 19,123,227, 77,105, 32, 14, 35, +105, 53,156,133, 20,240, 26, 86,245,235,218, 54, 72,182,143,199,117,212, 89, 8,206,123, 35, 27, 10,118, 0, 80,148,203, 92, 56, + 29, 27,181, 41, 75, 45,220, 31,143,108,135,145,176,217,160, 62,210,115,166,137,144,203,194,207,126,246, 83,254,246,243,111,209, +110, 52,182, 20, 35, 72, 71,123, 49,152,145,246,117,226,100,154,222, 90, 42, 53, 23, 90,111,150,139,116,107, 86,192,217, 52,200, +175,147, 30, 33,128, 10, 37,219, 21, 64, 86,170, 97,112, 9,245, 32,210,241, 21,142,167, 25, 87,207,164, 49,179,221,239,216,236, + 62, 68,188, 77, 83, 28, 74,147, 70,203,246, 90,201,173,114, 60,221,115, 57,157,112,174,173,239, 20,202, 82, 60, 48,144,253,192, +253,225,142,229,124,103,100,169, 52, 18, 35, 20, 26, 74, 39, 18,237,117,179, 17,252,108,220,112,141, 74, 41,182,234, 74, 27, 11, + 98,245, 10,163, 4,164,122,150, 82,173, 75,191,116,156, 36,156, 31,232, 90,113,123, 96, 10, 22, 66,107,142,184,217, 98,241, 71, +161,135,193, 82,232, 68,156,102,100, 12,150,155,136,214,210,232,151,133,228, 71, 42, 5,102,243, 26, 72,116,168, 84,131,229, 68, + 33,185, 70, 67,136,206, 16,194, 52,123,207,169,125,193,251,181, 38, 75, 49,252,101, 12,140,110, 3, 67, 67,162,183, 27,189, 11, +184,224,153, 82, 52,229, 50,141,208,197,192, 55,210, 24,156,195,169,237,242, 25, 2,227,176,179,213, 93,178, 53, 83,111, 66, 15, +224,134, 72,107,153, 58,155, 70, 53,120, 69,170, 82,165, 65,117, 4, 77, 88,102,223,168,123,154,148,232, 12,158,227,147,178, 29, + 61,213,216,182,248,102,225, 84, 47,113,205,181, 20,240, 35,174, 70,226,198,193,118, 36,148,209, 0, 89,107,109, 48,142, 29, 29, + 10,179, 15,248, 56,224,107,194, 75,161, 56,243,200,187,170,176, 56,130, 84, 74, 15,196, 41,130,247,180,216,240,189,179, 29, 7, +210,218, 16, 65, 64,170,172, 18,164,128, 56,143, 19, 69,188,213,224,164, 59,196,123,198, 96,151,155, 90,140,108,169,189,161,221, + 58,248,186,106,101,123,239,166,247,125, 11,132,106,214,238, 64,237,193,120, 56,205,148,243,133,222,236, 18, 48, 6,240, 49,218, +231,105, 54,169,163, 91, 6,138,110,107, 53,222,253,175,255, 71,191, 94,255, 28,237,156, 78, 11,243,233, 72,235,141,128,178,153, + 60,178,234,168,109, 2,184,166,170,223, 62,148,126,251,215,191,245,103,216,191,219,222,253, 25,115,173, 28,238,238,169,203,153, + 90, 26,187, 36,196,193,173, 47,255, 21, 58,182,254,187,218,215,223,247,110,149,219,110,129, 79,233,246,189, 65,187,129,171,218, + 98,123,237,190,240,234,246,200,171,175,190,166, 93,142, 44,101, 54,175, 1,166,189, 46, 43, 46,188,148,198,164,163, 61, 83,170, + 48, 80,185, 20, 71, 37,144,253, 66,111,222,104,151, 17,186,116, 66,247,132, 24, 8, 85,144, 90, 89,152, 87,179,101, 99, 94,238, +109,138,206, 98, 97, 97,239,168, 53, 34,255,248, 79,254,169,138,128, 35, 89, 95, 87, 27, 46,173, 50, 10,170,237,101,154,233, 0, +123,179, 78,185, 95,245,149, 34,138, 19,227, 88,235,186, 51,238, 98,181, 15,183, 66, 93,140,233,110,183, 38,209,106,123, 36,100, + 29,195,218,120, 66, 80, 18,145,172,198, 37,183,222,171,221,182,189,216, 77,163,175,193,243, 48,136,213, 2, 48,237, 99,105, 74, +242,171,182, 53,154, 76,161,245, 12, 62,224,213, 27, 85,206, 55,180, 90,231,185,172,225, 25,112,150, 5, 96, 13, 8,174, 16, 25, + 31, 2,162, 29,231, 2, 42, 74, 45,141,142,105, 84, 85, 21,223, 45,184, 37,222,140,114,185,101,124, 48, 88, 71,173, 11,218, 43, +154, 38, 6, 44,124,211,232, 80, 28,177, 53,106,232,212, 10,125, 62,113,247,230,192,177, 71, 66,240,164, 16,236,166,231,163,145, +129,134,137, 71,251, 29, 15,158,236,184,142, 2,243,204, 47,191,124,197, 65, 3,191,251,253, 27, 6,140, 66,212,125, 96,255,112, +199, 39,207, 62,100, 94, 22,126,254, 55,223,240,205,151,183,116,215,185,191,189,227,254, 92,113, 49,144,196, 12, 92,189, 58,122, +203,148,118, 1, 25, 72, 18, 80,189,112,169,198, 31,118,171, 13,202,148,173, 74,119, 32, 62,226,124,176,219,116, 20,188, 4, 66, +156, 8, 49,146,250,133, 16, 77,135,121, 58,156,185,203,103,122,177,159, 19,197,148,160, 67,154,152,246, 15, 25,130, 67,186,133, + 45,123,235,228,118, 38, 4,143,230,198,156, 15,134,221,204,133,230, 58,209,123,252,218,146,104,213, 24,228,226, 45,187, 48,164, + 4,210,233,249,109, 34,223, 86, 54,193, 15, 60,184,218,240,236,179,143,121,250,209, 99,188, 68,242,188,240,197,231,255,129,159, +255,237,183,204,181, 17,130,189,209,246,154,185,212,106,121,143,117,207,111, 43,124, 35, 2,246,110, 15,105,191,194,115,146, 55, +163,218, 48, 38,210,176, 65, 92,226,156,179,101, 80,104, 68,226,138,243, 84, 92,232,108,162, 35,140, 17, 45,157,224, 2,121, 61, + 68,110,146,227,230,225, 21, 63,248,209, 63,225,227, 15,127,192, 79,127,246, 51,126,250,147, 63,167,181, 51,243,220,200,221,234, +116, 90,237,251,238, 35, 36, 23,232, 30,130, 11,124,244,224, 41, 31, 62,251,152,195, 82,248,246,215,223,226,164,176,217, 15,124, +248,228,134,113,119, 5, 52, 82,179,230, 74,140,133,161, 58,170,122,102, 21,130, 52,212, 39,170,131,168, 11,168,163,245, 8,203, +197, 24,231,254,154, 62, 52,150,218,104,185,208,187, 35, 77,202,229,190, 48,207, 5,231, 6,100, 16,134,193, 49,183,140,214, 72, + 28,192, 5,101, 57, 84, 98, 20, 92, 11,184, 96,182,197,218, 45,240, 24,186, 85, 15,115, 5, 13,224,180,226,157,163,150, 21,246, +219, 4, 55, 54, 52, 37, 60,142, 86, 32,174, 80,168, 69, 34, 67, 40,204,165, 48,140, 14,252, 72,175, 11,236, 34,105,217, 16,106, + 51, 44,180, 52,186,206, 70,216,171, 35, 90, 10, 23, 61, 19,212, 81,157, 18, 72,224, 27,251,155,107, 4,200,217,110,175,189, 23, + 46,165, 25,162, 90, 23,250,165,211,100, 50, 54,194,249, 76, 73,230, 52, 24,123, 96,110, 5, 25, 13,140, 85,206,103, 84, 19,187, + 52, 82,139,241,220,157, 56, 52, 10, 27,153,112, 18,200,114,100,114,129, 62, 14,148, 82, 13,235, 57, 23,226, 48,112,208, 78,208, + 78, 8,157,185,155,219, 94,164,225,250,150, 77,176, 6, 72, 79, 14,215,140, 27,210, 5,194,236,240,131, 55,250,216,224,153,118, + 9, 93, 26,251,171,196,118,187, 53, 6, 1,202,169, 54,122,233, 76, 67, 88,223,232, 45, 64,235, 69,136,206, 14, 63, 49, 13,108, +118, 87, 12,155, 45,209, 5,134, 33,174, 25, 32,123, 27, 53, 13,182,188, 67,114, 27,144,204, 52,216, 96,105,238, 37, 55,150,203, +140,167, 24, 88,203,193, 24, 71,226, 56,174,156, 1,227,120,200,170,249, 21,237, 22,160,133, 53, 13,110,236, 1,123, 62,246,245, +230,175, 44,165,145,151, 25,213,178,242,250, 97, 72,145,148, 70,203,143, 96,239, 55,172, 86, 81,227, 4,172,244, 73,187,117,226, +188,253,190, 54, 12,195, 45, 22,216,190, 44,153,220,214, 26,104, 91,195,142, 41,154,176,104, 37,128,249, 53, 96,108, 68, 75, 11, + 52,235, 26,206,126, 75, 30,117,216,123, 83, 45,157,214,141,196,153, 91,229,112, 56,146,207,103,180, 67, 94,238,232,181,177,244, +197,190,175, 57,115, 90, 58,165,195,164,198,251,168, 93,105,161,144, 91,197, 55,199, 44,149, 54, 47,104,233,232,220,241, 67, 34, +171,162,139,229,130,154, 83,212, 37,106,153, 73,237, 72, 13,137,188, 40,193,101,146, 27,112,186,225,112,233, 4, 60,184, 6,226, + 12,151,233,125, 64, 12,251,182, 30,160,196, 52,158,186, 62,136,213,198,190,193,121,187, 89, 59,197, 55,187, 57,175,193,111, 28, +182, 95,213,102,181, 11,156,141, 51,155,116,154, 66, 32,226,164, 83, 90,179,174,177, 88,189, 67,170, 65, 68,130,170, 5,217,196, +186,230,189,234,138,104,181, 29, 44, 98,101, 40,175,224,162,163,118, 99,140,186,106,149, 39,137,130, 22, 5,223,169,171,161,204, +137, 82, 89,171,122,218,240,206,217,168, 30, 71,136, 17,105, 6,215,176,191, 60, 54,198,112,109,117,126,219,227,191,228, 70,115, +246, 55,116,189,210,194,250,179,175, 38,171,233,107,194, 81,180,144,187,183,206,127,183, 19, 99,247,118,102,243,189,112, 58, 31, +120,125,158, 9,131, 77, 64,156,139,124,248,236, 99,126,248, 36,242,213,243, 55, 28, 46, 70, 24, 90, 46,141,205,205, 21, 85,207, +220,150,194,135, 79, 31,178,219, 6,122,133,210, 33,183,194,155, 23,119, 68, 21,158, 61,189,230,191,251,231,191,195,223,252,249, + 79,248, 63,254,213,175, 56, 20,251,123,215,124,160,187,192,146,141, 14,215, 69,152,246, 15, 40,185,161, 33, 49,164, 71, 56,109, +108, 18, 68,183,167,123, 33, 14, 66,242,147, 49,238,241,196, 24,184,222,236,241,253,196,210,149,143, 30, 61,100,255,240, 17,191, +254,226, 87,188,124,254,115,142,135, 25,231, 76,217,107,239, 10,138,184,176,190, 64,148, 39, 87,137,221, 52,210, 27, 84, 81,122, +117,204,125,224,246,213, 61,113,216,144,245, 68, 95,188,237, 44,223, 78, 8,188,153,242, 66,240, 54,150,247,158,228, 6,162, 87, +114, 83, 98,180,150,198, 82,212,218, 24,181,240,234,238,200,221, 95,253, 7,190,251,246, 27, 62,251,225, 15, 56,190,121,195, 47, +127,249,156,162,126, 37,123,193,156, 45,145, 42,111, 15,117,210,141,132,232,141, 53, 47,234, 0, 59, 60,212,214,233,165,211,122, +166,107, 51,157,110,143,248, 48, 48, 36,161,185, 8,117, 13,203,225,168,222,214, 57,167, 44,248, 92, 72,174,227,118,118, 88,234, +115,225,178,192,252,197, 75,122,254, 11,182,229,192,213, 16,248,236,247,126,159, 23,175,190,134,151,175, 24,150, 70,205,149, 51, +198,137,118,217,179,184, 6,201,177,148,198, 47,191,253,146,231,175,191, 51,167,122,156,136, 97,226,124, 82,126,253,197, 61,195, +230,150,237, 56,176,219, 25, 86,212,181, 29,135,190,224,123,182, 67,247,104,185,142, 20, 18,174,173, 73,236,188, 32, 91,111,150, +181,102,118,188, 97, 35,228, 38, 40, 19,238,210,236, 48, 31, 27,212,153,126,114,104, 77, 48,128,250, 66,203, 2,203,170, 68,238, + 74, 41, 21,183, 84,220,184, 67,130,195,245, 76,149,128,244,190,134,181, 28, 58,122, 82, 15,184,218,104, 24, 84,133, 20,209, 62, + 32, 61,179, 25, 39,123, 64, 22, 71, 74,153,206,250, 48, 15, 25,127, 89, 8, 4,244,210, 8,221,122,253, 18, 27,218, 7,156, 12, +244, 65,232, 4,114, 63,217,216, 63,108,145,126,164,167,134, 27, 28, 77, 43,109,174,120,159,104,139,194, 80,137,201,147,231, 5, +231, 54, 16, 58,157,153,218,133,144, 60,251,152,152,213,102,115, 73, 3, 5,135,204,129,141,223, 24,115, 35, 41, 68,193, 21, 71, +236, 66,211, 6,110,198,249, 9,231, 2,185,119,244,188,144,198, 72, 62, 93, 40,181, 49,137,199,185, 74,214, 66,239, 35,123, 73, + 44, 68,216, 52, 54,203,194, 57,235, 10,245,218,129, 43,140,181,147,221, 66, 26, 6,130, 58,230,161,208, 91,163, 94,172, 55,162, +107,181, 23, 32,151, 74,107, 54,205,202,189, 17,147,113, 24,172,138, 30,108,186, 25, 12,154,244,217,167, 79, 25,119, 59,203,205, +185,191, 63, 66,254, 79, 13,187, 85,127, 59, 32, 7,111, 78,141,203,237, 27,200, 51,163, 87, 62,124,250, 16, 23,211,187,113,252, +223, 11,214,175,159,248,237, 69, 90,248,205,239,215,172,178,173,247, 20, 14,135, 74, 62,220, 82,150, 51,251, 77,100,255,248, 49, +235, 95,130,183,133, 98,149,245,146,254,150, 60,250, 31,125,237,111,191, 70,126,251,255,187,116,252,253, 29,173,204,212,211,153, +205,118, 96,251,193,211, 85, 57,186,174, 4,215,209,120,183, 71,224, 59, 50,237,187,223,175, 24,209,149, 93,198,170, 76, 33, 3, +241,168, 28,190,121,206,237,203, 23,104, 83, 83, 80,107, 32,151, 76,108, 48, 52, 79, 10, 74,166,178, 28, 51,195, 54,174,153,163, +192,185, 20, 98,154,240,123,207,252,221, 27,100, 26,205,236, 86, 79,164, 33,112,186,204, 12, 98, 7,253,243, 44, 36, 54,184,208, +201,203, 5,138,210,162,101,209, 70, 46, 4, 45, 86, 11,235, 88,210,208,189,109, 15,119, 11,201,161,214, 11,118,218, 45, 69, 42, +209,118,202,125, 33,134, 64,236,145, 69, 43,174,139, 33, 40, 49, 69,166, 56,179, 10, 21,116,149, 44,168, 5,179,122,165, 75,195, +221,124,159,199, 79,119,132,239,126,193,237,221, 66, 94, 41,111,165,152,235, 56,186, 0, 94,168,173,173, 99,207, 21, 20,175,150, +126,173,125,237,123,235,219,106,157,141,139, 90, 16, 11,167, 57,123, 49, 86, 21, 59,153,121, 7,161, 49,226,232,117,237, 75,123, + 7,165,161, 53, 91,149, 47, 56,186, 58,162,218,184, 92,131,167,151,182,214,251,148,228,253,187, 84,119, 15,106, 86,171, 98,253, +116, 13,109, 29, 83,129, 84, 69, 93,165,213,182,170, 56,101,229,225, 67,206, 71,222,220,207,246,102,229,140,177, 63,183,133,152, + 2,159,126,176,231,245,171, 11,151, 96, 1,187,229, 60,147,243,158,211,253, 9,117,194, 52,118,164, 36,187,121,135,194,208,133, + 75,133, 55, 47, 46,124,247,252, 21,121, 57,112,251,230,200,177,101, 42,145,205,213, 53,195,240, 17,227,110, 71,108, 74,247, 27, + 30, 63, 29,105, 57,227,227, 3,166,209,116,156,155,224,216,143,194,233,112,161, 15,141,122, 94,168, 75,177, 20,243, 24,217,166, + 72, 88, 10,231,166,228, 10,249,246, 43,190,187,124,199,163, 15, 62,225,112,255, 13,231,195,188,134,251, 96, 57, 85,156,218,109, +156,222, 41,253,204,175,190,250,156,201, 79, 54,213,241,158,253,144,120,248,228, 41,109,223,121,121,247, 10, 39, 19,226, 22, 66, + 55,117,103,237,157,174,133,174,158,205, 52,224,125,229, 50, 55, 98,178,174,190,102, 91,179,168,179, 10,182,213,233,154,101, 36, + 66,228,243,111, 94,241,226,187, 87,116, 34,248,129, 81,140,127, 94, 90, 69,155,241,213,181,174, 15,243, 96,167,250,156, 27,162, +142, 48, 4,162,216,122,201, 5,251,249,107,189, 65,238,156,156,237, 88,125, 60,179,217,111,152,198, 68,239, 35, 75, 83, 74,201, + 72,171, 6,254, 33,209, 91,179,126,246,125,198, 71,207,176, 25,232,203, 2, 26,121,254,245, 29,255,215,225,223,178,189,222,243, +193, 7,223,227,143,126,231,191,230,244,236,196,207,254,230,255,225,112,120,205,206,121, 74, 86,230, 57,147,187, 64,181,250,211, +118,191,195, 77,137,211,156,233,231, 91, 6,119,100,156,182, 16,182,156, 46,142,195,171,215, 4,255,138,221, 46,240,193,135, 79, +217,222, 60,164,103, 97, 28,149, 62, 56,164, 15,208, 22, 92, 18,195,185,119,135,250, 72, 88, 42, 61, 42,185, 11,254, 50,163, 26, +169, 90, 89, 56, 81, 69,136,110, 66,134, 11,101,169, 20, 85, 38, 29,232, 61,147,151, 78,150,142, 95, 9,148, 41, 77,228,222, 13, +225,234, 38, 46,189,224, 91, 35, 12,137, 65, 44,180,118, 90, 26,179, 8,227, 54, 34,205,147,162, 39,215, 19,174,116,116,101, 94, +184, 96,171, 36, 51,166, 41, 62, 90, 37,182,204,153,180,210, 14,139,216,109,155, 0, 99, 20,106,134,190, 8,248,245, 34,160,158, + 86, 79, 12,147, 55,158,194,178, 18,219,100, 67, 26, 35,181,103,114, 29,232,154,105,106,246,199,152, 26, 73,141,107, 81,215,134, +135,170,133,159,162,236,233,156, 44, 12,150, 2, 82, 22, 14,171,195,126, 8,129,232, 38,232, 23,102,215, 17, 57, 65,223,224, 89, +208,222, 40,217,222,159, 92,140, 52,159,112,181,208,150,133,144, 2,115,176, 73, 81,157,149,179, 10, 34, 35,174,100,154,220,163, +161,147, 59,116, 77,204,189,145,156, 99,127, 61,177,100, 24,106,199, 93, 69, 74, 43,112, 92,136, 42, 20,233, 22, 70, 12,158,193, +139,129,131, 48, 72,150, 80,109, 20,222, 60,155,109, 98,187, 27,121,247,148,252,207,253,144,191,255,235,221,228,169,167,128, 22, +199,205, 62,146, 82,250,255,255,119,127,251,247,242,255,253, 60,191,253,145,128,182,241,212,131, 35, 57,199,213,126, 98, 76,239, + 39,128, 39,123,199,155, 75,164, 44, 23, 54, 81,120,250,225,213, 74,102,252, 79,125,209,255, 25,201,184,223,250,136, 15,132,243, +113, 3,183, 54,106,111,173, 17, 92,183,231,150,131,202, 66, 85,211, 15, 15,227,192,133, 70,200, 6, 40,211,236,136,189,225,212, + 49,107,160,151,198,226, 35,221,121, 42, 51, 83,186, 70, 91,229,124, 62, 16,101,160,141,145,214, 97,138, 19,205, 29,105, 64,208, + 6, 82, 9, 72, 64,187, 85,195, 80, 27,135, 27,176, 69,215, 7,207,111, 78,226,226,223,178,160,237,225, 85,115, 55,110,122,244, +171,113, 76,215, 96,142, 1, 25,196, 54, 7,246,205, 18, 27,109,202,218,135,141,215, 19,255,244, 71, 3, 90, 59,255,231,193,147, + 75, 93,247, 32,150,149, 94, 88, 59,180, 88, 45,160,169,165, 61, 11,134,124, 29, 86,132,172,190,181,159,173, 99, 62,215, 61, 52, +103,193, 21, 17, 11, 19,168,195,171,101, 6, 84,108,183,228,215,248,150,137, 74, 32,144, 80,148, 20,131,237,128,106, 69,151, 70, +105, 74, 28,162,165,191,155,237,123,213,250, 48,208,131, 1, 92,168,182, 55,246, 66, 41,213, 58,253,235,138,129,184,106,106, 85, +209,156,185,125,115,207,220,197,198,171,206, 88,216, 46,116,234,114,226,197,107, 3,215, 12, 14, 52, 54, 30, 93, 13, 60,255,245, +151,252,242,249, 29,223,251,222, 99,174,252,136,216, 2,159,136, 16, 55, 66, 34,161,151,204,151,223,126,203,183,183,158, 97,247, + 33,207,158, 13,140,155,200,102,119,195,211,135, 31, 19,250, 75,106,105,108,246,143,120,188, 83,238, 15, 13, 63, 36,235, 55,135, + 5,233, 59, 62,120,240,132,211,237,183,168, 84,206,167,204, 82,132,135, 15, 34, 75, 13, 56, 45,156,142, 7, 38,119,197,249,118, +230, 94,224,245,221, 29,165,125,201,245,163, 15, 89,202,133,122,119, 33, 86,232,206,192, 30,178,238,139,123,173,204,173, 83, 5, +194, 48, 88,199,190,156, 40, 29, 62,124,250,148,165, 47,220,189,186, 35,141, 19,251, 39, 55, 60,222,236,153,219,153, 90, 27,115, +174, 72, 47,212,114,176,158,109,207,168,139,164, 56, 26,108,200, 25,105, 76,213, 14,109, 90,161, 75, 99, 28, 6, 11,250,105, 39, +104,125, 71, 71,140,206, 83,196, 24, 5, 78, 45,124, 89,155,173,123,140, 34,215, 40, 75,179,209, 94, 11,132,232,136,201,227,137, + 72,231, 55,233,101, 41,248,124,193,249,138, 15, 27,118,155,145,214, 70,242, 92, 56,231,217,252, 1, 3,148,236,173, 94, 89, 50, + 50,175, 23,165,201,168,103,151, 86,241,167, 19,103,253,134, 20,132,103,159,126,159, 44, 63,226, 23,191,240, 92,110,111,137,210, + 96,240,208,205, 4,214,186, 73, 87, 66,239,108,167,200,253,171, 19,103, 50,234,149,121, 62, 19,211,196, 52, 68,106, 75,188,124, +213,248,244, 89,224,191,255,111,254, 11,190,254,106,225,215, 95,124,129,159,103, 52, 25,238,151,170, 52, 41,198, 93, 56, 55,170, + 87, 82, 82, 74, 45,104,177,145, 37,173,216, 36,172,119, 46,125,161,183,130, 72, 68,244, 66, 62,159,216,142, 35, 36,103,156,246, +220, 56,246,142,215,133, 97, 19, 8,221,147,123,181, 86,197,246,194,166, 64,149, 13,121,117, 66,187, 41,146, 43, 76,216, 42, 45, +166, 61,226,222, 18,221, 28,177, 13, 84,159,201,117, 97,231, 70,122,168,148, 37,154, 2, 21,165, 85,199,226, 10,155, 20,169,117, + 32, 55, 8,226,240,162,148, 48, 83, 79,141, 9, 79,145, 64,189, 52, 6, 47, 44,234, 9,169, 83,101, 49,110, 69, 72, 68,160,208, + 9,170, 12,147, 50,215,192, 16, 3,253,156,113,226,136, 18,136,201,209,202,217,234,177,226,233, 58,195,185, 33,233,134,105, 43, +116,127,162, 31, 27,199, 80,112,234,112,107, 77,142,222,236,230, 30, 60,185,116,118,219, 0,186, 48,207,103, 66, 26, 72,126, 64, + 93,101,179,153,168,179, 77,166,252,232,105,167, 25,241,106, 68, 74,231,113,169,211, 90,199,247,200, 56, 25,235,130,148,104, 9, + 6, 17,171, 95,118, 88,162,216,168, 91,212, 46, 55,213, 19,213,232,147,186,218, 13, 85, 29,209, 57, 82,112,239,165,155,109, 83, + 73,193, 59, 37,165,247,135, 90, 53, 16,154,154,215, 35,186,247,155,100, 91, 41,169, 99,114,198, 22,121,143, 31,162,230, 53, 9, + 81, 40, 81,232,217, 88, 5,181, 43,205, 85,220,228,209, 2, 41,120,206,135, 76, 27, 59, 18,149,249, 62,211,165,112,159, 43,211, + 60,225,135,107,122, 60,145,231, 66,174,129,160, 39, 98, 63, 83,167,100, 83,171, 83,133, 90,169,139, 18, 73,136, 92, 33,189, 51, +235, 75, 90,247, 4,203,217,187,117,119, 32,171,188,161,129,120,235, 8,162,148,254, 54, 92,102, 22,175,176,142, 41,187, 58,202, + 90,229,120,235, 43,119, 33,144,187, 85,219,188, 24, 53, 76,176, 91,182,215,182,186,213, 11,237,203,159,243,151, 47, 26,199,165, +113,210, 0,120, 27, 43,138,165,157,107, 95,189,211, 40,149,138,119,201,240,170,221,161, 65,233,222, 35, 90,240, 43,143,158, 20, + 44,108,215, 21, 13, 22,194, 19, 44,136,215,189,141,229,181, 89,200, 69,180,209,107, 51, 84,105, 10,120,160, 96, 98, 4,233, 54, +185,144,224,145,170, 80, 11,172, 8, 72,130, 5, 41,130,136,213, 76,188, 5,201,188, 26,109, 77, 13,132, 71, 93, 7, 62, 70,224, + 50,111,124, 76,142,211,249,204,113, 54, 97,188, 23, 49, 64,133, 11,140,211, 64,156,103,158,191,236, 70,105, 15, 70, 58,223,248, +192,203,243,137,221,163, 27,158, 93,143,228,243,145, 30, 6,134,209, 64, 42,139, 40,151, 55,247,124,243,229, 87,124,125, 91,217, + 61,250,148, 31,127,250, 41, 59,119,100,190, 8, 15, 30, 61,226,251,223,127,140,151, 45,195,112,205, 16, 13,143,248,193,179,107, +250,233,200, 57,159, 16, 29,169,217, 19,244,150,229,248,156,187,251, 35,210, 34, 46,116,190,188, 63,115,127,123,226,249,171, 23, +156, 87,118,254,155,187, 35,211,246, 17,127,240,123,191,207,139,151,207,153,166, 27, 30, 95, 63,102,185,124,201,114,233,212, 90, + 80,177,108, 66, 91,150,181,139,217,168, 50,211, 46,179,237,140,123,227,117,110, 44,203,133, 42,157, 82, 23,246,219, 27,126,248, +193,150,124,127, 75, 43,149,152, 28,187, 97,194,249, 29,139, 62, 96,218, 87, 88, 50,199,124,166,148, 19,221, 53,162, 19,196, 37, + 98, 12,212, 94,109,189,211,100, 21, 17, 57,194, 26,232,113, 43, 74,246,173,151,160,213,167,232,226,155, 0, 0, 32, 0, 73, 68, + 65, 84,186,202, 69,148,249,178,188,203, 0,172, 99, 41,106,179,176,214, 82, 33,214, 72,244,201,110, 99,193, 91,165,175, 84,222, +220,118,206,177,178,153, 58, 83,111, 12,195,192,180, 1,252,192,124,185,160,221, 52,188, 78, 70, 68, 60,151, 6,163,118,164,118, +130, 55,129, 78,111,141,115,168,188,249,234,115, 94,221,191,226,225,230, 33, 63,254,236,199,188,120,245,146,207,191,254, 37,190, + 84,198, 26,169,106,120,225, 90, 50,103,239,169,151,204,225,124, 97,179, 73,235, 77, 22,180,102,142,186,224,157, 7, 31,120,117, +127, 96,106,183,252,238, 15,174,249,238, 54,112,188,205, 68, 63, 0, 3, 77, 51, 45,116,244,220,172,254,184,233,180, 73, 72,135, + 78,119,142, 28, 60,174, 8,205, 25,249,177,157, 23,186,183, 62,190, 11, 74, 41,157, 67,111,140,209, 51,121,161,143, 27,106,175, +136,139, 84, 32,104, 33,106, 36,138,174,248, 82, 33, 36,199, 92,108, 36,153,170, 51, 74, 93,244,208, 21,113,205,118,241,151,138, +138,226,195,192,198,121,212, 69,230,243, 61,210, 61,161,193, 38, 57,114, 17, 78,253,100,254,136,104, 65, 52, 41, 51, 45, 37,164, +129, 63,216,161,165, 95, 41,204,138,171,198,205,143, 10, 26, 19, 15,175, 71,218,253,204,105, 57,147,134, 29,163,120,100,155,141, + 27,209, 51,209, 39,102, 10, 62,218,250, 7,223,105, 37, 32,173,227,227, 6,212, 24,241, 14,161,212, 74, 44,145,209, 11,111,234, +194, 62,238, 25, 60, 28,231,194,176,162,109,235, 82, 8, 42,232, 37,210,163,225,179,196, 16,133,148,150,153, 15, 5,141, 66, 98, + 64,116, 70,130,163,185, 61,131,203, 6, 16,202,129, 81, 38,218, 94, 57,149,194,213,146,136,163,103, 41,153, 97, 81, 24, 28,121, + 85, 41,143,209,209, 75,195,135,213,133,209, 43,226, 6,188, 58,155, 21,123,243,115,140,195,240, 94,170, 92,189,241, 14,171, 44, + 62,188,183,228,123, 51,119,239, 90, 29,126,143,135,133,102, 18, 43,237,106,214,192,247, 88,103,123,251,253,168, 75, 65,178,146, +112, 84,103, 14, 16, 15,171, 62, 90,104,115,129,161, 66,171,200, 57,145,211, 9,137,157,155,184,161, 92, 22, 14, 75, 37,244,194, +168, 19, 34, 5, 23,142,244,101,196,121,101,108,133, 69,205, 89,192,180,193, 87, 37,169, 50,183, 78,145, 74,240, 3, 53,207, 4, +241,178,238,190,223,142,216,205,184,212,213,172, 78,234, 87, 47,185, 84,196, 41,210, 76,161,105,138, 84,115, 68,235,197,234, 28, +160,212,213,126,230,145,119, 61,105,149,117,183, 44, 14,149,130, 83,168, 53,243, 77, 49, 30,185,139,235, 55,184,155,121, 77,187, +141,208, 21, 11,226,104,111,150,104, 45, 25,113, 29, 47, 30,105,171,118, 82, 65,122, 67, 84,222,189,233,246,158,141, 9,191,250, +224,163, 54, 58, 98,114,249,226, 25,130,208,214, 23,152,115, 3,195,184, 80,230,138,184,145,224, 44, 11,144,165, 91,197, 39, 8, +165, 55,122,245,118,243, 6, 8,193,146,209, 88, 8,144,106, 19,138, 46,224,194,154,150,247, 14, 23, 11,173, 53, 68, 61,121,201, + 28,239,103, 74,119,248,224,172,175, 47, 74, 91, 42, 51,157, 55,218, 41,110,226,131,199,143,217, 12,129, 93, 28,209,229,196,165, + 41,159,125,111,135, 32, 28,150,204,178,187, 37,104,162,168,114,119, 58,145, 79,183,224, 29,209, 37,150,195, 29,122, 62,162,215, +143,184,122, 52,242,120,215,120,254,139,191,224,246,120,207,245,195,135, 28, 94,191,230,238,116, 15, 56,142, 47,110,121, 57,223, + 35, 45, 48,151,194, 93,158, 57, 31, 47,168,223, 16,156,112, 56,188, 65,221, 6,239, 2,231,243, 29,196,200,245,205, 13,231,195, + 29,151, 95,191, 36,250,196,227, 15, 54, 44,151, 87, 12,155,107,182,227, 53,111,222,220, 83,242,133,174, 74, 19, 27,251,133,232, +233,162, 4, 31,161, 27,198,214,133,136,138,112,123,184, 71, 93,224,131,199,143,121,180,247,188,185,123,131, 75,201,152, 7, 8, + 72,161,207,103,188,247,236,182,137,253,205,142,204, 3,154,192,221,241,142,118,188,112, 57,158, 41,205,126,166,222, 98,132,173, +139, 42, 76,226,169,210, 87,231,128,163,161, 56,231,136,235,232,170, 43,140,163,167,230,133, 57,159,215, 0, 79,179,234,102,240, +104,239,212, 90,169,181, 83,170, 35,166,193,132, 57,186, 6,126,106,231,112, 42,228, 82, 25,242,145, 41,109,205,117, 62, 13,180, +232, 40,231, 66,233,179,245,194,155,144, 83, 34, 47,103,130,235,140,219, 45,146, 6,242,165,211,107,231,245,252,146,101,184,231, +230,234, 3,126,248,241, 51, 30, 60,249,144, 95,253,242, 23,124,247,213,175,108,202,211,141,243, 95,207, 51, 89,154,253,247, 77, + 56,206, 11,187,158,240,222,116,181, 45,116,130, 43,252,228,167,191,224,127,249,250, 75,254,240,199,191, 67,238,137,187,251,215, + 60,251, 56,152,248, 71, 10,161, 56,212,123,242, 88,233,151, 66, 95, 44, 65, 47, 93,160, 21, 74,174,184, 20,232, 14, 42, 21,201, +102,246,243,120,210, 52,160,116,230,101, 38,165, 13, 49, 89,184,116, 35,194,210, 27, 65, 70, 36,102,196,205,248,106, 19, 53, 23, + 22, 66, 11,118, 0,174,157, 28, 70, 74, 47,140, 30,130,118,232, 1, 31, 6,186, 84, 46,254, 68,104, 66, 47, 2,206,209,186,163, +251,128,111,133, 54, 8,177, 22,130, 38,250,156,193,157,145,228,105, 44, 56, 38,226,160,108,100,162,230,198,152, 18,110,232,168, + 23,162, 14, 76, 97,143, 43,138,198,196, 85,216,176,180,108,142,246,162, 56,215,145, 48,146, 23,101, 63,108, 40, 78, 17,201,148, +158, 16, 55, 16, 6, 11,226, 85, 87,105, 10,213, 45,118,248,172,149, 57, 42, 33,141,212, 94,201, 89, 33,101, 46, 25, 66, 52,152, + 72,108,214, 50,137, 33, 18,156,226,139, 24,135, 30,184,132,202,134, 64,239, 23,116, 22,148, 1,124,230,152,103,118,211,142, 24, + 70,106, 61,209,151,142,186,100,134,200,121,161,208, 40, 2, 62,155,130,185, 59, 97,174,142, 49,232, 58, 93,180,158,130,247,213, +204,128,226,241,193, 40,140,105, 24,222,211,197,215,182,216,206, 89,192,236,189,222,122, 81, 98,116, 86,117,126,143, 23,117, 86, +157,247, 48, 37,112,239,247,166, 94,129,210, 96, 94,102, 84,243, 58,106, 95,109,127,205, 84,220, 41,136, 29,244,214,192,120, 61, +119,152,177,149, 80, 98, 61, 44, 94,208,243, 9, 21,143,134,209, 50, 38,245, 76,190, 52,115,157,197,145, 50, 95, 24, 17,154, 36, +186,102,118,178, 48, 47, 9, 74, 33,188,213,152,178,142,187,173,186, 96,105, 93,213,183, 28,116,163,206,185,181, 54,211, 86, 40, +162,170,141,185,139, 42, 90, 76,255,232,165, 89,149, 77,220, 10,165, 49, 53,171,180,138,226,236,240,224,132,222,140,252,228,188, + 37,220, 75,175,224,141,195,237,180,210, 74, 53, 88,107,179,100,169, 91,205, 70,218, 61, 82, 58,221, 23, 92,243,246, 64,139,158, +226, 77, 46,163,173,155, 62,178,234, 59, 77,108, 83, 35, 99, 5,111,201,205, 75,183,155,178,174, 83,129,232,120, 39,148, 81,111, + 78,227, 94,236,156,225, 92, 48,213,108, 92,245,120,226, 77, 76, 82,127, 35, 38,113, 35,180, 57,211,155, 37,233,113,221,220,232, +107,107,195,139,178, 28,143,220, 93,108,228,233, 48,162, 85,171, 5,194,200,144, 70,110, 79, 71, 26,194,205,190,113,245,120,207, +142,206,231,207, 95, 18,226,200, 78,193,111, 34, 79,159, 92,113,238,157,210,133,122, 56,177,220,189,100, 84, 71, 72,202,183, 34, +196,155, 71,132,135, 91,158, 62,126,204,131,169,242,191,253,217,255,202, 95,254,236,107, 74,213, 53, 84,209,233,221,163, 52, 46, +189,174,181, 21, 37,249, 13,105,152, 56,157, 43,251,107, 8,131,231,114, 11, 41,194,213,102, 99, 63,100,226,216,196, 13,196,133, +211,124,199, 79,255,238,231,196,233,199, 92,239, 28,175,110, 95, 16,167, 71,108, 54,157,194, 29,165,102, 91,181,104,135,158,241, + 45,216,142, 58,138,137,113,176,202,200,120,253,128, 79,158,125,196, 70, 27,132,198,227,239,125, 76,242, 11, 63,251,217,175, 24, +227, 53,143, 30, 61,100,188,113, 92,164,115, 56, 95,200,243,137, 33, 14, 12, 99,100,218, 79,180,237, 53,249,177,237,195, 47,203, +204,114,190,163,148,217, 40,128,210,169,242, 22, 44,220,223, 25,222, 88,229, 58, 34,235, 97,221,129,119,137, 97,176,122,212,144, + 6,190,123,249,138, 90, 77,218,225,131, 85,181,186, 90, 29, 51, 14,137,249,124, 90, 51, 30,222,180,172,199,202, 44,194,121, 48, +242,221, 48,141,120, 34,131, 27,209,222, 76, 13,235,236,166, 45, 18,169,205, 50, 2,129,198,224, 42, 62,153,106,248, 84, 59,167, +215,223,226,106,230, 15,254,232, 79,248, 71,223,255, 1,255,247,191,249,115, 62,255,249,207,168, 45,227,106,165,214, 74,143, 66, +164, 24,205,208, 77,156,114, 1,223, 73,222,113, 51,108, 24, 55, 35,151,176,240,226,245,129, 63,251,215, 63, 99, 63,221,144,235, + 17, 74,224,201,147, 39, 48, 42, 41, 59,188,199,176,175,210,169,235,129, 62,215, 74,114,142,150, 28, 93, 61,229,188,216,222,177, + 38,136, 1,164, 34, 61,210,106, 70,163,160,174,145, 5,212,123, 46, 21, 82, 15,248,208,209,182,161,185, 70, 8,112,153, 51,181, + 8,211,102, 96,190, 40, 83,135,222,239,113, 29,168,137,162,157, 56, 40,213, 43,173, 47,232, 18,169,106,171,155, 56,174,204,245, +229,200, 18, 61,234,130, 85, 44,213,188,241,145, 64, 45, 74,139,142,164, 35, 77, 10,110, 18,246,189,209,139,189, 9,198, 93, 36, + 58, 71, 28,109,250, 66, 83,226, 40,248,139, 35, 37,135,243, 59,196,123,242, 50, 35, 1, 6,201,108,156, 90,186,248, 24,232,233, +158, 92,133,121,153,237,176,129,135,146,173, 19, 78, 67, 92, 66, 90, 97,230, 66,242,215,104,241, 56,181,214, 76,113,138, 50, 83, +197, 17,103,203,138,180,113, 32,106,132,102,194,153, 26, 29,122, 46, 4,151,136,161, 24, 88,139,137,114,236,212,233,130, 96,168, +223, 62, 12, 28, 90, 37,180, 74,242,137, 69,132,201, 71,162, 55, 10, 89,241,214,174,209, 85,112,229,189, 85,141, 21,129, 33,162, + 18, 72,152,207,225,253, 0, 98,116, 21, 57, 57,156,123,127,224,153,183,163,236,232,176, 16,219,123, 59, 40,240,206,103,146,134, +248, 94,153,239,239,190,248,214, 9, 42,148,238, 87,145,217,140,246,142, 31,132,114, 86,250,232,208, 18,161, 44,184,220, 9, 17, +162,223,112,204, 51,135, 89,217,108,141,255, 94,212, 66,143,209, 69,226, 20, 56, 29, 11, 62,120,124,132, 38, 3,147,107,228, 83, + 33,231, 35, 56,161,106,100, 18,161, 57,143,127,242,241,179, 63,117,171,251,218,250,111,224,157,185,183,197, 12, 47,120,233,102, + 87, 91,173, 94,172,183,112, 89,185,222, 56, 33, 40,248, 24,214, 94,222, 91, 15,246,202,123, 71, 44, 84,214, 21,159, 44, 93,252, + 86, 32,227,188,208, 44, 48,189,126,143, 61, 33, 40,173,151,213,190,253,182, 59, 14, 62, 8,189,216,237,207,211,105, 88,253, 66, +215,213, 0,206,173,100,183, 64, 8, 98,174,234,102, 55,123, 3, 13,216,169,169,117, 93, 37,124, 22, 82,160,175,180, 31,105,136, +247,182,131,213,190,138, 29, 58,222, 5, 28,209,186,243, 98,172,251, 49,122,188, 56,242,178,224,180,217, 63, 95,215, 11,244,183, +249, 66, 49,133,109, 47,220,223,222,113,119, 89, 57,250, 30, 68,237, 13, 58,142,215,236,166,145,203,249, 72,169,230, 35,254,228, +217, 67,250,253,137,159,124,241,138,171,199, 87, 92,109, 34,189,192, 54, 12, 32,149, 87,223,125,195,229,238,192,126,218,177, 77, +194, 97, 41,188, 60, 71,158,126,250, 49,159,110, 39,166, 48,161,209,241,191,255,235,191,228,245,105, 38,134, 64, 85,235,216, 26, +251, 89, 12,250, 19, 6,162, 19,124, 8, 76,211, 64,203, 11,187,253,150, 71,187,129,195,221, 17,112,124,248,240,198,120,234,151, +153,235,155,107,112,112, 58,157,208,222, 56,156, 23,110, 30,127,194, 54, 69,122,155,121,252,232, 9,215, 87, 27,198,205,192,163, +253, 67,110, 30, 62, 34,110,182,236, 54, 55, 92, 93,223,176,219, 95, 49,110, 30, 18,199, 29,126,152,248,193, 39,223,227,233,206, + 76,120,207, 30,124, 72,155,239,120,241,242,142, 95,126,241,156, 95, 63,255,154,239, 94,189, 68,157,227,225,245, 13,131,120,118, +211,158, 39, 79, 63, 98, 59,110, 57,207, 71,180,204,196,160,236,167,128, 23,101, 26,182, 12,227,142, 56, 77,208,161,174,252,239, + 94, 43,104,121,151,152,125,219,117,181,116,125, 96,136,145, 31,254,232, 51,254,229,191,248,103,252, 79,255,252,143,249,248,227, + 15,121,115,123,226,116, 60, 89,231, 22,101,179,221,240,227,223,255, 3,126,239, 15,255,128,113, 51, 50,207, 51,151,249, 12,210, +236,103, 16, 59,149,231,150,201,115,166,213,106,110,117, 17,115, 26,136, 95,101, 71,246, 38,219,178, 99,206,243,106,214,170,164, + 56, 81, 74, 38,231,133, 23,199, 59,190,187,253,154,157, 86,246,219,107, 14,249,100,149, 29,181, 26,140, 91, 25,237,193, 55, 74, +158,209,106, 60,137, 90, 26,231,185,224,189,242,112,220,226,188,103,110,133, 92,102,230, 92,184, 63,192,231, 95,127,195,213,228, +185,249,248,134,185,128, 86,193,119,200,218, 45, 15,147, 45,223, 50,248, 72, 81, 71,197, 56,253,162,144,100,117,233,168, 67, 92, + 96,240, 19,105, 52,151,121,208, 64,239,102,242, 11,110,141, 51,119, 93, 27, 20, 14,154, 35, 87,165, 86,168,174,146, 20,186, 75, +150,185,168,149, 99,206, 70,255, 83,165,118,243,204, 39, 17, 74, 1,215,237, 53,138,239, 70,207,195,145, 16,203,253,116, 75,239, +199,125, 98, 96,189, 88,116, 11, 38,117,103,230, 57,245, 48,122, 79,170,194, 38,140,136, 75, 20,109,132,232,113,211,132, 46, 39, +114,109,196,253, 42,101,162, 34,117, 64,135,132,202, 25, 89, 32,186,145,220, 47,180, 16, 33, 12,132,186, 48,197,128, 99,196,251, + 64,151,206,200,128, 72,103, 16,143, 58,161, 86, 97,112, 74,119,153, 90,149,208, 35, 49, 6,182,187, 29,185,219,247,149, 17,211, +204,118,136,155, 43, 70, 58,243,226,137,226, 89,202, 5,137, 17,145,129,154, 77,208,178, 73, 91,134,193,114, 67,147,172,114,152, +176, 62, 76,240,164, 24, 24,163, 77,100,212,153,103, 99,240,102,149,244, 26,216, 77,145, 71,143, 31,224,227, 63,252,182,126,158, + 43,117, 94, 72, 14, 54,187,233, 55, 81,241,127,224,248,253,116, 46,244,178, 48, 37,207,176,221,188,183, 49,249,210, 96,185,204, +104,158,185,218, 14,248, 97,124,175,207,244,115,133,219, 23, 7,230,229,141, 81, 60,155, 53, 21,122, 91,155, 99, 13,179,249,133, +192,165, 46,164,193, 83,103,229, 52, 55, 32,227,167, 70,108, 16,122, 52, 17,145,203, 38, 44,148, 14, 58,163, 75,161, 78,149,224, + 28,243, 92,160,246,149,127,224,137, 20, 90, 53, 39,138,255,232,227,239,253,169, 19, 33, 68, 35,134,137,247,246, 48, 23, 49,146, + 28,111,187,139,157,250, 54,226,255, 54,103,225, 45, 33, 47, 62, 34,230,252,195, 99,105, 78,123,160, 7,227, 39, 55, 59, 39, 73, +244,248,232,113, 69,145,110, 41,123,113, 54, 62,215,245,125,192,105, 67,155, 29, 44,188, 66, 8,238,221, 55, 70,130, 95, 63,191, + 26,197, 77,214, 96, 92, 95,109,114,189, 33,193,126,152, 91,229,221,196, 32, 4, 79, 43,150, 75,118,221,173,192, 15, 97,240, 14, +183, 26,208,122,201,228, 98,183,187,183,162,149, 94,117, 53,174, 65, 12,186, 62,168,157, 41, 65, 69,223,245, 33,197,197, 53, 83, + 16,214, 14, 99,181,238,122, 95, 43, 94,218,121,245,234,206, 88,209, 94,222,189, 41, 55, 85, 66,218, 16,122, 33,231, 51, 89,132, +253,213,158,189,131, 47,190,248,150, 50,108,249,209,247, 38, 66,169, 44, 40,109,233,124,253,213, 11,238,142, 71,190,119, 53,176, +241,157,101,201, 44, 37,162, 97, 75, 34,226,114, 97,251,228, 35, 62,251,209,239,241,239,254,205,159,241,250,222, 30,234,174,129, +138, 95,239,171,198, 62,214,102,223, 51, 21,216,132,145, 86,102, 52, 37,246,187, 43,142,119,119,228,210,120,112,115, 67,213,204, +225,124,102,119,181,103,191, 29,184,191,187, 71,197,225,189,178, 31, 2,255,248,143,254,136, 79,158,125,196,167, 79,158,146, 88, +232,100,174,134,206, 38, 4,162,111,108, 39,207,199, 31, 60,226,163, 39,215, 60,122,248,144,109, 82,166,160, 36,169,140,227,142, +103, 31,126,194, 55,127,247,239,249,235, 47,190,227,193,245, 13,109,158,185,189, 63,115,206, 11,113,154,168,245,200,175,191,254, +156, 87, 47,223, 48,121, 72,155, 72, 26, 38,134,105,139,171,141,243,114, 33,247, 70,155,103,104, 23,134, 8,251,235, 29,131,223, +227,125,100,216, 76,136,139,134,128, 21, 19,183, 12, 99, 34,250,200,143,126,244,125,254,231,255,241,159,241, 47,255,197, 63,225, +193, 54,226, 92,228, 95,252, 15,127,204, 63,250,236, 99, 94,188, 58, 83,187, 9,137,126,248,131, 31,241,217, 39,207,216,110, 18, + 79, 30, 63,225,163,167, 31,115,117,125, 67,201,149,121,190,224,162, 65,113,180,218,100,168,181,198,178, 62,180, 27, 66, 8,202, +176, 73,136, 11, 43,224,195, 60, 4, 85, 28,165, 9, 57,159, 24,104,204,165,113,201,149,185, 40, 47,222,188,226,245,171,151,164, +184,101,179,189, 6, 26, 90, 12,146, 68, 16,194, 38, 16,146,113, 25,234, 26, 84,173,125,230,246,205, 29,247,199, 19,251,235,107, + 84, 49,249,138,235,208, 60,185, 9,127,242,199,191,203,127,251, 95,253,151,228, 46,220,190, 57,226,196,194,103,180,128,134, 96, + 39,210,210,200, 93,233, 53, 51, 14,137, 16, 35, 49, 56, 52,154, 30,117,152, 2, 68,235, 23,251, 30,112,181,216,129,122, 55,146, +131,131, 36,184,218, 89, 74,167, 75, 95, 15,245,142, 8,160,149,230, 59,158, 64, 16,101,110,118,219,219,184,117,215,174,224,131, +103,116,137,203, 10, 79,114,210,169, 94,240,185,211, 93, 32, 12,209,104,133,222, 19, 83, 66,124,194, 19,140, 56, 57, 25, 98,153, + 49,145, 8,108,118,193, 72, 24,126, 3,105, 64, 60,248, 10,227,102,135,155,214, 53,145, 79,140,221,118,224, 99,156,240,211, 14, +189, 20,234, 50,211,194,202,193, 80,144, 22,137, 40, 50,218,196, 14, 9, 20,169,150, 87, 40,138,248,106,127,223,238, 9,130, 85, +132,179, 34,140,196, 4,195,198,179,168,160,181, 18, 39, 35, 38,250,197,122,233,157, 66,116,123, 90,235,212,182, 48,238, 62,192, +251,110,104,234,141,237,248,107, 19,180,129, 4,207,184,119,112,106,180, 14, 81,212, 66,214,206,240,215,173, 91, 56,219, 49,224, +197, 17, 92,196, 57,199, 56, 12, 60,250,240,131,127,176,114,181, 1,243,165,160,165, 48, 38,247,222, 30,190, 69, 97,185, 84, 90, +201,246,121, 55,211,123,123,168,159,115,167, 92,102,168,133,253, 46,189, 55,157,235,219,143,195,185,115,247,230, 53,231,227, 43, +168,139, 77,148, 74, 96, 41,139, 33,105,171,216,212,170, 22,200, 80,187,103,135,231,212,206,248, 36,176,100, 74, 20,230, 34,224, +172,173,144,146, 80,138,210,101,195, 57, 95,232, 24,246, 59,246,107,124,220,227,168,120,175, 54,170,199, 51,231, 66, 16,237,230, +199,110,171, 87,156,102,193, 51,179, 46,194,122,115,173,205,238,224,170, 54,130,103,213, 59,118,111,212,175,214,205,195,222,197, + 60,229,125, 77, 98,170,247, 54,102,235,208, 91,165,213,213,163, 29, 86,226, 92, 53, 62,153,141,229, 89, 49,166, 30, 51,188, 91, +173, 77,107, 53,142, 85,183, 49,185,119, 88,106, 89,196,212,142, 30,164, 23,148,128,211,176, 18,241,148, 24, 88, 67,108,205,244, +165,120, 35,205,173, 95, 80,239,133, 82, 5,151, 18,234, 86,226,207,220, 12, 92,147, 44,176,230,215,114,230,210,234,154, 66,174, +200,104,105,120,235,210, 11,206,219, 24,187,168,201,106,156,172,200, 74, 9,248,232, 88, 78,103,230,170,120, 31,236,176,208,108, + 87, 75, 72, 12,227,134, 86,239, 40,181,211,203,204,243,175,158,227,230,133,187,219, 59, 30, 62,124,192,229,245,133,155, 7, 59, +226,165,242,119,191,252, 37,191,122, 62,243,253, 79, 54,244,208,185, 44,134,201, 4, 33, 74, 99,183,185,225,250,201, 3,110, 30, + 61,224,245,223,254, 5,183,135, 76,240, 17,173,141,142, 82,123,163, 10,246,231,151,190,154,209,148, 86,171,145,248, 84,113,167, + 76,219, 52,124, 26,104,249,204, 92, 59, 27,159,112,226,200,151,198,211,155, 61,227,152, 56, 92, 50,211,176,165, 93,206,252,228, +175,254,130,207,190,255,140,248,232, 67, 54,155,206,135,109, 67,159, 59, 99,218,113, 97, 32, 94, 61,226,227,199, 79,208, 92,169, +237,204,207,110, 95, 16,189, 99, 24, 39, 90, 94,248,187, 95,252, 21,255,234, 39, 63, 39,238, 30,114, 89, 22,134,209,104,133,181, +116,106,174, 8, 59, 36,195,151,183, 47,249,252,197,107,158,222,220,240,224,193,222,210,164,185,177,219,237,184,190,218,147,246, +194,237,237,107,238, 47, 51, 41, 55,254, 95,214,222,108,217,178,236, 58,207,251,198,236,214, 90,123,239,211,100, 87,153, 89, 5, +128, 0, 8,144, 32,197,198,146, 72, 72,178,195, 97,135, 20,214,141,111,253, 64,124, 16, 63,129,223, 64,182, 67, 97,218, 84,144, + 18,109, 81, 32, 65,128, 34,122, 20,170, 65, 85,102,158,110,239,189,214,154,205,152,190, 24, 43, 11,164, 29, 14, 95, 48, 51,162, +162,154,168, 58,117,242,156,179,247,154,115,140,255,255, 62,167,157,253, 94, 8,126, 98, 76,143, 89, 90, 35,175,133,199,143, 42, +251,253,200,139,247, 31,243, 47,254,224, 91,252,250, 7,239,241,139, 79,110, 72,227,192,229,229,192, 60, 31, 57,221,159,249,111, +255,155,111,227,189,103, 93, 23,222,220,175,172,173,219,126, 92, 11,135,203,107,166,195,158,229,116,207,205,171,207,109,111,239, + 3,126,219,187,151,220,200,154, 57,233,202,105, 89,185,184, 56, 48,140, 35,195, 48,177,223,143,204,107,197,236,161, 74, 85, 71, + 87,227, 67, 8,149,189, 79,164,225, 41, 45,175,204,121,166,105,101, 55,237,216, 31,158, 49, 14,207,121,120,248,148, 92,206,248, + 38, 76, 83,226,203, 95,125, 65,107,141,155,207,111, 56,223, 47,156,124,103, 94, 59,187,113, 71,110, 29,223, 5,173,142,230,108, +237,176,214, 7, 38,206,252,214,151,158, 49,207,153,143, 63,250,165,133,171,170, 99, 68,201, 94, 89,137,150,216,237,134,122,109, +186,176,168,178, 11,246,240,204,171, 26, 20,170, 55, 92, 87,162,171,132, 48,208,231, 70,143,149,188, 8,174,102,246, 50,176, 84, + 69, 7,129, 82, 54, 78,133, 57,233,149, 76,174,157, 93,138, 52,241,156,180, 17,189,105, 68,227,224, 41,165, 18,188, 71,165, 16, +197, 89, 54,102,242, 68, 50,185,121, 90,131,105, 50,121,147,174,133, 62, 37,131,218, 84, 96, 7,125,169, 91,238,101, 32,246,145, +230,132, 92,148,171,209,193,193,227, 99,164,230, 74,114,145, 30,161,228, 29,187, 49,210,253, 66,209, 35,147, 31,104,238, 64,114, + 80,243,173, 57,219,125,226, 92,110, 89, 91, 97,240, 19,218,173,250, 89,218,130, 75,117,155, 86, 94, 34, 75, 70,164,218,251, 78, +180, 52,188, 48,177,204, 21,223, 27,209,175,212, 5,123,159,116, 19, 82, 22, 86, 45,244,116,131,115,158,232, 5, 57, 52,118,221, +130,141,126, 12, 52, 77,200, 34, 20, 50, 7,239,240,165,225,198,248,182,148,131,168,146, 91,195,139,146, 92,218,154, 76,141, 85, + 45, 7,226,176,213, 90,120, 7,123,234,183,157,117, 17, 54,230,251, 59, 12,157,105, 71,164,147,146,127,231, 31,183,109,213,226, +119,157, 1, 80, 32,139,218, 84, 80, 45, 44, 29,176, 21,102,233,142,234, 42,197,201,150, 86, 47,228,186,210,114,101,237, 3,195, + 52, 50, 4,147,138,201, 16, 72,206,241,112,159, 24,135,149, 59, 61, 17,114,231, 20, 10,187,203,129,176, 12, 84,205,156,231, 95, +178, 75, 19, 61,174,200,234,105, 18,168, 52, 84,133,224,147,167,171,145,207,188, 8,180, 70, 85, 27,113, 85,108, 28,208,229,237, + 30, 52,219,131, 77,172, 18, 36,221,228, 41,206, 23,164,117, 59, 69,134,109,135,243, 22, 49,234,189, 17,128, 2,120, 21,180, 54, +123,234,109,244, 31,143, 35,107,179,202,133,120,168, 74, 19,197, 59, 27,176, 75,182, 90,209,178, 54,211,180,227, 32,120,171,131, +109, 86, 34,193,217,234,165,117, 42,198,108,143,219,104,206,106, 77,216,109,164,109,213, 39, 17,168, 6, 72, 9,162, 44,243, 66, + 74,158,228, 44,160, 37,193,161,165,144,223, 54, 0,122,163, 59,143,214, 70,116,206, 14, 45,217,250,216,157,206,154, 11,209,219, + 40,183, 54, 75,199,123, 31,168,155,177,110, 61,173,212,109,255,164, 98, 97, 66,232,196,241,146,167,215,143,153,111,238,185,215, + 74,107, 91,191, 54, 55,214,170,156,142, 71,254,250,225,158,175,125,208, 89,142,119,252,248,179,149,162,158,190, 84,154,238,184, + 72,142,172,194,110, 80,220,154, 24,246, 19, 47, 31, 95,242,213,171, 75,254,244,175, 62,226,252,144,241,193,163,197, 70,253, 5, +190,144,223,136,139,104, 51,184, 40, 2,235,122, 70,232, 44,235,194,221,241,142,218, 42,136,227,156,143,236, 68, 72, 46,144,215, + 66, 16, 56,140,137,251,211,106,213,181, 24,249,238, 15,127,196, 31,255,159,127,201, 87, 63,248, 50, 47,222,187,226,238,230, 13, +243, 82,185,186,124,196,179,167,143,216,173, 43,245,213,231,230, 15,142,144,215,153,190, 20,206,121,198, 15,137, 55, 55,119,230, +209, 88, 23,142,115, 65,122,192, 71, 79,207,133,243,121,102,109, 7,100, 12,132, 16,208,214,200,173,160, 82,249,244,103,159,241, +234,238,158,113, 8, 92, 63,122,194,243,235,167, 4, 81,124, 1,162, 48, 30, 38,214,156,201,235,145,160,141,224, 28,195,197, 14, + 90,231, 95,254,171,127,202, 31,254,254,175,243,131,191,249,144, 87, 55, 39,126,231, 31,127,131,127,247,199,127,206,127,250,222, + 79,249,198, 87, 94,242,239,254,195,247,249,246, 63,251,125, 46,167,137,175,189,124,198,215,190, 52,240,167,255,241,123,124,242, +249,107, 94,188,247,140,114,124,195,223,254,224,111,248,249,207, 63, 38,164,137,105,183,103,220, 93, 49, 13,145, 32,202,218, 29, +181, 45,156, 31,142,148,229,196,105, 89, 41,205,129,120, 86,157,141, 17, 30,194,102,180, 83, 8, 19,107,171,168, 54,174, 46, 39, +118, 59,225,161, 15,172, 13,150,227, 61,243,241,132, 31, 27, 47, 95,124,157, 52, 8, 55,175, 62,166,233,194,122, 86,202, 67,230, +226, 50, 80,246, 35,189, 9, 15,199,149,139,105, 98, 74, 3,119,231,163,201,131,212, 94,147,211, 0,195, 20,248,248,254,158, 9, +225,107, 47,223, 35,223, 31,185, 59, 61,208, 7,199,178,218,237, 51,164,193,192, 59,161,208,106, 37, 38,161, 45, 35,139, 86,156, +100,155,122,117,155, 58,137, 40,185, 41, 94,237, 70,210,139,224, 54,212,111,141, 74, 44,202,172,149,224, 33,212,192, 18, 2,190, +117, 11, 11,249, 98, 10, 92, 63,162,177,208, 90, 38, 2, 82, 26, 89, 97, 26, 38,235,241,246, 98, 8, 88, 7, 94, 18,141,145,233, +162, 81,207, 11, 61, 69,188, 11,132,115, 51, 78, 58,153,245,174,144, 24,104,190,177,222,100,210,216,184,138, 35,181, 7,206, 57, +179,155, 18,156, 23,130,143, 76, 67,160, 72, 71,117, 33, 5,207,202,200, 50, 87, 24, 26, 41, 68,142, 15, 11, 97, 59,160,171, 20, +118, 62, 49, 21, 65,131, 34,197, 19,170, 39,139,167, 13, 7,212,175, 36, 93, 57,171, 16, 9,156,122,193, 7,181,166, 70,152, 89, +154, 25, 11, 99,109, 54,174, 79,246,123, 27, 93,226,166, 42,115,107, 92,140, 91, 27,169,101, 78,234, 9, 65, 41,231,206,152, 20, + 25, 26,113,174,104,119,204,107,128,209,152,241, 29,221,124, 5,102, 77,243,190, 19, 93,178, 76, 71, 20,154, 20,162,236,136, 62, +253,131, 29,234,127, 87,186,210,187, 5,138,223,165,112,133,110, 53, 67,247, 46, 63, 46,111,161, 55, 27,194,251, 29,154,223,222, +126, 61,242, 98,121,172, 20, 58, 53,123,122, 81,154,111,182, 30,233, 32,190,161,177,160,165,176,219, 37,214,150, 16,129, 80, 11, +222, 9, 89, 34,249,222,179,248,149, 28, 58,107, 41,172, 8,205,101,130, 68,134, 46, 44,229,200,172, 17,221, 14,197,221, 9,171, +175,248,139, 68, 57,182,237, 32,135,213, 33,164,169,141,218,197,130, 69,221, 91, 16,174,170, 34,254,173,163,215,188,226,174,217, + 24,188,118, 59,153,120,186, 89,194,124,183,126,184, 61, 82,237,196,229, 55, 14, 47,118,162, 43,197,160, 44,222, 57,130,116, 74, + 23,240, 9, 23,173,227,215, 99,192,111,123,187,174,213,194, 85, 46,144,124, 53,134,124, 83, 52,203,118, 72, 96,219, 53, 26,216, +166, 75, 53, 68,237,150,152,245, 56,156, 43,219,168, 63,161,100, 75,185, 98,164,187, 64,167, 57,221, 92,195, 74, 16,251,253, 7, +239, 81,173,219,225,197, 92,220, 73,132, 54,218,216,188,234,178, 97, 23,133,214, 5,117,233, 11, 60,146,108,120,197,214, 43,146, + 60,158,202,188,174,198,196,239, 74,111, 2,205,246, 24,211,176,163,230, 35,243,106,201,107, 31, 76, 15,121,174,199,205,122,103, +238,247,159,255,228, 19, 94,205, 74,195, 19,130,161, 43,247,209,225,139, 13,211, 47, 66, 34, 14,239, 81,214, 19,127,242,199,255, + 43,119,167,127,205,167,231,130, 11, 9,109,171,161,145, 43,116,169, 84,221,136, 19, 98,220, 93,135, 81,240, 74, 89,183, 41, 76, +103,158,103, 74,110,208, 43,235,188, 90, 56,178, 55,150,114,228,147,207, 19,196, 61, 79,159, 38,188, 15, 60,172,141, 16, 39, 82, +234, 28,151, 76,241,194,185, 86,126,246,233,107,210,205, 61,154,148,120, 11,127,253,183, 63,198, 7,207,243,151, 47,168, 75,230, +205,235, 55,184,224,121,249,242, 57,105, 3, 1, 45, 75,230,124, 58, 49, 13,198, 49, 14, 81, 88,214, 19,231,211, 5, 62, 38, 11, +185,104,101, 85, 3, 34,165,157,199, 63, 88,168,234,116,158,249, 69,121,195,241,116,203,224, 58,151, 87, 87, 92,249, 11,116, 85, + 82, 28, 89, 90,195, 83, 33,219, 62,248,167, 63,252,132,151,143,158,242, 91,191,253,235, 60,126,126, 77,227,204,254,106,199,139, +231,207,248,245,111,124,153,251,115,225,248,112,228, 23,191,248,148,159,127,114,224,119,126,243, 27,212,249,158,239,124,231, 59, +252,120,119, 64,123,231,225,124,226,241,227,103, 92, 31,174, 44,116,169,138,232, 74,115,194,229,238,146,113,127,201,122,113,193, +195,253, 13,175, 94,223,241,228,217, 51,190,241, 27,223,228,231, 63,251, 9,191,252,248, 83,195, 95,198,193, 8,122,101,166,163, + 12, 7,227,255,223,223,190, 97,186,124,204, 56,237,249,236,147, 27,150, 92,232,231,143,208,114,207,225,250, 25,195,112,205, 57, +191, 97, 26,225,205,235, 19,111, 62,175,124,245, 91,191, 70,119,119,188,254,196, 92,206,159,125,254, 41, 75, 89, 76,236,146,141, +136,120,125,185,231, 75,207,175,113,221,115,204, 51, 77, 60, 31,124,237, 43, 60,124,255,199,228, 58,111,104,206, 64,109,167,109, + 31,102,173,215, 53, 55, 66,172,150,145, 73, 14,213, 72,207,129, 13, 78,128,184, 78, 46,217, 14,235,181, 34, 81,137,233,130, 82, + 58, 67,170, 12, 77,169,193, 66, 59, 23,222,147,123,178,186,171, 86,212,117,156,207, 12,189, 19,242, 14, 55, 24, 55, 60,226,105, + 45, 64, 93,104, 30,156,175,236,152,200, 10,149, 51,251,236,141,151,177, 26,223, 33,215, 35, 61, 90, 66, 63,106, 64, 92, 32,183, + 5,169,142,105, 47,172,205,227, 37, 35,226, 56,159, 61,135, 33,208, 93,101,174, 25, 9, 30, 6, 97,169,194, 20, 70,171,216,137, + 17, 39,189,245, 84,201, 93,161,143,236,164,176,186, 51, 61, 57,166,139, 68, 91, 50, 82, 39, 10,153,122,204, 44,205, 60, 21,153, + 21,215, 4, 77,131,161,175, 93, 66,114,227, 98, 47,188,247,226,203,220,190, 46,220, 31,111,204,147, 17, 7, 82,239,164, 62, 50, +168,131, 1,134,238, 56, 21, 71,233,142, 20, 2,251, 0,165,120,184, 8,104, 49, 61,169,171,157,238, 26,132, 78,109,213,110,227, +201,111,178,164,190, 25, 21, 61,158,128,243, 16, 83,124, 39,183,223, 90,205,204,104,140,136,119,119,155, 54, 4,187,110, 16,162, +119,251, 80,111,213, 8,254, 65,216, 20,208,239,246,166, 94,114,161,150, 74,171,102, 46, 85,103,235, 56,169,118, 89, 44, 5,138, + 8, 48, 24,107,101, 16,147,101, 13,137, 93,140,176, 84,150,193,158, 89, 49,102,230, 69,241,106, 6, 75,223,132,163, 10,195, 62, + 32,210, 72,231, 68,174, 66,175, 51,201, 57,132,133, 41, 37, 84, 2,161,183,142, 74,133,224,209,102,108, 57,186,216, 77, 92,100, + 75,248, 90, 90,217,137,225, 81, 5,235,139,171, 56,136, 1,165, 90,149, 72, 54,252,102,115, 72, 18,146,183, 4,125, 83, 65,196, + 89,221,173,111,227,121, 39,168,223,176,156,218,191, 72,215,107, 83, 52, 12,224, 42,209, 5,219, 61, 23, 19,194,216,232,206,246, + 73, 78, 4,103,243,126, 74,175, 27,233, 46, 90,124,102,131, 62, 72,179,149,128,153,132,218,246,128, 86, 16,123,232, 46, 77,192, +219,222, 75,181,211,130, 61, 44,234,146,109,204,207,198, 67, 86, 33, 72,223,192,252, 13, 85,143,139, 80, 17, 90,171, 36,239,105, +218,240,126,163,204,117,204,155,219, 59,249,188,178,214,205,227, 94,213, 26, 1,206,129, 15,140, 67, 66,219,194,113, 53, 68,167, +247, 32, 65, 57,159, 87,134, 97,199,197, 46, 16,171,242,203,251,149,182,173, 51, 74,239,220,212,206,235,211,202,251,143,174,121, + 34, 16,189,242,253,143, 63, 99,246,158,143, 42,252,179, 47,127, 21,249,197,127, 96,209, 51,189, 59, 74,175,168, 20,219,249, 98, +149, 37,231,228,139,188,128,223, 2, 46, 29, 19, 76,136, 24, 79,191,212,206, 58,175,196,105,228,112,253,152,203,171, 39, 60,127, +242, 30,251, 36,244,100,252,167,228, 19,206, 21,142,119, 71,238,151, 27,202,105, 33, 18,152,134, 72, 65, 57,159, 51, 47, 95,236, +184,186, 60,240,250,214, 14, 47,215, 79, 15,188,185, 59,114, 42, 43,247,199,133,235,139,196, 52, 36,206,231,133,211,124, 79, 26, +175, 54,141,174,133,203,154, 42,169, 59, 98, 20, 74, 21, 90,206,180, 6,210, 29,222, 25,139, 64, 0,239, 27,201, 59,230,186, 50, +191,126,205,241,148,113,162,208, 50,251,171, 43,158, 92, 63,166,172, 43, 97, 16, 62,123,243,192,159,253,249,119,248,201, 79, 14, +252,247,255,195,191,196, 15,158,127,252,237,223,226, 31,125,235,235, 56,224,122, 26,248,241,135,175, 89,158, 63,231,209,245, 5, + 15,167, 51,159,221,220,112,117,189,227,227,143, 95, 17, 66,226,234,233,115, 46, 14, 7,164,207,204,243,105,219, 99,186,141,136, +151,161,142, 68,151, 24,198,145,103,143,161,148,153,178, 28,249,221,127,244,187, 60,121,246, 62, 63,249,209,247, 57, 29,111,120, +122,245, 24,130,231,248,112, 34,184, 78, 57,175,140, 46,178,235,157,215,183,159, 49, 47,103, 19,232, 72,231,116,188,103, 94,103, +134,225,146, 48,152, 24,231, 75, 95,186,226,219,255,228,247,248,246,183,127,143,255,252,179,159,241, 63,190,249,159,248,229, 71, +175, 89,203, 39,120, 23,184,124,116,193,110,186,228,220,225,233,227, 43, 6,127, 9, 61,114,123,115,131,212,200,243, 95,123,193, +251, 47,175,249,217, 79, 78,212, 6, 75, 91,240,211, 0,115,163,180,140,211,104, 7,250,182,226,122,162,175, 1, 74, 37,186,142, +244,192,172, 43, 40,196,105, 64, 84,240, 97, 79, 43,103,116,153,233,218, 88,194,100, 88,233,197,166, 85, 85,173,177, 81,125,161, + 55, 97,144, 11,154, 52,252,154, 9, 59, 71,110,153,166,194,224,160,149, 51,213,155,217,113, 23,246, 44, 0,174, 33,107, 32,227, +144,168, 80, 21, 9,246,112,214,214, 32, 39, 6,117,180, 61,132,213,236,122,243,220,201,161,114,209, 2,145, 78,107,103,102, 60, + 81, 5,137,202, 24,163,221,254, 67,192,119,165, 71,171,158, 46,107,227,176,243, 20,221,225, 81,166,197,161, 41,242,144,193, 39, +168, 40,238, 81,164,221, 43,125, 94,153,162,163,118, 8,161, 67,241, 27,228, 72,161, 7,226,106, 45,160,131,223,243,236,242,154, +245,246, 51,206,234,232,163, 48,183, 70, 24,204,189,225,253,192,218, 28,116,235,207, 15,140, 84, 49, 94,136,143, 35,139, 54,218, + 12,195,190, 49, 13, 59, 83, 83,247,206,152, 44,172,233,212, 46, 24,205, 91,134,166,169, 34,174,217,207,208,244,110,106, 92,125, +227,176,122, 7,254, 93,250,206,213,164, 74, 94, 4, 39,239,238,227,214,190,189,245, 75,223,146,250,239,118,252,158, 59,244, 92, +113,181, 81,123,167,170, 77,221,188, 90,195,234,220, 21,122, 99, 62, 21,252, 69,196,229,202, 40, 74, 72,142, 12,228, 94,113,151, +142,112, 22,244, 65, 41,110,101,234, 19,121,153,201, 99, 96,172,133, 92, 18,107, 23, 14,154, 88,235, 2, 34, 52,174, 89,227,189, + 73,166,180,218,244,185, 43,155, 62,117, 43,229, 59,143,120,163, 24, 65,199, 7,135,219, 36, 45, 85, 77,208, 34, 62, 80,154,169, + 83, 61, 98, 39,117, 31, 45,189, 74, 67,187,226,244, 45, 23, 87, 76,167,218,197,126,224,136,134,139,149, 66,175,130,108, 35, 35, + 74, 65,123,167,244,134,111,209,166, 6,222, 72,112, 26, 4,223, 21, 95, 59, 18,204,126,133,195, 92,237,120, 82,116,208, 10,173, + 25, 5,207, 59, 76,254,140,117, 65,187,217, 81, 77,135,232,109,175, 34, 34,168, 19,188, 19,162,136, 29, 28,140, 14,111, 9,229, +102,129,162,241,209,173, 0, 0, 32, 0, 73, 68, 65, 84,158, 30, 19, 78, 13,109,233,122, 67,182,204, 65, 32,209,213,129,119,180, +181,162,152,150, 85, 38, 7,179,245,230, 61,158,156, 43,181,154,114,150,237, 32, 34,206,170,124,206, 41,235,122,162,150,182,121, +153,189,189,232, 47,175,120, 62,121,242,124,207,210,160,138,173, 57,236, 60,226, 57,159, 5,199,192,133,119,132,141, 94,181, 30, + 63,226,123, 31, 45,212, 97,228,175,255,226,223,242,201,135,159,194, 82,201,170,104,215,237,112,110, 33, 65,245, 14,237,130,182, +130,243, 14, 47,126,227, 7, 10,174, 59,178,118,122,171, 32,194,254,242,125,158, 63,127,202,184,243, 60, 62, 92,145, 92,179,177, +189,119,212,249,136, 75, 35,211, 97,226,234,226, 5,251,187,196,235,219, 19,126,245, 92, 62,174, 60,156,206,188,122,117,143,208, + 25,124, 4, 26,247,119, 15, 92, 12,129,139,221,200,114,151, 57,205, 39, 46,118,145,195, 48,112, 62,159, 89, 22,165,174,158, 49, + 37,206,171,157,124,215,229,196, 16,119,164,105, 34,175,150,251, 88,215, 98,234, 73,103,240,232, 86, 26,126, 31,173, 23,191,110, +255,108, 11, 98,222,223,157, 32,141, 60,122, 36,228, 53,115,177,223,145,162,227, 71, 63,249, 5,194, 75,150,155,207,137,151, 17, + 84,136,131, 39,159, 43, 75, 81, 30, 95, 29, 56,205, 74, 12,145,195,126, 34, 14,145,188, 84,134, 97, 96,127,121,197,163,195,196, +146, 79, 56, 21,122,247, 20,173,228,178,210,123,165,136, 26,159, 65, 50, 67, 8, 92, 60,121,198,105,153,185,185,189,225,189,231, +143,248,198, 87,159,243,236,201, 53,255,249,187,223,229,238,205,107,118, 23, 35,193,123,150, 83,166,134,206,163,199, 35,111,110, + 94,241,139, 95,254, 18, 39,222,124,229,221, 81,157,114, 57, 29, 88,215,149,245,124,143,147,145,151,207,222,227, 43, 95,185,102, + 31, 29,174,116, 46,199, 61, 31,243,218,160, 36,162, 60,220, 63, 48,141,138, 15,215, 60,123,121, 65,215,149, 86, 19, 23,251, 29, +175, 62,125,224,238,245, 43,122, 55,167,183,111,221,106, 88,165,208, 52,155,207, 65, 12, 36,213,250, 96,252,128,220,233,169, 89, + 43,164, 41,174, 21, 28,131, 33,145, 55,159,180, 72, 67, 54, 5,174, 19,147,119,132,232,168,210,137,221, 52, 78, 46,140,248, 8, +122, 94,112,128,140, 35,173,174,212, 94,136, 62, 48, 5,161,121,111,245,203, 30,223, 38,126,168, 53,227,178, 99,118,214,123, 15, +150,101, 52,171, 90, 17, 28, 43,139,239,208, 7,106,119, 28,162,193,148,106, 62,113, 26, 3, 67, 78, 12, 65,145,168,180,150,240, + 18,185, 59,206, 12,251, 9, 39,155,200, 7,143,148, 78, 84,211,207,122,245,212, 94,145,209,209, 92, 38,201,129, 65, 11,235,176, + 34,110, 64, 6, 88,130, 18, 53, 16,239,149, 93, 12,168, 91,184,155, 87,168,149,235,131,183,240, 92,123, 66,246, 51,223,255,225, +135,204,243,202,197,232,201,213, 52,210,173, 43,164, 1,199, 96, 10,236,224,241,201, 83, 79, 5,215, 19, 71, 7, 65, 10, 72, 99, + 76,131,237,133, 93,163,174,141, 24, 60, 90,108,194, 37, 97,147,175,180,198, 16, 71,132, 74,148, 72, 12,129,228,223,205, 67,189, +110, 23, 64, 7,239,118, 76,110,227, 73,188,219, 32, 61,239,144, 82,215,186,133,159,211,206, 66,220,239,242, 87,219,100, 85, 33, + 40, 61,118,180, 24,128,180, 22,161, 74,161, 72,163,169,176,191, 26,240,139,114,179, 42,109,237, 92, 28,172,125, 18,171,224, 70, +165, 46,133, 83, 59,225,207, 21,191,239,244,253,142,126,215,168, 62,224,220, 2, 24, 96,171,248,134,171,157,180, 11,132, 22,201, +247,243, 86, 69, 79,132,206,219, 27,180,245,112,251,182, 43,239,189, 26,233,127,219,127,183,238, 8, 98,233,239, 42,178,233,106, +196, 24,241,226,105, 82,137,221, 88,235,160, 54, 6,240,118, 91,102, 75, 94, 54,103,124,238,222, 27, 65, 28, 4, 67,178,182,110, +148, 55,188, 85, 87,130, 44, 56, 9, 84, 13,230,105,118, 29, 81, 99, 58, 55,245, 56, 42, 90,192,133,104, 5,187, 98, 9,123,239, +236,230,230,188,125,243,138,179, 16, 97, 23, 71, 15, 14,167,198,161,151, 16, 45,240,212,213,170, 50, 40,226,186, 17,225, 74, 71, +131,105,210,107, 85,164,228,109,239, 28,168, 20,180,118, 42, 13,183,102, 91, 91, 56,133,224, 76, 74,131, 71, 66, 39,142,253,173, +201,143, 82,234, 70,209,179, 4,237,232,163,117,215, 67, 36,186,192,188, 86,123,232,110,189,127,239, 60, 95,122,180,199,231, 59, +226,193, 49,206,141,155, 89,168, 90,141,129,220, 60,143, 14,194,123,215, 17,100,229,180,118, 92,152,248,214,215,174,248,240,246, +204,167,119, 39,254,247,255,237,223, 18,134,180,233,106, 45,115,160,106,118,243,183,246, 3,121, 59,150,115, 30, 63,154, 62,212, + 41, 68, 47, 84,205,140,211, 99, 62,120,241, 77,222,127,249,152,221,208, 88,202, 66, 47, 15,100, 26,165, 9,100,131,241,204,249, +196,124,187,226,117, 0, 85,246, 83,130, 14,251,139,129, 90, 43,243, 58,179,206, 43, 69, 29,206, 57,150,156,185,121, 56,217,129, +177, 99,249,129,210, 72,131,125, 46, 69, 51,213,101, 98, 12, 4, 39,100,173, 44,107,101, 26, 26,189, 26, 19,129, 90,153,207, 39, +219, 15,226,104,210,113, 40,222,219,152,209,252,130, 91, 6,196, 37, 66,220, 44, 83,181,224,156,129,139, 90, 81,254,187,127,253, + 95,241,237,127,254, 91,196,120, 70,139,226,125,162,183,206,249,126,166,171,216,138,198, 67,244,209,232, 97, 26, 72,227, 5,207, +247, 79,192,117,150,114,102, 55, 6,164, 42, 55, 15, 11,243,241,100, 52,196,222,168, 15,103,150,249,196,227,203, 71, 36, 58,165, +204, 92, 95, 30, 24, 39,199,239,252,230,151,185, 63, 62, 80, 40,252,243,127,241,207,249,254,223,252,128, 31,254,224,123, 56,239, + 24,134, 3,116,199,155,215, 39,142, 15,179, 57,197,187,229, 79, 66,138,198,216,159,246, 4,175,244,229, 1,156,112,188, 89,249, +159,255,205,159,240,135,255,117,231,245,205, 29,159,126,254,154,222,154,153, 4,155,179,125,250,122, 98, 31, 18,147, 8,218, 23, +230, 89,137,110,100,117,141, 15, 63,126,195,124, 90,201,171, 67,134,142,215,138,115,145, 30, 7,242,188,210,251,130,196,145, 46, +129, 32,158,228, 18, 69,149,181, 44,120, 25, 72,195,158, 21,165,215,217,164, 20, 46, 64,220,225, 27, 95, 92, 12,106, 83,220, 65, + 72, 50,208,215, 64,140,178, 9, 50, 26,153,197, 82,229,114,132,193, 51,174,123, 92, 84,238,231,133,233,224,241,171,125,159,187, + 10,148,149,131, 23, 86,175,180,188,218, 45,113,136,204,222,163, 15, 29,138,210, 70,152,186,167,173, 74,240,145, 93, 26,104, 77, +209,102, 85,194,117, 74,104,170,164,115, 70, 99,227,232,162,173, 20,171,199,135,142, 4, 79,244,141, 78, 36, 14, 23,160,149,124, +127, 6,129,180,155,160, 56, 52,205,180,224,241,110,194,149,200, 48,128,207, 43, 82,132, 50, 84,203,246,120,207,120,189,183,247, +162,226,104, 81, 24,166, 74, 88, 29,119,245, 68,218, 59,214,115, 37,250, 61,113,138,198,124, 47,142, 54, 65, 59, 47, 6,129,123, +122, 77,203, 10, 46,211, 37,226,113,196, 36, 16, 12,255, 90, 91,193, 37,179, 79,218, 92,185, 18, 9, 12, 81,172,170,212, 59, 62, + 89,189,177,123, 49,232,213, 59,216, 31,107, 83, 11,157,241,238, 68,234, 38, 93, 83,122,107,132, 36,239,180,163,222, 55,243,162, + 29, 24,222,113, 0,111,251,228, 91, 46,204,107,195,245, 68,107,213, 70,239,163,224, 72,132,181,126,241,140, 57, 3,131, 15,140, +131,160,203,153, 24, 3,179, 58, 56,122,156, 22, 98, 31, 72, 97, 7,221, 81,214, 70, 74, 9,145, 76,140,123,150,227,204, 76, 99, +204,130,132,192, 82,142,196, 62,146,139, 35,238, 20,215, 27,193,163,150, 22,215, 77,222, 34,111,251,223,225,139, 55, 94,186,141, +143, 59,102, 76, 99, 99,105, 59,217, 76, 87, 94, 13,233, 42,221, 48,174,146,192,219, 55,219, 13, 30,205,138,115,149,136,167,122, +211,170,118,239,232,173,109, 88,120, 69, 17,219,203, 59,111,156,237,216,209,150,113, 93, 89, 87,199, 97, 8,184,222, 89,138, 49, +197, 7, 9, 86, 93, 21,161, 55,103, 59,216, 77,209,170, 34, 52,177,116,190,115,237,139,125,103,235,182,171,211, 22, 73, 67, 96, +204,149, 34,206,110, 90, 98,212, 57,117, 98,129, 24,181,155,106, 87,187,205,155,199,219,128, 29, 40, 70, 26,163, 89,101,202, 37, +122, 95,237,244,186, 8, 62, 89,133,207, 53, 51, 39,173, 93,113, 61,224, 66,220,122,245, 13,145, 45, 64, 40,109,243,179,123,106, + 45,180,146,208,114,203,224,149,203, 97,160,113,230,246, 1, 30,112,214,159,215,202,213,245, 72,140, 43,111,212,163,197, 49,180, +202,245,176,231,247,191,252,140,115,249, 28, 63, 8,247, 15, 11,205,245, 47,244,141,142,110,171,252,183, 76,128,110, 53,198,105, + 24,104,181,108,104,126,111,161,197,238,121,241,222, 7,252,151,191,255, 79, 8,195,145,211,178,240,230, 38, 32,222,115,127,124, + 67, 19,240, 53,227, 82, 66,181,145,170,163,144,105,174, 17,165,177,195,130, 67,227, 48,176, 27, 15, 60, 76,103,142,119,119, 60, +145, 71,156,114,102, 93, 29,222, 59, 14,151, 23,164, 16, 54,221,169, 67, 60, 44,231,133,178,172,236,134,209,114, 5, 13,214,156, +113,178,103,116,222,168,135,173,177, 44, 74, 11, 25, 69,209,222,192, 69,188, 42, 85,183,189, 34, 66, 43,141, 30, 4, 31, 18,189, +153, 36,168, 57,251,119,206,243, 3,127,248, 7,191,206,179, 15,174,185,251,116,134,213,209,135,142,106, 97,119, 57,114, 62, 23, +214,166, 16, 18, 63,249,240, 67,254,226, 47,191,199, 71, 31,191,102,127, 56,144, 98,228,246,230, 53, 49, 56,124, 83,110, 79, 71, +214, 50,155,245,175,218,148,171,119,229,124, 84, 92,126, 77,120,246, 20,233,149,225, 74, 24,210,158,139,120, 32, 94,122,254,151, +127,243,127,240,149,175,127,139,223,253, 47,126,155, 39,143,174,249,247,127,246,167, 28,251, 61,187, 97,199, 90, 44, 25, 61,133, + 72,107,157, 90, 27, 57, 84,158, 94, 92,226, 90,167,106, 97,112,130,134,196,112,113,193,152, 28,223,249,243,255,200,116,185,227, +209,229,129,251,219,123, 11,239,180, 74,244,176, 54, 69,230, 19,243,121,221, 78,116,137,178,118, 90, 11,156,215,206, 90, 29, 99, + 72, 44,110, 69,212,211,215, 76,173, 91, 91, 68, 6,180, 22,162, 91,193, 37,214, 8,129, 61,169,207, 40, 25,134,132,111,224,155, + 39,106,199,135, 74, 17,232, 61, 33, 58,163,179, 85,160,122, 23, 38, 7,132,202,114,178,208,105,243,133,216,131,145, 44,189, 16, +170,103,237,149, 92, 5, 39,145,249,193,118,161, 18,179, 41,105,219,153,186, 63,192, 48,208,214, 19, 85, 23,168,141,243,169,160, +217, 65,175,102,215,203,141, 20, 29,213, 11,180,196,144, 54,155,227,234,129, 51,174, 70, 22,162,209,228,176, 74,154,182,204, 18, + 19, 73,237,101,233,162,125, 47,149,134, 12,142,128, 77, 45,135, 48, 50, 36,193,187,200,178, 40, 4,197,185, 70,144, 72,137,149, +113,112, 4, 63, 16, 99,229,110,134,250,208, 73,106,210,155, 50, 47,156, 91, 32,186, 72, 26,237,225,178,212, 21,215,236,235,238, +227, 37, 75,173, 80,149, 24, 58,210,102, 36,121,100,245,164,222,209,131, 35,159, 97,242,141, 48, 41, 90, 29,174, 59,198,193, 52, +187, 61, 88, 94,167,181, 70,138,208, 61,172,173, 32,193,244,189, 46,164,127,248,173,148,141, 1,177, 77, 83,223,213,195, 87,129, + 82,218, 38, 14,251,149,254,245, 93, 5,240, 84,173,214,236,125,226, 93,255,106,106,120, 91,175,121,131, 95, 69,227,247,231,140, +120,107,106,116, 49,208, 25, 69, 41, 30,206, 55,103, 34,141,197, 67, 61, 40,235,109, 38,132, 68,138, 43,193, 79,148,234,104,231, + 59,228, 58, 64,138,140,103, 37, 5,203, 88,172,218,241,165, 17,171,163,214,140,184, 72, 94, 58,174, 58,252,139, 23, 47,254,232, + 45,240,207, 30, 92, 98,157,113,111, 61,100, 23, 4,239, 29,210, 58,234, 77,128,235,192,110,167, 94,160, 7,123, 72,200,219, 66, +156,223, 64, 53,130,244,102,151,125, 15,162,142,130, 65,250,221,118, 46, 64,155, 41, 58,183,235,163,176, 73, 9,156, 5,229,130, +179,125,175,219,200,220, 0, 94,148,238,135,109,204,100, 97, 56,186, 5,223,212, 9,116, 65,212,180,159, 94, 43,173,169, 81,229, +106, 69,213, 92,207,136,165,104,181,235,150, 29,104, 6,140, 81, 71, 23, 67,225,210,173,102,151,188, 80,100, 51,216,105,167,108, +233,204,222, 45, 12, 17, 7, 71, 64,232,190, 35,209, 51,132, 1,173,111, 53,128,141,251,155, 91,230,106,123,167,224,141,157,111, +184, 82,207,110, 76,172,203,204,186, 97,160, 84, 58,151, 59,229,189, 67,224,114,242,236,163,163,212,206,169, 69,214, 34,224, 6, +194, 16,105, 85, 56, 61, 40,105, 76, 60,222, 39,251, 58, 13,194,179, 52,242,234,248, 64,238,142,132,114,206,155,167,233,173, 18, + 21, 35,186, 53, 4, 31, 34,215,251,137, 33, 9, 37,219,234,194,190,247,141, 24, 19,142,206,252,240, 25,247,183,159,114, 60, 31, +185,126,244,132,103,143,159,145,166,167, 84,113,228,146,233,189,162,217,252,216,218, 10, 45, 23,186, 23,114, 85,150,210,169, 78, +145, 96,148,194, 82, 11,135,253,129,231, 87,239,241,228,201, 99,158, 63,123,196,213,254,146,235,203,201,106, 63,206,155, 22,212, + 25,137,207, 5,251,188,138, 42,222, 57,174,246, 87,100, 45,172,165, 80,138,226,130,199,123,161,109,107, 23, 17,103, 50,158,214, + 89,107, 51, 29, 43,157,113,183, 99,191,155, 40,181,114,121,216,163,170, 4,159,240,193,243,123,191,251,117, 14, 87,201, 60,205, + 91,118, 16,117,148,165,113, 58,175,220,159, 50,222, 7,254,226, 47,191,203, 95,124,247, 7, 72, 48, 26, 98, 41, 21,173,157,113, +136, 44,203,204,113, 89,104,165, 51,140,137,142,176, 84,155,142,212,214, 56,231, 74, 8,145, 56, 70,196, 43, 67,116, 60,121,242, +148,247,159, 95,242,199,127,242,103,124,247,175,254,150,103,151,215,124,253, 43, 95,226, 92, 26, 63,252,225,143,104, 40,209,121, + 98,180,215, 73,201,246,250,186,216, 95, 16, 93,162,212,108, 30,249, 22,232,213,113, 62,159,185,188,114,148, 90,185, 63,101,198, + 52,160, 4,206,167, 25,117, 86, 25, 69, 29,185, 22,238,111, 79,188,255,244,146, 39, 47, 30,115,251, 58,243,176, 8,203,154, 81, + 50,161,195,154,205, 85, 95,186, 18,189,216,142,218,123,155,138,137, 61,224, 37,217, 33,119, 12,157,181, 40,189,217, 67, 69,106, +176,192, 39, 66,105, 32, 94,136,218,200, 36, 59, 76,122, 80,178,185,181,187, 71, 6,197,247,128,119,158, 36,202,210, 34,173, 71, +114,155,113,170,118, 91,243, 21,237, 21,167, 1,245, 51,131,139,150,192,207,153,209, 59, 30,206, 43,165, 58, 36, 40,212, 76,235, +157,232, 61, 1,135, 31,133,113, 24,169,163,224,187, 80,115, 65,220, 8, 49,224,146,167, 20,168, 45,178, 31,246,248,216,169,221, + 81,117, 70, 90, 64, 82, 68,123,133,102,225, 88,159,182,241,106,140,230,180,112, 10, 98, 55,123, 66, 39,133,184, 73,165, 70,134, +113, 32,141,163, 73,164,122, 37,198,198,126, 63,208,177,181, 76,237,214, 61,142,111,165, 82,162,212, 44,104, 11,134,190,246, 16, +123, 66, 54,169,201,154, 11, 97,244,184,234,152, 75, 38,148,198,148, 18,115,237,164, 24, 33, 64,105, 86, 9,246,158,141,249,225, +182, 77,162,241, 52,146,247,236,198,145,103,239, 61, 49,166,200, 63,112, 63, 61,159, 51, 45,175,236, 7,199,176,219,191,155, 7, + 99,135,243,185,162,235,194,110, 10,164,105,122,119, 96,152,220, 88,207, 51,154, 11, 23, 23,145, 48, 76,239,244,161,126,123,106, +188,121,117, 67, 57,223, 18,104,182,190,236,133, 92, 21,201, 66,153, 43,187,109, 79,164,179, 9,149, 86, 15,209, 57, 19, 18, 97, +205, 49,215, 18,234, 59, 69, 29,218, 60, 81, 2, 99, 16,102,237,148,135,140, 6,143,109,138, 51, 94, 10, 93, 50,243, 90,152,134, +136,248,200,233,188,224, 95,190,124,127,123,168,111, 15,196, 46, 6,145, 9, 54,202, 54,135,185,199,109, 85, 53,123, 88,219,126, +118,107,126, 91, 98, 54,188, 85,160,218, 45, 76,187,218,131,119, 27,201,119, 12,161,234,137,116, 39, 91,176, 9,180, 9, 62,184, + 45,121, 33, 91,176,169,253,202,221,222,177,234,203,246, 3, 42, 46,216, 20,165, 41,210, 13, 94, 17,188,153,112, 98, 16, 68, 43, + 93, 32,249, 78,107,149,230,133, 40, 80,213, 78,240,253,237,231, 95, 55,108,160, 98,178, 22,204,218,165,106,245, 19, 85,163,127, + 57,111,159,119, 83, 27,159, 52,237, 91,200, 12,156, 75,150,216, 23,181, 93,149, 51,124,174,219, 14, 46,212,194,237,221, 3, 75, +209, 77, 14,180,105,105,135,192, 56, 76, 28,246, 59,202,124,102, 41, 5,241,158,199, 87, 19, 95,125,188, 99,231,149,232, 19,169, + 43, 75,174, 44,218,121,168,118,216, 17, 60,165, 38, 78,115,229,197,228,185,158, 34, 25, 56, 46, 71, 90, 31,153,124,231,151,111, + 30,232, 56,214,106,159,187, 74,199, 99, 78,242,182,117, 59,134,152, 24, 6, 43,184,158,231, 74,235,138,235, 6,248,216, 79, 7, +198,184, 99, 46, 51,175, 79,183,144, 11,173, 60,208, 67, 99, 63,140, 60,121,249,146, 39,207,158, 32, 68, 78,235,202,170,157,188, + 66,110, 43, 85,132, 92, 76,117, 74,110,148,121,165,228,149,105, 26,153,226,192, 16, 60,193, 91,151, 86, 98,176, 4,190, 19, 6, + 63, 48,142, 59,174, 30, 29,136, 99,160,174,217,190,238,173, 81,155,245,149,157,183,145,190,182,134, 79,241, 11,126, 50,210, 17, +117,184, 24,236,230,222, 44, 27,209,123, 39,120, 71,171,133,105,220,241,248,250,218,126,110, 68, 24,134,145,111,255,211,223,224, +209,211,189, 65,149,188, 51,166,246, 90,201,165,115, 94, 26, 75,238,172, 37,243,215,223,255, 1,183,183, 15,140,195,128,239,198, +251,239,173, 51,140, 19,243, 58,219, 8,212,218,106,228,121,165, 20,251, 25,244, 94,108,237,225,133,195,245, 8, 61,226, 10,164, + 24,121,246, 98,207, 79,127,254, 17,223,249,222,143,184,121,245, 41,151,207, 30,243,236,215, 94,242,139, 31,255,140,155,219, 91, +203,161,248,142,106,199,169,165,249, 47, 31, 95, 25,184, 66,160, 71, 8,241,128,195,177,172, 15,252,242,243, 27,174, 47,159,242, +187,191,241, 62,159,221,220,113,253,248, 49,181, 21,150,117,197, 7, 33,184,132, 83,184, 61, 29, 57, 46,149,175,124,233, 5,170, + 3,243,218,113,172,172,121,101,241,142,214,149, 46,193, 80,194, 13,180, 27, 81, 18,159,136,162,120,111,140,131, 1, 71, 22,135, +186,142, 15,141, 62,237, 41, 85,241,169, 35, 61,225,220, 64,201, 39,123,127,208,134, 6,135, 27, 12, 65, 45,139,189,102,189, 15, +244, 46,172,210, 80, 86, 90, 93, 40,181,162, 69,112,161, 33, 77, 9,197,130,110,158, 98,126,114, 21,122, 19, 84,236,235, 93,171, + 71,251, 10,205, 17, 91,162,246,188,129, 85, 18,125, 35, 87, 6, 28,193,121,186,138, 77, 60, 48,218, 87,109, 71,195,239,106, 35, +247, 70,201, 71,219, 95,187, 74, 26,119,232,220,232, 82,104,197,110, 94,201, 37,187,181, 27, 63,218,242, 65, 85, 44,195,131, 67, +240, 72,138,248,232,240, 21,202, 26,113,190, 50,122,207, 82,156,229,130,122, 49, 14,134, 68, 14,193,209,106,164,116, 72,110,160, + 73, 32,197, 78, 8,150,150,151, 97,162,149,142,239,153, 62, 0,227,128,107,130, 19,193,139,195, 15,110,123,136, 11,161, 91, 3, +193,137,241,221,125, 12, 72,143, 95, 60,232, 29,129,113, 10, 60,125,246,248, 31, 92,105,171, 29,230,211, 76, 43,153,253, 20,137, +227,244,206,110,234,231,115, 70,203,202,197, 20, 9,227,248, 14, 31,234, 86, 93,150,186,114,125, 53,225,226,248, 46, 39,239,220, +156,149,219,207,223, 80,230, 7,219,123,107,177, 48,111, 48,210,163, 4, 8, 41, 48,175,246,222,215,122,163,212,153,152, 70,138, +247,228, 94, 89,142, 51,190, 7,115,137,232, 76,237,149, 33, 42,139, 40, 97,221,113, 21, 29,139,158,241,173, 33, 84,100,239,232, +222, 42,146,210,183, 28, 20, 3,254,197, 7, 31,252,209,214,183, 50, 80,156,179,135, 79,111,150, 44,199, 57,156, 55, 59,153,235, +134,143,245,222,189,253, 79, 44,244,246,197,195,204,125,193,214,237,155,230,212, 70,161, 30,165, 19,183,219,188, 72, 55, 39,123, +238, 6,107,149,130, 71,104,106,206,118,188,253,123, 42,118,115,175, 90, 45,108,227, 61,218, 54, 6,123, 12, 70, 67, 11,106,187, +236,110, 15,111,156,224,164,153,124,161,118, 68,141,220,214,213, 96, 53,189,119,235,180, 6,235, 89, 42,182,175,151, 77, 51,139, + 90,198,192,117, 71,114, 80,170, 34,222, 81,242, 91,192,131,213,223,156, 64,138, 30, 84,112,222, 8, 86,234,173,254,227,162, 77, + 22,214,101,225,246,238,129,214,133,174,138,136, 85, 77, 2,158, 33, 78,236,125,228,120,190, 99, 45,202, 56, 68,190,254,116,199, +151, 46, 7,246, 67, 32, 75,227,184, 58,124, 10, 36, 31, 40, 50, 82,155, 80,218, 74,244,194, 56, 94, 49,247, 74,144,149,169,131, +184,137,235,167,239,241,104, 16,238,111,239,184, 57,101,242,210,182,160,156, 81,228,140, 98,215, 96, 11,252, 53, 58,203, 82, 88, +138,121,159, 59,194,110, 58, 48, 12, 17, 60,236, 6,207,205,235,215,188,186, 61,114, 58,175,220,221,190,226,248,112,207, 56,120, +174, 47, 2, 95,255,181, 47,243,248,217,215, 89,107,100,174,153, 22,160,101, 40,231, 51,181, 84,150,211,137,170,194,112, 24, 24, + 98,100,151, 18,234,149,166,178, 33, 91, 27,107, 54,248,207,224, 61,205,155, 85, 45,133,136,147,104,129,180,113, 50, 10, 91,112, +219, 97, 74,201, 37,155,212, 39, 68,122,107,244,190,117,169,163,245,219,107,206,214,216,216,154, 15,181, 22,198,113,228,114,183, +167,182, 74,213,194,203,151, 47,121,184,185,167,229,194,203,175,188,180,214, 69,169,244,230, 9, 49,146,215, 78,195,243,201,167, +159,240, 87,127,245, 3,106, 85,124,136,248, 52,144,196,108,102,181, 21,150,101,161, 46,153, 97,244, 52,237, 28, 31, 22,171, 87, + 34,104,237, 68,129, 16, 35, 41,140,150,233, 8,142,230, 22,158, 60, 26,120,243,203, 27,126,246,233,107,238,143, 15,204,199, 19, +223,248,230,111,178,219,237,248,201,143,126, 66,169,149, 90, 10,173, 20, 98, 12, 60,123,239, 61, 16, 40, 57,163,173,224, 69, 24, +199, 29,222,245,237,176,166, 68, 17,222,220,188,226,227, 79,238, 56, 76,123,198, 93, 98, 45,153,210,140, 76,133,130,138,227,252, +176, 0,142,203,203,199,212, 86,201,117,102,205,230,222, 22, 17,198,110, 58,213,166, 48, 68, 33,170, 80,109, 71,103, 99,108, 54, + 51,151, 4,162,235, 36, 9,246,240, 31, 58, 84, 15,165, 81,157, 82,115, 70, 70, 97,196,219,158,189, 67,146,141, 53,235, 21,209, +100, 19, 48, 42,125,235,240, 83, 27, 77, 60, 84, 71,205, 21, 39,193,136,147,154,240,221,216,215, 65, 58,190, 70,170,118, 2, 21, +186,103,156, 18,180, 74,117,134, 1,174, 62,160,219, 1,104,236,142,222, 2, 69,149,166,141, 16, 21, 87,192, 21,235, 45,183,208, + 9, 54,170, 99, 61, 87,198, 97, 32,175,149,174,202, 92, 50, 74, 39,137,223, 14,249,254, 11,132,109,140, 38,185,233,218,241,209, + 28, 22, 94, 28,174, 27,251,195, 57, 79, 75,144,114, 69, 52, 48,215, 74,214,182, 41,125, 15,224, 58,161, 27,119, 97,191,155, 76, +105, 93, 21,223,236,253,160, 82,217, 57,136, 62, 80, 39,207, 62, 11, 49, 64,142, 66,152, 18,135,228,172, 29,178, 10,226, 61, 46, +202,214,229, 87,123,159,117,142, 96, 51, 11, 11, 36,139, 24, 3, 64, 60, 53, 87,104, 54,113,164,111,187,108,172, 34,220,251,134, +212,238,111, 23,221, 91,210,108, 35,206,204, 75, 97, 57, 47,212, 90, 73,174, 51,238,223, 13,245,109,109,112,188, 63, 67, 93, 56, +236,226, 59,195,184, 42,112, 94, 26,101,158,241,154,185,186,218, 35, 97,120,119,163,125,224,246,152,185,125,115,131,214,123,186, + 26,206,185,209,201,213, 2,210,104,163,183,134, 43,160,121, 3,187,185,104,133,114,231, 88, 78, 71,100,103,245,181,220,206,200, +126, 59, 64,182, 66,146,145, 92,207,204,235,140,247,158, 41, 88, 51,171,128,113,228,253,140,223,155,140,136, 86,241, 47,222,127, +241, 71, 97,115,159,235,166, 79,237,106,183,243,190,193,224,157, 23, 68, 77,255,184,101,229, 65, 28,218, 97, 74,230, 58, 23, 18, +226, 44,236, 38,186,133, 28, 92,223,144,179, 27, 49, 62,216,248,190,171,221,152,157, 56,122,135, 40, 22,198, 19, 44, 52,167,116, + 92, 55,253,158,247,125,187, 21, 7,188,247,208,204,147,221,183, 14,124, 24, 18,110, 11,162,233,150, 14,111, 40,104, 65,155, 65, +216,165,219,109,206, 57,143,115, 66,176, 40, 31, 77,133,224,212,132, 17,221,161,213,210,163,118,125,135,210,219, 86,199, 19, 90, +109,104,247,155,214,211, 42,120, 18,141, 55, 79,183,135,184, 32, 4,111, 24,203, 33, 4,214,211, 29,175,239, 78, 38,176, 15, 14, + 9,193,210,196,173, 17,198,137, 16, 28,167,229,140,139,145,167, 87, 19, 95,123,111,226,242, 48,209, 93, 39,116,101, 23, 29,187, + 67, 98,169,129,211, 50, 48, 87,101,188,220,145,198, 17, 39,145,211,156,121, 51, 7,110, 86,120,113, 61,242,100, 55,208,152,153, +166,198,235,207,142,124,248,250,196, 82, 13, 2,212,138, 81,239,236,197,218,127,133,239,221, 40, 75, 69, 45,104,182, 31,119,164, + 16,236,160,230, 26,199,243,194, 90, 50,243,178,240,230,254,142,155,155, 91,142,247,247, 60,220,223,112,188,191, 35,180,149, 58, +223, 82, 40,236,166, 39,120, 9, 44,203, 3,218,149,247,190,252, 77,222,251,224, 37, 99, 26,113,190, 17, 90, 71, 67,183, 85,141, + 56, 90,171, 4,231, 25, 70,161, 59,251,129, 14,155,192,167,139,103, 74, 35,187,157,245,182,163, 31, 54, 38,129,146,123, 51, 67, + 86,124,251,245,124, 43,102,137,244,110,142,116,121,155, 5, 17,251,137, 13, 33,114,185,223,179,228,149,166,149,195,254,146,143, + 63,121, 69,239,141,223,255,131,111,209,230,149,243,205,194,188, 84, 78, 15,213,170,156,218,249,211,127,255, 23,124,244,201,107, + 58,106, 97,185, 52,208, 4,164, 43,190, 71,170, 22,138,102,123,224,158, 10,203,230, 26,160,119,188,235, 76, 23, 35,187, 97,199, + 52,140, 92, 14,158,185, 86, 84, 51, 65, 51, 63,252,233,231, 60, 28,207,212, 92,185, 63,206, 28,239,110,217,143, 59,110,238,238, +152,151, 51,218, 10,211,110,207,211,231, 47,169,170,212, 82, 80, 45, 84, 85, 66, 24,137,221,234, 93,221, 15,248, 56,242,236, 98, +228,195, 79, 63,230,225,126, 70, 36,129, 28,152, 18, 76, 49, 49, 47,213,252, 7,218, 64, 42,111,222,220,113,184,120, 66, 26, 15, + 20,102,122, 43,148,181, 16, 91,160,106, 67, 3,168,107, 12,227,128, 96,192,169, 24,247,166,244,148,104, 29,105,153,241,174,210, + 37, 50,168,176, 31, 70, 90,178, 16,107,236,158,224, 26, 69, 2,173,141, 52,183, 80,230,153,214,173,141,226,123,163, 84,136, 18, +161,101,147,152,196, 64, 16,217,236, 17, 30,113, 5, 29,161,171,201,115,124,237,104,134,142,103, 8, 22,172,164,182,141, 18,105, + 19,173, 56, 93,210,114, 33,137, 29,188,155, 4, 66, 50,100,107,169, 30,167,209,194,183,195,129, 32, 13,130, 82,235, 30,167,202, + 26, 10,173, 27, 93,115, 89, 42, 45, 23, 52,120, 46, 98,164,186,200,130,237,239,229,109,198,168,153,116, 6,103, 19, 76,196,153, +200,169, 54, 52,218,219,189,107, 66,117,176,139, 35,133, 66, 33,226,170,210,100,161,230,198,213,148, 76, 12,211, 10, 97, 3,185, +236,210, 5,222, 43,165, 43, 67,220, 65,232,196, 48,114, 8,158, 69, 61,211, 24,152, 6,163,227,117, 31,232, 78,137, 2, 18,220, +246,231,136,244, 45, 55,231, 5, 31, 6,187,221, 15,123,106,216,177, 86,251,111,179, 66,110,157,117,173,172,165, 81, 74, 35,151, + 74,206,149,146, 59,185, 52,214,165, 50,207,149,117,169,156,207,133,187,251, 51,167,251,123,250, 22,148, 43, 85, 41, 75, 37,231, +102,254,239,181, 24,180,168, 54,106,110,214,236,105,221, 14,215,185,125,145, 57,105, 27, 45,178,213,134,230, 74, 94, 11,199,135, + 19,101, 93,208, 13, 23,158,182, 75, 96,111, 38,208,234, 88,171,165,171,253, 89,182,131, 70,239,191,250,235,191,255,135, 29,212, +150, 92, 57, 29, 79,214, 76,105,133,195, 20,240,111, 77,117,102,191,249, 7, 29, 74,114,131,215,175,111, 57,222,223,145,151,147, +125, 78,106, 89, 31,231,160,173,221, 64, 90, 85,104,210, 56,191,205, 13, 4, 79,201,149,222, 42, 90, 21,239, 70,170, 38,195,175, + 51, 32, 57,176,174, 5,233,157, 33, 56, 36, 24, 23, 37,119, 33,106, 71,188, 35, 55,103,255,143,188, 16,124, 99,157, 27,161, 55, +187, 17,243, 22, 60,179, 1, 87,154,110, 34, 19,121, 75,141, 2,227,181,109, 56,187, 77,185,215,240,224, 11, 77, 42,174,111,246, +178, 38,244,216, 45,135,220,141,179, 46,189,227,154,195, 11, 6,180, 81,103, 23,125,103, 31,103,221, 40,107,210,237,225, 40, 68, +132,134,239, 54, 2, 4, 91, 13,184, 0,154,187,129,102, 8,232,106, 90, 86, 17,143,120,161,170, 41, 17, 29,208,131, 67,234, 54, +150,112, 91,154, 89, 59, 42,141,214,132,174,157,204, 86,215,209,134,106, 71,122, 33,185, 64,241,160, 42,184, 32,155,151,206,210, +227, 97,171,102, 57,111, 15,139, 97, 26,137,192,186, 90,213,164,109,216, 92,241, 74, 85, 91, 80,184,183, 58, 48,204, 75,239,156, + 33,115,135, 56, 48,165, 61,185,173, 92,239, 35,251,224, 80,231, 40, 93, 76, 3,235,109,201,241,250,182,114,219,140, 27,238,186, +177,236,101, 45,244,146,185,201,137,221,229,142, 39,143, 61,174, 61,160,235, 3,196, 61, 50, 30, 88,234, 61, 4,103, 35,207,205, +220, 36,222,214, 38,155,107,199,100, 55, 78, 17,109,132, 96,163, 67,233,194,213,176,163,201, 76, 16,251,123,179,249, 69,214,210, +248,201, 71,159,240,241,171, 87, 76,233,231, 92, 31,118,136, 79, 76,195, 5,227,240, 64,154, 44, 28, 23,210,200, 55,127,237, 37, +207, 30, 77,220,206,153,211,205,153,243,124,195,121,205,232,122, 98,237,149,221,152,112, 62, 81,233,196,161,147,207,158,230, 87, + 66,104,140,106,252,126,213, 70, 28, 18,184, 70,242, 19,211,180,103,119, 49,114, 62,205,120, 60,174,195,177, 88,120,142,109, 87, +235,186,133, 34,107,111,184,230,236,229,218,237,144, 86,181, 18, 67,224,213,171, 87, 92, 93, 30,248,237,223,250, 58,134,242, 19, +210, 52, 81,117, 97, 45, 43, 21,207,135,159,190,226,199, 63,255, 20, 16, 66, 8,180, 86,208,156,185,120,244,152,135,251, 55,184, + 0,211, 16, 89,150,192,233,184,152,107, 29,217, 2, 57,176, 63, 92,176,191, 58, 16,107, 35, 37,199,179,103, 23,124,242,201, 13, + 55, 55,133,255,235,248, 33,247,119,247,140, 46,113,138, 35, 77, 43, 63,253,217,207,249,249,135,191, 48, 5,172, 8, 93, 2, 49, +238,140,226, 88, 43,209, 98, 62,236,210, 30,130, 35,247,237, 0,209,148,167,135, 3,206,159,185,123, 88,105, 85,121,243,230, 51, +246, 23,153, 71, 23,215,188,252, 96,162,247,143,216, 93, 93,224, 67,228,147, 79,126,193,253,253, 3,127,243,195,239,243,205,177, + 49, 13, 1,173,130,239,145,197,109,189,230,236, 8,187,129, 62, 68, 16, 97, 18,229,246,248, 25, 15,175,238,184,125,243,134, 94, + 21, 82,103, 8, 9, 23, 34,222, 11,147,223,161,190, 49,237,247, 92,236,174,236,125,195, 77, 56,201, 84,148, 93,138,148,166,136, +194,218, 60,227,224, 57,157,239,136,209,179, 31, 6, 74,111,204, 93,160,101, 6,137, 52,115,152,208,213,227,166, 45, 60,231, 28, +221, 53, 78,189, 18, 7,193, 37,232,231, 66, 95, 5, 65,201,199, 59,196,253,106,170,179,219, 77,104,168,212,102,227,105,165, 24, + 88,106, 57,209,147,178,172,157,216, 78,228,212,237,115,147,198,169, 58,210,212,232, 53,146, 79, 39,110, 93,161,158, 23, 38, 31, +153, 89, 25, 39, 79,149,142, 52, 71,196,147, 70,160, 10,221,217, 84, 17, 39, 56, 26,129,204,210, 58, 67, 24,209, 4, 7,217,145, + 38,143,186, 76, 57,206,244, 12,115, 72,248,226,113,204,246,245, 26,119, 48, 36,195,112,207,133, 97, 16,124, 31,205,189, 33,202, + 0, 84,133,214, 5, 63, 8,154,133, 33, 37, 43,251,117,165, 56,143,228,102,175,235, 96,115,210, 42, 6,251,122,239,217,129,231, +239,191,247,133,207,227,109, 14,173,243,119,158,107,253,139, 77,232,175,170, 96,250,171, 27, 41, 69, 89,111, 4,214, 51,210,149, +113,218, 49, 28, 46, 55, 81, 81,183, 6,149,179, 92,150,217, 16,101,251, 56,125,187,136,217, 69,174,183,110, 62,118,187,227,176, +228, 74, 91, 86, 27,135,122, 56, 54,200,167,106,135,164,238, 54,163,162,223, 24, 95,221,250,255,219, 95, 55, 53,138, 39, 98,149, + 56,227,170, 24,243,164, 53,101,201,171,245,198, 59, 52,113,124,242,249,145,233,190,154, 86,252,237, 42,195, 27,251, 68,183,233, +158,119,150,187, 98,203, 80,249, 45,139,165,218, 41,205,124,232,104, 35,107,227,213,221,204,253,241,132,182, 25, 81,160, 55, 84, + 42,189, 41, 33, 58, 84, 26, 11,129, 97, 16,186,119,196,188, 82,202,192, 40,141,238,102,230,146,172, 26, 92, 42,199,110, 16,170, +158,103,156,159,240,211, 64,161,224, 51, 16, 7,234, 82,104,174,163,218,208,230,241,154, 9,107, 99, 29, 6,198, 62, 32,126, 33, +116,177,107,142,138,255,194, 42,246, 86,153,170,221,148,149, 90,237,196,231,182, 55,120,188,163, 85,219,115, 54, 54,254,184,218, + 93, 21,113,168,239, 72,105,168,183, 7,180,219,192, 41,218,183, 7,231,150, 70,172,116,162,183, 94,184,217,225,196,240,164, 36, + 36, 70,122,181,230,120,240, 22, 2,234, 45, 51,196,173, 30,183,249,223,105,197,194,117,108, 0, 18,167,180, 77, 80,241, 86,175, +138,120, 20,161,213, 76,197,225, 93,196, 7,165,245,186,161,101,197, 96, 53,210,113,173, 81,218,230,121,119,134,250, 43,219, 55, + 53,120,135,184, 95,237,242, 25, 38,198, 20, 24,157,141,146,233,113, 59,248, 41, 61,119, 59,228, 96, 0, 30, 4,252,246, 3,136, + 19, 92, 83,150,101, 54,104, 77, 80,164, 55, 11,241,181,198, 16, 35, 97, 84, 6,133,207,239, 28,183,179, 71, 98,193, 57,165,157, +149,153,153, 1,143,119, 3,158,198,215,158,119,174,189,163,172, 43,189, 8,167,227,194, 47,239, 31,108,199,220,170, 29, 42, 54, +192,140,106,163,139,160, 77, 72, 84,234,246,226, 14,222,210,166, 65, 60, 41, 4, 36,101, 78,111,206,212,214, 13,240,210,130,237, +163,157,179,175,123, 85, 78,101,230,254, 60, 19, 83, 96,138, 39,118,201,147,246, 59,118, 23,123,244,254,150,255,244,167,159,112, +253,252,154, 47, 63,127, 15, 15, 92, 94, 93,114, 17, 6,116, 81, 30,238,239,168,229,158,211,249, 68,117,137, 93,117,248,184, 64, +247, 68,239,169, 88, 23, 94,176,218,228,228, 61,254, 48, 34,193, 19,218,196,253,120,102, 62, 46,204,243,108,136,225,110, 6,164, +161,155,109,168,245,186,229, 59,108, 21,116,158,143, 28,239, 7, 98, 50,222,247, 93,190,165,139,242,217,231, 15,228,251, 2, 93, + 25,167,137,117, 49,249,202,156,149,207, 62,255,156,211,241, 68, 12, 1,196,211,189, 41,130, 99,116, 60,122,252,132, 55,175, 63, + 35, 97, 1,191,181, 47,168,138, 29, 66, 55, 23, 66,171,106,116,179, 32,236, 47, 15,132, 16,153,215,198, 92, 87,206,186, 9, 95, +100,224,242,234,192,249, 60,155,130, 56, 67,239,133, 46,202,126, 55,241,252,241,123,164, 33, 25,130,185, 20,166, 52,209,134,136, + 22, 51, 35,218,109,169,163,181,241,144, 23, 11, 45,186, 70,165,178,156,239,248,188, 20,214, 58,240,252,241, 37,143,158, 62,231, +250,197,151,249,224, 75, 95,230,238,230,150,243,178,192, 26,200, 26,104,117,221, 94,171,129,238, 27,108,161,197,251,155, 87,220, +188,185,225,238,205,231,220,191, 89,112, 24,178,210,251,128, 22,199, 49,219,155,123,183, 19,162, 29,180,156,145,203,166,221,142, +221,229, 21, 87,195,142,184,187, 36,140, 9,233,145,182, 86, 42,157,226,102,123,159,145,145, 89, 43,210, 96, 8,142,202,128,214, +204,220, 22,246,225,138,224, 2, 69, 51,222,153,175, 58,196, 14,197,209, 78,157,234,155,121, 32,124,164,105,193,227, 40,120, 74, +235, 8,129,164,133,178,120, 26, 1, 13,214,210,105,116,106, 95, 24,206,209,220, 7,237, 12,253, 2,159, 60,161, 22,155,252,172, + 3,167,114, 66,189, 80,239,148, 93,112,172,209,161, 56, 90, 89, 25,187, 34,253,130,165,173, 60,114, 97,243, 82,168, 17, 52, 37, + 24, 14,219, 7, 36, 54,114,109,132,185, 19,211,128, 72,101,125,232,244,146, 24, 31, 79,204,210,104,109,133, 41,210,151, 96, 32, + 48,215, 24,123, 35, 76, 9,191,181,122,170,131,186, 8, 14,163,224,229, 10,163,128,239, 25,237,201,144,217,165,161,209,152, 16, +130, 80,123,181,181,168, 70,210, 46,113,185, 31,121,235,227,250,127, 93, 76,229,239,249, 73,255,222, 63,255,187, 96,183, 49, 56, + 90,217,177,246,138, 47,202,227,171,137, 48,254,127,117,223,255,255,234,115,191,234,138,207,125,228,238, 77, 36, 31,239, 8, 20, +158, 60,186, 38,238,118,166, 98,125,219,154,147,255,199,130,221, 16,199, 0, 0, 32, 0, 73, 68, 65, 84,229,250,173,237,180,255, + 10, 37, 99,195, 71,187,213,235,219, 84,250, 67,129,249, 72, 94, 86, 98,207, 76,215, 87,184,241,226, 11, 90,185, 29, 62,183,170, +222,219, 21,171,179,183, 76,221,166, 2, 69,220, 23, 7,136,210,109,141, 89,187, 50,247,198, 10,136, 47,232,186,128,111,244, 2, +218, 60,206, 69,218, 92,104,222, 96,100, 77, 45, 88, 58,200,192,122,232, 44,181, 35,179,114, 49,108, 12,135,251, 0,249,100,230, +190, 30, 81,183, 18,188,167, 28, 3,181, 47,228,101,177, 3,114, 3,173,142,212, 34,218, 4, 21,143, 44, 51,115, 56, 19, 28, 4, +193,217, 73, 76, 12,105,166,111, 37,224,221,146,233, 93,109, 55,142,218,136,201,119,168,197, 82,213,150, 44,223, 8, 70, 2,221, + 25, 49, 42, 57, 71,109,230,131,117,222,250,207,130, 71,163,218,199,236,197,146,232,218,232,205,255,138, 73,142, 65,106,192,210, +203, 1, 16, 23, 44, 93, 42,130, 71, 54,189,163,245, 72, 69, 54,141,156, 15,244,178,162,106,110,120,173,186, 49,144, 13, 78,209, +181,210,141, 61, 75,167,109,129,153,142,104,183,241, 58,250,197,106,193,137,167,168, 2, 30,109, 70,128,139,209,111,232, 89,181, + 83, 35, 14, 23,188,237,161,181,115,234,219, 9,175, 23, 66,115,102,231, 17, 33,120,219,151,212,237,160,164, 98,134,185,174,142, +218, 11,119,167,147,177,243, 9, 84, 21,178, 87, 38, 47,236,101, 71,209, 19,183, 15, 11,199,179, 18,211,158,163,170, 61, 28,130, + 80,154,176,148,134,248,192, 62, 69,158,239,173,210,151,174, 34,210, 3, 31,253,248,115, 62,191, 93,241,193, 19,182, 19,116,119, + 91, 69,164, 89,136, 77, 20,106, 83, 74, 95,137,222, 35,120,106, 41,156,150,153,112,112,220,191, 57,241,234,238,196,218,236, 84, +108,111,248,155,239,216, 57, 84,108,106,225,182,213,201,121,153, 89, 43,164,101,230,254,254,214,118,208, 93,249,244,238, 53, 63, +253,217, 71, 92, 92,238,121,254,232, 25,239,191,255,140,105,186, 6,174,208,246,152,184,187,101,110, 25,157, 31,200, 39,195,144, +246, 20,240, 58,144,130,163,105, 33,118,199,211, 23, 79,200,203, 61,159,125,126,131, 56,199,154, 27, 62,136,185,164, 53,211,180, + 90,218,216,217, 3,206, 91,231,193, 62,239,104,196,192,135,227,249,255,102,237,205,154, 44,203,206,243,188,103,125,107,216,251, + 76, 57, 84,117, 85,117, 85, 53,186,129, 38, 1, 16, 36, 77,130, 16, 41, 50, 72,219,180, 40,138, 54, 25,158, 34,228, 27, 95,248, +191,224,215, 56,194,150, 29,161, 27, 57, 36,134, 45, 75,214, 64, 17, 33, 26, 48, 5,146, 24,137,110,116,163,187,170, 43, 43,231, +115,246,176,134,207, 23,223,206, 2, 45,249, 14,153, 17, 29,209,209, 85,157,145,231,228, 62,107,125,195,251, 62, 47,219,221,218, +206, 42, 17,174,174,175,249, 39,255,231, 55,120,250,246, 35,126,254,253,167,188,120,241, 25,125,183,179,233,138,115, 92,158, 95, + 45,249,192,230,191,104,197,138,180,155,155, 11,222,123,247, 61,166,225,192,126,127, 75,234, 60, 91, 61,194, 77,153,121, 30,104, +165, 18, 82, 34,108, 58,130, 51, 43,166,171, 35, 63,254,244, 18,117,149,105, 26, 25, 39, 19, 98,110,215, 43,230,154, 23, 12,174, +163,101,227,140,179, 18, 30, 62,120,128,239,226, 66,106, 44,203,228,199, 14, 48,135,241, 23,204,199, 42,168,159,216,207,141,174, + 11,140,211,140,139,214,217, 28,166,145,171, 23,123,166,147,198, 87,126,254,125,222,126,118,204, 39, 82,217, 56,161, 58, 79,214, + 70, 38, 83, 35,196, 92, 65, 42, 62, 57,174, 62,122,193,217,213,107, 62,123,245, 2,109,158,221,122,197,106,213, 83, 71,193,249, + 6, 17,162,247,244, 18, 22,212, 67, 33,227,150,233, 82,160, 85,101,191,223, 51,149, 70, 75, 35,237,250,130,157,143,164,221,134, +245,230,136, 62,110, 40, 45,163,209, 17,165, 80,230, 9, 69,232, 92, 32, 5,251, 92, 30,185, 53,193, 5,138, 43,232,104,156,120, +212,242, 32,154,107, 52, 7, 33,219,214, 88,164,153, 31,191, 87,186,220, 56, 52,219,245, 23,223,232,124, 96,202,215, 68, 4,157, + 3, 53, 5,132,129, 67, 72,203,202,172, 71,187, 70,222, 79,198,155,143,139,155,101,110, 72,241,148,170, 28,250, 70,152,102, 36, + 40, 83,113,200, 92, 40, 20, 86, 93,225,118, 86, 36,152,213, 54,184,192, 92, 6, 90,118,248,104, 90,151, 16, 43, 96,249, 24, 57, + 52,106,167,156,132, 30,245,129, 54, 21, 92,234,232, 18,204, 93,101,106, 70, 85, 27, 67,193,213,142, 20,237,243,238, 10, 4, 17, +102,148, 94, 34,218, 76,212,232, 67,196,231, 10, 94,153,180,209,227, 80, 45,168, 4,155, 90,121,161, 15, 61,157,243,196,238,126, +246,200,178, 0, 98, 66, 20, 66,184, 31,152, 77, 92,214,188, 56,232, 66,160,239,211,127, 88,112,240,255, 95,120,132,255,160, 76, +248,255,254, 5,119,212,113, 93,102,230, 97,100,219, 39, 30, 61, 60,250,153,196,130,237,223,179,247,125,186, 63,225,236,195,159, + 48, 12, 35, 34,129,154, 42,126,176,198,130,232, 8, 69, 25,153, 41, 37, 16,139,114,200, 51,190,121, 91, 65,181, 0, 65, 40,101, +164,184, 74,231,205,213,176,221,108, 57,180, 91, 19,138,135,145,113,190,198,215, 68,198,194,174, 4,101,110, 55, 56, 31,136, 25, +115,104,185,200,205,124, 48,125,200, 93,132, 40,173, 44, 76,220,165,125,211,106, 42, 83, 5,223, 4,117,139, 69,189, 89,153,164, +174,162,106, 96, 19,219,143,219,206,188,224,112, 18,151, 12,107,251, 94,246,237,236,226,118,106, 15,134, 79,193,178,153,151,145, +123,173, 10, 18,150,160, 24,251,229,212,230, 44, 32, 37, 58,230,185,224,151,177,187, 43, 38,254, 42, 90,160, 21,226, 82,161,149, +101,150,212,212,126,190,230,226, 79,105,121,206,232, 86,121,206,248, 96, 41,108,138, 46,246, 15,219,173,207, 4,130, 52,243, 28, + 87,219, 13,178,128, 72, 68,173,243,194,139, 13,228,115,225,144, 5,223,123, 60,130, 79, 44,126,232, 72,211,138,143,222, 84,239, +173, 25, 36, 99,161,247,121, 49, 60,174, 11,110,177,227,129, 86, 33,170,103,133, 35,183,137,161, 84, 10,158,247, 78, 59,186,126, + 98,188,236,145,228, 41, 25, 84,122, 66,172, 56, 34, 39, 15,223,161, 11, 7,188,155, 72, 15,222,225,102,186,224,135, 63,249, 17, + 77, 34, 65,140, 20,232,146,188,129, 35, 84, 97, 89, 73,180, 55, 54,196,101,120,128,182,194, 48,217, 46,119,127, 24, 23,181,253, +130,217, 21,131,213, 56, 39,139, 13,208, 70, 97, 93, 76, 60,122,120, 76,153, 51,115,179,196,183, 97, 60,216, 55, 12,158, 92,148, + 50, 93,115,179,191,225,245,217, 5,103,231,231,156,158,158,178, 91,111,216,118, 59, 54,235,200,195,221, 41,181, 60,167,180,202, +217,103, 31, 50, 30,174,233, 52,163,120, 78, 30,191,205,131,117,199,103,103,159,113,118,113,110,194,198,154,161,101, 10,106,220, +228, 90, 41,154, 81,103,161, 60,120, 49, 54,160, 26,210,216,123, 71,159, 58,131, 60,204, 19,219,205,154, 86,149, 24, 61,231,231, + 23,252,239,255,252,223,242,201,203, 47,240,189, 31,125,200,111,124,237,171,172,251, 13,235,237,154,253, 97, 52, 38,248, 82,240, +169,154,125,238,230,122,224,242,213, 25,235,184,225,170,236,161, 41, 49, 68, 30,110,122,114, 61,129,234,136, 65,217,108, 2,211, + 84, 8, 81,216, 95, 28,184, 29,103,240,149, 92, 42, 67,153,241, 34, 84, 41,228,105, 38,121,143,119,158,214, 85,242,156, 57, 90, +109, 8,253,198, 66,129,242,196, 60,143,196,184,177, 46,164,192,202, 69,230,154,153, 75,225,201,131, 21,204, 87, 36, 53,177, 27, +201,132,163,181,154,163, 35,106,228,236,252,134,127,243,231,223,230,111, 51, 64, 92, 49,133, 64,157, 70,130,139, 68, 85, 34,202, +205,112,201,235,159, 92,115,126,113,198,205,229, 45, 33, 57,158,191,243,148,231, 15,118,236, 15, 35,127,245,195,143,152,231,194, + 58, 70, 19,127,202,140, 75,230, 96, 80, 1, 81,127, 55,175,180,120, 83,146,129,155,221,140,148,192,156,122,118,169,226,252,129, + 16,143,104,115,197,141,153,218, 57,219, 29,139,105,214,197, 65,145, 13, 42,141,155,122, 32,138, 67, 87, 29, 76, 51, 85, 33, 22, +161,118, 21,223,245,228, 67, 1,103,105,139, 73, 76, 85,236, 3,196, 22,240, 46,147,115, 71,107, 7,200, 70,148,172,171,130, 56, + 71,209, 64, 20,193,249,217,166, 35,251,138,143, 21, 79,199, 88,103,130, 58,154,139,180, 0,157,171, 28,246,142,173, 7,119, 59, + 49, 15, 21,191, 18, 52, 53, 46,175, 26,113,187, 99, 69,197,163, 76,170, 72,245,198, 67,111, 86, 86,170, 86, 90,107, 76,243,140, + 87,232,202,154,170,141, 54, 85, 54,235, 64, 11, 30, 38,129, 58,188,113,207,172, 90,160, 74,160,204, 66, 74,158,170,149,208,217, + 20,176, 58,179, 72,245,201,113,152,148, 46, 6,130, 40, 41,220, 77, 69,141,165,169,106, 90, 18,231, 13, 84, 34,247, 64, 81,171, + 10,181,154,117, 72,184, 95, 47,185,173, 81,177,152, 82,119,127,224, 25, 1,107, 34, 93,163,239,195,207,156,251, 46,255,222,191, + 71, 49, 77,150,171, 74,203,230,244,242,193,246,234,174, 52, 14, 8,218,122,164,101,116,231,200,147,112, 68,133,131,185, 74,134, +131, 3, 53,220,182,246, 14,201,194, 65, 70, 74, 80,194,124, 96,110, 21,113, 29,147,102,194,202, 83, 10, 16, 19,181, 20,186,226, +152, 37, 81,105,212,121, 38, 52,197, 63,121,250,236,235,134,129,181, 23,141,218,158, 27, 49,111,167, 46, 11,125, 19,191, 89,238, +177,152,100,213,120,237,234,108, 7,224,204,246,209, 22, 44,172,247, 44, 10,243, 5, 54,211, 22,207,164,218,229,208,114,133,216, + 17,187, 68, 39, 38,148, 42,214, 35,225, 93, 64,226,178,211, 8,198,153, 23, 53,129, 90,245, 38,120,187,139,183, 19, 51,156,155, +152,173, 86, 19, 85, 56,161, 45,169, 84, 90,203,162,180,182,101, 81, 91,254,252, 77,122,156,152,194,255, 78, 88, 69,116, 11,245, +174, 81, 21,132,133, 90, 23,148, 20,197, 46, 53,111, 23,127, 8,182, 71,139, 78,237, 2, 23,111,147, 11, 3,188, 83,203,204,229, +249, 45,213,121,188,218, 14, 9, 21, 36,129, 36, 59,196,125,112,104,182, 11,112,157, 2,226, 12, 86, 67,136,244,189,167, 11,102, +219, 26,230,200, 44,142,160,145,121, 46,196, 20,121,248,248,125,222,254,220, 59,120,148,237, 73,207,241,211,175,242,209,199, 31, +243,205,239,125, 68,232,210, 27, 31,191,199,118, 48,186, 40,247,171,253, 32,139,130,249,167, 97, 61, 13,168,115, 97,206, 11, 20, + 8, 71,244,198, 46, 16, 2, 46, 6,179,203, 88,118, 33,136, 99,187, 59,161, 95, 84,170,187,205,154,174, 91,227, 83, 32,136,249, +143,157, 55, 75,135,182,198,172,202,245,254,134,215,231,103, 28,198,137, 92, 14, 12,251, 11,110, 95,157, 67,203, 60,126,231, 25, + 63,255,222, 47, 16,125,207, 80, 6, 90,232,120,251,201,142,235,139,215,156,157, 93, 19, 3,104, 12,118,224, 54,135,119,145, 62, + 70, 86,125,207,106,179, 33, 69,123, 30,113, 66,171,213, 14,136, 16, 16,239,151,189,120,194,169, 5, 93, 4,111,185, 2, 49, 69, +174,175,247,124,250,233, 25,169,235,120,241,241, 39,224, 3,199,167, 59,190,249,239,254,130,215,175,111,232, 99, 7, 40, 57,207, + 22, 1, 28, 60,227, 97,111,120,225,102,108,250, 82, 70,198,105, 64,156, 35, 37,161, 79, 66, 44,133, 66,102,204,153, 97, 56, 44, +137,113, 6, 88,194, 53, 74, 51, 10, 98,205,149, 4,148, 60, 35, 49,210,247,107,182,155, 99,186,152, 8, 52, 90,206,198,149, 15, + 1, 23, 28,182, 48,114,111,220, 33,184, 74,109,133, 24,123, 94, 95, 94, 34,101, 73, 57, 92, 58, 53,151, 4,231,133,235,235, 27, +254,234,251, 63,230,236,245,107,222,126,248,152,228, 35, 55, 87, 7, 94,190,248,144,179, 79, 63,229, 71, 31,125,196,171, 87,151, +148,170, 60,127,246,144, 95,251,197, 47,240,206,233,150, 15, 63,254,136,239,126,248, 25,195, 52,129, 42,115, 45,148,229,179, 53, + 87,203,114,112,213, 86, 56,170, 86, 44,182, 69, 9,190,222,118,156,156,246, 28,175,183, 28,109,183,116,210,216,238, 34,105, 19, +216,108,143,112,197, 44, 94, 77,148,184, 22,166,105,178,238, 69, 10, 7,189, 69, 52, 64,169, 40, 19,155,184, 50, 72, 77, 84,226, +162,151, 9,205, 82, 21,205,250,104, 69,193, 52,102,168, 74, 31, 86,203,179, 82, 45, 23, 34,172, 41, 89, 9,190,225, 90,132,105, + 68,106,135,215,229,220, 35,217, 14, 58, 87, 74, 49, 71,136, 56,208,210,232,212,172,172,153, 37,158, 57,120,156,143,244, 83, 96, + 28, 6,252,156,113,234,201,234, 65, 61,135,225,134, 50, 41,115, 30, 9,206, 81,171,195,175, 61,125,244, 4,241,212,162, 72, 84, + 66, 23, 40,211,132,168,199,135, 8, 94,233, 87,158,169, 25, 51,190, 79,102, 89,106, 94,168, 83,102,181, 56, 51, 28,149,110,201, +192, 64,192,123, 75,173,116, 75,225,237,162,121,234, 85, 33, 6,207,233,241,150,211,135, 39, 63,243,133, 86, 20,166, 49, 83,115, + 33, 5,207,122,183,190,151,139,189, 52, 24, 15,179,229,168,119,129,126,125,127, 62,242, 49, 55,166,105,198,105,230,120,157, 8, +253,134,251,252,186, 30, 42, 87,231,151,204,183, 87,248,101, 44,175,203, 93, 83, 81, 36,195,236, 50, 49,121,114,110,232,228, 77, + 52, 57, 21, 6,157,200,110,177,104,206, 16,252,204,212,178,173, 10, 74,197,205, 29,211,224,208,144, 80,205,144,157,117,255,206, +195,152,153,242, 8, 93,196,187, 70,169, 19,154, 33,168, 54, 83,125,227,208,104,173,120,171, 38,234,174,170,168,136,141,169, 69, +113, 69, 80, 87,237, 96,147, 69,204, 35, 14,135,183,249,137, 54,180,154,101,162,170,169, 68,109,199,104, 29, 33,109, 89,189, 47, +241,171, 2,120,111, 98,138,208, 28, 5, 79,147,134,212, 74,157,179, 77, 16, 90,176,206, 27,155,253,182,106, 44, 93, 43,231, 27, +234,236, 33,110,234,208,224,209, 2, 57,103,162, 65,171,241, 22, 19, 67,115,166,121,199,123,124, 83,114, 46,148, 98,197, 75,236, + 13,118,227, 8,184, 90, 76,225, 94,173, 43,247,190,161,206,252,206,230,155,175,184, 86,112, 98,216, 69,175,254, 77,206, 59,139, + 93,174, 58, 37, 38,143,159,172, 16,170, 57,219,165, 24, 60,193, 57,162, 23, 60, 17,175,222, 62, 37,222,132, 67,159, 92, 54, 98, +172, 60, 8, 43,188,143,108,146, 99, 63, 85,210,241,154,247,156,227,187,231,133, 38,176,233, 19,109,181,227,241,207,255, 60,239, + 28,111, 56,123, 53,113, 49,123, 30, 14,183,124,240,193, 79,168,206,128, 47, 78,141, 40, 37,117,113, 53,136, 85,242,193, 65,209, +133, 8,197,157, 48,209,217,229,191, 40,121, 21, 3,240, 84, 21, 66, 88,138,178,106,133, 21, 94, 17, 20, 31, 87,236,142, 54,180, +172, 92,223,222,112,125,221, 88,175,214,144, 34,169,131, 77,232, 40,165,114, 27, 70,234, 60,147,107, 33,231,202, 88, 27, 31,125, +250, 41,159,189,126,197,170, 79,116,169, 99, 55, 92,240,147,243, 23, 60, 57,121,196,147, 71,143,120,231,243, 95, 96,127,113,197, +139, 31,159,115,123,115,107,176, 34, 49,123,149, 75, 17, 23, 87, 38, 27,139,182,235,247,115, 97,213, 39,166, 92,232,198,137, 62, + 6,246,243,108, 30,242, 16,160, 53,154, 52,162,116,148, 90, 12, 36,211, 96,206, 25, 37,224,246, 3,221,122,197,237,205,192,163, +167, 87, 92, 95,158,113,184, 57, 88, 36, 98,201, 84,205, 76,227, 68, 76,145, 72, 96,110,149,169, 77,156,156,236,184,188,184, 96, +110,209,198,243, 58, 67,201,204,213,179,207, 38,214,171,213,224, 70, 77, 21,241,166, 6,102,161,158, 93,151,107, 19,154, 73,199, +237, 60,178,242,240,248,248, 49,105,221, 91,197, 47,149, 58, 89, 49, 88, 42,184, 78,240,106,168, 98,213, 72, 76,142,243,215,103, +156,110,215,236,203, 76,110, 74, 8,139,238,164, 54,180, 68, 68, 45,153,106, 82,101,152, 43,231, 87,151,124,240,193,247, 56, 28, + 42, 23, 87,151, 52,103, 98,210,105,110,236,182, 27,190,244, 11,207,136,204,124,244,193,199, 92, 92,238,121,121, 61, 88, 90, 25, +222,206, 9,249,105,220,170,230,193, 44, 95, 33,145,114,227,120,123,204,195, 7, 71,188,245,228,132,211,183, 78, 57, 94, 11,167, + 39, 1,209, 21,235,221, 67,134,124,131,212, 76, 67, 41, 37,240,137, 63,230,252,118,166,148,153, 58,236, 41, 83, 67, 58, 91,199, +249, 98, 18,110,151,122, 36, 15, 12,106,194, 68,135,144,169,148,154,105, 58,227, 75,165, 76,133,144, 54, 76,115, 35,215, 72,144, +198,208, 50,219,245, 22,165,163, 14, 13, 29,110, 9,177, 67,179,113,210,145,104,164,188, 38,100, 50,132, 25, 66,162,148, 66,159, + 58, 66,131, 48, 5,246, 76, 22, 82, 84,102, 26,142, 24, 19,243,156,209,166,132, 46, 18,100,226,186, 57,210,205, 64, 90, 9,186, + 93, 35,190, 39,185,108,244,191, 60,224,216,208, 85, 15,193,206,163, 16,141, 94, 88,129,176,238,153,167, 70,239, 35,125, 19, 90, +181,232, 77, 47, 1, 17,207, 60, 55, 92,104, 4,239,152,166, 76,242,158, 92,132,171, 97,102,219, 69,146,243, 38,234,245, 14,241, +230,240, 1,211,114,121, 81,107,204,156,220, 79,228,170, 46,184,105, 42,209,246, 11,247, 23, 16,163, 86,156,164, 46,222,235,165, + 91,155, 93, 23,181, 0,238,126,153,239, 13,168, 99, 93,226,203, 11, 26, 27, 45,155,126, 42, 0,197, 59,202, 10,226,193, 81,166, +153, 85,239,233,138,114,233, 2, 48, 17, 55,129, 80,149,210,102,138,143, 22, 2, 84, 20, 95,160,120,143,232, 64,113,133,173,236, +152, 8,220,204, 55,156,198, 19, 82,131, 27,129,184,138,232, 52, 24,217, 83, 97,239, 45, 78,124,225,201, 53, 52,171, 65,102,212, + 42, 73, 3,181,216, 62,181, 45,157,246, 93,154,151,138,101, 38,123, 49, 94, 59,197, 17,163,169,186, 85, 45, 55, 61, 69, 19,168, +149,106, 2, 11,165,209,130, 44,114, 74, 27, 13,163,166,130, 55,229,176,117,221,213,101,171,116,138, 9,103, 22,221, 56, 72,195, + 53, 37,168,103,110,186, 0, 95, 26,185, 86,139, 56,172,134,122,117, 78,236,239, 47,112,155,184,140, 79,171,243,248,232, 33, 79, +116, 97, 65,247, 53,104,163,190, 9,158,168,234,152,151,201,194,178, 78, 69, 48, 29,129,151, 64,232,188,169,199,157, 35, 58, 79, +113,139,185,127, 49,238, 55,103,150,192,218,204, 23, 26, 68, 64, 43,226, 3,155,126,101,151,105,173,168,216,216,221, 45,146,211, +224,148,221,166,113,122,186, 98, 45,189, 93,160,181,240, 96, 29, 56,159, 60, 87, 83, 67, 88, 35, 82, 41,174,178, 58,121,139,119, + 30,158,178, 81,199,176,125,132,122,207, 7, 63,248, 51,254,242,227, 51,230,106, 43,147,182, 64, 49,170,128,139, 1,159, 33, 59, +139, 82,245,139,146,212,189, 73,104,131, 24,211, 2, 78,177,149,132,186,187,103,192,186, 67,212, 52, 7,118,233,195,102,181, 97, +229, 61,251,105, 32, 23,243,197,223, 14, 35,222, 59,210, 42, 66,183,193,187,136,247,158,245,209,206, 20,155,218,112,185,113, 59, + 76,248,232, 57,140, 3, 55, 55, 35,251, 97,160, 11, 23, 92,190, 60,103,156,246,124,241, 43,191,196, 23, 62,255,140,163, 77,207, +119,191,159, 41,211, 5,185, 10,130,176,242,193, 56,216,157,205, 16,198,113,134, 96,126,112, 81, 79,222, 8,235,245,138,157, 51, +218, 90, 46, 10, 58,211,199, 68,223,111,200,173, 50,206,135, 55,162,205,170, 3,243, 52,112,216,239,105, 14,254,229,191,186,229, + 91,223,252, 43, 14,251,129,224, 26,181,218,132,202, 57,115,133,104, 0, 95, 2, 77, 34, 15, 79,159,112,123,189, 71,130, 71,188, +101, 32,223, 78,213, 88,231, 49,161,101,166,185, 98,244, 55,160,228,201,178, 0,100,185,228,213,241,229,247, 30,243,254,123,207, +248,167,255,250,219,168, 38,118, 71, 15, 1,227,220,207,195,213,114, 40, 5,164, 15,134, 58,173, 21,175,102,157,140, 93, 69, 52, +115,123,115,201, 92, 26, 33,120, 27, 43, 47,192,235, 90, 10,138, 50,206, 35,115,171,180,170, 76,147,231,242,242,156, 50, 7, 42, + 74,157, 43, 42,202,118,211,241,235,191,252, 14,167,199, 27,254,228, 91,223,227,227,143,207,140,239,189,132, 53,197,208, 83,235, +158,150, 27, 26,163, 29,192, 49, 25, 93,206, 7,126,241, 75, 79,249,234,175,253, 10, 79,158,157,144,135, 27,110, 46, 71,246, 23, + 7,126,248,226, 83,252, 74,120,112,114, 69, 72,129, 50,192,163,199,199,188,245,228, 45,158, 61,223,242,237, 15, 95,242,227,191, +254,132,149,246,248, 53,212, 58,226,196, 19,220,154, 42, 25, 87, 27,206,109, 32,103, 70, 7, 41, 8, 94, 51,145, 64, 21, 71,201, + 35,194,138,164, 48, 37,135,111,130, 27,101, 81, 88, 11,190,205,166,160, 15, 17,137, 19,234, 86,228, 58,146, 86, 30, 81,207, 48, + 40,201,117, 4, 61,216,180, 68,123,152, 43, 69, 28,202, 68,136,141,105,158,168, 89,145, 46,225, 75, 65,250, 68,149,202,156,111, + 72, 81, 72,109,131,214,204, 60, 92, 83, 93, 69, 10, 12,126, 89, 75,248, 21,201, 57,134,201, 52, 72, 93, 20, 52,219,216,125, 46, +131, 17, 33,125, 64,212, 52, 37,205, 5,162, 64,163, 50,213,138, 23,207, 60,103,186,232, 44, 14,218, 43, 14, 79, 7,228,214,112, +190,154,143,190, 41,174,101,154,139,230, 54,234, 32, 73, 64,130, 16,188,191,167, 11, 82,151,204,115,131, 48,221,219,229,168, 44, +171, 80, 91, 79,222,231,151,195,166, 45,226,116,137,158,189,231,200,213,165, 96,143, 2,115,174,120,245, 76,101,134,154,161,120, +170,218,186, 85, 82,199, 52, 84,164, 22,202, 56,194, 52,211,185, 13, 61,202,109,173, 56,191, 36,151,198,133,138, 57,205,104, 85, + 18,158,121,186,164, 21,207, 58, 30, 49, 13,133, 91, 49,225,104, 95, 29, 55,165, 50,148,194,138, 74,106, 16,154,191, 19,186,121, +104,197,108,172,152,143, 78, 23,122, 81,115, 98,104, 65, 91,126,219,222,170,122, 66,116,214, 13, 44,151,211,156,109,143, 83, 40, + 56, 85,230,220,222,120,218,231, 86,150, 48, 13,187,162, 21,103,213,110,109,120, 26,165, 85, 66,232,112, 5,170,175, 84,181,238, + 50, 23, 19,118,165, 36,120, 2, 65, 43, 77, 26,190, 42,197, 53,235,208,171, 90, 88,129, 83,180, 44, 97, 20,186,168, 65, 69,153, +140,117, 97, 92,251,162,128, 89,219,156,170, 81,237, 80, 90,205, 86,116,136, 61,176,158,176,240,233,151,173,187,183,203,183,169, +141, 76, 17,207,220,204, 21, 47, 81,222, 68,180, 74, 53,111, 98,234, 60,227,236,169,148, 55,170,243,185,100, 82, 8,230,201,149, +138,239, 60,222, 89,230,249,172,153, 58, 53,116,142,148,126, 73,138,242,209, 86, 18, 78,121,188, 85,114, 29, 24,243,138,121,243, +140,119,158,253, 2,121,156,184,240, 80,105,124,114,241, 19,190,255,111,191,199,217,229,158,234, 12, 47,233, 37, 66,131,202,108, +157,182,182,197, 26, 34, 38,110, 2,196,119,136, 83, 74,153, 44,133,202,155, 75,216,105, 91,148,167,141,230,188, 29,138, 98,252, +226, 86,148,245,118,195, 59,207,223,198,229,202,229,124,133, 54,136,189, 21, 55,115,105,204, 99,230,236,112, 65, 83,136,189,167, + 15,145,224, 59,188,143, 56, 17,182,199, 61,155, 46,114,126, 5,195, 52,161, 69,185,157, 39,110,135,129,195,119, 14,196,245,134, +163, 47,190,143,171,215, 60,124,180,101,184, 84,246,243,100, 5, 35,144,117, 38,185,128,107,141,152, 60, 46, 7,188, 86,220,202, + 49,205,166, 10, 95,121,161, 59, 58, 97,106, 51, 45,119, 56,173,168,100,166, 97,128, 98, 66,159, 41, 23,106, 54,132,176,111, 14, + 9,129,233, 48,113,126,126, 69, 76, 1,137,222,242,230,235, 76,109,217, 58, 61, 93,138,221,185,178,217, 70, 8, 66,158, 71,180, + 40,121, 44,100,173,228,146,241, 57,155,254,196,217,172,170,152, 16, 5, 45,224,131,210,188,137,205,126,253, 87,191,196,215,126, +243,107,244, 39, 15,248,179,111,124,128,225, 88, 42,117,184, 94, 8,132,145, 58, 22,116,154,240, 78,237,185, 40,138,116,149, 54, +238,241, 49,112,152, 71, 14,183,215,236,142,143,217,244, 29,251,195,108,220,114,173,212, 41, 27, 31, 98,177,133, 70, 21,162,247, +116,125,224,250,102,196,121, 79,192,115,186, 61,230,242,242,130, 63,249,179,239, 48,102,216, 28,109, 97,110,236,167,137,172, 35, + 45, 23,130,128, 11, 29, 74, 37,132,100, 48, 30, 15,191,240,149,231,252,225,223,251, 61,142, 31,110,249,246,183,254, 29, 63,248, +238, 7,116, 18, 57,126,120,194,230,193, 17,199, 61,188,252,236, 53,125,183,197,249, 45, 77,123, 74, 81,222,126, 24,249,157, 95, +121, 31, 7,124,244,131, 15,137, 8,177,243,116, 46, 48,123,101,206,130, 22, 65,251, 74,205, 19, 65,163,233, 74,162,179,105, 89, +174, 52, 13,172,214,209,248, 23,135,140, 75, 29,108, 59,250, 62,210, 24,109, 87, 43,141, 66, 32,141,222, 2,131, 18,248,232,240, + 67,164,151,204, 20, 70,180,116,166,176,247,197, 46,130, 59, 92,244,146, 73, 81, 42,172,197, 10,235,208, 43,179, 6,110,134, 61, + 15,195,154,162, 25,215,103, 91,241,101,211,160,172,251, 74, 41, 1,218,140,118,137, 41,155,186,190,115,142, 97,114, 20, 17,170, +122,210, 42, 88,147, 81,102,178, 11,196, 85, 96,213, 42,135, 9, 92, 15, 58,155,120, 89,188,176, 10,194,156, 29,157, 87, 90,138, +232, 92, 17, 21,178, 86,130,118,214,241,150,106,100, 59,111,207,170, 87, 71,119, 79,116,182, 59,203,152, 83,119, 95, 77,250, 79, + 47,223, 37,152,226, 62,139,133,187, 49, 64,171,205,166,173,254,126, 35, 87, 45,220,166, 64,169, 8,145,192,130,182,118, 30, 58, +104, 67, 97,154, 11,178, 50,148,175,182,204,109,169,102,213, 77, 29,171, 36, 92, 79, 35, 84, 33,201,138,129,137, 86, 51,161,131, +113, 24,108, 85,163,102,251,117,169, 34,226,216, 15, 19,161,192,202, 7,203, 73, 8, 3,173,122,106,236,144,195, 68, 8,142, 55, +185,218,130, 51, 97,142,218,120,205,251,100,109,170,187, 27,209, 26,165, 75, 22, 21,124,101,233,110,155, 89,189, 12,202,230,104, +214,214, 47, 86, 46, 71, 39,158,236,212, 46, 6,215,222,100,171,155, 21, 77,153,171,226, 99, 52, 88,140, 7,231, 34,174, 53, 59, + 80, 81, 19,185, 52, 8, 30,114,109,212,187,209, 70, 53, 70,184,143,166, 48, 22,156,137,218,196,225,130,123, 3, 49,152,179,237, +230,163, 55, 54, 53,106,129, 45,181, 53,138, 19,162, 19,124,240,118,129, 46,251,218,130, 69,219, 33,142,148, 28, 26, 34,178,116, +217, 52, 71,191,235,172,255,175,131,177,205,155, 89,254, 16,197,171,160,179, 41,247,189, 64,110, 5, 87,108,226, 80,231,140,138, + 99, 37, 30,109,133, 66, 36, 6, 79,205,149,171, 49,210, 66,160,139,138,230, 74, 8,107,166, 82,121,212, 57, 98,116, 68,157,121, +113, 61, 81, 30, 63,231, 97,111,241,180,193, 67,155, 50,175, 63,252, 1,159, 92, 13,168,247, 72, 45,184,234, 12, 66,224,188,177, +232,155, 82,181, 46,180,168,133,123,239,188,105, 11,188,208,212,222,143, 59, 14,127, 83,197,137, 17, 2,205, 95,122, 55,144, 48, + 54,251, 23,159, 62,225, 97,128,151,251,153,212,117, 28, 29,173, 65, 28,251,219, 1,169,109, 17, 59, 46,112,136,162, 76,181, 48, +104, 54, 49,149, 84,186,174,135,118, 68, 92,128, 60,111,192, 50,185, 49,238, 7,254,244, 79,190,193,249,139,151, 28, 61, 88,177, + 94,173, 45,153,236,228, 9, 14,139,208, 28,134, 3,109, 95,241,157, 51,176, 77, 12,104,141,244,161, 26,196, 1,168,181, 17, 68, +137,178, 66,178, 67,253, 68, 31, 18,239, 63,127,198,229,205, 5, 47, 47, 14, 6, 79, 26,103,178, 43,168,183,221,108, 45, 21, 9, +145, 60,100, 66,169, 36,239, 25,242,204, 84, 42, 41,121, 24,103, 36, 6,102,157,185,188,189,181, 32, 25,169,166, 74, 21,199,124, +152, 23,175,111,181,125,179,247,244, 93,160, 14,153,130, 97,123, 5,163, 29,142,213,113,121,117, 77, 31, 60,239, 61,125,202,135, +143,174,105, 89,152,231,186, 8,146, 2, 65, 13,199, 90,102,165,239, 77,164,150, 85, 57, 74,142,235,171, 66,223,239,120,239,217, + 19,190,243,253, 31,112,115, 51,224,212, 51,213,106,164, 69, 76,169,220, 44,209,130,224, 3, 93, 23,152, 10,204,121, 38, 74,196, +139,231,104,227,241,177,241,221, 31, 93, 50,150, 70,209,204,126, 63, 16, 99, 71,232, 19,137, 8,181, 48,150,138, 83,163,174,133, + 20,217,244,194,175,254,210,151,248,189,191,251,155,228,105,228,159,253,147, 63,229,236,166,178,219, 29,241,252,201,150, 93,127, + 68,117, 19,105, 3,167, 21,122,231,233, 78,182, 75,138,156,231,226,106,230,120,237,248,149, 47, 63,199,205, 55,188,120,113,101, +171,163, 90,240,162,134,205,244, 66,145,153, 85,232,160,121,230,114,160,148, 14,124,102,170, 3,136,209, 35, 27,224, 98,162, 18, + 16,167,248, 90,193, 71, 42, 30,199, 0, 90,168, 18, 13,152,147, 61,174,122,154, 87,198, 54,225,231, 21,141,140,107, 66, 90, 89, +134, 64,174,197,214,135, 62,208,239, 2,237, 66, 13,124, 21, 26,101, 72,244,100,124, 88, 49, 86, 7,109, 52,141, 67, 21, 82, 44, + 12,192, 48,172,241, 73,208,186,103, 53,247, 12,211, 45,185,121,198,117, 66,251, 25, 52,145,154,210,166,145,155, 17, 98,223,225, + 61,184, 92,200, 64,234,237,231, 64,148,117,215,225,176, 78, 94,196, 33,234,169, 82, 73,209, 81,145, 5,246,102,154,156,232,132, + 90, 29,174, 54, 20, 27,145,167,251,234, 80, 23, 92, 55, 94, 23, 28,239, 61,117,188,165,209,234,157, 11, 73,238,119, 60, 94,237, +110,242,122,207,201,108,119, 98,185, 5,255, 93,235, 72,115, 86,196, 75, 19,114,179,103, 50,137,163, 12,141,146,103,124, 52,144, +218,198,219,154,103, 95,102,220, 38, 18,198,196, 52, 10,169,101, 14,100, 8,129,109,216, 49,165,128,155, 46, 73, 53,209,170, 80, + 36, 19, 83,194, 15,153,177, 78, 22, 42,166,129, 70,182,176,152,216,225,223,126,250,236,235, 14,140,233,238,173, 42, 53,106,154, + 51,189,190,187, 3,205, 52,164, 45, 73, 95, 75,200,138, 10, 70, 48,105,149, 24,109,183,189,112, 95, 9,222, 8,112, 34,150,190, +229,131, 51, 47,183, 91,248,235,222, 70,169, 18,173,106, 8, 78, 8,170,111,222,136,224,108,231, 89,139,177,139,157,119,139, 77, +205, 20,247, 34,166,180, 21, 49, 32, 64,203,133,156, 27,213, 9, 94, 77,232, 38,193,118,128,238, 14, 2,163,152,135,190,217,158, +169, 57,123, 48,157, 15,102,106, 91,198,237,141,165, 26, 93,196,157, 33, 5,212,219,107,239,130,224,119, 27, 78,223,122,194,211, + 7, 27,170,206, 28, 38,197, 59, 33, 70,135, 6, 69,189,137,208,146,143,212,105,224,242,250,176,224,116, 77,147, 32, 78, 8, 18, +105,205,227,220,140, 23,135,215,196, 91, 15, 2,239,237, 34, 62, 59,182, 33,208,197,200,190, 22,196, 9, 71,199, 59,142,182,130, +223, 62,167, 59,125, 78,191,234,161,206,212, 90,233, 87,149, 31,126,255, 47,184,184, 25,168, 53, 91,161,133,237,208,154,171,139, +189,208,186, 81, 19, 0,234,146,237, 30,173,114, 21, 27, 45,163,134,164, 12,209, 47, 81,151,250,198, 24, 34,138,161, 40,213,241, +224,248, 1, 95,254,210, 59,124,239, 71, 47, 25,125,226,193,233, 17,155,221,154,163, 24,185,185,189, 53, 56,132,247,168, 24,110, +216, 57, 79,173,246,126, 54,173,212,101, 31,122, 24, 14, 54,173, 89,176,194,193, 7, 66, 12,246,126,151,202,171,243,215, 92,239, + 7,130, 58,118,187, 13, 69, 43,228,137,205,238,152,227,213, 17, 93,191,197,165,134,107, 1,245, 5, 95, 45,215,188, 97, 5, 92, + 72, 29, 93,103, 69,203,201, 58,242,251,127,247,215,249,175,255,219,223,229,191,255, 31,254,144, 71,167,199,124,243,155, 31, 89, + 38,181,154, 23,223, 86, 43, 6,172, 16,105,204,211,204, 60,102,180, 86,134,113,194,185,196,106,181,165,232,184,116,223,142, 7, +155, 13,227,205, 64, 46,149, 70,161, 58, 40,106, 62,110,154, 77,146,124,176,137, 75, 93,204,175, 41, 69,180, 42,181,152,231,181, +235, 60,173, 20,190,245,173, 79,152,114,166,214,129,156, 39, 66,151,222,172,123,116,110, 54, 98, 21,161,228,198,102,179, 97, 46, +153,139,171, 43,182,169,231, 23,127,238,109,158,189,125,196, 95,127,252,138, 97, 28,137,222,180, 17,181, 84,106, 51, 48,137,115, +142, 24, 61, 62, 4,230, 81, 23,237,140,225,120,215, 93,228,197,103, 47,152, 38, 11,244, 9, 41, 34, 42,148,214,168,115,161,149, +138,139,130,248,142,224,133,110,215,241,248,104,197,223,249,237,175,242,187,191,251, 31,243,250,252, 21,255,219, 63,254,167, 92, +190,158,248,220,243, 83,250,157,163,148,194,166,179,136,201,152, 58,118,199,107, 20,229,228,228, 33,235,237,154, 58,143,156,110, +183,196, 24, 57,233, 3, 49,246,236, 95, 95,227,170, 50,119,130,243,142, 36,107, 83, 18,171,173,196,166,106,216,205, 80,204,221, +224, 83,194, 21,229,118, 24, 41,197,178,203, 81,208,156,241, 93, 96,229, 59,218,236, 64,103, 35, 23,118,110,225, 81,116, 84,201, +212, 84,240, 13, 86,222,104,134,123,157,168, 8,157, 86,124,234, 9,234,208, 16,112, 19, 4,157, 25,199,137, 38,138,235, 2,146, + 59,130,183,137, 37, 21,180, 20, 92, 51, 12,168, 0, 38,171,220,227,123,165,141, 80, 52,160, 83,165,249, 64,174,138,180, 10,131, +149, 28,210, 21,106,179,207, 93,232,197, 4, 79,206,224, 83,222,123,155, 36,197, 37,155, 67,195,162,136,214,101,178,166, 8, 30, + 73, 75, 99,161,166, 21,114, 13, 82, 72,116,235,192,163, 71,167,248,248,179,167,147, 77,185,145,199, 9, 90, 97,183, 91,155, 94, +229, 30,190,166,172,228,105, 70,156,178,217,116, 63,115,232,204,223, 84,235,143, 99, 33, 79, 19, 65,148,205,110,125,111,223,251, + 14,109,123,125,117,224,246,250,146, 86, 14,214, 16, 85,168,205,206,219,234,109,173, 48,222, 86, 90, 15,121,112,136,142,180, 38, + 72,157,136, 85, 81,215,152,154, 67,167,106, 13, 66,169,120, 21,124,218,130, 42,121, 63, 46, 80,184, 76,168,137, 74,225, 48,238, +105, 65,105,243, 76, 25, 10, 42,208,199,158,105,170,248,167, 79,222,254,186,115,118,145, 25, 55,221,198, 21,162,206, 84,235,206, +240,173,106, 64,157,133,195,108,177,144, 44, 98, 42,179,196,201,130,115, 52, 72,203,157,177, 63, 58, 27,133,150,170,198, 74,110, +150, 32,164, 45,224,157,101,153,235,221, 72,222, 41, 26, 2,209,233,226, 13,118, 22,163,232,108,119, 90,212,153, 29, 75, 76,117, + 78,179,177, 71, 89, 86, 0,212,187,116,162, 5,148,211, 20,103,115,103, 84, 34, 62, 46,123,239,106,213,110,215, 45, 44,123,113, +148, 50,191, 33, 11, 58, 17, 36, 5,146,115,166,154,119, 98,126,251, 78, 76,116,214, 28,169, 19, 98,203,236,231,137,156, 27,157, + 88,254, 55, 85,241,193,155,154, 23, 79,183, 74, 92, 94,223, 48, 78,101,201,122,247,164, 16,105, 45, 27,250,214, 9,121,110,244, +171,200,111,188,127,204,201, 6, 38,231,145, 46,162, 94, 88,237, 86, 28,157, 28, 17, 31, 29,179, 73,167, 20,125,202,217,193,246, +178,170,145,227, 39,143, 25, 95,252, 53,127,245,189,191,100,127,152, 41,117, 38,197, 72, 12, 22,241,149, 91,166,148,138, 22, 19, +108,153, 27,209,153,138,221, 47, 65, 23, 75, 28,107, 10,194, 58,245,244,169, 3, 15, 37,155, 24,168,181,138,120, 89, 4, 56,194, +207,189,255, 57,118,219, 19,110, 90,199,233,131,167,108,163,176,221,236,152,166, 27,174,110, 15,148,188, 56, 38, 22, 46,182, 91, +118,248, 54, 94,179,223,211,162,226, 48,173, 3,141,214, 10, 57, 23,106,105,196,224,217,172, 58,170,107, 76,135,204,249,229, 13, +183,183,123,188,175, 36, 31,140, 9,158, 64, 66,192,197, 21,171,221,177,141,149, 17, 52, 21, 26,149,232, 61, 43, 31,136,206,209, +111, 35,127,240, 7,191,197,127,243,223,253,231,244, 50,243,234,229, 25,175, 94, 94,243,227,159,188,226,242,102, 64,213,138,157, +128, 95,240,185,166,156,111, 8, 83,182, 75, 49,136,163, 91,155, 0,173,243, 70,233,243, 93, 98,219,111,185, 60,220,144,250,192, + 48,218,122, 71, 91,177, 17,172,243,244,235, 64,110, 70, 70,147,104, 2,201, 78, 60,199,235, 21,191,249,159,252, 42,222, 71, 46, + 94,237, 41, 28, 51, 76, 38, 84,237,154, 37,254, 65,196, 87,165,102,168,226,144,100,122, 20,113,208,175, 28,175,206, 47, 65,173, +219,175, 36,190,246,181, 95, 96,187, 89,243,189, 31,125,132,195, 19,197,226,124,181,149, 55,128,141,174,235, 72,253,134,218,148, + 85,138, 52,231,121,251,209, 26,213,202,203,179, 27,106,177, 66,177,182,106,207,231,178, 51,103, 41, 12,162,115,116, 93, 7,234, +248,234, 87, 62,207, 31,252,193,239,242,217,249, 25,255,242,159,125,147,119, 31,158,240,238,243,135,108,142, 59,118,167,107,252, +228, 88,157, 30,179,217, 5, 98, 60, 37,244, 39,180,114,192,149,202, 47,125,229,125,158,127,254, 57,199,111,173,121,240,100,203, +230, 36,113,188, 78, 12,115,229,118, 26,172,168,200,145,162,149,185, 90,176, 77, 51, 74,146,233,103,186, 70, 47,102, 3,189, 29, +243,178, 30,108,184,184, 50,212,106,159, 72, 41, 82,115,161, 6, 11,162,145, 26,193,173,105, 78, 23, 52,244, 68,153, 43,125,234, +169,193, 33, 98, 78,134,230,140,239, 80,230,140, 23,103,200,236, 58, 83, 99,177, 24, 84, 39,196, 46, 16,134, 17,197,236, 0, 0, + 32, 0, 73, 68, 65, 84,177,244, 65,231,215, 56,215,144, 60, 91,122,165,138,137,215,230,145, 20,183,148, 16, 24,111, 43, 21,193, + 73, 33,248,100, 4,211, 2,211, 92,109,117,224, 61,125, 72,168,111,248,166, 56,177, 9, 91, 16,155,161,214,102,107,151,138, 5, + 47, 5,111, 22, 89, 39, 16,212, 47,157,179,117,165,150, 68,105, 35, 96,137,129,190,235,121,235,173,135, 63,243,232, 89,129, 49, + 43,243, 56, 33, 52,182,247,120, 65, 78,165, 81,166,137,232,149,213,186,127,163,245,249,153, 59,117,103,220,247,121,158,232,189, +178, 57,218,112,159,123,131, 67,133,203,203, 91,134,155,107,164,218, 14,188, 57, 99,102,200, 34, 12,247, 10,222, 87, 19, 33, 35, +120,231, 41, 35,204,237, 0, 14,118,101, 77,246, 10,186, 55, 61, 86,231, 33, 5,234, 80,200,254, 96,103, 94,114,212,178,103,104, + 13, 52,208,173, 18,213, 91,154,163,119, 14, 77, 11,136,103, 4,255,228,237,183,191, 46,226, 12, 37,234, 22, 53,244, 29, 59,215, +217, 37,239,229,110,236,242,134,154,103, 2, 48, 4, 9, 66,242,222,210,177, 22, 31,184, 46,129, 29,222,185, 69,176,115, 71,108, +147, 69,156,101, 85,100,211, 98, 89,201,206, 33, 65,105, 8, 77,151, 64,132,165, 11,215, 86,172, 96,168,102,123, 83, 81,100,185, +160, 74,177, 61,161,199, 81,221,242,132,211, 8,226, 44,113,205,140,225,127,131,205,108, 99,109,241,126,201, 72, 7, 87, 29, 46, + 6,148,130, 44,194, 50, 42, 4,117, 80,141, 38, 39,152,162,212,167, 96,120,219, 90,152,198,145,121, 46,224,204,226,165,193,147, +235,132,168,189,230, 50, 55, 98,140,116,171,132,104,225,230,234,118,137,145, 21,219,219,123,155, 80,244, 93, 68, 66,228,189,199, + 27,222, 57,134, 57,219,165, 65,244,172,195,134, 7, 15,142, 89,159, 60, 71, 4, 66,191,101,168,141,243,146,144, 41,211, 29, 63, +229,217, 91,137,111,253,233,191,224, 39,159,125,102,194, 63, 93,228, 38,226,105,165, 90,184, 73,157, 40,205, 46,216, 5, 31, 99, + 49,145,226,173,235, 17,219, 37,187, 86,153,243,200, 60, 79,148, 82,150,137,130,137,125, 88, 44,131,221,106,203,207, 61,123,135, +243,155, 27,170, 36,222,125,250,136,113,190,225,209,110,197,213,120,195,245,254,134, 41,103,179,218, 40,139,229,198,225, 1,117, +230,253,183,159, 79,240,193, 45, 75, 31,187,112,204, 30, 86, 44, 88, 5,165,239, 59,214,157,217,178, 14,195,129,179,243,115,206, +247, 55,236,247, 7,186,149,152,224,100, 58, 32,165,176, 94, 31,177,121,248,136,144, 60, 34,129,150, 77,215,241,224,209, 49,255, +213, 31,253, 14,191,247, 71,191,207,167, 63,248, 49,255,227,255,244,199,252,195,127,244, 13,126,251,183,191,202,205,197,107,126, +244,241,185,141,180, 75, 53,203, 24,194, 60,141, 76,185,145, 86,137, 86, 45, 88,165,235,215,244,235, 21,218,108, 36, 43, 78, 88, +245, 61,243, 60, 51,206, 3, 41, 5,202,178,155,159,231,193, 66, 63,186, 13, 41, 36,112,178,160, 37, 51,165, 20,104,194,233,233, +150,191,255,247,255, 30,143, 30,108,249,209,167, 23, 60, 60, 89,196,113,205, 4,137,120,103,123,218, 8,101,178, 20, 61, 23,160, +213, 70,223, 5,188, 40,175, 46, 47, 73,105, 67,140,107,106, 17,142,118, 61, 95,124,255,148,156, 27, 31,127,248,234, 13,226,184, + 53,179,157,249, 24,233,250,141,233, 40,194,114, 89,212,204,254,246,154,139,171, 61, 94, 34, 49, 26,162,180,214, 66,205, 25,106, + 70,156, 32,201, 17, 98,111,227,120,239,249,242,151,223,229, 15,255,232,247,121,241,233,103,252,131,255,229, 31,227,188,240,185, +119,142,120,246,206, 49,187, 7, 15,216,236, 86,164, 20,104,251,129,227,211, 83,182, 71,143,233,189,231,104,179,102,159,111,168, +185,240,228,217, 49,113,183, 2,191, 1,191, 35,109, 55,236, 86,158,235,155, 3,215,151,151, 4,223, 81,243, 76,105, 35,226, 28, +193, 5,170,102,188, 52, 50, 66,157, 29,163, 10,173,141, 52, 89, 52, 59, 62, 81, 66,193, 17,233,186, 21,109,121,182,125, 93,120, +228,154,241,193, 34,156, 87, 81,112,165, 71, 37, 18,155,163,197, 14,137,213,172, 68,205,209, 98,192, 55,199,100,163, 67,180,139, +136, 56,146, 68,188, 38,102,157,161, 41,157, 40,189,243,148,154,153, 41,168,118, 38,252, 76, 61,165, 86,234,184, 64,149,164,146, +220,140,119, 48, 11,184,185, 24,126, 56, 4, 74,137,196, 16,108,106,144,130, 37, 94, 6, 53,184, 12, 66,139, 54, 57,147, 59, 1, +183, 54,106,116,198,206,103, 17, 6, 55,227, 98,120,117, 4,233,204,249, 18, 3,219,213,138,135,111,157,218,101,255,179,218,195, + 6, 3, 5,121,133,237,118, 5,247,240, 61, 21,139,252,205,227, 72, 16, 88,109,214,247,230,127,175, 10,211, 88,168,121,100, 21, +133,126,187,185,151,240,153, 55,197, 72,131,171,243, 61, 55, 87,231,180, 50,162, 78,201,217, 46,246, 38, 22,255,157, 5,102,167, +140,115,163, 28,102, 60, 66, 90, 48,198,172,214,204,216,154,175,180,142,153, 6,174,144,179,157,217,222,123,250, 44,204, 57, 80, +166,145, 16, 3, 34, 27,106,222, 19,139,210,107, 48,161,245,110, 69,190, 29, 25,199,137, 0,214,121,222,113,111,165, 90, 78,184, +211,191,233, 95,182,203,248, 77,210, 88,178,170, 88, 22,114, 73,118, 16,131,141, 20,141,187,187, 48,211,219,226,245, 22, 49, 53, +103,179, 35, 92,113, 84,183,164, 1,185,128,138,129, 50,156,154,176,167, 52,111, 29,157, 55, 33,151,191,187,135,150,116,168,234, +194, 66, 52, 82, 84,195, 50,246, 50, 46,188,121,232, 27,115, 81,251,111, 2, 82,161,181,121,201,107, 55,208, 78, 19,179,193, 37, + 67,228, 17,156,208,170,253,185,248,134,250,134,122,111,162,162, 96,123, 76, 87, 2, 46,152, 72,196,123, 97,210,134, 31, 27,169, + 11,132, 36,148,185, 65,180, 9,135, 23,181,234,189,117,108,187,158,224,133, 57, 43, 49, 45, 28,246,166, 68, 47, 76,109,102,187, + 90,243,244, 4,214, 64, 22,207,140,178, 22, 97,181,237,241,235, 35, 92,169,184,238,132,217,221,114,178, 25,120,187,116, 92,209, + 83,202, 45,255,230,255,250,231,124,255,163,239,219,225, 81, 43,121,202, 86,197, 71,101,110, 51, 77,231, 69, 20,103,133,154,163, + 25,123,223,153, 8, 16, 87,193, 67,151, 86,104, 9, 12,245,198, 70,245,203,184,214, 33,120,145, 37,175,222,243,115,207,158,209, +202,200,139, 79, 94,178,125,120,202,197, 75,200,178,162,184, 98, 49,186, 46,210, 71,103, 15,247,156,223,132, 43, 84,119, 87,108, +216,243,117, 23,141,106, 63,195,221,168,223,186,249,138,227, 48, 76,140,185,178, 93,119, 36, 31,217,198, 21,213,193, 56,143,188, +186,253,140, 87,103,103,188,117,116,204,147,199,143, 89, 29, 41, 83, 25,136,251, 13,167,199,111,241,240,241, 99,240,194,218, 59, +126,249,111,125,129,223,250,157, 47,242,157,111,124,131, 87,159,237,233,250, 21, 47, 95,238,249,246,119,126,200, 56, 79, 22,100, +164,249, 14, 87,128, 11, 16, 83, 98, 62, 12,228, 97,198,187,136, 75,129,212, 37,187,248, 77, 78, 73,242, 22,101,122, 51,220,208, +175, 34, 90,140,234, 5,149,229, 37,161,100,230,217, 81,115,166, 77,217,132,136, 64, 73,240,250,234,146,171,179,115, 62,247,228, +152,207, 61,123, 66,209, 66,211, 25,116, 32,173, 87,180, 34, 22,224, 34,141, 16, 29,109,130, 50, 87,203,216,142,158,139,171, 91, +196, 9,169,235, 88,245,134,162,253,139,239,191, 4, 30,243,135,255,233,215, 56,220,140,252,249, 95,254, 8,241,205,176,200, 41, +145,124, 32,248, 96,218, 17, 49,107,220, 84, 51, 87,215,123,180,100, 66, 52, 94,184,143,137, 24, 87,104,203, 72, 83,242, 82,120, +175,125, 32,118,129, 95,250,185,103,252, 23,255,229,223,225,230,252, 21,255,224, 31,254, 31, 28,174, 11,218,110,248,203, 31,192, +238,173, 35,158, 61,138,228, 82, 88,109, 86, 28,202,100, 89,240, 81, 72,209,115,250,224, 17,239,190,247,152,143,127,114,206,247, +190,253, 99,222,121,254,152,237, 51, 64, 54,192, 99, 30, 60,239,248,210,213, 37,175,207,206, 25,166, 61, 93,128, 82, 19, 99,110, + 72, 40,244, 85,105,206,227,179, 69,158,170,179,247,183,239, 60,206, 57,242, 92, 8,210,112,113,196,103,155, 68,184, 90,200, 57, +131, 4,212,123, 52,244,196, 58,162,217, 17, 59,183,220, 31, 29,212, 66, 85, 97,211, 9,101,134, 68, 68, 98, 37,135,138,230, 70, +204, 27,100, 26,144,232, 24,219, 76,112,182,174,106,101,102, 80,101,172, 74,138, 14,188,167,206,158, 67,187,197,151, 68, 83, 71, +232,193,105, 96, 44,134,167, 14,201,112,204, 97,235,153, 14,144,146,226,125,193,121, 15, 1,106,153,241, 98,231,142,208, 72,234, + 40,173, 46, 32, 41, 27,199, 83, 27, 89,102,115,155,168, 89,127,171, 87, 74,171,136, 22, 92, 21, 92,179,243,233, 62,246,223,134, + 93, 53, 15,182,147,251, 3,207, 52,133, 90, 42, 14,115, 33,221,171,144,173,217,205,238, 22, 91,219,125, 94,232,127,211,138, 39, +206, 51,223,177,243,157, 67,139, 34, 46, 83,107, 69,130,163,206, 13, 29,171, 89,190,197, 49,207, 19,113,157, 8,101, 98, 28, 43, +205, 9,161, 13,204, 90, 32,158,224,218, 43,124,187, 37,142,137,131, 6,179, 63, 75,162,186, 66,149,137, 60, 59,188, 11, 12, 58, + 51, 55,240,251, 66,210,128,243, 30,255,228,241,211,175,227,218,155,139,220,178,130, 45, 56,193, 7,177,135, 71,151, 78,119, 73, + 92,243,238,238, 13,210,101, 63,235,237,255,105, 75,119,189,176,118,156, 68, 83,204, 75,197, 53,101,158,139, 9,241,150,144, 17, +239, 27, 18,132, 90, 76,156, 39, 98, 9, 91,193,123,156,180, 37,209, 73, 44,170, 85, 64,154,199, 33,180,102,172,110,213, 37,171, +217,217, 11, 12, 46,188,201, 80, 54,123,155,141,237, 20, 53, 79,186, 51, 32,236, 93,112,129,225,231, 42,206, 47,211,131,187,232, + 68,239,192,155,101,195, 59, 79, 31,163, 9,242, 48,109, 64, 12, 30, 9,193, 70,220,203,251,229,235,194,110,119,130,151,133, 69, + 28,132,152, 58,246,215,231,156, 93,222, 82,229,167,130, 62, 21,135,143,158,164,142, 40,129,211, 35,207,241,166,103,181,237,137, +219,192,110,117, 2,125, 52, 21,252, 52, 83, 83, 34, 10, 76, 99,228,234, 80,185,154,102, 84, 15,252,228,123,223,225,213,229, 37, + 85,161,229,201, 86, 35,226,193, 21,202, 52,147, 91, 89, 70,194,182,222,104, 75, 81, 21, 66,162,235, 58,250, 85,111,191,179, 82, +126, 74, 18, 20,115, 67,136, 98,228, 43,103,201,122, 93,151,120,250,224,132,155,219, 91,246,195,192,233,201, 17,135,253, 5,255, +209,175,252,109,122, 70, 62,249,248, 5, 53, 56,214,155, 45,235,216, 19,163,167,239,146, 21, 25, 18, 13, 98,227, 45,240,199, 45, +147, 24, 39,186,132, 52, 24,198,183,185, 37, 56, 65,149, 90, 33,231,106, 54,187,101,223, 31,187,158, 85,191,194, 57,199,112, 24, +121,117,117,193,249,235, 11, 3,163,212,198, 88,110,113,165,242,254, 59, 79,121,254,222,231,217,109, 60, 31,252,224, 3,168,158, +183, 78, 55,252,241,191,248,127,120,125, 61,115,254,234,134,207, 94, 94,240,250,242,156,146, 7, 74,245, 76,179,237,250,171,192, + 48,204,228, 60,211,245, 29,125, 50,110,128,163,226, 93, 66, 2,244, 49, 81,180, 49,150, 25, 39,222, 18,168,178,121,217,167, 33, + 27,201,203,253, 52, 95,189, 81,151, 11, 51,216,186, 39, 23,218, 60,179,223,195,112,104,148, 73,113,204,228,209,244, 30,185,153, + 43, 36, 23, 53,139,105, 91, 18,199, 36, 32,210,184,188,185,166, 91,173,232,250,245, 27,144, 81,211,194,235,203, 91,222,125,247, + 57,127,235, 87,191,194,135, 31,252,152,243,171,129,126,179, 66,146, 39,173, 55, 52,239,108,130,166,134,177, 44,227,132, 23,177, + 61,122,112, 84, 85, 91,187,212,130, 71,109,130,227, 35, 41, 38,186, 16,248,220,163, 39,252,103,191,251,107,228,195, 53,255,232, +143,255,132, 82,133,213,186, 67,155,227, 48, 90,166,228,131,109,100,187, 74,244,113,203,233,131, 39,172,214, 91, 30, 30, 37,142, +118,158,110, 27, 73,111,109,121,240, 96,203,120, 51, 80,138,178,123,107, 11,238, 4, 43,107, 55,156, 62,216,224, 91,230,211,159, +188,100, 56,100,211,134,168, 82,100, 2, 13,208, 60,146,140, 92, 87,155, 99,118,208,137,135,234,141,119, 46,130,147, 68,220,173, +112, 56,203,110, 8,194, 38,122, 10,141,168,160,185, 48,107,162,138,195, 69,197, 75,182,224, 38,133, 76, 67,106, 64, 83,101, 44, + 48,183, 17, 90,101, 67,143, 68,207, 52, 89,183,221,168,104, 48, 31,249,144,111, 41, 14, 92,181,243,209, 88, 1, 6,128, 73,219, +158,234,108,101,193,122,199, 58, 8, 50, 6,166,160,120, 28,193, 21, 8, 29,115,181,148,199,185,182, 37, 0,107, 81,131,163,148, +165,201, 10, 49, 45,250, 23, 67, 97,215, 10, 49,121, 35, 70, 98,231,165, 56,179, 33, 58,239, 77,175,112,180,101,119,124,116, 47, +151,239, 52,102,242, 52,209, 39,191,116,189,247,163, 32,159,198, 66,158, 39,250, 20,232, 86,247,151,117, 62, 55, 24,135,153, 60, + 79,172,251, 64,183, 94,221,235,197,126, 59, 53, 46,174,174,201,195, 45,117, 30,108,189, 89,178, 37,157,138,160,189, 39,143,138, + 43, 13,167, 5, 41,149, 24,149, 67, 24,104,154,224,214,236,209, 78, 6, 74, 43, 56,122,100,116,116,213, 2, 21, 11,133,154, 12, +130,228,212, 51,211, 40,109, 32,248,204, 62,103,106, 51,248, 80,155, 77, 84,155,180,226,159, 60,123,251,235,134, 8,117,119, 43, +242, 55,201,108,119, 34, 68, 39,150,100,131,115,111,246,164,150,174,186,192, 83, 22,197,188,113, 98, 28,190,185,197, 30,102,209, +131,212,198, 92, 33, 18, 65, 28,173, 22,106,109,248,100, 65, 25, 82,155, 89,124, 22,117,162,136, 21, 9,119,234,245,187,130,176, +220,217,172, 44,130,197, 18,118,196, 89,196,224,226,167,175, 78,151, 41,131,188,161,227,137,119, 56, 53,223,117, 8,102,224,174, +205,210,210,112, 38,186,107,193, 50,209, 81,183,112,210,205,110,228,157,117,182,125,178,195, 52,165,136, 4,111, 79,139, 90,240, +141, 83,152,231, 12, 94, 80,188,141,126, 67, 36, 36,251,128,125,246,217, 43, 94, 95, 15,118,208,139,241,195, 67,232,136,222,210, +121,164,235, 72, 93,228,228, 40,146,196,219, 1, 21, 28,210,103,230,155, 1,223,111,240, 82, 65,183, 92,149, 83, 84, 39,186,208, +241,201, 39,223,231,227,143, 63, 96, 44, 51,211, 48, 83, 90,181,223, 31,141,156, 51,185,232, 27,129,218, 29, 96, 6,231,232, 82, +207,170, 95,211,165, 14,241,129, 82, 50,121,154, 25,198, 97, 73, 24,179,125,156,247, 9,241,203, 46,220,193,233,209,142, 92, 27, +183,227, 76,174,153,211, 99, 91, 7,252,198,175,255, 50, 31,255,240,207,249,248,236,154,253,237,173,117,164, 10,187,205,138,126, +189,102,211,245,236,118,107,214, 41,144, 98, 34, 70,135,168,229, 10,220,101, 52, 91, 32,110, 89, 48, 69, 54,126, 14, 18, 23,102, +127,179,220,106,231,105,173, 0,158, 39,143,159,241,214, 91, 39,168, 22,202,156,185,185,222,115,125,187,231, 48,206, 92,239,175, +185, 62,156,145,122,104,172,232,251, 21,243,112,197,167,175, 94,243,239,190,253, 49,115, 45, 56, 23,120,245,234,140,139,155, 27, + 82,223, 17,130,231, 48,236, 41,165,226,170,163, 52, 19, 90,174,183, 27, 83,170,123,150,241,101, 33,136,163,102,101,204, 19,105, +221, 33, 90, 41,227,204, 48,205, 76,205,240,189, 34,134,166, 28,243,108, 83, 45, 9,203,239, 59, 46,126,220,128,147, 35,170,118, +116,209,227, 20,166, 60,227,154, 55, 82, 91,110,204,173,224,131, 97,143,107, 43,224,148,245, 42,114,126,181,167,213,198,106,189, + 66, 36, 17,196,209,111, 59,122, 9,168,115, 92,158, 79,212, 58, 47,152,216, 53,125,183,131,150, 17,159,208, 5,144,228,112,228, + 97,207,225,246, 22, 66,192,199, 64,144, 72,148,244,102, 61, 85,106, 65, 85, 9, 41, 17,125,164,235, 87,252,206,111,125,153,163, +147,192,255,252,191,254, 43, 42,194, 23,223,125,204,238,100, 67,236, 4, 45,240,234,236,192,217,217, 21,187, 85,224,189,119,223, +227,237,211, 19, 78, 79, 34, 71, 15,214,248, 62,192, 42,130,108,112, 97,203,209,131, 21,229,122, 36,122, 69, 86, 15,150, 75,221, +186,246, 85,188,225,131,239,126,151,177, 4,100,211, 81, 5,200, 21, 71, 98,172,197,136,114, 85,152,218, 68,140, 59,180, 64, 72, +153,137, 70,161,145,186,196,106,189, 6,175,104,155, 45,176, 72, 21, 95, 35, 26, 35,153, 70,119,135, 82, 78,105,161,208, 45, 5, +112,245,224, 11,213, 77,228, 92, 81, 28, 41, 4,154, 22,114,168, 8, 9, 73,149,230, 21, 37, 49,140, 87,136,139,108, 98, 15, 84, +188,174,152,124, 97, 19, 86,180,193,130,134, 92,231,112,117,198, 51,211,130, 39,180,198,166, 87,106, 78,220,206, 19,218, 34,169, +115,132, 86,152,115, 70, 98,180, 21,103,181,174, 60, 68, 19, 44,171, 83,251, 60, 54,219,133,138, 88, 35,162, 94,240, 69, 17, 9, + 56, 60,169, 19,156, 15,164, 16,120,112,122,196,122,187,253,217, 71,217,216, 5, 89,203,204,170,139,247,118,249, 54, 96, 88,104, +114,155, 85,186, 55, 70, 61,139, 67,106,127,152,104,101,226,104,211, 19,250,254, 94, 59,245,235, 65,185, 56,187,228,112,251,154, +208,218,178, 26,130, 88, 29, 53, 55,246,185,225,171, 16, 66,160, 97, 44, 11,205,142, 60, 21,124, 16,114, 81,156,159,152, 91,161, +185, 35, 90, 84,202,180, 71, 99,160,170, 82, 37,227,125, 51, 20,108,131, 88, 39, 92,118,136,139, 16, 42,234, 10,100,207,218,247, + 12,154,173,224,124,252,248,233,215,113, 22,196,226, 84,222, 8,229,180,217,206, 89,192,136, 87,119,227,119, 21,187,244, 85,236, + 31, 47,182,255,185, 83,156, 59,111,130, 22,111,204,115, 93,178,204, 21,192, 27, 14, 79,245,142,170,230, 45, 36, 5,161,181, 59, +106,155, 9,149,172,122, 88, 18,220,196, 89, 42,140,184, 37, 56,126,129, 31, 44, 48, 4, 39,178, 36,203,181, 37, 95,119,241,210, +171, 37,124,149, 82, 12,166,180,140,178,238,210,200,250, 69,237,236,177,162,165, 96, 57,201, 62, 44,240,149, 37, 80, 38,198, 64, +112, 98,252,118, 23,172,104, 8, 22,168,209, 74,129, 14, 68, 76, 29, 95,213,194, 82,124, 52,246,117, 29, 38, 62,249,228, 51,246, +135,108,187,174, 16, 40,181,226,125, 35,250,192,122,181, 38,246, 59,202, 56,242,232, 4,203, 16,206,141,154, 71,156, 68,188, 58, +210,163,167,132, 8,181, 20,214,238,192,233, 10, 34,141,111,254,223,127,193,171,235, 27,198, 60, 89,116,108, 93,112,145, 14,166, +146,223, 32, 59,181, 89,167, 14,142,216, 37, 54,171, 35,124,240,196,232,105,181, 82,242,188,232, 29,108, 18, 83, 85,223,204,150, +116, 81,134,167,216,179, 74,107, 52, 91, 71, 83,171, 32, 93, 64,112, 28, 31,173,249,240,199, 31,115, 53,204,180,217, 86, 40, 14, +193, 47, 60,126, 35, 15, 54, 16, 79,223,173,216,173,214,196,216,177, 89,117,172,214,235,101,239,238, 77,205,171,205,118,163,216, +138,195,105, 35,166,142,205,118,103, 26, 15, 47, 54, 54,247,158,205,241, 41,199,187, 19, 82, 72, 68,111, 83,136,162,141,105, 26, +232, 87, 61,133,132,200,150,241,242,130, 31,125,252, 33,173, 4, 62,252,248,130, 16, 2,222, 5,242,108, 42,246,180,218, 82,242, + 76, 30, 7, 67,171,138, 95, 10,184, 68, 18,111, 99,110,223, 44,210,215,155,250, 70,106,179,162,182, 53,166,217,188,168,135,105, + 36,134, 68,232,122,106, 49,197,173, 42, 4,241, 36,151,104,136,105, 56,200, 28,159,158,240,252,217,123,164,152, 32,143, 76,211, +126,169,186, 51, 51,149, 20, 2,171,190,135,230,105,147,253, 78, 66,244, 8,133,235,195, 45,222, 11, 49,244, 72,112, 68, 85,186, +232,201,165,177,191, 30,120,117,126,224,187, 63,122,193,231,222,121,192, 87,190,248, 46, 47, 62, 19,166, 58,216,110,217, 43,129, +132, 35, 47,129, 70,138,182, 76, 45,153, 90,139,209,194, 4,124,234, 16,151, 72,253,138, 85,215,225,212,241,206,179,231,124,254, + 11,143,248,215,127,246,151,188,188,184,229,249,179, 7,156,172, 58,158, 60,220,240,222,211,199, 28,239, 54,108,143, 19,143,222, +218,240,240,225,219,188,247,238, 59,172,123, 33,198,176,184, 87,162,197,103,138, 7, 22,204,234, 73, 64, 74,197,113,128,112, 4, +216,244, 43,109, 34,109, 58,231,230,246, 64,171,141,220, 38, 82,243, 22,165,155, 44,254,121,210, 74, 29, 70, 96,196, 99,175,165, +173,122,124, 81,250, 46, 90, 34,155, 54, 52, 67, 45,138, 71, 9, 18, 72,105, 17,219, 22, 71,171,153, 90, 4,205, 51, 33, 54,214, +126,205, 92,148, 42, 21,209,222,206,131,228,240,186,198,139, 66, 77,248, 44, 20, 22,215,198, 97,198,211, 17,220,242,217,239, 86, + 11,115,163,217,152,126,204,244,114,151,147, 17,233,154,241,254,187, 4,173, 69,166, 42,116,171, 72,234,205,137, 19,213, 92, 43, +206,121,180, 90,104,145, 19, 7,106,225, 70, 74, 51,167,210,146,201, 32, 98,239,151, 15, 1,109, 75, 90,101,176,179, 49,224, 17, + 31,121,112,114, 98,123,234,159,241, 43, 23,101, 26, 38,106,201,244,125, 32,221,211, 5,153, 27, 12,135,209,178,206,215, 29, 62, +165,123,187,116,115, 49,252,172, 43, 19,187,109,143, 79,221,189, 94,234, 55, 83, 99,127,117,197, 52, 94, 67, 53, 23,194, 84, 51, +197,196, 13, 76, 21,179, 82,250,194,213,126, 38,116, 14,215,102,102,241, 56,233, 88, 53,207,220, 34,115, 39,204,121, 34,164, 66, + 84,225,102,184, 33,202,100,159,135, 42,180,177, 80,219, 68, 12, 70,121,173, 83, 69, 92,160, 74,195,233,140,150,105,137,241,246, +119, 49,180,230,239, 94,132,158, 54, 30,117,119,251, 13, 71,211,188, 28,206,178, 16,208,140,220,230,177,172, 99,239,101,177,171, + 5, 19, 85,181,138, 54, 33, 56, 71, 86,247, 38,163,215,114, 14,204, 82, 38,222, 46,242, 86, 13, 22, 19,124, 88, 46, 33,104,226, + 8,106, 42, 98,239,127, 26,249,169,173, 33,173,162,213,177, 8,237,233,196, 27,230,114,121,208,125, 93,148,198,152,151, 23,109, +230, 77,199, 10,137,102,237,191,141, 70,199, 98, 99,245, 96,146,108,183,132,215,180,170, 4, 60,222,233, 50,178,110,118,245, 59, +165,104,166, 39,224,131, 51,247, 30,209, 98,102, 69,108,191,223, 38, 90,136, 80,132, 38,133, 60, 90,247,232,112, 52,181,200,211, +224, 34,173, 26,143,123, 40,153, 13, 7,166,210,120,113,230,136,167, 29, 47, 95, 95,241,224,241, 49,207,146,162, 33,209,169, 67, +230,107,152, 7,124,234, 73, 15,190,200,103,103,127,205,203,243, 87,228,105,194,225, 13, 54,227,140,216, 54, 47,136, 88, 81, 40, +170,180,214,104, 56,219,191,174, 55,164,174,167,228,137,113, 26,153,115,166,149,121,153,200, 88, 92, 96, 16,140,122,215,204,175, + 30,227,138,211,163,135, 28,111,119,204,109,224,236,226,140, 24, 58,188, 56,118,219, 29,175, 62, 62,227,250,242,192,245,197,245, +162, 94, 15, 72,202,140,193,225,218, 93,168,142, 21, 91, 18,148,236,173, 11, 78, 62, 33, 93,100,179,219, 48,141, 35,211, 60,211, + 74,102,206,149,195, 56,211, 90, 49, 26, 93,127,204,131,211, 99,134,225,134, 33, 55,130, 52, 46, 46, 95,115,241,255,178,246, 38, + 63,182,166, 91,122,215,111,189,221,247,237, 46,154,211,103,158,108,171, 50,111,111, 76, 25,170, 92, 50,133, 4, 46,171,140, 96, + 98, 23, 66,194,136,110,104,129, 24,152, 9, 67,106,128,248, 11,144, 60,131, 49, 66,162,145, 65, 32, 33, 6, 22, 20, 24,227,194, +229,219,223,186,183, 50,239,189,153,121, 50,243,116,209,237,189,191,230,109, 22,131,245,197,201, 50, 24,123, 80, 39,164, 80, 28, +157, 19, 25, 25, 17,123,239,247, 93,205,243,252,158, 23, 47,120,244,240, 1,187,221,137,161,108,111,174,152,154,167,230, 70, 25, + 76,185,172,193,241,197,213,196,119,190,241, 1, 63,253,163, 79,153, 26,244, 30, 10,158,148, 34,125, 73, 11,198, 85,113, 97, 69, + 10, 17,231,148, 94, 86,175,210, 11, 5, 99,154,223,166,238,105,201,139,245,177, 49, 15, 22,122, 84,180, 34,222,114,159,107,179, +217,153,162,196, 46, 18,154,208,212, 58,103,191, 76, 74,126,243,159,251,109,118,105,197, 39, 31,255,152,195, 52,225,176,202, 59, +122, 99,219,123, 12,164,212, 68,169, 73, 8, 53, 80,231,202,203,105,143,111, 74,215,173,161, 5,168, 32,189,112,189,207, 28,135, + 76,205,166,230, 62, 59, 95,243,181,247, 30,112,117,121,224,242,120,131, 74,162,228,145, 78, 21, 66,133, 16,113,189, 99,215, 39, +124, 85,142, 67,102, 30, 14,228,150,105, 56, 82,179,181, 66, 23,140,194, 40,193,242,184, 63,254,233,199,124,252,211, 47,232,215, + 91,134,195,140,158, 20, 98,240,156,172,132,251,111,222, 39,244,143,184,115,231, 49,119, 54,119,249,248,211, 79,248,209,247,254, + 62, 90, 60,190, 15, 68, 45,118,102,212,138,138,231,238,189, 51,254,169, 95,251, 38,111,124,248,216,250,181,250, 83,240,223,176, +253, 54,107,222,122,231, 62, 79,159,189,100,122, 82,233, 42,236,213, 33,110, 66,147, 71, 22, 95,179, 46,197,186,184,138,203,129, +118,147,129,134, 76, 75,163, 66,192,121,135,182, 66,141, 17,223,214,200,156, 17, 29,241, 84,170, 38,156, 20,178, 52,198, 73,240, + 97, 66, 90,198, 15, 32, 29, 86,160,229, 61, 18, 70,134,169,177,233,148,210, 5, 18,145,161, 30,241, 93,164, 87, 79,174,224,164, +163, 78, 66,145, 9,239, 34,205, 9,116,182,230, 8,206, 70,228, 83, 19, 98,237,168,146,201, 5, 68, 71,104,206, 50,211,179, 81, +253, 11,137, 78, 51,147, 52,142, 90, 89,247,209,180, 28,226,240, 42, 72, 85,156, 23, 66, 23,173, 96,119, 6, 72,162, 51,209,176, +182, 70, 85, 35,206, 9,144,186,215, 99, 59,171,173, 89,134,132,234,107, 13,114,169, 69,145, 90,111, 77,223,175,245,210, 45,173, +161, 90, 95, 89,182, 95,247,155, 54,101,170, 86, 56, 54,201, 76,197,248, 19, 85, 43, 20, 97,189, 76, 56,178, 52, 98,108,148,166, +116,174, 35, 72,134,236,152,214,149,105,127,164,142, 2,101, 36,183,200,161,152, 11,236, 88, 76,255,213, 69, 79,140,153,121,106, + 92,207, 25,102, 32, 70,188,206,104,129, 68,162,134,204,205,116, 3,205, 17, 28,139,245,203,181,165, 11,118,175,172, 0,218,140, +209, 46, 53,224,156, 46, 52, 47,163,146, 89,156,167, 46,193, 20, 75,117, 47, 86,253,154, 8,107,161,179, 81, 22,239,187, 41,222, + 85, 45,132,162,212, 66, 83,219,149,107,168,214,113,227,201,203,206, 89,156, 77, 4,212,129, 18, 22, 5,175,141,232, 91, 48,255, +180, 23,103,152, 68, 4, 81,219,167,219, 11,200,196, 36,174,205,168, 23,186, 16,108, 93,220, 20,241,150,206,214,170, 21, 2,222, + 39,212,123,188, 98,150, 40,175,166,190,151,165,240, 80, 11,164,137,209, 80,182,130,208, 18, 48, 54, 27,121, 57, 65, 91,164, 73, + 70,180,226,189, 9,144, 82,176,238,255,242, 56, 50,102,203, 48, 39,218, 90,129,214, 72,105,197,122,125, 74,112, 66,206, 35,210, + 2,159, 93, 8,195,116,201,201, 58,114,218,219, 97, 21,207, 31,226, 99, 67, 71, 79,211,142,110,245,128, 97,130,223,255,195,239, +114,147,139, 61,121, 68, 45, 6,214, 9,245, 22, 13,170, 95,217,199,186,126,195,106,179, 35, 38, 79,128,175, 46,113,177,239, 81, +124,178, 78,191, 85, 2,150,218,215,196,194, 88,188, 8,201,123, 78,119, 59, 30,255,202,135, 56,217,243,238,248,152,155,253, 0, + 18,184,247,240,148,235,103, 79,184,184, 62, 90,200,139, 40,165, 53, 74,201,200, 77, 37, 38, 79,148,106,169,120, 62,217,243,162, + 41, 69,103,138,122, 92,157,109, 26, 18, 2, 49,120, 98, 56,181, 92,244,155, 35, 57, 27,143,111,179,237,184,119,114,202,149,171, +132,121,230,162, 24, 19,253,120,188,226,242,112,195,246,238, 93,164, 68,198,113,166, 73, 7, 14,174,142, 35,207, 62,255,146,243, +205, 35,186,213,138,124, 16,126,254,243, 47,200,173, 34,190,163,148,137, 99, 25, 25, 90, 33, 34,116,190, 35,172,150,149,140,115, +184, 90,105, 41, 80,201, 80, 26,226,195, 87,142,130, 92, 45,103,187, 97,220,132, 82, 25,230, 25,223, 37,106, 19,114, 29,201,173, +144, 75, 97,154, 43,235, 20,105, 82,241,193,115,247,206, 9,143, 31,253, 42,223,120,235, 67, 62,250,248, 7,104,178,108,112,245, + 17,183,140,127,163,139,204,227, 12,209,211,156, 16, 5, 86, 93,199,179,124,201, 92, 10,155,176, 33,185,142, 16, 59, 90,204, 76, + 89, 41,135,137,211,147, 83,196, 55,118,125,199,230, 52, 66, 15, 63,253,252,153,169,199,203, 68,171, 3,181, 95,211, 57,193,177, +102,116, 7,203, 46,112,133,221,137, 39,247,137, 25, 37, 31, 15,212, 50, 17,124, 68, 48, 48, 82, 72, 61,207,159, 94,241,197,197, + 19, 66,240,184, 2,227, 85,225, 51,191,199,197,200,221, 71, 91,210,106,205,233,246,132, 77,140,124,255,251, 63,228,111,253,143, +255, 59, 63,254,232,167, 68, 39, 68, 31,217,122,112, 41,210,170, 57, 27, 30,220,127,155,156, 61,255,244, 84,121,248,238,155, 68, +169,176,254, 25,196,111, 2,107,206,223,250,117,222,187, 86,158, 62,253, 17,163, 10, 41,192,236, 59,242, 88,137,201, 58, 91,191, +218,154,110, 70,102, 90, 16,220, 12, 93,232,208,216, 27, 70, 87, 50,185, 4, 98, 88, 65,104, 8, 19,185, 88,145,102, 96,106, 59, +215, 36,108, 9,109, 96, 47,166,142,207, 52,188, 43,196,193,188,227, 67,169,132,218,200,206, 81,210,128,171, 61, 73, 86,176,242, + 54, 94, 31, 26, 49, 40,210, 9,169,174,141, 81, 81, 20,237,108, 2, 88,115,166, 75, 61,107, 81,230, 38,236,135, 69, 39,210, 59, +228, 0,178, 74,244,179,217, 59, 71, 61, 18,125,196, 73, 68, 85, 57,222, 12,156,244,145,208,121,156, 4,107, 64,154,129,183,106, + 3, 45,217, 44,199, 62, 34, 33, 32,222,104,153,234,141,241,145,250,248,154, 46,117,181,130, 85,219,107,195,206,222, 22, 11, 54, +177, 93, 86,175,175,145,246, 86,115, 53, 96, 24,202,235,190,210, 21,200,217,146,216,124, 47,228,217, 65,203,120,113, 76, 71,163, + 20,116, 17, 14,131, 64, 21,180, 11,184,195,192, 84,170, 5,123,141, 7, 40, 9,169, 51,226, 34,142, 68,190,201,184, 60, 35, 46, + 83,252,154, 80,130,221,105,101, 36, 36,208, 26, 33,101,234, 84, 12,121, 94, 27,199,169,224,156, 77, 47,171, 54, 2,173,208,156, +162, 34, 72,243,139,104,169, 45, 8, 81,243,162,183,101,140,174,218, 12, 80,179, 8,230,230,106,222, 72,183,176,208, 75,169, 54, + 50,174,230, 13, 55, 90, 98, 69,125,164, 41, 72,153,208, 16,151,241,174, 16,157,249,222,125,245,102,185,114, 13,105, 66,240, 54, + 41,184,221, 33, 33,166,122,215, 91, 49,117, 21,163,218, 46, 15,147, 46,214, 57,243, 67,155,200, 75,243,180,236,131, 3, 62, 52, + 90, 85, 74, 19,250, 40, 75,174,139,237,205, 67,178, 20,167, 82,133,228, 29, 42, 13, 47,142,121, 17,226,165,232,105,139,207, 88, +213, 17, 98, 96, 33,215, 19,196,190,166,184, 66,242, 66,174,102,177,179, 17,182, 67, 93, 34,246, 43,188,119,230,165,207, 35,177, +239,208,180, 33,118, 9,231, 96, 27, 19,251, 57, 51,150,137,185,206,188,156, 35,219, 4,125,167,172,238, 61,224,173,183,222,161, + 12,151,124,116, 13,215, 67,227, 27,119, 30,241,209,207,190,199,143,127,241,130, 86, 23,200,187,130, 90,223,177,164, 77, 97, 72, + 82,239,217,237, 78,217,109,182, 4,148,105,154, 81,148, 92, 27, 57,207,104,107, 52,138, 65,122, 52,162, 24,136,165,214,130, 54, + 33,164,158, 77,234, 17,215,152,162,231,252,108,199,112,115,228,238,195,251,156,111, 6,252,106,199,251,239, 60,228,127,250,227, + 31,113, 51,206,196,148,172,240,242, 6,146,209,230,168,121,121, 92,231,134,247,149, 73, 64,196,246,148, 49, 24,104,166,150,145, +222, 37, 98, 8,148, 50, 51, 30, 51, 14, 71, 76,102, 47,220,158,157, 18,250, 72,210, 21, 94,132, 67,172,140,135, 17, 17,232,250, + 68, 31, 3,178, 59,193,191,120, 78, 83, 71,116, 29,125,223,211,202, 68, 30, 95,178, 58,127,147, 63,252,225, 31,115,121,177,183, +149,143,100,164, 12,116, 62, 66, 44,208,204,246,117, 43, 12,149, 90, 13,181, 91,150,188,232,141, 67,180,210,198,153,161,100,188, + 23,106, 83,114,205, 72,131,113,158,105, 45, 19,170, 39,163,148, 57,243,232,222, 41, 95,255,240, 33, 79, 95, 30,248,201, 79,158, +224,137, 56, 81,222,120,120,151, 63,247, 27,255, 60, 55,215,123,158,189,248, 28,164,177,234,253,130,155,140,140,109, 98, 22,103, +160, 23, 53, 78, 67, 81, 43,140, 53, 11,174, 84, 92,239,201,177,199,123, 79,231, 20, 13, 86,116,196,196,146,154, 88, 89,199, 13, +207,159, 94,242,228,233,133,177, 23,104,164, 16, 13,132, 35, 25, 47,153,132, 16, 34, 28,103, 27,235,167, 96,235,132,176,238,105, + 53,226, 23,218, 95,171,166, 14,255,248,243, 47, 16,157, 9,169, 39, 59, 8,173,241,249,139, 35,215, 55, 19, 62, 57,126,227,215, +239, 48, 78,133,191,251,251,127,135,255,249,247,127,200,213,213,158, 77,232,169,210,112,190,103,246,141, 40,129, 24,148,190, 63, +225,108,183, 38,208,248,249,151, 79,248,226,226,200, 38, 69, 30,189,113,135,243,247,214, 32,239, 3,103,156,159,221,161, 75, 27, +114,184, 38, 22, 69,166,197,190,170,160, 67,163, 76, 35,132,158,234, 3,206, 87, 60, 30,113,142,148,140, 43, 81, 7, 71,110, 25, +113, 1, 29, 11,234,183,180,118,160, 87, 27,179,207,177, 33, 98, 44,253, 85,191,226, 58,207,184, 90,145, 56, 82,203, 17,117,153, + 66,196, 21,193,165,104, 75,165,131,210,214,141,232,123,234, 44, 48, 85,252,102,131, 84,136, 35,196,147, 70, 11,194,248, 98,192, +133, 74, 58, 49,106, 95, 44, 21,233, 44,144,182,175, 91,230,232,217,184,194,126,156,104,215,151,100,233,200,222, 40,143,115,168, +172, 85,233,157,167,249, 14, 13, 54, 73,117, 90,205,189, 98, 74, 61, 84,205,198,102,114, 25,181,145,189,115,136,143,228,162,116, +190,161,179,173, 8,255,180, 23, 88, 41,150,131, 96,112,169,215,123, 65, 54,173, 4,177,245,225,235,164,201,149,218, 40,173,144, + 68,145,240,122,195, 92, 50, 80,134, 9,173, 51, 50,102, 35,140, 6,115,139,197,149,225,124, 39, 28,205, 77,204,185,145, 68,200, +161,103,158, 10, 77,108,205,168, 28, 89,169,103,156, 5,105, 70, 4,108,206,163,178,166,186, 74,209, 75,146, 11,204, 46,208,198, + 76,234,172,243,143,125,207, 84, 13, 69, 29,187, 64,137,107, 74,155, 72,162,132, 38,214,141,181, 42,203, 30,219,186, 81,116, 9, + 68, 80,181,202,207,121, 88,114,206,181, 45,250, 38,177,142,119,217,138, 47, 35,102,243, 7, 55,113,120,127,139,100,181,127,211, +224,209,102, 12,222, 40,130, 52, 71, 67, 25,107,193, 75, 90, 80,126,141, 86,170,197, 30, 6,179,171, 53,109,102,135, 18,165, 73, + 67,212, 47,162, 58,251,255,214,214,192,155,138, 28,215,200,197, 50,165, 10,198, 80,183, 95,150, 1, 0,180,121, 36, 58,131, 58, + 52, 99,185,187, 16,104, 82,200,173,210,102, 37,121, 11, 66,104, 40,170,149,160, 11,112, 34,221, 70, 93, 26,119,186,184,138, 95, + 8,118,178,168,250,167, 98,138,216, 32,138, 74,101,119,118,135,243,211,103,124,242,249, 75, 52, 68,114,174,164,100, 30, 69, 47, +129, 22, 61,121, 12,164, 94,144,150,217, 31, 38,254,232,179,145,146,214,252, 11, 31,188, 67,215, 69,180,110, 25,198, 27,134,208, + 83, 53,243,131, 31,126,151,163,222, 34, 21, 3,173, 21,180,150, 87, 49,160,218, 42,162, 16, 92, 71,138, 17,234,204, 97, 28, 56, + 78, 51, 49, 69,188, 11, 32,144,243,108,211, 25,205,248,208,225, 67,176, 4,183, 42,204,173,144, 82,100,183,237, 40,115,230,108, +189, 51, 71, 65, 54,174,251,148,161,223,192,147,207, 62,230,226,122,192,247, 30, 74,163,239, 59,106, 83, 74, 25,205, 95,235,212, + 4,112,226, 13, 48, 81, 10, 65, 27,222, 11, 71,102, 66,140,116, 11,111,219, 45, 2,174, 57, 47,151,152,107,184, 6,235,212,113, + 60, 30, 57,223,158, 48,132,192, 29,224,201,176,167, 9,120,117,212, 82,152,199,145, 92, 12,195, 21, 55, 59,206,206,238, 50,207, +215,204, 2,209,247, 76,115,198,165, 72, 84,200,109,102,170, 3,181, 53, 78, 54, 59, 74,155,153,180, 49, 78, 25, 21, 71, 31, 45, + 84,162,148,138,139,102, 39,201,211, 72, 41,141,232,189,141,218, 91,195,169,231, 56, 77,160,158, 85,138, 54,161,168,141,166,142, +247,222,190,203,191,246, 87,127,155,243,179,251,252,205,255,226,191,229,111,255,175,127,192,182, 63, 97,123,254, 62,219,147,187, +252,226,151, 63, 48,171,167, 52, 66, 72, 12,147,185, 76, 92,179,188,231, 32,145,220,160, 11,137, 50, 87,142,251, 3,101, 62, 16, +189, 35,164, 53,205, 7,154,107,168, 4, 58,160, 70,108,207, 31, 10,243, 84,185,188, 24,249,236,201, 21,199,189,199,251,153, 90, + 71,162, 11,104,157,152, 75,165,143, 13,231, 28, 57, 43,142,138,147, 68,117, 51, 14, 33,245, 61, 53, 55,106, 86,166, 50, 17, 67, +143,230,153, 86, 51, 62,173,160,154,134,165,184,200,221,179,200,221,147, 29, 79,159, 29,248,195,191,247,199,188,188,170,252, 31, +255,247,207,169,181,208, 4,149,164, 3, 0, 0, 32, 0, 73, 68, 65, 84,173, 60,100,107, 18,212, 9,117, 81,109, 23,233, 56,223, +108,184,251,248, 28,233, 96,222,103,202,250, 37,135,185, 49,125, 10,135,227,129,183,190, 6,196,135,244,171, 14,113,144,102,101, + 14,158,131, 22,227, 70,204, 14,239, 70,186,206, 68,141, 1,207, 60, 13,102, 39, 12, 43, 66,116,212,121,102,164,225, 87, 66,148, + 66,110, 13, 13, 19, 49, 36,142,243, 17,113,129, 92,109,157,163,147,163, 76, 21, 23,160,198, 2, 45, 49,231, 74, 74,142,168,141, +224, 2, 45, 87,178,119,168, 19,198, 5, 17, 27, 84,152, 90, 68, 75, 38,246, 29,227,108, 4, 62,209, 3,222, 53,164, 4,202,228, +104,203,180,177, 30, 97,189,243,104,152, 8, 49, 50, 22,135,246, 9,175, 71,106,232,104,181,226,107, 37,109,183, 56,157,153,166, +204,122, 19, 33, 64, 46,203,152,221, 41,218, 44, 82, 25,103,186, 33,151, 2,161, 57, 26, 29,170, 86,220,251,232, 41, 14, 62,125, +242,130,211, 93,198, 69,139,114,246,209, 35,222, 47,142, 31, 19, 70,203,226, 10,250,127, 91,213,100,177,129,181,170,148,105, 66, +171,113, 20,244,118, 92,254, 58, 46,223, 90,121,229,203,121,141,227,119, 43,148,205,185,147,162,188,118,166,188, 46, 23,123,117, + 51, 5,135,115,137, 60, 29, 64, 76,175,210, 43, 28,138, 50,187, 66, 23, 2,199, 67, 38,119, 10,157, 82,110, 26,126,101, 64, 52, +157, 21,207, 76,141, 51,174,245,144,148, 54, 79,164, 10, 53,110,168,154,153,219, 76, 44,129, 16, 27,140,141, 34, 71,124,132,182, +238, 73, 94, 9, 67, 97,214, 21,193, 23,219,169, 27,138, 85,113,203, 78, 86,219,146,109,190,136,222,188, 0,213,112,175,150,108, +101, 57,230,150,112, 85,109,204, 81, 28,209, 25,202, 48, 55, 83, 96, 59,177,184, 72,244, 54, 34, 85,190,138,205,177,137,132,237, +147, 80, 2,213,252,151,206,163, 98, 23,184, 56,251,164,132,163,170,163, 46,150, 19,195,183,218, 1, 26, 92,128, 86,236,243,189, +160,206,209,121, 40, 78,241,248, 5, 64, 99, 88,214, 69, 90,103,193, 31,213, 89,244, 98,109, 11,233,203, 83, 91,193,123,165, 69, +219,247,107, 83,116,170,212, 32, 36,177, 2,161, 57, 83, 71,163,182,215,171,169,146,196,145, 43, 12,121, 98,221,117,180, 2, 57, + 41, 65,109,191,249,206,189,115,158, 62,189, 96,174,149, 1,133,105,192,187, 53,135,121, 79,110,145, 82, 26, 93,127,202,201,118, + 5,231, 70, 86,186,113,247,120,126,241,156, 52,125, 78,215,189,197,251,191,250,171,156, 61,120,196,139,207,190,207,143,127,249, + 2,230,140, 74, 91, 2, 66, 42,170,213,236,111, 33, 80,139,177,221, 17,101, 30,246,100,103,185,240,125,191, 70,181,144,243,188, +216,172, 4,173, 38, 96, 44,101,162,182,140, 11, 61,136,176, 94,111, 73,206,113, 56, 30,145, 38,136,244,188,124,249,146,213,166, + 39,224, 57, 72,134, 86,249,244,201, 39, 28,167, 17,178, 82,107,229,206,157, 7,220, 63,187,207,143,126,242,125, 14,211, 96,138, +113,109,244,105, 69,234, 34,181,217,222,183,168, 81,189, 74, 41,204,192,189, 55, 31,114,186,221,114,241,244, 37,170,149,105,174, + 52,173,244,253, 6, 23, 26,135,171, 35,247,206,214, 60,191,184, 54,120,136,154, 29,168, 52,225, 56,140, 12,195,193,214, 36,222, + 33,154,233,188, 16,253,150,195,213,196,225,236, 64,223,117,164, 4,215, 87, 7,166,225,192, 80, 50,121,174,140,211, 68, 23, 59, +210, 54,176, 78,189,101,201, 99,142,138, 16,160,214,137, 49,155,136, 12,143, 37,154,209, 44,180,165, 26,200, 40, 4,199, 92, 11, +173, 22,206,118,107, 78, 55, 27,158,190,188,225,231, 79, 62,227,195,119,127,149,191,246,187,191,195,143,127,244, 83, 30,189,251, + 29,126,253,215,255, 60, 47, 95, 60,161, 77, 3, 43,239,200,217,225, 37,224,219, 0,107,135, 47, 43,242,176,103,212,130, 72,164, +100,101, 28, 50,173, 78, 84, 38, 98, 92,225,215, 61,125, 19,114,139,184,128,141,213,179, 82,188, 66,246,220, 28, 38,158, 94, 28, +208, 92, 17,191,130, 54, 33, 75, 88, 81,159, 2,201,109, 25,134, 3, 62, 56,180,130,119, 66, 22,165,181, 64, 80,165,204, 5,205, + 86,128,181,214, 32, 5,100, 73, 69,107, 45,160,174,225, 35,132,206,209,175,123,238,221,219,177, 31, 60,255,219,223,125,194,245, +152,105,190, 18,181,217,104,178, 85, 19,197, 57,219, 45,139, 38,118,235, 19, 54,155, 19,246, 71,207, 39,159, 85, 30, 63, 12,244, +235,132, 56,184, 25,158,113,124,113,198,205, 63,248, 62,231,103, 63, 96,179, 62, 99,214,204,190, 85,162,122, 66, 2, 38, 69, 74, +198,173, 10,121, 20, 82,179, 51,136,148,112, 25,122,239,144,201, 32, 86, 65, 28,101, 26,153, 66,193,251,136,211,137, 89, 3, 1, + 79, 8, 75, 51,115,172,180, 88,200,161,179,137,213,104,163,252,237,218,145, 7,135,172, 18,196, 68, 57, 30, 88,165,206,200,114, + 57,224,134, 66,149,229, 66,174,149, 81,214, 80, 11,206, 41,211,161,226,214,107,194, 44,232,228,113,157,224,221, 64,157, 3,121, + 62, 34,154,113,165, 49, 28, 10,155,174, 71,195, 25,197,195, 38, 52, 74,139,184,208,200, 26,112,213, 24, 15,101,110,116,183, 43, + 60, 49,221, 72,197, 17,146,197,250,214, 25,146,115, 84, 45,196, 96,103,183, 56, 71,140, 29,178,187,195,156, 18, 65, 76,220,235, +218,210,229, 99,204,140,219,192,161, 91, 66, 29,183,123,249,106,241,217, 77,155,217,145,235,114,230,208,184,184, 26,216,100, 93, + 80,224,134,192,118,126,209, 92,233, 82, 28, 44, 5,130,252,137, 52,202,127,212, 72, 63,143, 19,181, 84,154, 91,196,216,175,233, +238,173,149,101,173,216, 22,178,232,107,246,168, 55,236, 28,157,138,185,189, 90, 99, 30, 50,210, 50,174, 5,166,170,120,205,116, + 46, 48, 81,137, 65, 9,185, 49, 42,184, 0, 50, 28, 8,163,208,238,238, 24,175,110,104, 99,196, 79,153, 76,129,184,166,247,149, +169, 22,218,190,210,173,132,236, 3,165, 90, 28, 49, 20,164, 69,156,116,140,227, 13,174,122,210,230, 30, 91,255,194, 26,214, 34, +109, 9, 5,104, 11,117, 76,150, 49,136, 24,203,176,122,102,169, 11, 73,203,163,106,194, 56,117,186,112,224, 45,185, 76, 17,242, +108,229,157,248, 70,201,109,201,240,118,230,223,107,150,103, 94,213, 80,173, 42, 66,244, 98, 23,179,218, 97,105, 64,216, 37, 58, +178, 84,252,130,147, 47, 57, 35,152,205,201,184,229,203,222,168, 85, 66,180,255,162,106, 33,104, 48,216,138, 90,106, 90, 12,102, + 9, 17, 89,180, 0,106,106,112,171, 84, 26,130, 5,180,212,102,144, 25,175,144, 9, 84, 49,133,122, 39,193, 72,121, 46,216,174, + 90, 10, 65, 28,117, 89, 71,184, 86,152,113, 70,186, 10, 97,121,145,100,168, 66,109,194,196,145,213,217, 9, 39,187,158, 47,158, + 31, 64, 34, 72, 36,248,132,151,132, 40,196, 20, 24,166, 27,156,203,188,245,240, 29,130, 4,222,250,206,175,241,173,239,188,203, +225,226, 41,251,253,158,195,151,159,241,242,179,159,240, 7, 63,252, 30,215,163, 61, 22, 85,213,158, 76,170, 52,181,199,207,161, +180, 98,226, 45, 87, 27, 85,148,206, 37,186,205,150,224, 3,211,120, 68,219,204,118, 19, 40,173, 49,141, 19,121,217,177,123,196, +198, 66, 33,176,238,172,251, 24,231,145,216,111,217,244, 9, 92,197,183, 30,164, 18,150,168,200,203,171, 43, 74, 89, 28, 7,192, +205,245,129,175,127,237,107,188, 59,188,195,143,126,242,179, 69,131, 33, 16, 28,223,252,206, 55, 56,233,123, 46, 94, 94,178,191, + 57,112,117,125,201,211,231,207,193, 11, 15,239, 62,224,237,199,247,225,107, 31, 48,238, 7,110,110,174,249,228,211, 79,184,217, + 23,230,253, 64,244,112,121, 56, 48,141, 32,154, 57, 78, 3,226, 29,125,236,113, 26,168, 10,125,138,172,187, 68, 12,189, 89,149, +182,137,241,248,146,139,207, 44,112,103,127,179,231,249,139,231, 76, 83, 6, 28, 62, 69,230,185, 80,231,204,126,244,108, 55, 43, + 58,231,153,106, 35, 43, 4,181,140,100,164,190,138, 93, 5,139, 21,110, 13,124,115, 20, 10,165, 10, 83,158,240,226, 88,119,145, + 63,243,237, 7,252,253,239, 61,225, 15,254,175, 31,241, 43,239,188,207, 55, 63,248, 58,127,249, 47,253,139, 12,245,132,224,122, +198,203, 11, 82,105,184,228,152, 60,204,243, 96,222,226, 16, 9,206,115,147,133, 58, 43, 74,177, 44,109, 15, 58,217,244, 41,174, +206, 41, 37, 25, 42,203, 85,243,101,123,199, 56,100,134, 50, 46,211,175,184,112, 34, 20, 31, 19, 65, 3,195, 92,169, 94, 9, 49, +113,255,206, 67,166, 86,121,250,249,167,203, 62,218,163, 57, 19,188,183, 44,185,166,116,222,166, 74,125,191, 33,134,158,185, 94, + 81,105,104, 57,226,124, 96,149, 78, 56,221, 69, 68,225,187, 31,189,228,250,112,228, 48,212, 87,212,198, 90,231, 37,226, 23,154, + 55, 70,130,180,196,157,179, 7, 60,186,247, 6,155,179,192,163,147,158,210,132, 95, 62, 63,242,120,149, 56, 59,223, 49,236, 95, +160,195,129,233,234,192, 23,159, 21,210,234, 37,135, 60,131, 95, 49, 14, 51,218,135,101, 45, 55,162,197, 47,137,104,202,160, 19, +204,222,248, 18, 65, 24, 25,104, 37,208,187, 13,158,138,143, 27,170, 38,142,135,193, 4,116,222,184, 26,136,167,239,122,230, 84, + 40,213, 47,136,224,158, 68, 67,104,136,132, 5,113, 61,147, 82, 79,105, 19,110, 74,230, 83,151, 68, 99, 32,137, 99, 44, 30,173, +141,224,237, 82,236,220,218,176,217,109, 68, 81,106,105,168,115,132,174,195,213,129, 57, 57,186, 10, 61, 61,185, 78,116,155,142, +168, 19,115,234,240, 45, 80, 14, 13, 31,204, 90,220,170, 7,173, 84,239,160, 22,163,138,137,237,253,107, 85,156,170, 21, 99,139, +238,105,182, 58,140,152,149,187, 15,118,188,245,230,217,255,111,167,121,251, 81,249,135,239,220,162, 44,107, 87,187,120,199,253, + 72,189,153, 77,151, 36, 66, 11,145,129,100, 5, 66, 53, 64,166, 43,183,144,171, 91, 84,237,130, 28, 95,244, 59,218,204, 98,251, + 42,237,173, 53,230,121,164,212,140,168,146,171,240,236,233, 21, 93,215,153,243, 69, 12,101,125,107,165,230,150, 63,249, 39,238, +102,113,242,170, 89, 84, 93,236,126, 98, 25, 38,195,113, 38,207, 71, 67, 80, 87,133,121,132,228,151,239,235, 79, 15,207,153, 43, +148,105,166, 84,165,169,217, 72,195, 86,104, 71,111,171,236, 60,225, 69,200, 10,117,182,213, 92,108,153,144,149, 57, 22, 82,113, + 20, 85,142,229,248,138, 73,144,189,218, 84,172,193, 44, 13,154, 48,107, 35, 20, 71,159, 42,163, 40, 20,101,118,183,193, 93, 74, +112,150,236,153,135, 3,103, 49,227, 31, 60,122,248,123,222,133,197,198,102,135,151,138, 95,130, 3,150, 42,240,182,189, 94,148, +143,183,151, 47,226,190, 34,209, 97,187,233,133,202,106, 66, 58,181, 11, 95,151, 75, 94, 23,219,148,168,169,202, 87,169,179,224, + 11, 53,242, 91,109, 74,116, 14,213,106, 23,214, 98, 73,105,234, 22, 21,178,195,123, 12,107, 42,193,198, 70,218, 44,130,209, 41, + 78,130, 65, 75,104, 36,139,102, 55, 85,120,144,101,236, 47,184,102,169, 89, 96,187, 99,239,156, 41,100, 29, 8, 6,198,175, 82, +137,222, 68,100, 78,176,253, 48, 54, 70, 12,201,219,180,194,155, 71,190, 45,191,120, 28,120,156, 9,226, 22,177,153, 81,245, 60, + 49, 38,106, 25,121,126,113,133, 72,100,189,222,208, 5, 71, 43,153,174, 91,113,239,193, 3,250,205, 9,170,149,235,171, 75,234, + 48,113,247,108,203,131,251, 15,185,255,246,187,188,241,238, 7,228, 44,124,242,233, 47,249,201, 39, 31,243,252,217,149, 85,190, +209,219, 67,180,128,128, 74,177,195,239,235,223,254, 22,247, 31, 62, 34,117, 29,211, 56, 24,199, 91, 27,227, 52,146, 23, 26, 84, +244,176, 90,245,156,238, 54,244,169, 71, 85, 88,237,118,156,156,159,176, 89,239,216,118, 61, 77,149,185, 40,119,223,120,135,135, +247,206, 77,172,184,106, 12,211,145,208,237,208,241,146, 95,252,242, 51,166,209,162, 38,213, 65,169,149,251,247, 31,242,198,155, +111,114,189,127,193, 48,205,164,184,162,204, 51, 33,194,227, 55, 30,242,248,237, 55, 57,223,109,249,242,139, 39,220, 28, 6,112, +142,151, 23, 23, 60,249,236, 9,187,147, 19,222,120,248,208,162, 34,155, 26,243, 29, 97,174,133,227, 48,129, 56,110, 14,123,174, +174, 15,172,214,107,222,120,243, 62,119,183, 59, 82,180, 24, 92,159, 12,189,219,196,115,125,115,195,229,205, 5,157, 19,174,111, + 6, 78,238, 60,224,229,203, 23,148,102, 23,161, 29,148, 66,173,102,255,203,165, 80,166, 98, 33, 68, 18,113, 98, 1, 45,173,129, + 20,133, 38, 12,243, 76,201,213,220, 21,185, 46,217,210, 86,124, 58,113, 28,198,137,171,235,145,155,235,137,144,148,247, 62,120, +204,183,190,253, 53,226,234,156,139,203,198,112,113,193,148,143,236,247,123, 92, 16,178,216,228, 39,186, 0, 45, 82,242,196,156, + 51,165, 88,219,100, 41, 83, 19,101,158, 72, 33, 17,250, 13,222, 11,222, 55,164, 21,234, 88, 40,181, 49,204,149, 86, 44,244, 36, +136, 17,186, 42,153,237,106, 69,140,129, 92, 7,218, 56,210,180,177,233, 58,222,125,252, 54,155,211,251,236,135, 61,165, 14, 4, +231, 8, 18,150,253,230, 66,123,212, 74, 90,237, 16,239, 32, 79,148, 90,205, 97,239, 3,190, 58,166,185,240,226,122,230,234,242, +200,116, 28, 9, 73,105,165,216,254,181,217, 36, 32, 72, 71, 21, 19, 97,238, 54, 39, 60,126,244, 62,247,222,190,199,174,131,221, +249,142,187,247,119,196,216,179, 61,181,204,129,146, 11,115, 61, 82,134,145,235, 43,161,210,232, 92,227,221,119, 31, 50,236, 51, +151,215, 7,180, 89, 32, 84, 30, 6,139, 68, 13, 88, 66, 90,131, 78, 4,233,108,218,103,145, 79, 35,213, 53,242, 40, 16,101,153, + 52, 57,230, 6,173, 6,154, 88,211,161,179,185, 85, 66,168,212,217,138,225,220, 34, 41, 89,204,110,157, 10,165, 85, 60,149,144, + 28,121,202,136, 55, 1, 75,238, 34,174, 90,100, 98,110,133,218,175,104, 56,116,188, 49, 93,207, 18, 88, 37,193, 88, 30,165,245, +244,201,145,107,123, 5,190,114, 41, 26,251,125,242, 16, 77, 91,164, 96, 33, 81, 75, 98,162, 79,150,119, 33, 44, 46, 26,167,198, +204,144,136, 72,193, 7,155,136,136, 95, 48,204, 18,120,240,240, 14,235,205, 63, 26, 18, 35,127,226,221, 45,231,246,237,123, 16, + 22,129,163, 88,136, 85, 23,201, 83,163,149,194,170, 75, 60,124,120,151,237, 58,177,234, 35,171, 85,100,213, 7,186,206,147, 58, +139,244, 77,157, 39, 38, 79, 74,129,152, 2, 33,121, 66, 23,240, 41,154, 35,164,143,184, 62,209,188,241,249,117, 17, 25,167,205, + 22, 77, 9,245,129,134,163,122, 79, 21, 71,105,194, 92,117, 17,167,218,159,167,220,152,138, 50,230,202, 48, 21,142, 99,230, 56, + 20, 14,199,204,229,229,129,195,225,102, 9,137,177,216,220,225, 48, 49, 28, 38,198, 97,102, 60,142,204, 99, 38, 79,153, 60,216, +223,149,113, 34, 79, 19,101,154,152,198,153, 60,204,148,188, 64,188,166,153,121, 63, 89,128,202, 52, 50, 30, 7,190,120,250,146, +227,225, 37,195,184, 71, 71,115, 33,169, 52,230, 99, 5, 95, 76, 48, 78, 32,123,135,132,138,159, 7,142,181, 18,187,142, 24, 3, + 55,147,208,234,132,159,149,222,245, 20,153, 8, 90,168, 33,224, 93, 68,115, 37,165, 70, 17, 75,127,108, 82,104, 89,240, 45, 17, +214,188,178,161, 91,127, 42,212, 92,120,127,151,240,247,238,220,249,189,175,124,204, 86,233,249, 37, 64, 64,151,165,138, 91, 46, +114, 67,163,187,165,250, 90,112, 38,134,144,166,213,102, 35, 95, 28, 34, 16, 23,155, 69, 91, 58,111,135,113, 98,197,155, 71, 92, +150,125,141,143,158,162, 38,124,233,130, 91,252,204,242,138,191, 87,155,121,149,253,146,115,126,235,163,111,230, 91,179, 31, 8, + 11,185,112,222,189, 10,163, 65, 27,205,217,206,188,137, 91, 20,161,246,189, 53,111,150,175,144, 28,174, 45, 69,155, 26, 98,209, +214, 4,142,232,108, 52, 85, 53, 24, 49, 46, 57,186,219,157,129, 87, 60, 1,137, 66,155,117, 17,166, 4,188, 26, 4, 55,168,199, + 5, 79, 86,240, 5,250, 24, 89,245, 61,215,135,107,166,169,145,130,178,233, 87,228, 54,146,235,136,107, 22,247,233,125,135, 91, +245, 4,223, 49,207,215,252,228, 7,223,229,217,139, 47,233,200,196,205, 57,119, 30,172,248,232,251,127,192, 39, 95, 92,153,149, +199, 69,250,110,133,119,150,231, 29,119,119,248,215,255,205,191,198,223,248,247,126,151,127,229, 47,254, 38,191,243, 23,255, 89, + 90, 59,242,135,223,255,163,165, 42,206,228,178,176,197,113, 84,189,253,157, 56, 98,234,185,123,231,140,147,205,150,180,218,114, +126,118,194,246,100,199,189,179,123,156,159,158, 88, 50,143,183,181,138, 79, 91,222, 56, 63,227,217,179, 79,121,118,121,109, 47, + 74,177,131,135,106, 2,144, 7,143, 31,114,178, 91,115,253,226,146, 90,237,121,115,184, 60,114,117, 24,120,252,246,125,142, 55, +151,252,224,199,127, 76,189,101,253,151,202, 48, 12,148,150,185,251,232, 17,117,168,140,135, 27,182,155,142,208, 71, 98, 88,209, +199,142,195,225,136,143,158,225, 56,114,239,238,125,190,246,254,175,112,247,222,150,198, 76,153,103,114,109,120, 15,199,155, 61, + 47,159, 63,103,200, 51,207,111,110, 24,143, 71, 78, 78,214, 92,223, 92, 47, 74, 91,165,212,106,153, 7, 77,161,154, 37,173,121, +111, 48, 15,105, 70,137,107,182,218,192, 59,180, 86,230,146,151, 40,219, 74, 94,138, 94, 89, 10, 92,113, 30, 26, 28,110,102,124, + 16,250, 46,240,248,225, 29, 78, 54,247,120,242, 44,114,125,117,164,140, 95, 50, 92, 31,237,113,168, 21,239, 61,211, 52,113, 51, +141, 20,173,228,169, 48, 59,103, 36, 69,133, 92, 42,195,176, 39, 32,164,213, 22, 33,225,157,210,106,166,228, 76,169,150,220,229, +131, 46, 45,151, 91,132,156,134,151,245,253,154, 16,133, 90,143,204,211,136, 84,216, 31, 15, 56, 31,184,119,255, 62,226, 26,195, +112,164,210,200,181,225, 22,226, 92, 45,133, 24,123,240,137,220, 38,188,152,230, 33, 4, 79,115, 48,207,149,253, 48, 51, 77, 5, +218, 68,171, 6,132,114, 10,165,141, 54,118, 15,130,106, 33, 74,192,209,241,230,131, 71,124,227, 87,223, 97,155, 44,245,113, 60, + 58,250,184,229,222,195, 83,186, 46,217,101, 29,149,208, 60,174,235,249,242,249, 37,135,203,145,206, 7,214,169,160,209,115,184, + 82, 90, 44, 20,173, 76,163, 21,245, 78, 29,109,114,116, 33,176, 94,226,162, 55,201,155,176, 75, 4,207, 26, 23,102, 86,193, 81, +103,165, 69, 72,161, 26, 18,155,138,235,148,218, 26, 65,133,168, 86, 64, 74,115,116,189,117,191,130, 71, 52, 64,170, 72,140,168, + 88,226,164, 11,144, 86,167,116, 40, 78, 51,205, 67, 46, 5, 45,141, 46,206,118,234,169, 16,250, 21, 37, 5, 2,141, 30,103, 10, +229, 26, 72,125,194,225,241,197, 81, 66,199, 92,192, 55, 19, 98, 38, 47, 36,139,207, 68, 59, 72,192, 56,101, 43, 18,156,199, 97, +185, 12,194, 87,129, 47,174,217,231,199, 85, 79,200,129,212, 7,238,222,187, 99,137,142,127,106,134,186, 48, 13, 35, 85, 43, 39, +155,142,126,189,250,255, 20, 6,242, 79, 40, 20,156, 13,236,240,206, 62, 38,103,231,255, 60, 84,106,201,156,158,108, 56, 63,223, +177, 74,193,136,117,157,167,143,206,222,147,197, 23,119,157, 21, 15, 93, 23,232,251, 72,223, 7,186, 62,146,250, 68,215,119,116, +235,142,180,238,241,235, 53, 85, 77,248, 75,169,196, 46,176,190,123, 23, 86, 27, 92,236,112, 41, 65,234, 80, 31,169, 62, 80,212, + 81,156, 39,227,153,170,103, 44,194,220, 28, 67, 17,134, 25, 14,147,114, 51, 76, 92,141,149, 23,251,137, 47,159,239,185,188,184, +102,154,247,104,158,192,121,107, 86,167,138,243, 80, 68,209,172,140,243,136,159, 51,154, 76, 56,222, 52,163,218, 33,185, 89,241, +138,163,182,153, 90, 50,146, 43, 89, 42, 94, 86, 6,223, 90,157, 48, 14, 35,117,178, 72,239,226,147, 77,151,187,106, 25, 35, 26, + 77,243, 86,102,188, 20, 82,220,176, 97,143,127,227,222,195,223,179,137,187,162, 8,226,189,237,153,197, 50,201,157, 91, 16,163, +106,195,234,224,151,174,188,216,206,182,138, 26,182,113, 25,151, 88, 70,136,179,108,245, 96,104,187, 0,148, 96,157,135, 44,244, +119,231,109,132, 45,128,107,186, 16, 74,101, 73,100, 83,164, 54,243, 75, 47, 99, 97,179,176, 45, 57,233,183,164, 87, 7,209,252, +117,214,121, 53,235, 94,108,231,105, 83, 4,191,116,213, 96,223, 71,173, 95,237, 86,196, 89, 84,167, 44,118, 7, 39,134,135,165, + 46,150,141,104, 83,136,218,172,144,136,113,169,160, 22,207,169,248, 37, 21,110, 25,205,222, 82,248, 84, 77,184,231,112,172, 16, + 52, 9,161,239, 57, 59,217,114,115, 99,213,227,148,139,173, 33, 26, 76,211,200,241,120,205,113,216, 83,230,204,189,187, 15,121, +248,214, 7,156,116, 61, 63,253,225,247,248,201, 71, 63, 7, 63,242,131, 63,248,125,254,222, 63,248,152, 42,222,172,108,181,154, + 37,135,198,155,239,125,131,191,254,215,255, 29,254,202,111,127,139,144,143,180, 92, 72,171,200,183, 63,248, 26, 95,252,252, 83, + 62,254,252, 57,125,215,225,150,112, 17, 89,170,191,172,134, 33, 61, 57,221,209,167, 68,242,145,213, 58,178, 57, 93,115,122,114, +138, 95, 39, 84, 39,202, 84, 89,173, 55,148,220,112, 84,206, 78, 2,159,127,249, 57, 95, 62,187, 96, 86,179,104,120,111,235,142, +171,235, 27,198,121,224,195, 15, 62,100,188,222,115,152, 7,162,120,136,198,236,127,231,237,119,121,254,236, 25, 79,190,120,106, + 19, 18,103,156,249,224, 28,227,116,196,105,228,124,119,135,156,175,217,110,118,164, 16,217,238, 54,156,110, 18, 55,251, 61, 95, +251,214, 55,113, 14,162, 68, 30, 62,184,143,115,141,225,120, 88, 82,164, 50,109, 86, 91,187, 44,248,201, 86, 32,151,198,139,139, + 11,166,121, 88, 2,100,228, 85,180,172, 44,153,187, 90,219,226,107,109,212, 60, 81,170,208, 90,161, 21, 37, 3,185, 54,234,156, + 13,201, 41,183, 92, 3, 43,134, 83, 88, 89,119,228, 60,234,205, 94,184, 90,117,164, 92,217,187, 13,115,233, 56,188,120, 66, 29, + 38,174,135, 75, 52,170,217,204, 71,165, 58,115, 86,152,232,212,190,158,175, 22, 45, 90,138, 64,203,196, 85,194,117, 61,205, 57, +106,153,208, 82,240,106,162,189,213, 42,226, 83,135,230, 66,211,178,240, 30, 50,206,175,209,172, 68, 42, 53, 15,140,227,104,244, + 68, 96,156, 38,142, 55, 47,233,227,154,199,247,222, 32,109,119, 28,199,137, 50, 15, 70,121,140,129,184,218, 81,107,163, 21,211, + 76, 88,225,188, 36, 32, 10,139,205, 84,192, 69, 74, 81,124, 19,240,141, 86,236,146, 79,190, 55,151, 73,244,172, 87,103,124,240, +222,187, 60,122,123,205,137,131,126,221, 35,210, 49,221, 20, 36, 57,124, 52, 36,109,201, 7,134, 23, 35, 97,157,216,110, 18,222, +141,252,209,143,126,193,207,158, 28, 56, 54, 97, 40, 19,174, 10,142,128,143,142, 94,160,120, 15, 97,178,137,139, 23, 66,112,144, +193, 37, 33, 38,135, 74, 38,108,182,172,162, 51,187,225, 40,120, 85, 36, 8,248,104,107, 7, 93,194, 63,234,104,188, 74, 73,134, + 39,110,133, 58, 91,102, 54,193,211,240,120, 85, 66,231, 8,120,106, 19,198,113,228,168, 51,177,235,240,165,177, 90, 34,132,189, + 23,134, 86,105,213,206, 17,170,199,167,158,232, 50,181, 75, 48, 10,205, 55,226, 73, 79,158, 42,189, 23,168,149,169,206,164,149, + 35,182, 4, 78,137,206, 10,169, 92, 33, 32, 68,187,237,141,205,239,150,117,232,114,195, 58, 48, 43,162,179,136,223,251,247,238, + 16,187, 63, 61,204,101,174, 6,158,105, 37,115,178, 93,189,150,175,105, 59,117, 24,134, 9,167,149,221,166, 39,252, 99,192, 51, +255,184,226,193,203, 87,197, 66,116,208, 7,161,168,144,167, 25,218,196,195,187, 39,156,156,110,217,116,158,117,231, 89,117,158, + 62, 57,250,228, 88, 37,199,186, 15,175,222, 55,235,192,122, 19,217,109, 34,219, 77,100,187, 77,108,182, 29,155,147, 53,219,179, + 53,103,103, 59, 54,247,206,193,175,201,227, 68,153,247,104,173, 72,177, 9, 51, 9, 90,245, 72, 41,100,173,140,197,138,150,178, + 76,164,167,155,140,110,236,130,214,227, 68,213, 70,231,122, 74,107,204,205, 33, 19, 84,205,196, 97, 92, 86, 41, 29, 77, 7,252, + 58,209, 74,161,150,137,166,182,146,118, 90,169, 42,228, 16, 41,120,158,239, 39,252,131,135,143,126, 79,124,131, 5, 98,128, 10, + 34, 13, 13, 54,246,241, 75,104,189, 56,143, 91,168, 73, 44, 59,245,102, 24, 55, 68, 45,198, 77,157, 45,101,162,247,198,152,118, + 30, 89, 40,107, 96, 59,110, 83,181, 11, 81,236, 42, 85,183,236,182,151,110,217,246, 45,183, 9,108,206, 8, 87,118,163,211,165, +100, 0, 19,167,120,231, 89,210,210, 9,161,179,156,246,219,112, 0,189, 77,150,211, 87,208,156, 16,172,139, 44,185,190, 42, 96, +168,203, 62,122, 25, 12, 56,231,240,205,170,251,234, 45, 59, 86,154,197,192,246, 97, 5, 98, 60,103,156,154, 74, 60, 23, 27,139, +168,249,187, 69, 45, 18,182,121,251,206, 99,178,180, 53,145, 64, 31, 60,187,110,203,241,230,154,253, 97, 98,125,114,143,147,211, + 83,202,156,209,133,254, 20, 4, 92, 43,236, 47,159, 50,220, 92,225,220,204,151, 55, 95, 16,107,224,242,211, 79,249,222,143, 62, +226, 80,213,210,223, 98,183, 88,158, 70,170,235,249, 15,254,195,127,159,127,233, 55,222,101, 62,140, 38,110,162, 80,242, 64,234, + 18,239,191,243,152, 63,252,238,143,185,216,143, 70,156,115, 1,109, 13,159, 18,235,110,197,233,110,205,106,189,166,239,123,182, +119,206,217,116,137,147,245,134,232, 60, 85,148, 85,218, 18, 67, 36,173, 12, 79,185, 91,159,210,230,107,126,241,249, 23, 12,199, +197, 42,229, 29,206, 69,212,119,132,224, 56, 94,223,176,219,110, 24,246, 3,199,113,178, 75, 59, 38, 84, 51,243,112,228,229,243, +231,220, 28,167,197,190, 40, 75,154,158, 51,251, 84,115,220,191,123, 70,169,149,232, 2, 83,206,104, 16,214,235, 53,167,119, 31, +208,117, 61,165, 78,116, 41,242,232,205,251,160, 19,151, 87,215,148,102,118, 50,113, 1, 23, 87,182,167,155, 71,139,188,117, 11, + 61, 80,172, 56,149,224,113,237,118, 39,119, 75, 68, 52, 45,137,162,139,144,208,166, 69, 45,207,214,209,171,233, 21, 68,160, 58, +240, 75,177, 43, 46,210, 69, 79, 72, 43,206,118,167,196,224,153, 74, 97,157, 34,253,250,132, 59,247,191, 73, 42, 55, 72, 61,240, +242,230,134,161, 14, 52,223, 8, 18, 8,190,103, 46,163, 37,127,249,158, 90, 26, 18, 10,173, 20, 90,109, 28,231,129, 76, 37,208, + 3,182,114, 74, 18,160,201,130, 29,134, 85,220,210, 66, 48,194, 84, 21,155, 76,137,199, 57,235,234,109,213, 84,185, 26,110,152, +234,104,136, 85, 21,246,135,145, 74,227,222,105,207, 91,247, 31,208, 66, 98,191, 63,146,231, 3, 82, 27,158,176, 28, 86, 19, 46, + 56, 75,253, 90, 82,193,196, 71,156, 4,212, 11,173,216, 84,171, 5,112,165, 16,125,193,119, 9,151, 2,181, 9,235,245, 25,223, +124,247, 3,222,120,180,230,116, 19,241, 93,226,238,227, 59,244, 39, 29, 55,121,230,217,231, 3,135,171,129,221, 46,224, 93,165, +230, 9,215, 43, 41,118, 28, 94,222,240,252,122, 70,214,103,180, 2,105,213,209, 26, 68,159,169, 62, 83,112,180,121,198, 53,165, + 54,143,139,202,170, 91, 89,144, 71, 89,130,163, 16,242,208,200,227, 76, 1,124, 85, 92, 92,118,182, 65, 40,206,145, 39,195, 44, +207, 75,161,226, 92,180,159, 31,136,146,168,206, 25,158,121, 65,111,149,102,175,213,216, 10,213,173, 88, 57,143, 91,214,146,246, +123, 90, 44,104,206,163,179, 96,112, 96, 65,235,140,111,106, 36, 48, 28, 73, 2,179, 36, 18,230,164,193, 37, 86,106, 83,147, 42, + 14, 23, 77, 75,129,218,227,222,197,101,175,120,203,131, 23, 67,252,138, 55, 59,169,147, 96, 93,188, 15,172, 87, 43,238, 63,188, +135,127, 13,158,242, 97,170, 76,227, 4,173,178,123,141,212,183,220, 96, 56,152,166,100,187,219,252,169,227, 97,255,161, 88,212, +169, 48, 30, 71,188, 86,238,156,159, 32,225,159,236,215,255,147,133,194,171,105,195, 82, 52, 68, 7,105,249,184,246, 48, 52,225, +234,226,134,121,191, 71,107,163, 46,113,229,180,106,141,132, 42,157, 4, 82,242,148, 42, 28,243, 72, 63,117, 56, 63, 49,215, 70, +200,137, 16, 60,210,102, 74, 7, 18, 35,169, 22, 38, 21,208, 25, 47, 21,122, 53,155,236, 48, 17, 75, 97, 21,149,140,129,164,214, + 33,152, 59,171, 63,129,210, 51,177,231,205, 93, 36, 32,149,214, 22, 53,187,242, 85,184,198, 34,122,168,206,246,228,210,110, 19, +208, 60,117, 25,177,138,103, 9,113, 97, 33,204,153,106,188,136,169,233, 75,201, 11,222,193, 66,223, 45,245,205, 81,203, 45,221, +199, 68, 20, 6,112, 84,195,132, 98,124,111, 19, 68,120, 16, 37, 44,137,106,181,153,154,182, 52, 8, 65, 22,240,141, 9, 55,112, +186,188,108, 28, 41,154,160,164, 84,161,121, 33, 74, 51, 69,120,185, 37, 80, 41,209,123, 52,207,228,214, 72,105,189,112,239, 61, +141,108,244,181,165, 24, 72,193,178,142, 91, 40,102,199, 41,118,176, 78,210, 94, 69,134,118,234,104, 62,152,136,132,102,236,104, +129,190, 24, 60, 4, 87,169, 8,173,206, 28,167,137, 89, 60,247, 79,206,185,127,255, 46,190, 21, 94, 94, 94, 44, 63, 67, 88, 58, + 72,120,118,241,140,227,120,195,152, 3,111, 60, 56,227,234,242,151,220, 76,121, 17, 31,217,129, 30,165,210,210, 61,222,122,251, + 49,127,247,239,252,159,252,133, 63,243, 87,145, 78,105, 35,168,244, 56, 95,201,121,224,253, 15,222,224, 27,239, 61,230,151, 95, + 94,130,119,196, 24,217,222,221,176,233, 35,193,245,156,158,173, 72,146,232,226,142,176, 78,244,193,130,115, 92,170,132, 57,130, + 91,211,111,173, 11, 95,167,153,249, 40,252,252,249, 37,115, 73, 60,120,227, 45, 54, 65,105, 20,230,106,228,189, 54, 79,204,165, +240,211,143,127,201, 42,120, 66,240,212,172,120, 31,152,134,145, 63,254,232,151,134,127,245,203,220, 70,156, 9, 22,197, 30,243, +237,201, 9, 5,232,186,181,189, 32, 80,186,117,199,234,164,167,140,214,121,237,118, 27,152, 29,201,247, 92, 92, 63,103, 56, 78, +116,125, 34,246,137,221,106,199,113,158, 8,105,197, 80, 39, 14, 7,131,121, 36,239, 45, 80,168,216,184,221,185, 64, 91,124,254, +141,106, 47,226,106, 59,157,134,195,181,140,182,180, 68, 10,219,138,196, 2,123, 20, 45,183, 98, 79, 80,173, 52,223,115,178, 90, +177, 94,119, 60,136, 43,126,249,188,114, 28, 10, 97,119,159,162,153, 33, 31, 57,150, 66, 0,238,164, 29, 51, 51,199,170,108,188, +176,233, 18, 67, 83,186,170,212, 62, 49, 79, 25,170, 50,101,168,121, 38, 4, 15, 8, 69, 43,169,121,112,145, 20, 3,115, 27,233, + 83,178,248, 98,245,108, 54, 59, 92,218,114,115,245,153,241,206,117,109, 28, 6,154, 77,210, 74,101,156, 27, 45,143,236, 54, 74, +151, 86,236,175, 95,242,211,159,141,244,187,103,172, 54,107, 30, 61,120,200,179,103,149,113, 26,200, 53,219, 52, 14, 72, 98,108, +247, 44, 13, 23, 32, 16,240,113,133,150,153,230,102,187, 80,117, 54, 6,128,243, 6, 78, 17,193,199,196, 59,111,191,207,183,254, +236,123,108,182, 51, 93,220, 48,143, 19,211,113,198,247, 59,238,223,201,148,242,156,151, 47, 43,233,163,137,247,191,117,135,185, +247,228,171,153, 43,119,224,103, 31, 95, 80,226, 9,109, 1,158,232,172, 20, 13,104, 25,168,218, 40, 89,204,189, 35,158,216, 59, + 92, 76,150,245, 80,133, 89, 29,157,243,100, 49,237, 12, 45, 82,170, 69, 10, 19, 77,217,149, 7,177, 46, 64, 33,250, 74, 8,107, +152,171, 97,117,151,213,155,186,108, 78,132,206,108,110,178,164, 81,206, 17,210, 42,194,116,131,234, 26,173, 51,138,163,104,194, +135, 74, 20,143,150,136, 44,214,216,220,102,146,236, 96,101,132,185, 54, 59,198,156,113,162,100,154,157, 85,173, 65,232, 32, 15, +204,181,177, 9,145, 89,103,124,138,248,232,201,197,198,237, 18, 76, 23, 3,213, 72,155, 62, 24,143, 64,218,114, 17, 57,186,206, +156, 25,175,197, 26,134,105, 71, 66, 16,124,138,175,237,226,173,165, 45, 77,221, 45,173,244,245,121,212, 91,177,199,181,139,193, +180, 7,175,249,173, 85,181,228, 68,191,240, 33, 90, 69,130,233,114, 18,129,227, 52,115, 83,141,179,162, 69, 23,174, 64,161,115, +171,165, 0,152, 8, 81, 16, 58,110, 40, 36,105, 20,102,116, 22, 90,104, 12,110,198,143, 9,131,163, 87, 74, 78,224, 97, 3,148, +208,147,157,167, 21,197,181,136,151,204, 73,238,249,173, 15,215,132, 82,111, 35, 49,205, 59, 29, 92,176,113,206, 66,248, 81,113, +214,141,160, 20, 5, 89, 70,243,186,168,203,189,243,136, 19,156, 26, 76, 85, 4,196,235,146,129, 14,206, 85, 43, 6,212, 64, 50, +246,103,168,232,146, 41,155,161,120, 91,213, 7,135, 22,139, 54,173, 78,241,193, 84,222,218, 26, 78,162,177,169,189,165,206,228, + 86,137,139,160,163,214, 98,149,113,187, 21,248, 88,122,147, 75, 38, 94,114,234, 17, 7,115,172, 72,109,104,109,168,171,132, 20, +169,185,161,217, 32, 34, 57, 52,156, 43, 84, 21, 74,117,132, 20,200,106,151,121, 34, 82,165,124, 53,122,172,197, 88,240,197,155, +186,183, 22, 19, 26,181, 70, 11,245,149,141,193, 45, 79,214,166, 80,231,153,195, 52,227, 37,112,125,241, 37,219, 62,176,234, 54, +220,121,176, 33,250,153,139,103, 47, 40,179,210, 42,164,109, 79,215, 37,198,195,200,243,171, 47,185, 57,238, 77, 3, 80, 61, 77, + 27,181, 21,142,227,204, 95,250,151,255, 10,127,227,223,250, 29,254,227,255,232, 63,225,191,254,239,223,228,223,248,221,223,160, +205, 47,237,178,242, 43,132,202,122,115,202,155,111,158,177, 93,117,108,182, 91,250,205,134, 62,117, 4, 47,172,214,103,220, 59, + 59, 33,117,194, 60, 52, 66,100,201,225,246,140, 83,195,213, 21,226,102,110, 14,141,243, 7,111,113,156, 47,248,228,243, 79, 57, +142,123,186,126, 75, 20, 37,172, 34,226, 58, 98, 93,146,238,216,224, 41, 92, 29, 39,168,158,211,221, 57,234,205,215, 61, 28, 54, + 28,143, 55, 12,243,180,224, 44,141,182,213,128,205,106, 69,153, 27,167,247,206,113, 17, 43, 19, 23,123,204,219,239, 60, 32,120, +225,201,103, 7,162,143,132, 24,160, 54,106,221,115,125, 24,184,222,103,118,222,115,186, 90,179,223,239,153,139,210,175,122, 54, +221,134,195,245,136, 56,115,110,136,150,197,146, 9, 97,233, 88,231, 86,209,234, 76, 8,154, 26, 14,191, 28, 47, 14, 9, 11, 97, +176, 42, 42,142, 16, 5,173,246, 60, 22, 39, 84, 10,222, 41,201,153,112,165, 41,212, 24, 73,177,227,252,206, 57, 95,127,252, 14, +194, 53,211,116, 96, 62,238, 9, 10,153, 76,155, 28,104,102, 63, 93,161, 62,161,185, 49,187,138, 82, 81, 81,124,234,201,135,103, + 84,173,116, 97,101, 97, 36,197, 67,202, 54, 61, 19, 1, 2,213, 45, 93,103,243, 76,181,224,196, 19,154, 50,140, 25,226,140,239, +182,104, 25,137,209,132,157, 78, 61,121,174,220,204,123,242, 58,115,190, 59,101, 32,115,249,242, 11,226,133,227,108,123,138,119, + 17,200, 86,176,228,189,237,255,101, 77,194,155,127,127, 54, 81,102,220,217,212,199, 35,196,206, 47,171,141, 64,201,182,199, 68, + 29,111,220,127,131, 63,251,225, 59, 60,184,151,104,206, 51, 31, 70,194, 90,105, 67,195,249, 1,239, 2,119, 79, 87,108,210, 76, +222,143, 92, 92, 29, 73, 93,194, 15, 35, 63,254,222,199, 12,242,136,205,170,163,181,153,169, 78,228, 22,236,119,132, 80,230, 72, +214, 3, 94,130,141,207, 39,243,249,151,228,128,132,164, 66, 43,166,159, 17,175,196,149,167, 19, 33,207,129,178, 63,226, 66,197, +151,206, 28, 0, 49,162, 90,168, 46, 27,222, 55, 66,161,210, 37,193, 31,148,161, 22,124,216,154, 18, 94,102,146,223,144, 91,227, +112,172, 4,233,205,198, 43,129, 22, 65,114,198,109, 78,209, 92,200,243, 72, 73,158,208, 42,107,191,161,246,150,177,221,138,224, + 93, 36, 72,101, 82, 79,205,133,160, 17,223, 65,245, 66,118, 43,220,148,169,179,144,250,104,150,219, 90,140,203,224,154, 21,154, +152, 32, 80, 17,122,111, 86, 67,154, 16,131,195, 5,177, 46,240, 53, 80, 98,116,153,158, 42, 16, 92,120, 45,157,255,171,139,113, +153,134,134,232,241,225,117,126,221, 37, 32,212,128, 29,175,221,206,102, 96,155,130, 50, 67,173,203,207,209,152,114, 37,196,192, +161,152,112, 90, 66,134, 49, 51,207, 16,189,154,102, 36,230,197,142,171,180,125,128, 20,112,195,204, 88, 3,174, 57, 98,191, 1, +181,148,196,185, 40, 89, 70, 82,176,149,202,152,103,230, 32,168,172,144,146, 49, 14,236, 37,244,145,149, 95,113,231, 36, 18,236, +146, 50, 10,154,107, 88,174,249, 50,242, 86, 23, 64,218, 50,130,183, 49,180, 51, 37,140,137,224,154,163,184, 37,110,208,142, 74, +188, 51,241,156, 9, 88, 48,239, 57,246,249, 94,196, 84,142, 56,124,109,228, 10, 36,227, 50, 59, 28, 81,149, 64,179,124,118,183, +168,203,139, 67,164, 25,127,190,217,232,255,150,111,220,100, 17,185, 57, 90, 7,173, 37, 0, 0, 32, 0, 73, 68, 65, 84,181,128, + 17, 85, 43, 56,170, 41,207, 99,180,197,126,203, 74,231, 29,109,174, 11, 1,206,212,242,165,154,216,207, 97, 48, 20, 22,171,157, + 69,189, 58, 84,138,141,249, 67,162,169,225,116, 53,204, 84,111, 12,102, 95,149, 37, 6,198, 58,241, 86,109, 20,182, 0, 92,154, +131, 64, 38,164, 14,167,112,117,189,231, 48,102,130, 83,142,195, 5,191,248,197,145,211,237, 29, 30,127,248, 29, 86,238, 72,144, + 45, 58, 93,113,117,179,103,183, 10, 92, 13,151,212,234,168,217, 83,202, 18,153, 42, 48,205, 51, 89, 39,136,107,126,235,207,255, + 26,143,238,157,240,239,254,219,255, 42,255,233,223,252, 47,249,230,215,223,227,215, 62,188, 99,233, 64, 82,145, 84,248, 31,254, +187,255,133, 31,254,236, 37,247, 31, 60, 98,189, 53, 59, 93,136,107, 86,155,196,157,237, 25,221, 18, 80, 83,251, 98,114,200, 34, + 72,128,121,170, 56,169, 22, 57,171, 6, 5, 9,113,203,201, 54,146,107,101,179,181, 9,135, 91,121,218,156, 23,123,160,141,123, +178,192,102,221,211,170,163, 95,119,172, 86, 43, 27,251,215,130,211,198, 48,205,212,150, 49,183,124,228,249,151, 95,240,236,249, + 5,105,189,226,237,199,239,194,152,185, 57, 94, 50,251,138,235, 18, 15,239,156,112,117,145,201,211,115, 66,178, 32, 19,239, 29, +195,254,200,241,250, 96, 29,137, 4,174, 15, 19,215,215, 19,253,122,205,170,235, 89,199,192,254,230,200, 84, 50,226,155, 41,162, + 39,187,148,235,162,139,208,220,150,199,123,217,125,234,226,149,149, 37,157,173,154,164, 92,212,224, 73, 86,213, 89, 65, 27,128, +154, 71,242, 56,146,250,142, 20,207,241,221, 41,111, 63,234,185,247,224, 46, 77, 60, 92,239, 57,212,153,218,138,209,252, 98,230, +152,149, 82, 38, 52, 66, 26,109, 87,236,113,244,226, 56,204,133,185, 57,166, 97, 38,172, 35, 85, 11, 45,219,120,182,238, 51,116, + 51, 97,115,102,174,138, 58,155,248, 72,108,196, 14, 19,179, 78, 52,241,104, 52,155, 99,151, 18, 55,199,198, 92,192,197, 53,165, +236, 25,166,202,172, 71,106,131,221,157,173,117,226,173,112,177,191,198,187,136,211, 70,148,196,132, 5, 16,137,131,216,203, 2, +125,170, 64, 96, 60, 78,102,223, 36, 82,202, 13,186,240,253,155,206,196,212,177,222,221,231,219,223,254,128,135,119, 2, 53, 15, + 72,218, 17,182,137, 58,220,144,186,200,144,143,228,185,210,110, 10,171, 62,176,125, 99, 71, 19,229,120,113,205, 71, 63,249,152, + 47,158, 28,120,240,174, 48, 99,232,205,117,234, 25, 71,139, 96,106,100,122,167,168, 70, 32,226, 36,227, 26,116,201,227, 74,164, +137,169,248,171, 11, 86, 4,151, 6,117, 79, 76,145, 90, 12, 77, 85,115,163, 53, 76,172,234, 2,209, 37,114,206,136,175,144, 61, + 85, 6, 52,158, 32,201, 17,202,132,182,202,218,217,128, 86,104,196,148, 8,106,209, 79, 69, 10,171,174, 67,139,167,232, 1, 61, + 14,148,176,195,215,105,193,180,122,142,211,136,204,214, 73, 55, 95, 64, 51,181,118, 36,105, 16, 3,197, 9,122, 44,172, 59,133, +212,113,116, 19,147,203, 72,117, 4, 85, 92,178, 29,188,163, 17,156, 32,165, 34, 62,217,185,218,204, 50,167,162,148,232,232,220, + 98, 21,126,141, 93,175, 69, 39,155,254,228,245,229,145,155, 32, 59,152,125,228, 53,195, 97,108, 77, 17,156, 55,129,215,107,124, +155,155,157,143, 65,148, 44,144,197, 40,167,177, 69,219, 41,104,193,175, 61,189, 58,142,162,248, 58, 35,181, 48,212,129, 92,215, +108, 54, 29,109, 62,208,218, 4, 98, 9,140,204, 7,138,243,224,143,180,220,168,179,163,134, 70,114, 27,114,174,116, 65,152, 21, + 43, 16,226,113,185,183,122, 40,153,166, 35, 69,132,126,115,138,127,240,232,141,223, 67,219, 34,114, 91,174,102, 23, 32, 57,164, +222,238, 24,150,252,239,101,203,232,196,198,129, 62,121,115,248,139,224, 2, 54, 98, 8,182,191, 54, 75,155,121,239, 4,135, 19, +143,119,138, 95,176,178,186,140,204,157, 46,140, 2,220, 2, 65,176,104, 82,109,166,252,101,193,119,130,217,224,104,106,188,234, + 80,173, 94,119,118,144,208,254, 68, 2,156,115,248,206,219, 5, 83, 44,215,214, 56,181,205, 4, 50, 46, 44,158,198,219,157, 73, + 88, 18,202, 44, 81,203,133, 64, 90,212,251,117, 33,198, 53, 95, 80, 39,139,133,105, 65,216, 86,204,215,237, 29, 18,189, 41, 93, +197, 49,151, 74,117, 86,213,182, 37, 21,206,185,202,211,207,159,241,236,197, 53, 62, 58, 78,118,231,156,173, 31,208,218,132,234, +192, 73, 92, 33,234, 97, 30,169,170,164,212,113, 60, 76, 72, 80,124,232, 56,204, 35,243, 92, 88,175, 79, 8, 41, 45, 54,156,153, +171,195,145,127,230,215,255, 28,239,255,202, 91,140,151,207,249,175,254,214,223,230, 47,252,214,111,178, 91, 69, 82, 90,241,195, +239,254,136,255,236, 63,255,111,200, 97,197,118,187, 38,198, 53,235,179, 29, 15, 79,239,112,114,122,143, 62,118,172, 87,119,108, +135,167, 10, 49,208,197, 21,173, 20, 35,168,137, 51, 87, 64,241,108,214, 15,145,122,224,197,211,207,241,225,132,243, 7,111,154, +166, 65, 3,226, 2,109,177, 27, 74, 19,144, 14,159, 2, 93,151, 8,189,103,219, 71,166, 92, 64, 3, 49,117,248, 85, 36,117, 61, + 15,238,159,243,224,238, 93,190,253,237,175,241,222,219, 15,184,188,154,120,248,198,125,198,121, 79,109,153,214, 60,121,158,120, +250,244, 37,159,127,250,140,225,184,103,127,125, 99, 94,241, 98,185,226,235, 77,207,163, 55, 31,113,216,143, 52,205,244,171, 21, +181,121,130,135,245,106,197,156,103,210, 42,146,194,114,104, 59,243, 13,123,181,200, 83, 83,109,203,171, 64, 33,241, 86, 45,186, +206,227,212,225,177,120, 94, 17,219,154,106, 83,188, 40, 97, 73, 47, 20,103,249,231, 78,133,232,123,250,245,154,179,243, 29,247, +183, 59, 70, 45, 28,175,175, 25,181,226, 59,200,199, 3,109, 46,204,146,209,197,130, 85,106,198,135,255,135,182, 55,251,217, 44, + 93,239,179,174,251,153,214, 90,239,251,141, 53,116,119,245,220,187,123, 15,246,182, 29, 27, 59, 78,136, 29, 12, 73, 8, 81,144, + 37, 44,132,132,196, 25,199, 8, 33,132, 34,229, 0, 41,127, 0, 39, 28,240, 15, 16, 14, 16, 39,136, 0, 10, 4, 98, 99, 67,148, + 96,236,108,199, 99,188, 71,247, 92,213, 53,125,195, 59,172,245, 76, 55, 7,247,170, 50,226, 0, 33,165,220,210,214,150, 90, 91, +187,190,170,250,190,247,121,158,251,254,253,174, 43, 17,124,180, 0,164, 79, 28,110,111, 89,142, 59, 78,166, 13,170,129,146, 59, +221, 53,186,216,197,212,187,132, 23, 71, 84, 71,107,246, 58,243,109, 71,106,207, 56,148,138,170, 99, 51, 94,224,227, 6, 56,114, +123,253,152,221,254, 96,191,135,124, 52,110,131,247,204,121,230, 56, 55,180, 41, 49, 57, 82, 26,240, 18,209, 94, 44,196, 21, 55, +136, 90,238,193,201, 11,168, 81, 66,240, 44,189,217,170, 64, 42,186,190, 44,130, 55, 61,234,233,230,130,175,191,243, 33, 63,251, + 51, 31, 50,109, 6,150, 93,161,177,152,145,173, 41, 75, 41, 28,218, 66,185,186,229, 56, 87,230,172,180,154,241,146,249,238,159, +124,193,199, 15,111, 24, 46, 94, 39,197, 17,233,144, 38, 71, 74, 9,233,118,233, 4,144,168, 12, 65,104,210,104,117, 96, 76,145, +105,154, 0, 79,213, 29,158,192,228,170,213,200, 94,242,191, 59,110,113,204,174,219,115,174, 29,169,106, 93,247, 10,244,185,153, +149,145, 64,211,142,107,144,139,233,118,189,179,116,123,113, 16,182,142,208, 26, 75, 22, 52, 84,194, 52, 64,235,148,158,209, 96, +220, 4, 45,107,182,192, 21,131,171,168, 18,233, 36, 23,233,169,211,186,224,153,144,120,100,220, 52, 12,137,224,153,162, 49,227, + 75, 83,130, 40, 75, 7,167,142,136,208,162, 39, 34,248, 24,192,187,151, 59, 96, 69,236,243,199,121,130, 15,196, 16,185,115,247, +130,205,171,176,179,173, 22,181, 86, 11,131,119, 76,219,233,149, 17,217,142, 75,165, 46, 11,211,240,234,172,111, 38,114, 49,157, +235,178, 44,108,166,240, 74, 44,117,255,111, 13,237,227,231, 51,135,171,167,148,188,179,246,132, 4,202,210, 40,197,234,143,189, + 43,245, 8,157,136,120, 33,183,206,210, 26, 18, 6, 92, 25,205,204,232,102,230, 5,154, 8, 65,130,105, 89,203, 45, 58, 57,198, +109, 34,208, 81,153,104,165, 51,210,240,174, 18,186,153,119, 11,130,139,142,228,148,216, 61, 91,132,127,233,235,247,240,247,238, +222,251, 59,246,218, 93, 75,254, 98,251,159,222,186,133,194,212,161,110,229,187,175, 73,116,231,156,109,195,157,137, 87,252,106, +191,145,254, 34, 81,110,243, 15,197,108, 66, 86,181, 88,255,253, 58,216,236, 65, 94,214, 0, 76, 45,104,246,166,214,214,208,222, + 26,174,107,235, 10,192,173,155,119,113,240, 34, 59,135,183, 3,190,171, 5, 83,172,150, 7,193,123, 68, 34, 62, 24, 83,219,252, +224, 74,243,130, 11,198, 74, 86, 20, 17, 83,132,118, 21,188,183, 67,222, 39,103,154, 72,111, 41, 87, 26,184,232,112,218,108, 12, +235, 60, 78, 59,165,218,110, 91,181,211,106,195,249,128, 11,194, 24,116,221,181, 43, 97,237,209, 35,194,224,148, 47, 62,125,200, +237, 92,217,158, 93,242,246,189,183,185,119,255, 1,219, 49,240,244,209,151, 60,126,252,144,153,140,138,245,142,147, 75,148,126, + 64,196,179,217, 78,180,124, 32, 55, 91,101,108, 54, 19,199, 37,243,111,255, 59,255, 30,251, 47,191,203, 31, 63, 58,240, 23,126, +230, 91,252,216, 71,239,242,123,223,249,109,254,232,147,231,252,194, 95,248, 25,188, 54,254,238,127,249, 63,112,189,135, 59,119, + 78, 73,241,132,237,116,193,249,233,134,211, 77, 36,110, 60,225,244,148,160, 19, 50,216, 56,222, 59, 24, 93, 52, 17,208, 16,209, +144,200,185,131, 87,206, 78, 47,201,135,107,114, 59,218,215,112,187,231,112,125, 69,111, 7, 51,193,169,129, 50,146,143,108, 46, +238, 49,158,156,226, 37, 49,196, 19, 68,141,211,174,177,145,134,129,237,184,193, 75,231,206,197, 9,239, 60,184,203,183,191,254, + 77,126,241, 95,254,113,156, 11, 60,253,242, 9, 55,215,207,232,222, 49, 68,143,147, 70, 41,205,194, 42, 49,226, 71,139, 72,230, +214, 16,113,156,156,140,252,245,127,229,103,120,242,213, 21,215,115,225,244,116,195,241,104,187,198, 33,216, 55,230, 71,239,126, +141, 52, 78,124,245,232,137,141,228,156,231, 37,231, 42,216,223,163, 15,206,212,194,193,173,225, 47, 97,240,142,232,237, 85,223, +197, 64, 31,126,237, 28,139, 23, 90,171,150, 73, 9, 17,130, 80,143, 7,188,118, 94,123,227, 14, 58,120, 92, 89,184, 89, 14,104, + 62,210, 74, 38,171,216, 26, 96,240,196, 6,147,159,236, 34, 65,163,162, 84, 87,241,226,184,190,121, 98,166, 64,159,104,189, 83, +157,224,188,183,195,219, 71,150, 60, 19, 52, 51,164, 35,155,212,216,186, 91,238,142, 71,168,149,171,217, 16,174, 73, 78,136, 94, + 57, 30,111,184,189,126, 66, 94, 14,235,222,215, 20,171,189,219,106, 72,123, 35,183, 66,206, 21,167,209, 90, 31,221, 38, 47,151, +155, 75, 54,103, 39,244, 82, 86, 32,137,193, 61,124, 24,240,206,190,215,157,116, 68,138,249, 17,154, 50,166,137,119,223,127,151, +143,126,252, 45,238,158, 15, 4,175, 16, 7, 66, 21, 27,209, 15, 66, 61,236,169,173,208,155,163,123, 97, 68, 56, 30,103,126,248, +201,103,136, 75,252,216,183, 63, 96, 57, 2, 58,216,207,127,114,244,172,108,226, 64,150, 2, 52,130, 14, 44,125, 65,213, 96, 37, +154,196,124, 3, 52,130,235,248, 14,139,218,228,176,101,251, 92,147, 22,112, 4,156,247, 56, 47,212, 94, 17, 31,128,133, 54, 91, +251,193,181, 74,118, 86,207,213, 94,145, 20, 94,110,123,147,155,112,201, 49,186, 83,186, 95, 39, 57, 78,144,210,113,154,172, 13, +227, 59,193, 25,191,157, 94,241, 93, 24, 24,240,154,112,174,211,210, 64,216, 12,180, 89,241, 33, 83,123,162, 57, 91,177,164,232, +201, 81,215,252, 80,164, 20,197,111, 70, 38,177,105,154, 75,230, 75,183,139,166,125,166,234, 58,113, 18, 28,193, 5,156,115,140, +105,226,242,206, 57,195,248, 47,174, 26,205, 77,201,115,161,151,182,122,212, 95,141,190,180, 43, 28,143, 25,109,149,113, 72,175, + 44, 81,111, 23, 17,229,120,152,169,101,225,116, 51,188, 50,247,251,255,243,162,115,245,228,192,113,255,156,222,102,131,177, 85, +165, 99, 65,236,118,108, 12, 61, 82, 60,228, 58, 83,143,217,130,147,113,100, 76,157,228, 26,210, 50,115,142,196,224,216, 14,202, +172,145,113,172,216,216, 52, 34,185,145,197,254,255,122, 85,106, 43,228,222,216,132, 97, 85,188,118, 6, 39,248,173,141,227, 47, + 70,199, 79,254,212, 61,130,115,242,114,196,168,226,208,117, 71, 78, 51,134, 56,172,251,195,149, 13, 92, 59, 72,171, 32,193, 20, +231, 43,185, 74, 21,186,211, 85,217,106,227, 73,123,164, 58,250, 90,255,121, 73, 65, 19,112,221,153, 49, 76, 89, 59,206,107, 97, +220, 89,127,154,110, 35, 81,135,199,169, 65,105,114,235,180,213,247,236, 68,112,205,104,120, 14,135,115,246,181, 52,109,212,214, + 25, 98,179, 91,189,122, 68, 10,109,189,140, 72,215,151, 66, 4,239,131, 5,184,164,217,107,221,121,235,164,186,246,114,156, 21, + 67, 34,183,138,119, 16,165, 34, 26, 17,245, 56,201,168,152, 27,218,187,181,155,161,142,174,158,228,160, 8, 56,121, 89, 80, 98, +110, 11,199,106,154,217, 59,103,103, 92,223, 92,211,186,231,217,245,231,140, 23,119, 25,123,225,203,167, 79,217, 78, 9,196,115, + 51, 31, 89, 74,103, 60,137,148, 54, 91, 31, 24, 33,247, 25, 63, 43, 62,108,248,133, 95,250, 5,126,229,175,254, 24,255,209,223, +249,207,249,213,111,126,139, 95,249, 55,126,154,255,240, 63,248,247,249,219,255,233,127,198,127,252,183,127,196, 79,127,227, 67, +126,244,108,225,244,254, 3, 46, 46, 2, 67, 24, 56, 25,206,241,211,192, 52, 69, 54, 23, 27, 66,186,132,101,207,237, 12,101, 78, +184,184, 97, 26, 34,238,201,158,205,216,185,157,149, 49, 70, 52, 44, 84,119, 68,182, 35,167,121,195,237,241,134,229, 80,169,181, +176,204,199, 53,188, 56,218,237, 59, 64,216, 95,179,185, 60,199,251, 64, 40, 30,231, 19,103,219,115,222,121,240, 22,163,155, 73, +186,227,226,252, 62, 63,243,231, 62,226,157,119,222,225,247,190,243, 5,127,248,189,103,108,210, 41,110, 12,156,115,142,248,100, +220,128, 33,162, 52,131, 58,172,235,128,158, 60, 1,147, 87,188,245,206, 37,191,248, 75, 31,240, 71,127,252,207,249,193,167, 51, +125, 76,120, 81,170, 8,135,158,105,206, 49,157,111,121,231,107,111,241,232,209,151, 60,123,254,204,148,190, 81,137, 46,161, 77, +105,171,202, 55,183, 6,165, 91,142,170, 11, 21, 51,183,105,181, 80,103, 91, 87, 64, 29,197,251,142, 31, 34, 78,147, 5,159,176, +196,252, 91,239,191,201, 27,175,221,227,112,115,195, 33,103,198, 52, 34, 53, 83, 74,225, 44,140,100,215, 41, 57,211, 82, 96,174, +130,119, 3,189, 30, 81,109,108, 83,224,250,233,115,250,156, 57, 57,191,160, 22,163,219,121,169,140,189,179, 29,133,206, 72,161, +243,250,230,154,251,119, 6, 54,195,145,216, 29,187,162, 60,187, 53,201, 80,242,129,210,118,244, 44,148, 58,179,212,106, 43, 36, +215,240,222,228, 48,181, 44, 4, 31,236, 34, 47,130,107,158,219,219, 27,252, 30, 78, 54,118,120,237,118,207,184,127,231, 62, 39, +247,239,240,240,106,207, 97, 46,235,132,171, 26,248, 34, 96,215, 17,137,168,183, 52,246, 91,175,191,207, 79,127,235,109, 46, 46, + 18, 55, 79, 43,103,247, 60, 18, 23,230,221, 74,188, 91, 20,217, 70,100,134, 65, 20,223, 59, 87,249,192, 15,127,240, 25,115,203, +252,187,255,214, 95,230,217,243,133,239,150,143, 25,182, 30,233,142, 54, 47,224, 2, 59,215,217,229,140, 95,178, 41, 71,101,131, +140, 21,239, 50, 61, 59,170, 75,140,234, 8,155,137,195,124,164, 46, 66,243,197,250,247, 53,209,123,161,185, 78,170, 3,105,236, + 84,167, 52,201,132,110, 76,119,175,158,230, 11,163,116, 22,133, 57, 87, 18, 35, 33, 41, 62,138,137,125,196, 83,186, 89, 27, 55, + 9, 42, 1,233,149, 34,217,252, 24,106,144,171,216, 23,130, 31, 89,122,161, 6,161,123,207,102,244,248,193, 49,223, 20,122, 40, +248,237,128,204,138,175,202,110,206,180, 75, 97,100,192, 31, 51, 50,116, 52, 68, 70,173,224, 3, 42, 66, 90,181,181, 37,119,124, + 18,251, 59, 24, 18,189,205,182, 54,244,138, 74, 71, 93, 39,134, 87, 55, 38,183,199, 73, 35,198, 87,184,247, 94,169,117,214,197, +123,181, 92,246, 86,117, 37,134, 26, 28,252, 85,255, 83, 58,228, 90,168,189,161,193, 17, 26, 20, 87, 81,129,228, 61,234, 29,251, + 93,103, 89,236,209, 87, 91, 38, 13, 27,188,131,165, 20,150,220,112, 33, 65,115,180,229, 10, 9, 27, 36, 31,240,222,206, 56, 87, +138,237,220,163, 67,187, 18, 82,163,169, 39,166,192,162,157, 54, 43,219, 49,145,186,160, 75,197,135, 1, 92, 37,110, 54, 38, 35, +244,205, 27, 34, 86,116,117, 69,123, 83,255,169,173,225, 45,152,236,193,117,196,173, 17,249, 94,233,213, 27, 7, 90,133,246,226, +181,191,178,130,169, 86, 59,211,210,237,155,172,219, 77, 83,214,241,184,243,160,213, 96, 23,186,166,205,155,179, 52,187, 83, 65, +124, 48,175,185,183,215, 64,117, 70,244,162,217, 37,194, 57,197, 75,160, 52, 53, 11, 84,183, 31, 38,239, 34,181, 53, 90,233, 36, + 63, 50,121, 79,238,246,170, 82, 53,121, 64, 20,155, 64,148,185,173,140,121,183,134, 0, 13,104, 35, 93, 73, 42,180,168,168,131, +177,123,178, 54,170, 88,237,172, 35, 36, 63, 32, 78, 13,225,231, 28, 13,171,228,149,110,116, 49, 31, 35, 56, 72,221,246,206,183, + 87,207,217, 31, 50, 33, 88,199, 83,180,114,249,218, 37, 23,247, 18, 31,255,232,115,206,239,188,206, 38,236,152,151, 76, 10,142, + 16, 10,234, 60,155,176, 69,151,106,214, 56, 81, 92, 21, 14,203,145,179,215,239,178, 57,241,124,248,206, 55,248,149,127,253,175, +243,155,255,215,239,114,245,249, 15,184,255,230, 27,252, 39,127,235,111,241,127,252,218,175,241,171,191,241, 91,220,121,240, 14, +155,187, 35,103,227, 41,155, 52,112,113,121,134, 11, 91,182, 39,155, 21, 98, 49,209,183,142,205,118,100,206, 27,164, 69, 14,203, +158,147,139,145,141,116,252, 4, 23,119,224, 56, 63,165,104, 97, 58,142,220,244,247, 25, 46,246,176,189,229,121,110,228,126, 75, +221,207,180, 92,193, 43,199, 37, 19, 14,123,150,101, 49,255,251,232,105, 45,115,125, 59,114,245,244, 25,175, 63,120,147,191,242, + 23, 63,228, 47,253,252,187,184, 56,160,115, 34, 12,137, 63,254,157, 31,240,248,209,115, 92,244,140,155,209, 94,146, 26,232, 90, + 89, 68,112, 27,187,224,233,161,216,223,213, 0,211, 48,242,141,247,222, 98,136,129,119,223,188,143,212,239,115,243,252, 6, 23, + 71, 27, 17,183, 70, 82,229,201,147, 39,188,246,214,125, 46,207,207,216, 95,221,208,112, 72,176,117, 83, 92, 43, 90,133, 78,154, + 6,180,205, 4,231,172,154,217,133,170,153, 20,109, 4, 58,203, 64,173, 21,231, 18, 83,114,244, 26, 80,237,212,110, 97,203,119, +223,124,139,111,127,244, 33, 87, 87, 55,148,217, 17,207, 6, 30,156, 95,242,197,195,207, 86, 88, 83,102,211, 26,170, 71, 82, 87, + 28, 74,209,192,224,148, 55,134, 35, 93, 3, 95,238,175, 73,105,131, 75, 3, 61, 31,120, 99,211, 56, 29, 23,166, 65, 8,126,224, +121, 41,116, 26,111,159,121, 78,167,132, 87, 56, 82,184, 57, 86,110,179,167,118,199, 56, 6,230,249, 64,235, 1, 23, 12,173,234, +188,133,145, 68,160, 84,195,218,234,139,149, 90, 81,186,175,107, 8,211,115,187,219,179,217, 68,114, 3,158, 59, 78,167,129,243, +211, 9, 31,133,221,205,129,226, 7, 66,242, 72, 61, 26,252,165,219,229,252,181, 59, 95,227,103,127,238, 39,121,235, 93,161, 85, +165,207, 66,239, 9,230, 35,135,249, 26,239, 7,250, 65,216, 29,247, 72, 20, 11,223,121,165, 28, 51,207,159,239,248,203,191,248, +211,252,212, 79,125,196,223,251, 95,255, 41,205, 13,148, 58, 35,213,211,165, 19, 90,102, 95,140, 75, 95,154, 39,247,217, 30, 6, + 25,252, 16, 24, 70,101,147, 28, 57, 55,164,122,104, 1,109, 71,226, 16,113, 45, 18,165,163,147,183, 96, 90, 46,204,251, 35,226, +130,213,148,124, 68, 99, 94, 87,118,137,185, 24,251, 60,110, 38, 98,239,164, 24, 77,179,155, 76,102,210,235, 13,226,182,198,129, +167, 82,178, 71, 90, 38,156,108,237,227, 81, 59,163, 38,180, 22,136,110,173,116, 6, 6,159,200, 51,120,205,208, 59,135,171, 61, +206, 27, 89, 48,185, 0,117, 65, 98,131,205, 72, 8, 48, 22, 71, 28, 44, 37,174,179,192, 24,168, 20, 6,159, 8, 10,185, 54,196, + 47,171,134,115,165,123,246,181,174,151, 94,209, 78,189, 91, 53,216, 57,121,165, 33, 57, 85, 86, 44,185, 18,195,171,247,168,183, +214, 9,209, 33, 49,188,242, 67,189,230,142,182, 5,154, 34, 85,104,206,147,123,179,140,136, 15, 24,228,185,210,188,146,134, 4, + 65,240,109, 97,206, 74,207, 51, 67, 76, 22,172,237,152, 28, 44, 56, 74,175,228,110, 19,225,230, 65,124, 98, 88,148,154,102,188, +243,180, 93,165,199,129, 94, 51,201,159, 16, 84, 40,190, 32,125,100, 24, 11,119,183,224,167, 45, 65,212,232, 90,221,189,240,247, +177,118,187,141,236,246,130, 29,167,107,201,221,105, 39, 4, 71,235, 98,187,111, 58, 65,156,245, 68,213,250,177,226, 28, 26,250, +203,189,245, 11,102, 47, 42,107,181,196,110,103,138,163,151,102, 59,120, 53,225,132, 23,249,211,148,125,192, 18,201, 2,197,218, + 53,230, 0,199,244,171, 77,204, 52,165,206, 38, 8,104, 37, 73,124,121,128,171,131,170, 21, 23,213,148,174, 29,102,113, 84, 26, +177, 90, 2, 90, 66,176,223, 63,182, 92,245,222, 58,161,186,242,161,123,203,248,224, 25,196,198,252,234,192, 66,166,118, 81,241, + 43,141,200,137,101, 2, 52,120,178,118, 36, 87,124,140, 8, 22,140,219,207, 7,150,210, 24,182,194,114,189, 39,119,133,210, 24, +134,115, 82,252,132,165,205,156,157,108,121,120,125,196,197,200, 52, 58,242,110, 38, 58,195, 94,138,135, 80,131,145,244,186,114, +251,248, 43,254,251,191,255,191,113,249, 55,255, 85,202,213, 13, 63,248,253,223,228, 31,252,189, 31,178,185,251, 62,255,213,223, +253, 47,248,169, 31,251,144,223,249,189, 31,217, 14,172, 78, 76,211,192,120,122,202,233,201, 61,194, 52,113,172, 51,161, 70, 90, +104, 76,113, 68,210,150,131, 30,108,183, 81, 45, 40, 86,147, 82, 52,115,177, 61, 99,234,133, 71, 87,183, 72,235,156,142, 39,180, + 46,200,253,129,126,104, 28,107, 66,135, 76,174,149,232, 3,219,227,140,248,130,151,136,180, 68,113, 59,252,193, 81, 74,229,249, +243,199,228,195,158,143,223,191,228,151, 46,255, 6, 87,159,124,143,127,246, 7,191,203, 31,252,209,151,236,158,221,130,175,120, + 29, 88,178, 93,190,186,102,219, 24, 58,101,244, 9,146,146,177, 75,156,107,157,161, 22,174,159,222,242,189,239, 62,225,195,247, +239,178, 57,155, 56,204, 11,227, 90,107, 60, 22,197,143,158,253,205,115,158, 60,121,202,116,185,197,125,106,223,163,178,162, 80, +107,171,116,113,220,123,227, 62, 78,149,253,126, 54,232,146, 42,121,174, 4,133,190,234,123,253, 10, 96,161, 66,107,246, 51,208, +251, 26, 40,140,145,143,126,226, 39, 88,106,103,183,187,166,247,137,119,182, 23,184,250, 37,173, 53, 78, 82,227,193,120,195,249, + 48, 83,171, 55,183,193,168, 28, 23,207, 45, 91,134, 62,242,244,121,225, 56, 55,210,232,232,117,225,235,151,202,131,123,141, 52, + 36,118, 59,101, 41,194,137,207,188,126, 71, 56, 59, 31, 25, 90,100, 41,138,204,149,177, 55, 14,181, 80,107, 36,116, 71,148, 9, +124,163,180,108, 21,194, 33,216,215,218,157,173,166,186,174,118, 44,251,126,222, 31,246,248, 20, 25,199, 19, 84,149,171,219, 3, +211, 96, 41,248,185,206, 92, 4,225,245,179,215, 56, 30, 22, 91,134, 53,181,241,155,170,153,234,166, 55,120,255,131,111,243,209, +215, 47,233,204,168, 91,240,177, 50, 4, 69,250, 41, 12,123,110,123,166,133,132,243, 88, 61,107,236, 28,247,153, 63,252,193,231, + 92,188,118,135,159,255,249, 31,231,176,191, 97,119, 56, 18, 86,182, 64,165, 17,187,146,129,145,200, 81, 10, 77, 60,113,112, 6, + 96, 41,102, 95,116,125, 64, 37,163,120,142,199, 35, 16,137, 39, 39,182, 55, 95, 26,226, 26, 44, 14, 25, 18,117,104,180,131,224, +187, 33,122,155,171,244,210, 73, 62,112,104,149, 74, 96,244,158, 33, 88, 86,166,181, 78,215,132, 59, 86, 92, 0,167,145,226, 58, +117,238,132, 46, 22, 29,140,163, 1, 65,196, 26, 60,183,192, 20, 60, 94, 61, 49, 64,165,179,223, 85, 11,201,249,194,137,159, 40, + 90,113,209,115,226, 78,169, 53,115, 20, 71,235,145,208, 27, 77, 35, 91,111, 43, 5,122, 35,166,200,140, 18, 93,160,176, 30,136, + 62, 64, 53,119,122,237, 13,215, 7, 82, 50, 9,151,151, 87,115, 0,183, 98,175, 77,186,190, 50,217,202,139,151,250,218,189,122, +165, 30,245, 23,133,243, 23, 60,251,248,103,112,168, 31,150, 78,201, 5,205, 11, 77,236, 51,100,116,193, 30, 10,162,112,104,184, +208, 25, 3,228,226, 16, 34,199,195,129, 92, 64, 79, 38, 92, 61, 50, 22,243, 50,180,182,176, 59,236,172, 74, 30, 55,200, 80,153, +170,144,143,160, 81, 76,197,188,183, 73, 73,223,173, 88,244, 77,167,132, 68,200,133,148,148,125,114,140, 83, 36,108, 71,130,115, + 14,183,250,137,251, 10,142,161, 89,183,181,118,227, 8, 55,237,166,154, 20, 59, 64,181,217,190, 88,125,167,174, 35,201,174,118, + 48,186,181, 79,240,210, 77,237, 28, 98,154, 48, 59,144,221, 11, 7,185,125,104,202, 75, 12,161, 82,155,221, 6, 21, 11, 4, 5, +137,232,218, 9,198,137, 17,172, 60,168,132,213, 27,189,142,154,154,190,236,166,182,214,137, 33, 90,232,165, 40, 51,149,208,220, +138,140,176,157,186,118,123,221, 75,240,102,222,146,149, 64,181,246,232, 17,240,105,245,181,119,171,242, 69, 49,207,123, 89, 95, +251,193, 89,135,222,108, 6,216,126,177, 98, 65,160, 20, 81, 76,254,210,112,184, 38, 28,111,231, 21,187, 27,152,123, 65,220,132, +246, 78,169, 7,182, 39, 19,187,121,230,108,155,224,153,145,213, 68,250,218,139,175,232,216,233, 13,164, 52,170, 20,132,138,116, +225, 55,126,245,215,121, 48,110,248,225,159,124,143,207, 30,126,133, 31, 70, 98,108,252,214,255,254,235,252,163, 95,255, 39,112, +186,161,235,194, 56,194,233,233, 57,211,230, 4,130,163,249,206, 70, 38,250,224,105, 78,169,181,145,119, 11,101,169,148,219,130, +246,130,247,224,157,103,148, 17,106,102,191, 44,244,178,160,227,137,213, 55,154, 99, 72,231,108,229, 22,189, 29,145,180, 33,166, + 3, 42, 16, 87, 25,144,120, 71, 16, 79,240, 91,218,169,210, 41,182,146,241,129,223,255,221,143,249,205,127,252,135, 60,251,234, + 11,190,243, 7,223, 39,207, 71,251,223,134,129,188,100, 19,232,120, 27, 35, 74,139, 68,241,132,210, 41,199,140,118,107, 38, 4, +132,221, 97,225,246,249,194,197,249, 41, 31, 63,127,198,135,239,221,229,123, 63,120,204, 38, 5,174,118, 71, 84, 32, 87, 33, 41, + 60,254,228, 11,246,203,145, 44, 74, 80,193,105, 51, 47, 65,176, 62,175,212,102,166, 43, 55, 16, 38,171, 39,198, 84,200,115,165, +148,134,139,142,162, 7,106,233,160, 13,231,162,245,219,155,225,149,223,124,240, 22,131, 36,118, 55, 79,240, 41,113,234, 27,223, +124,251,154,178,187, 97,210,196,137,159,185, 60,111,248, 52,208,178,103, 62, 54,170, 23,252,222,113,230, 50,121,231,249,189,231, + 87,156,140,157,247,238, 86,124, 56,242,254,155, 19, 42, 35, 83,235,184,212,201, 67,227,194, 5, 82, 40, 12, 77,232, 61,227, 21, +134,168,212,230,168,197,176,172, 85, 42, 93, 32,161, 84,157,217,156,159,225, 73,220,220, 92,219,196, 71,108,127,219,123,163, 82, +144, 22,108,157,160,208,231, 35, 26, 19, 93,224, 80, 20,159, 43,131, 75,228,165,177,121,253, 28, 39, 95,113,200, 7, 70,111,162, +145, 20, 2,221,193,107, 23, 39,188,255, 78,100,222, 63, 39,157,157, 34,199, 25,202,194,114,244,108, 78, 4, 77, 35,203,141,224, + 3,132, 41, 81,175,142,184, 33, 81,230,103,248, 56,240, 75,127,229,207,243,248,122,199,255,244, 15,126,131,219,188,181,214, 73, +237,140,105,132,190,144,231,198,144, 20, 41,208,251, 76,157, 29, 50, 68,220, 88, 40,121,161, 19,104, 75,176,245,153, 8,131,183, +215,209,146, 5, 55, 52,107,219,104, 65,218,128,215, 74, 26, 3, 75,177,190,113,201, 74,151, 45, 75,153, 9, 65, 9, 13,198,141, +133,229,180,219, 33,173, 99,163,205, 2,139,181, 67, 92,110,148,178,160,211, 57,190, 88,168,181,117, 8,174,162, 46, 66,236,180, + 54, 80,124, 36,248, 35, 33,158,210,242,140,107,198,214, 88,180, 50, 56, 79, 37, 25, 52, 41, 37, 82,235,184, 12, 21, 71,152, 26, +251, 34,120,132,224, 61,222,117,186,235,212, 38,184,232,169, 94, 9, 90,113,193,170,174,234,101,205, 67,192,144,162,133,233,254, + 69, 95,164, 47, 40,156,198, 27,229, 85,158,234,218, 45, 63,229, 2,182,178,125,133, 74, 84,181,217,190,241, 85,228,207, 96, 0, +239,204, 29,226,130,133,136,117,201, 28, 92, 69, 67,135, 14,199,158,145, 14,203,254,192,162,138,119,129, 52,122,114,222, 19,115, +196,169,227, 58, 47,104,243,200,102,130,186, 39, 68, 71,201, 71,144, 96,153,140,218,233, 23, 16,151, 17, 61, 46,120, 63,209,157, +195, 69, 33, 23,199, 64, 67,166, 1,109, 66,216, 15,180,147, 1, 85,103,234,213,186,146,220,220,250, 2,126, 33, 37, 17,173,244, + 2,120, 80, 39, 54,238,177,175, 25, 89,173, 64, 22, 72, 55,228,168,136,189,121,123, 53,224,140, 56,195,196, 74,208,181,247,238, + 95,218,218, 36, 8,174, 91,223,180,136,189,254, 67,233, 70,105,179,108, 61, 90,250, 74, 73,242,166,105, 13,238, 37,228, 70, 87, + 31,186, 52, 16, 23,240,218,112,209,246,111, 93, 87,204,173, 7,175, 1,239, 28,157, 78,233,213,124,233,201,170,108,173,219,239, +169, 24, 83, 7,113,202,146, 51,163,143,244, 23,138,215, 33, 18,213,126, 93,196, 51,244, 78, 17,251, 16,111,205,106,122, 47,152, +198,234,214,222,101,173,102, 38, 83, 79, 28,132,227,114,224,217,245, 30,113,230,254, 22,231,233,171,215,250,252,100,224,114,115, +201,211,167,159,112,123,112, 4,113,244,210,185, 89,102, 68, 59, 75, 61,162,183, 66, 43,121,205,233, 11,110, 74,120,159,184,119, +118,202,179, 63,249, 1,159, 63,217,179, 73, 3,243,162,244, 37,243, 95,255,183,255, 11,239, 63,248, 6, 31,188,118,151,186,204, +140,147, 39,134, 13, 41,120,194, 16,109,252, 95,214, 28,132, 23,114, 87, 6, 60, 18, 58,199, 33,208, 90,160,110, 42,245, 32,116, + 9, 60, 59, 60, 98,127,123, 13,195, 57,113, 60, 55,249,197,198,246,148, 83, 58, 67,101,164, 29,247, 68, 23,168, 61,211,125,166, + 46, 2, 45,227, 55,195,202, 18,159,145, 16, 25,147, 67,162, 64, 17,254,199,255,249, 31,114, 60,220, 48, 93,158, 17,124, 52,220, +172,108,232,221,209, 5,162, 15, 12, 82, 41,190, 33,205,147, 38,143,239,157,122, 91,232,213, 67, 18,106,232,108,238,223, 37, 73, +224,243, 47,158, 17, 92,103,154, 70,110,247, 71, 66, 76,208, 60,145, 66,218, 38,118,199, 35,249, 56, 51,132, 64, 87, 65, 37,145, + 6,199,118,147,136, 62,209,114, 97, 95, 43,173,117,244,160,108,206, 2, 90, 29,105, 60, 97, 60,219,146,181,241,236,217,151,212, +146, 81,111, 74,217,160,202,210, 11,105, 28,248,214, 55,126,140,237, 80, 41, 1,194,206,241,237,119,149, 59,103,215, 92,103,207, +131,115,101,240,133,190, 9, 4, 81, 32,178,153, 34,199, 93,163, 13, 51,147, 14,124,124,221,216,229,133,111,191,127,193,253, 83, +101,218,130,171, 66, 89, 26,120,225,226, 98,164, 22,225,208, 26,187, 92,240,218,137, 94, 41, 77,121,246,180,241,241,227,202,126, +134, 97, 10,228,117,250,180,244, 74, 91, 10,119, 79,207,144,181, 9,208,234,145,218,140, 83,239,186,195, 87,187,232, 53, 87,208, +172, 20, 10,162,157, 97,216,208,221,176, 22, 92,162,129, 92, 92,165,107, 68, 57,172, 24,233, 68,111,153, 97,115,198, 7,239,190, +198,105,188,226,152, 3,203, 67,251, 32, 59,208,249,226, 7,159,113,113,103,195,229,233,150,179,184,229,234,234, 9, 67,172,164, +147,129,135, 95, 62,225,147, 47, 31,243,222,123,239,242,254, 27,247,249,245, 95,251, 71,252,211,223,251,148,175,125,244,109, 84, + 51,162, 66,153, 11,157,194, 68,162,173, 14,121,149,133, 82, 11, 30,187,156, 79, 50, 24, 80, 74,236, 64, 36,119,156,102, 10, 74, +105, 5, 87, 7, 66,234,104, 20,194,208,105, 59,203, 17,136,235,212, 50, 27,251, 59,206, 56, 77,164,186, 80,105,148,218,200,165, + 16,100, 75, 10, 74,138,138,140,145,242,172,144,155,178, 9,137, 58,140, 84,205,140, 99,160, 83,241,217, 81,245,204,106,134,243, + 17,221,120,164,206,180, 99,160, 31, 51, 18, 51,226, 79,113, 45, 19,188,101,110,196, 59,118,173,145, 2,171, 80, 38,210,129,201, + 9,109,227,144,108, 15, 12,117,138, 20,177,207,235,214,104, 81, 9,147, 95,149,165, 6,212, 10,210,208,206,122,160,203, 43,123, + 81,187, 53,244,252, 42,199,239,165,118,122,171, 47,205,118,175,178, 67,222,170, 25, 71,221,139,140,215,171,246,168,151,140,214, +138,170, 71, 41,230,134, 40,149,232,148,214,117, 13,185,121,188, 68,224,192,210,133,193, 71, 54,113,194, 21, 7,161,160,131, 35, +202, 25,173, 95, 67,111, 4, 85,162, 27,169,181,114,123,216, 51,134,192,188,235, 20, 60, 97, 82,166,144, 76,109,172,209,248, 25, +177,225,123,160,119, 97,220, 8,219,177, 35,241, 14,161,244,110,120, 66, 89,255, 52, 92, 67,196,140, 79,182, 71,121, 33,184, 80, + 74,183,195,182,175,254, 93,239, 2, 42, 13, 87,215, 68,172, 88, 65,172,203,154, 20,238,188,244,162, 91,218,188, 90,175,212, 57, +243, 82,235, 74,129,235, 14,137,246,107,224, 28, 78, 59,235, 90,222, 28,230,232,154, 48,246,150,194,151,117,111,191,206, 89,156, + 98, 70,159,222,112,125,197,194, 70, 71,167,218, 88,222,121,180,234,159,238,252,187,174, 88,215,110,254,113,214,144, 94,247,150, +228, 15,142, 90,236,215, 73,193, 91, 8,170, 53,138,235, 86,209, 83,208, 86, 45,108, 23, 60,185, 67,200, 98, 99,124,111,243,249, +193, 5,170, 70,106, 46, 44,183,123,150,222, 9,105,160,245,204, 50, 55,130,100, 62,249,226, 79,248,112,243, 1,183,187, 43, 11, +190,120, 11, 17, 82, 11,181, 86, 8,166, 70,173,205, 40, 93, 1,143, 87,161, 86,101,152, 38,238,159, 93,242,197,211, 47, 57,178, + 55,180,175, 56,198,105,203,102, 76,148,118, 11,121,203,157,187,119,184,184,119,202,197,249, 37,231,211,150, 99,203,102, 18,146, +140,215,129, 72,129,193, 49, 8,140, 62, 49,156, 42, 79,158, 29,233,165,210,199, 72, 98,129,185,114,240,145,139,113,160, 19, 88, + 78, 60,142, 72,236,133,138,210, 70, 79,105,139,193, 88,106,164, 19,113, 27,161,215,145,222, 35,121, 46,224, 18, 90, 10,183,199, +138, 12, 14,149,198,243,135,215,108, 6,207,185,156, 83,213,154, 20,234, 29, 36,203,116,156,196, 13,169,207,220,212, 91,114,173, + 84,237,132, 96, 12, 2,145,145,174,153, 97,156,216, 29, 23, 30, 95, 29,248, 75, 63,247, 77,254,217,119, 62, 35,165,136,230, 74, +136,194,193, 43,185,128,111,205, 56,233, 39, 27, 30,188,249, 30, 63,250,225, 15,217,239,143,156,108,206,153, 54, 91,114,107, 6, + 75, 66, 16,108, 90, 81, 14,176, 59,206, 40, 71,196,117,206,239,188,206,241,112,205, 50, 31,232,173, 91,250,158, 70,237,133,159, +251,232,219,252,244, 71, 35, 27,247,125, 24, 19,251,189,240,222,219, 23,132, 82,217, 78, 55,100,183, 71, 11,244, 99,101, 9,142, +180,221, 96,142,144, 43, 36, 55, 90,159,120,122,243,152,203,169,242,206,253, 17,234, 17,105,129,216,204,135,224, 70, 79, 8,137, + 92,102,122,169,196, 14,207,110,149,160,112, 85, 11,255,252, 81,224,217, 97,131,151,108,218,217,245,194,172,181,178,219, 29, 17, + 73,140,120,104,197, 20,186, 42, 38,218,193, 28, 69,120,197,169,163, 80, 45, 56, 88, 23,196,121, 78, 47,182, 22,104,242,157,185, + 21,244,208, 24, 93, 96, 81, 79, 16, 59,200, 90,247,220, 61,123,143,187,119,238,208,251, 21, 44,240,228,234, 25, 78,132,167,251, +133,155,157,146,221,130,106, 37, 68,144, 1,106,113,168,102,110,119, 59,142, 71,229,237, 7, 3,183,187,175,168,173,114,121,118, +159, 24, 38,150,156,193, 21, 52,140,212, 93, 69,221,145,112,220,144,151, 61, 21, 75,254,242,194, 5,223, 22, 98, 22,212, 71,147, +202, 56,179, 86,117,132, 20, 18,210,187,173,206,106,176,240, 81, 84,100,137,120,215,232, 81,153,188, 99, 89, 12, 14,146, 17,122, +173,196, 35, 12, 67,162,133,138,147, 72,191, 17,218, 16,240,163,163, 45, 11, 89, 43,195, 48,217, 31,105,232,116, 73, 84, 33, 8, + 95,170, 0, 0, 32, 0, 73, 68, 65, 84, 55,211,231, 29,209, 15,182, 26,204,197,186,210,131, 35,149,194,161, 8,154, 58, 49,120, + 60,201, 18,211, 85, 8, 27,123,152,232, 18, 73,106,240,167,138,199, 87,155, 96, 70,133, 44,214, 84,152, 54,129,158,149, 42,142, +158, 61, 93, 42, 49, 36,164,121, 99,134,111,163, 81, 53, 95, 85,232,172, 53, 74,135, 41, 58, 91, 61,189,178,241,251, 58, 5,241, +193, 76,128,175, 16, 60,211, 91, 55,201, 77,144, 87,121, 95,120, 57,189,152,231, 74,161, 83,209,213,230, 41,244, 8,186, 56, 90, + 43, 20, 7, 69, 51, 67, 12,120,127,198,112, 20,202,124, 75,143,157,197, 57,150, 54,147,116, 68, 91,164,239,142,224, 77, 15,235, + 4,178,175,228,170, 6, 83,139, 30, 63,154,252,230,234, 80,172,253,144,187, 61,118,122, 64,202,192,152, 26,167, 37,241,198,217, + 4,195,134,160,107, 34, 93, 86,216,173, 39,130,118,148,106,220, 98,177,122,153, 95, 95,171,234,186,113,165, 49, 82, 83, 23, 59, +196, 17, 75,191,135,117, 4,111, 59, 59,187, 65,106, 87,188, 42, 90, 29, 4, 11,219,105,239,107,221,204, 94,248,189, 53,164,219, +171,183,170,117,166,131,120,219, 51, 4,135,215, 70, 95,247,255,182,168,239,168,120,156,216, 5, 64, 86,232,141,199,180,172, 68, +193, 53, 59,132, 91, 55,188,231, 16, 34, 34,197,234,169, 62, 16, 2,235,175, 99,255,205,250,234, 46,117,117, 75,247, 74, 41,138, +186,134, 15, 30,167,141, 42,127, 58,210,105,216, 95,132,198, 72,201, 74, 8,222, 80,183, 62, 49,231,142, 4,195, 42,238,247, 7, + 14,135, 3,138,103, 24, 18,251,253,115, 46,207, 46, 57, 30,111,248,131,223,255, 14,181, 22,238,221,249, 0, 45,183,184,114,100, + 81,163,103,133,120,202, 24, 19, 75,201,116,129, 92, 10, 78,133, 97, 72,108,134, 19, 78, 38,199,243, 92,185,185, 57,178,116,199, +112,114,201, 73, 28,185,126,246,136,231, 79, 31,242,240,209, 23,108,130,231,236,181,251,188,243,238, 7,188,121,247, 53,228,228, +132, 20, 29,219,105, 2, 31,232, 88,239,181,107,161,170,195,119,101, 59,101, 60, 19, 61, 43,195, 56,177,185,255, 77,222, 67,249, +209,199,223,165, 30, 3,149,136,143, 19,245,234,128,108, 51, 91,239, 57,248, 83,154,100, 35, 8, 14,137, 56,116,114,235, 28,230, + 66, 26, 28,170, 3,251,178, 88,208,181, 57,178, 55,150,246,233,230, 1,177,120,227,231,107, 92,195, 73,145,232, 70, 68, 43,199, +212, 9,135, 13, 33, 57,186,100,230, 82,145, 48, 49, 36, 5,157, 24, 79, 70,158, 63,125,198,231,159,126, 69,124,251,146,101,173, +249,196, 40,204,205,164, 23,121, 41,134, 83,244,157,225, 98,224,206,221, 51,174,111,206, 44, 23, 33,194,177, 44,200,210, 17,175, + 70, 93,235, 14,159, 18,113,115, 73, 58,105, 92, 95, 95,113,125,115,141,120, 37,109, 34, 91,189,228,217,163, 47,144, 21,118,244, +254, 27,151,252,181,191,250,179,188,119,127,161,151, 72,109,194,197,201, 29, 59, 92,229,128, 27,131,213,189,156, 18,123, 52, 51, +211,241, 6,188,199,215, 72,247,202,211, 67,225,102,158,121,239,193, 57,163,107, 84,215, 57, 30, 28,105, 18,134,104, 96,153, 86, + 14,180,146, 57,204,157, 93, 22,190,218, 55,118,123, 79,119, 91,142,205,227,250,142,222,205,150,102,253,179,202, 97, 62,114,172, + 71, 66,142,196, 62,154, 98,185, 8,226,219, 10,222,177,160,170,107,142,210, 26,221, 11, 90,161,119,171,235,105, 83, 19,245,108, + 60, 49,110,104, 77,168,174,224,157,229, 73,180,119, 36, 54, 46,238,143,108, 79, 34,174, 71,242,174,147,162,242,213, 85,230,217, +245, 45, 85,148,199, 55,157,222, 54,156, 36,199,249,249,192, 56, 38,126,247,123, 63,226,211,199,153,183,223,188,195,152, 60,215, + 79,159, 81,197,177, 61, 57,133, 96,212, 53,231, 71,218,188, 71,146, 85,240, 74, 40,248,226,161,111,193, 45, 20,109,248, 69,145, + 41,161,163, 3, 6, 27,153,183, 66,155, 34, 3, 9, 84, 89, 56,224, 90,196,233,200,241,118, 79, 26,133,153, 5,209,128,138, 35, + 54,143,196,153, 58,232,186,107,183,203,101,206,118,144,150,177, 33, 18, 72, 34,180, 32,140,109, 67,144,138,175,133,158, 58, 82, + 3, 78, 42,117,105, 12,120, 92,129, 57,218,138, 39,166,196,109,171,140,110, 67,240,149,160,134, 62,206, 89, 25,214,212, 64, 60, + 0, 91,144, 36,180,157,146, 78, 58,185, 90,144, 42,224,168,189, 16,170, 35, 56,161,228, 10,234, 25,221,202,201, 16,177,209,188, + 54,251, 68,205, 66, 12,227, 43, 26,145,219, 1,169,173, 89,240,238, 21,141,178, 21, 91,227, 54, 53,195,230,171, 36,190,189, 72, +213, 55,237,140,222, 35,175, 26, 60, 83, 49,177, 83,207,104,155,113, 62,114, 40,149, 29, 13,183, 52,150,185, 67, 4,223, 61,146, + 27, 42,133, 92,161,187,206,156, 43,219,148,104, 75,199,245, 10,163,163,199, 17,245,133,152,128, 30,173,234,184, 85,202, 98,134, +200, 45, 39,168,102,124,115, 72,143,180, 97,135,196,192,152, 59,199,114, 75, 28, 78,152, 54,158,241, 34, 0, 35,193,169, 5,226, + 4,135,118,104,107,191, 58,132,132,128,245, 56,157, 67,213,198,242,218, 42,222,219,168, 25, 85,180, 10,126, 48, 12, 44,152,220, +196, 14,109,183,250,100,205, 25,172,125, 61, 56,155, 85,146,116,173,199,121, 81,208,106, 0,147, 0,116,179, 96, 5,137, 72, 8, + 92, 94,156, 51, 12,142,229,112,195,205, 97,161,181,213, 33,174, 6,178, 49,175,184, 32,205,162,255, 46,120,170,107,107,101,238, + 5, 33, 12, 82, 84,122,183, 90,152,243, 70,190,243, 88, 45,165, 7,144, 20,113,221,227, 93,197, 87,172,195,190,186,222,107, 47, +160, 1,105, 13,231,132,236,186,165,242,187, 91, 31, 62,157,234, 58,226, 59,209,156,168,180, 96, 29,117,109, 66,235,182,223,239, +174, 34,125, 64,189,114,123,216, 17,131,144,155,240,198,107, 31,178,241,141, 79,175,174,104,186,210,239,214, 10, 94, 76,158,188, +207,212, 98, 58,217,232, 5, 55, 6, 78,182,145,165,205, 92, 31, 50,170, 13,231, 7,238,220,123, 27,157,111, 25, 37,177, 73, 39, + 92,149, 35,181, 43,122, 61, 50,125,241, 37,199,229,200,246,244, 62, 67,130, 97,123,202, 52, 25,226,179, 84, 91,161,228,155,163, + 93,144, 54, 35, 67, 18, 54, 39, 27,124,234, 72,128,187, 23,151, 32, 31,241,240,209,129,154, 29,109,242,248,225,130,105,232, 92, +237,111,240, 30,184, 41,244,152, 8,174,226, 73,140,147, 25,188,150,155, 27,114, 94,144, 20, 45, 41, 42, 66, 62,220,226,212, 91, +184,168, 41, 67,138,150,112,142, 27,180,117,130, 8,131,247,220,118, 51, 38,213,101, 38, 75,224,116, 60,161,236, 50, 89, 10, 39, + 46,178,245, 35,179, 15,156,223,123,131,207, 31,126, 6,181, 18, 84, 56,104, 32,183, 2,218, 12,104, 84, 58,103,219, 75, 62,120, +240, 54,127,242,233,199, 44,203,194,249,233, 22, 45, 22,254,204,222,204,122, 90, 27,185, 86,124,245,120,217, 49,158,156,208, 78, + 78,185,109,141,221,237, 30,113,129,209, 37,166,113, 67,173,123, 6,231,249,133,191,248,231,121,235,190, 18,218, 21,112,129,115, + 66, 11,247,184,122,246, 59,244,186, 35,164, 17,137,142,190, 84,170,108,225,133, 88,101,216,160,139, 16,198,200,243, 79, 22,134, + 0,111,190,249, 22, 97,255, 4,188,146, 67,231,201,109, 36, 53,207,205, 82,184,174,157,221, 34, 60,217, 37,118,205,122,226,218, +109,143,171,189,210,250,130, 95, 93,226,121,213,225, 82, 11,117, 41,180,100, 97, 57,137,206, 32, 71,109,253,249,117, 47,186,247, +129, 41,121,114,110,104, 40,150,122, 87,207, 60,207, 76,227,192,128, 85, 8,251,232, 9,155, 19,244,248, 28,145,110,202,147,238, +233, 42, 28,231, 25, 23, 26,187,118,224,241,149, 82, 14,217, 68, 37, 37, 48, 47,133,230, 21,231, 35, 31,127,249,132,249,176,240, + 39,159, 62,103,216,108,248,115,223,186,199,148, 60,173, 0,179,210,130,224,124, 96,144, 5,137,157,190,203, 44,174, 51,196,141, + 57,236,181, 82,189, 2, 5,223, 32,171,112,238, 29,222, 7, 68,141,243, 32,234,113,100,186, 83,170, 7, 45, 1,113,208,100, 33, + 40, 80,204,212,214,218, 66,147,196,210, 0,239,232, 55,153,232, 6,252, 4, 69, 61, 33, 0, 81, 40,185,179,149,142,239, 66,158, +103, 60,158,133,110,211,157, 49,176, 91, 22,156,131, 81, 28,105, 27,233,189,208, 23,197,199,201, 46,148,181, 64, 90,112,147, 71, +250, 13,180,173,241,224, 69,233, 12,244, 37, 51, 5, 97, 55, 31, 25, 91,192, 21,165,212,192, 52, 36, 91, 55,174, 14,132,165, 47, +140, 50,224,157,193,127,124, 52,181,179,116,140,159, 16,133,228, 29,225, 21, 85,207,230,102, 97, 82,131,140,188,218,189,119,111, +171,111,225, 21,115,217, 85, 49,117,120,111, 68, 31,254, 76, 16,177,173, 43,154, 51,173,175,172, 3, 23,136,116,186,216, 74,132, +172,244,122,228,166,102,170,111, 70,222,156,149, 40,142,161, 22,138, 15,168, 4, 60, 55,116,151,169, 69,241, 1, 68, 35,222, 55, + 92, 80,106,177,250,226,190, 45, 4, 45,184,164,184,214, 80,239, 89,118,133,192, 64,216, 2,181,178,212, 35, 66,178,169,144,240, + 34, 37,104,175, 76,100,117, 16, 11,150,238, 94, 69, 47, 43, 73,214,222,225,202, 42,226,120, 33,106,183, 80,194,203,174, 97, 87, +139,165,169,165,230, 29,198,137, 23,103,251,110,109,110,197,175,154, 9,170,183, 66,119, 21,237,206,186,180, 82, 17,237,164,233, +156, 59,111,188,206,217,208,153,119,158,246,217, 99,110,123, 3,204,222, 85,105, 43,174, 83,112, 81,104, 69, 13,237,105, 75, 0, + 75,216,171, 32, 93, 41,182, 59,192, 27, 22, 11, 80,102, 53,208,135,235,178,226,113, 51,210, 3,221, 57, 83,190,174,106,119,239, + 61,173,214, 85, 34, 99,223,219,185,170,165, 75,163,117,236, 67, 15,248, 44,232, 24,204,176,227, 3,174,219,101,227,222,107,175, +241,240,225, 99,158, 94, 31,214, 17,139, 82, 41,244,218, 8,227,134,214,247,124,241,244, 41, 57,103, 80,225,152,139,189, 30, 4, +116,110,180,185,173,126,122, 15, 40,135,227,204,220, 27,185, 64,157, 43,209,121,222,254,218,183,233,243, 53,251,122, 32,164, 13, +155,237, 5,143, 31, 62,198,159, 78,180, 80, 89, 92,224,226,244, 46,127,243,223,252,107, 60,252,236,135,124,250,232, 57, 65, 2, +185, 20,206, 46,206,185,253,234, 49,187,155,199, 60,122,250, 57,234, 54,220,187,115,194,131,123, 15, 56,185, 51,114,184, 90,248, +234,211, 79, 25,166,115,110,118, 79, 56, 30,110,201,143, 26,195,118,224, 52,221,225,152, 11,189,237,113,227,132,106, 69,116, 32, +249, 17,113, 11,149,202,174, 39,246,229, 96, 44,253,174,136, 44,156, 57, 72,231,119,241,201,126, 95,146, 48,232,199, 92,136, 18, +105,131,146,221,128,235,194,210, 50,219, 96,156,113,209, 70, 58, 17,146,110, 94, 74,154,211,144,120,227,181,187,124,185, 60,162, + 73, 39,164,137,190, 44, 80,149,224, 3,125, 4, 87, 59,151,119,207,200,181,114,253,244,136, 75,182,118,242,209,175,232,218,134, +180,132,136,112,122, 49, 65, 28, 88,110,247, 60,122,248, 5,209,143, 56, 55,161,249,150, 38, 51,195, 24, 57, 63, 57,103, 87, 60, + 95,187, 55,241,237, 15, 71,194,242,125,188, 27,108, 28,236, 46, 9,113, 15,245,154,219,167,157,105,112,164, 75, 32, 4,234,254, + 64, 62, 42,155,141, 25,208,186, 40,101, 63,241,201, 23,215,188,246,218, 25, 3, 98,200,199,131,114,123, 29,249,254,147,142, 50, + 49,183,200,145, 78,171,138,243, 1, 79,162,181,133,105,136, 28,187,218,135,122,242, 86,233, 44,213,210,251,173,145,243, 1,122, +161, 82, 8, 17,198,148,184, 89,172, 54, 19,253,250, 51,154, 2, 67,220,210,234,158, 90, 22,220, 24,236,231,211, 7,164,218,106, +170, 40,104,109,120, 17, 98,243,102, 42,116, 98,106, 88, 38, 82,169, 44,243,142, 62, 28,137, 67,224,250,240,156,249,250,192,233, + 40, 56, 13,148, 82,249,236,233, 21, 55,135,206, 97, 62,240,213,211, 35, 85, 60, 63,255, 19,111,112,118, 17,168,217, 17, 93,226, +238,105,228, 90, 35,243, 44,148, 86,241, 71,112, 62, 26,209, 77,132, 99, 86, 74,237,136,235,244, 22,241,100,226,152,144, 26,168, + 5,116,222,147,210, 72,143,141, 86,161, 4, 27,152,186, 26,144,168,232,146, 45,247, 50, 36,154,107,132, 42,208, 15, 84, 21,180, + 69,203, 98,123,165, 46,130,243, 16,135, 68,169, 74,162,210, 71,101,151,175,173,170,187,237,196, 18, 17, 55, 82,231,229,165,181, + 82,169,104, 78,184, 65,136,113,203, 54, 36, 22,157, 41,162, 56,201, 56, 61, 99, 62, 86,100, 56,144,206, 78,152,119,141, 33, 31, + 73,147,167,214,192, 32,194, 48, 37, 52, 26, 75, 67,157, 48,215,204,169, 31,204, 99, 95, 3,189, 67,138,198,194,104, 93,233,234, +140,217,225,148,212, 34, 61,192, 48,196, 87,118,128,149,218,232,194, 43,187, 40,152, 12,197, 40,127,171,171,243,213, 30,186,106, + 25, 46,165,191,114,244,236,139, 11, 73,174,149, 78, 99,144,198,161, 54, 90,114,132, 18, 41,131,226,103,165,116,101,118,130, 31, + 60,174,155,173,109, 78,224, 39,184,189, 61, 34, 64, 58, 59,165,149,192,221,205,192, 56,188,198,167,143, 31,210,229,150,224,134, +245, 66, 24,144,158,144,182, 24, 91,162, 10,153, 10,123, 91,139, 47, 73, 25,117,160, 83, 57,220, 30,104,199,211, 21,190, 38,158, +130, 29, 76, 47, 14,111,117, 74, 89, 42, 62, 68, 75,188,175,181, 23,145, 53,245,254,130, 3,223,108,167,208,170,174,135, 59,136, +154, 62, 83,165, 19,124, 91, 15,214,149,178,182,210,227,156,172,114,151,214, 76, 91, 25, 34,165, 23,179,220,200,154, 64, 87, 12, +244,176, 88,162,176, 46,139,201, 25,122, 71,130, 97, 95,253, 10,139,168, 43,129,206,121,219,153,171,130,171,182, 22, 8,235,142, +187,174,147, 2,143, 16, 28,171, 36,113,173, 31, 72, 39,106, 36,120, 40,205, 38, 7, 62,202,203,218, 29,226,137,226, 44,128,179, + 20,156,179,148, 49,222, 86, 4, 78,141, 66,167, 93,233, 75, 65,131, 81,246,154, 8,209, 85,210,102,226,131,247,222,103,247, 71, +127,204,178, 28, 24, 37, 90, 99, 0, 40,251, 91, 30,214, 25,223,197,114, 6,210,193,195,224, 45, 48,177,239,133,224, 18, 26,108, +143, 79,112,164,232, 73,125, 64,106,103, 94, 22,206,238,127,192,223,248,165,127,141,223,254, 39,255,144, 79,230, 61,219, 97,224, +201,213, 87,180, 30, 24,211,196,197, 48,113,122,182,229,151,127,249,151,249,137,175,191,205, 55,191,246, 14,251,227,204,126,183, +231,246, 56,243,181,247,222,227,211,239,253, 62,255,205,127,247,247, 89,230,206,156, 31,113, 56, 92,113,253,204, 46, 26, 15, 63, +255,156, 90, 58,151,119,238, 48,110,207,216,223, 62, 33,239, 51, 37, 41, 99, 56,225,124,123, 74,220,156,226,134,204,228, 59,135, +253, 13,199,179, 17,223, 43,173,154, 88, 39, 46,137,188,236,201,185,115,122, 18,217,108,238, 16,211,136,182, 74,247,157,227, 30, +134,193,136,105,201, 9, 18, 3, 75, 62, 48,169, 35, 71,225,216, 60,137, 72,119, 29,245,141, 9, 15,154, 9,131,231,141, 7,247, + 57,153, 2, 15, 94,187,207,197,217,196,243, 91, 24,134,129,155,253,108,148,187,158,185,185, 61,112,187,223,147, 54, 35,219,205, +150, 33, 38, 83, 91,170, 82,251, 72,234, 21,136, 44, 75,131,158,120,240,218, 5,135,243, 19,234, 39,157, 58, 23,198,205,134,158, + 46,184,189,126,204, 97, 57,226,186, 50, 58,207,207,255,244, 91,156,159, 60, 71, 57, 82,218,129,206,192, 77,125,147,171, 79, 62, + 97,170,145, 97, 88,236,251,120, 78, 52,109, 28,103,120,248, 36,242,250, 70,152,134, 35,185, 58,190,255, 72, 56,118,229,237,119, +239,211,111, 31,114,117, 93,248,254,179,137, 71,187,200, 81, 29,212, 10, 33,226, 58, 4,215,136, 30,122, 20,164, 4, 90,237, 4, +239,112, 65, 89,154,129,152,186,235,107, 75,165, 83, 74, 33,172, 89,146,121,127, 68,123, 93,229, 28,138,182,142, 15, 66, 26,183, +120,231,216, 29, 26,193, 39,220, 48,216,234, 64,133, 30,155,165,171,215, 85, 88,239,206,172, 84,206,160, 82, 69, 42,222, 87,142, +249, 57,165,193,245, 83, 35,234,149,249,150,180,137, 70,111, 67,169,187,204,237,225,200,163,103,141, 45,141,186, 56,190,246,141, +251,124,240,238, 93,202,114,228,171,175,174, 24,211,158,146, 28, 62,109, 41,117,193,185,200, 50, 31, 80, 47,120, 25,200,203, 76, +119,141, 19,159,232,170,204, 44,100, 17,124, 46,228,105,100, 83, 58, 26, 77,142, 90,102,243, 48,120, 28, 82,149,193, 69,230,118, +228,216,149, 41, 12,168,247, 68, 21,235,230,103,135,159, 18, 37, 43, 74, 64,179, 66, 84,188, 91, 40,213, 83,107,182, 15,198, 57, +226, 93, 39,250, 72, 89, 58, 89, 58,155,112, 36,149,128, 15, 27, 10, 71, 98, 28,169, 71, 97, 19, 18,221, 43, 26,138,125, 29,251, + 83,114,157,241,165,208,195,132,180, 78,223,121, 54, 93,169,222, 51,183,136,104,101,136, 19, 77, 2, 3,235, 78, 21, 8, 83, 36, + 75, 33,100,111,144, 32, 1,237,141,144,176,149,149, 10, 4,163,219,169,116,123,108,201,171, 58,124,187,253,167,174,166,187, 87, + 8,111,233,181,219,251,138, 87, 13,158,105,212,106, 24,230, 63,139,127,106,195, 2,225, 10,234,141,143,210,231, 35, 4,199, 38, +193, 46,139,125,182,120,133,217,112,176,221,123,228,194, 81,151,142,139,158, 78,132, 42,220, 81,207,143,255,248, 5,253,252, 13, +110,255, 96,224,249,103, 63, 50,234,163, 27,193,109,104,109,135,139,138,246, 68,211, 74,243,141, 20, 6, 98,140,116,153, 65,148, + 50, 12, 68, 34,103,247, 46,128, 13,161,139,174,230, 29,147, 20,168,174, 60,244,224, 95,248, 86, 13, 31,187,238, 42,100,181,102, +181,106, 47,112,212, 88,217, 34, 38,136,123, 17, 26, 48, 20,165, 73, 47,140, 34,103,187,233,168,214, 61, 93,111, 9,120, 10,101, +149,128, 68, 23,168,173,226,197, 18,157,249,120,195, 87, 95, 53,110, 82,167,236,103,230,190,238,243,213,200,113,254,197,129,235, +236,114,161, 88,199, 61, 5,139,179,235, 11,191,177,218,104, 3,188, 37,190,233,107, 0,208, 46, 16, 85, 27, 93, 23,122,119,134, +164,244,171,134,214,153, 27,185,228, 74,242,142,150,197,176,183,106, 76,230,136, 82,114, 37, 79,158, 97,136, 72,105,208,189, 57, +219,125,165, 85,165, 58, 75,226,158,223,191,203,135,249, 45,254,248,123,159, 82,214, 42,132, 87,103,166,178,125, 93,137,120, 70, +180,243,193,250,252, 37,103,211, 75,246, 14, 5,187,204, 44,160, 34, 92, 94, 94, 32, 42,220, 28,247,124,253, 39,222,160,203,194, + 91,239,126,157,234, 29, 79,159, 60,230,201,245, 19,198,225,130,200,132,106,224,205,119,191,198,183, 63,122, 27,128, 24, 19, 23, + 49,113,113,118,246,242, 27,245,195,111,253, 24,239,125,231,183,121,252,229, 83,174,142, 71,158,127,245, 57,223,221, 45,204,199, + 29,119,206,206,136,226,249,225, 39,207, 57,217,158,178,137, 17,239, 60,219,120,151, 41, 37, 72,142,203,251,247, 17, 31,184,185, +122,206,211,231,159,192,117,165,139,208,171, 16, 83, 34, 33,212,195, 53,251,249,200,102,124,151,182,157, 56,157,162,165,151,241, +244, 13,140, 45, 32,163,245,162,123, 85, 98,130,124,124, 81,148, 52, 5,234,152, 26,162,131,145, 13, 81, 28,129,111,125,235, 3, +198, 77,231,147,239,239,152,111, 14,236,111, 51,219,147, 83, 54,243,129,249,184,227,234,249, 42,210,137,194, 69, 19,158, 31, 42, + 97, 18,134,148,136, 58, 65,128,113, 59, 17,211,134,109, 83,246,135, 29,160,188,126,127,195,103,159, 6,138,203, 4,102,194, 56, +225,110, 21,239,140, 54,248, 19,239,188,193,143,127,253, 14, 33,238,112,213,130, 63, 7,222,225,187,159, 55, 62,253, 65,231, 98, +184,100,138, 25,161,178,180, 3,203,226, 56,230, 45,187, 99,228,203,180,224, 93, 69,219,196,199, 95,222,242,209, 91,151, 76,126, +195, 15,190,220,241,195,175, 28,143,143, 1,141, 29, 63, 90,211, 36, 72,231,116,147,200,226,108,133,165,130,250,128,168,112, 46, + 59,170, 86,118, 8, 61,152,246, 84,164, 81, 98, 65,198,141,161, 75,187,154, 65, 42, 4, 68, 23,132,129,142,117,176,125,247,224, + 76,105,108,216,211,110, 53, 29,223,201,181,146, 98, 2, 23, 24, 16,164,174,136,101, 32, 55,251,208,191, 60, 29,144,161,177,155, +111,169, 10, 90, 11, 45, 87,180, 11,183,168,173,244,162,231,245,187,167,124,250,229, 87, 60, 58,102,222,184,115,198, 71,175,159, +144,175, 15,248,109,224,236,236,132,231,143, 14, 60,203, 51, 85, 78,232,245, 72,217,119,156, 79, 40,133, 86, 42, 42,142,193, 53, +122,183,238,111, 79,129, 97,132, 88, 54, 12, 62, 50, 68, 40, 93,112, 85, 24,156,125, 62,149,118, 68,113, 28,252, 14,221,119,198, + 48, 34,234, 8,135,110, 33, 71,233,244,113,130,214, 25,112,228,222,144,113,160,183, 3,218, 60,189, 31, 8, 97, 34, 57,168, 82, +145,238,225,232,136, 41,152,114,118, 39, 44, 46, 19, 91,176,222,124, 28,160,216,159,175, 40, 44,173,152,222,121,109, 91,148,210, + 72, 81, 41,101, 64, 99, 67,181, 82,196, 86, 64,246, 9,160,204,237, 64, 83,240,217, 19,199,129,249,144, 25,146,199,123,199,232, +215, 26,166,115,212,210,113,216,103,147, 4,111, 96, 48,111,135,240,245,227,231,156, 93, 88, 56, 56, 4,135, 11,209, 72,161, 47, + 74,220,238,255, 95,226,188,150, 74,175,217, 46,128,238, 85,190,118,173,149,160,205,194,175,175,114, 52, 62,151, 70,171,118, 34, +216, 90,248, 21, 31,234,165,145,115,129,214, 40,185,179, 84,155, 10,151, 37,115,212, 76,242, 3,168, 32,189, 83, 57,224, 38,143, +175,158, 90,103, 11, 86,203,150, 92, 23, 92,237, 92,183, 61, 79,159,102,114, 61,103,190,217,209,203,204, 52,194,210, 59,199,221, + 66, 72, 13, 81,103, 21,237,110,109,178,236,151,245, 19,113, 67,102,199,184,158, 37,211, 38, 0,129,224, 83, 48,171,153,186,245, +118, 39,235,193,214,205, 45,174, 6,250, 80, 5, 9, 66,119,214, 53,151,117, 39, 39,206,104,109,162, 98,206,116,233, 16, 20,154, +195, 20, 4,245,101,191,209,137, 95,211,231, 29, 93,148, 24, 61, 93,108,132,174,226, 40,235, 24,166,211,204, 45,174,157,195,110, +207,193,214, 90,118, 83,116, 98,216, 78, 93, 95, 14,246,133,224, 89,237,112,145,181, 63, 94, 13,215, 40, 1,117, 38,156,241,252, +233,133, 68,197,118,214,116,197,117, 71,193,118,170,209,121,186, 87,122,151,151, 97,163,214, 87, 0, 64,104, 22,186, 80,160, 41, +181,117,124,176, 32,142, 46,230,108,111, 44,168, 56, 88,108,204,222,139,224, 82, 66, 69,120,227,245, 55,185,185,190,229,179, 71, +207,137,226,169,218, 80, 58,209, 91, 47,209, 59,191, 82,150, 76, 45,235,147,141,169, 10,141, 0,144,205,245,157,134, 13,120,184, +126,246, 4, 23, 19,148, 35,223,249,173,127,204,102,154,120,227,226,156,175, 62,251,140,165, 54,210, 52,211,218, 1,137,167,188, +253,238, 3,254, 63,127,118, 36,242,206,131,215,249, 63,253, 31, 17, 36,226,138,199, 71, 79,204,145,179, 59,247,216,166,137, 59, +193,155, 19, 64, 32, 52,208, 65, 40, 58, 51, 31, 27,159,125,254,199,148, 67, 70,186,208, 68, 57,191, 56,103, 94,102,174,175,158, +145, 75,224, 80,109,191, 29, 61, 92, 63,254,130, 82, 14,156,110,223, 97,228,148, 62,118, 98,114,230,222, 81, 8,189, 82,168,132, +193,104, 95,139,243, 76,163, 99,222, 31, 16, 54,104, 20,134,170,204,205,170, 62,219, 77,100,222, 29,136, 67,194, 79,129, 71, 31, + 63,228,114,233,120,167, 60,189,186, 37,151,202,102, 19, 95,126,239,229, 92,217,229, 70,244, 51,163,159,241,201, 83,203,194,217, +208,184,123,119, 34,157,142, 60,122,120,195,178, 12, 76, 49, 49,151,153,146,139, 53, 43,198, 17,237,202, 4,252,228, 79,190,203, +201,137,135,230, 88, 42, 28,143,129, 47,110, 28, 95,126,254, 20,245,157,135,255, 55,107,111,250,107,105,118,221,231, 61,123,237, +189,223,225,156,115,167, 26,122, 98,119,115,104,145,212, 44, 43, 98, 20, 11, 49,236, 36, 78, 12, 59, 1, 2,229, 67,254,199, 32, + 64, 62,248, 67, 32, 25,178, 44, 71,137, 13,107, 8, 4,137,146,104,138, 83, 23,123,170,234,170,186,117,239, 61,195,251,190,123, + 90,249,176,222,106, 54, 25, 82,148,168, 38, 64,128,133, 70,119, 23,171, 78,157,189,247, 90,191,223,243,204, 1, 57, 12,102,136, +139,103,148, 57,227, 98,132,190,176,159, 58, 36,121,174, 46,223,128,250, 13,144,142, 63,255,238,158,111,190,215, 81,124,135, 12, +171,107,122,137, 4,111, 75,178,154, 13,196,164, 50, 50,248,202,208, 11,125,218,243,122, 44,124, 99,170, 54,137,202,213, 2,120, +162,164, 98,230,176,162,144,231, 9,105,149, 14, 33,210, 83,154, 85, 71,155,139,164, 60, 17,136, 68,111,129,213,150,101, 69, 69, +103, 46,130, 29, 30,117, 73,184,208, 81,245,196,225,100, 2,139,178,204,244,195,200,217,217, 37,157, 4,234,220, 56, 29, 14,150, +159,105,142,235,195, 9, 87, 13,183, 59,110, 60, 69, 22,156, 64,191,219,240,198, 27,103,244,190,242,254,179, 91,194, 33,114,209, +141,188, 56,205,236,231, 74, 55, 22, 90,233, 80, 55, 17,196,170,170, 77,178,193,175,138, 77,217, 36, 52, 66,205,184, 57,128, 24, + 95,125,159, 42,155,205,134, 46, 70,102,141, 28,245, 68, 87, 5,209, 64, 1,134,179, 72,192, 81,114,163, 69, 33, 29, 10, 72, 37, + 68,251,126,211, 48,211, 14, 74,173, 86,243,245,189, 82,181,162, 58,227,180,163,181, 74,223,247,212,148,208, 10,131, 12, 76, 84, + 98, 44,104,173,214, 23, 94, 76, 81,218, 74, 35,132, 30, 29,188,113,255,155, 34,157,224,165, 81,176,124,129,111,222,208,177, 65, + 73,139,130, 68, 14,167, 2,161,216, 33, 61, 88,127,216,213,130,138, 49, 37,156, 51, 67,100,193,196, 84, 47,159,228, 90,234,186, + 79,142,148, 46,240,241,169,113,147, 79,132,160,244, 49, 16,186, 96,171,199,106,141, 34, 31,173,233, 99,181, 47,183,250,172,132, +178, 2,102,156,179,169,229,188,159,168,171,236,105, 73,137,193, 82,201,159,201,107,186,214,130,188,116,140,124,118,204, 25,112, +110,229, 11, 84,250, 62,252,189, 71,235,238,167, 92, 26,142, 75,161, 78, 22, 44, 70,192,123, 40,174, 99,185, 75, 38, 70, 27,171, +169,177, 81, 58,221,224,114, 34,231, 61,174,101,202, 12,197,109,172,155, 63, 84,242, 97,161, 76,130,191,240, 6,128, 83, 56,150, +104,159,237, 48,209, 92,207, 72, 64, 83,166, 31, 2, 9, 11,160, 55, 63, 80,189, 16,107, 7,199,142,214,101, 26,211, 90,123,198, +202,255,165,148, 85, 93, 26, 0, 51,160,137,154,112, 69, 81, 8, 1, 81,235,203,218, 56, 93, 76,215,138,213,197,212, 55,227, 72, +139,133,141,154,135,162, 25,215,108, 44,132, 19, 59, 40,221,203,154,154,165,148,179,218, 97, 27, 86,146,157,120, 33, 55, 99,189, +247,226,152, 75, 89, 49,110,250,201,200, 58, 74,143, 80, 81,111,227, 41,193,209,106,195,251, 66,112,242, 9, 5,207,119,208,116, +213,218,213, 96, 48, 14,177,189,180,139,182, 6, 72,139,133, 64,156, 54, 52,155,234,206, 90, 0, 22, 28,108,226,136,242,242, 15, +142, 93, 66,154, 8,186, 6,241,164, 24,105,172,245,106,117, 64,196, 0, 42,117, 49, 96,138, 51,219, 91, 90, 42,195, 54,240,230, +171,175,243,244,249,145,148, 18, 33,120,250, 56, 24, 56,199,137, 77, 41,130,217,223,170,115,120,141,150, 73, 40, 74, 82,165,235, + 20, 9,129,216,237,152,114,229,233,254, 68,244, 61,239,191,251,136, 60, 47,140,247,206,121,120,117,193,205, 97,143, 19,103,150, + 53,137,132,232, 57,205,135,159,250, 49,182, 95,185,245, 80,232, 61,236,149, 16, 59,182,103,103,108,227,136,244,158,232,148,101, +113, 4, 96,114, 66,154, 15, 44,199, 35,105, 74,102,223,139,129,174,117, 8,129,203,179,123, 68, 13, 60,187,121,194, 92,142,184, +185,146, 85,193, 71,150, 23,137,214, 22,198,254,140,139,251, 15,185,186,119,133,122, 71,153, 10,113,115,206, 54,118,108, 54, 29, + 76, 16,219,129,126,235,144,206, 17, 48, 19,210,177, 84, 74, 89,120,245,225, 3,252, 50, 51,165,194,171, 15,238,241,240,225, 21, +237,235,223,227,112,152,120,243,157,119,120,253,149, 87,152,143,123, 30, 61,121, 78, 90,131, 42,209,103, 22, 93,209,160,226,201, +181,225,139,162, 99, 32,211,115,111,219,113,188,254,152,239,126,247,134,203,179,123,156,247, 91,210, 50,209,114,134,166,180, 82, +248,185,119, 62,207, 91,111, 62, 32,165, 71,164,105, 98, 58, 21, 94,204,175,241,254,117,162,229,133, 94, 58,164, 95,200,131,167, + 59,154,215,187,121, 71,215, 26, 25, 35,208,213,232,169, 33,147, 93,226,251, 55,133,101,154,200,190, 99,136, 1,231, 28,169, 9, + 37, 47,168,139, 8,246,153,186,223,195,253, 29,236,198, 5, 2, 92,246,129,116, 74,228,143, 42,184, 96,176,166,144, 41,171,163, + 91,104,248,113,160,169, 99,201, 9, 31,236, 11, 92, 43, 84, 20, 45, 19,142, 13,227,197, 25, 69, 28,243,139, 27,202,146, 57,209, + 8,218,120,251,139, 15,185,217, 23, 82, 42,204,190,195,167, 76, 43,134, 56, 45, 10,231, 33,114,121, 17,152,211,204,233, 52,131, + 54,150,100,149,211,222, 11,169, 22, 92,116,220, 28, 14, 28,167,153,224, 55,252,194, 59,175,240,149, 47,236,200, 8,211,156, 88, +246, 51, 71,102, 78,167,133,214, 54,156,150, 9,175,158, 49, 68,114, 91,208,165, 3,215,211,252, 68,115,172,246, 64, 5, 55, 48, +151,140,235, 26,213, 87, 2, 1, 74, 71,118,137,101, 46,148, 86, 44,235,210,103,122,155,243, 82, 93,225, 84,138, 25,245,130,144, +112,148,102,129,173,185,120,124,151,105,101, 34,202, 72,213,130,174,254,112, 95, 3, 16,233,164,103,138,137, 70,226,148, 23,198, +110,192,197,128,180,200, 33, 45, 12, 67,181, 16, 91, 84,156,206,140, 37,130,219, 82,100, 38,146,145, 54, 16,116,161,101,165, 72, +166, 70,163,228, 17, 2,133, 68, 32,218, 23,119,137, 68,117,212, 94,233,107,176, 4,190,218, 35,164, 57,111,252, 5,215, 32,122, +212,179,174, 82, 58, 84,149,243,139,129, 47,124,233, 77,155,246,213,102, 12, 13,231,172,229,148, 77, 48,165, 86,220,164,101, 91, +197,148,170,164,100, 99,235, 86,218,218,182, 72, 64,182, 6,132, 8,207,111, 39,230,180, 74,149,130, 55, 27,102, 16,115,106, 56, +214,203,193,203, 10,153, 77,111,249,244, 64,192,253,224,232, 77,203,106,174,115,250, 50,213,245,153,237,187,107, 53,213,174,168, + 16,254,158, 33, 60,247,119,248,235,205, 89, 91,168,185,197,244,183,206, 62, 67,170, 16,124,228,133, 83,234, 32,196, 67,132, 21, + 95,238,232,112,165,145,154,192,182, 49,250,130, 46, 91, 22, 93,184, 89, 78,148, 15,158,211, 14, 79,209, 14,136,145,110,205, 99, + 73,235,152,202,132,118,141,172,214,101,215,234,113,205, 49,203,132, 15,149, 88, 51, 89,204,240, 6,141,160,249, 7,123,110,135, +163,214,140,190, 12,181, 53,235,106, 59, 39,168, 22, 27,251, 84, 65,154,241,220, 13,184,102,123,115,105,138, 72,165, 21,147,168, +132, 80,105,213, 94,210,174,173, 55, 59,103, 53, 52, 31, 60,190, 54,170,152,144, 0, 26, 34,118, 67,126, 73, 36,211,214, 12,191, + 42, 6,155,113,190,225,154,183, 11, 70, 51,115,141,141, 32, 33, 84, 71, 19, 79,107,141,210,156,117, 64,157, 64,201,134, 83, 84, +161,182, 98,112,138, 12,137, 66, 44,242,146,127,183,174, 23, 2,205, 27,197,173,111,209,214, 9,161, 33,197,209,188, 67,226,203, +155,108,181,203,143, 8, 75,173,120,181,196,125,203, 11,161,115, 56, 31,105, 52, 60,142, 83, 74,120,223, 17, 93,192,163,228, 12, +155, 87,238,241,107,253,175,113,184,126,206,163, 15,223,167,212,194, 40,253,218,209,119, 52,245,224,171,169, 22, 93, 71,227,100, +126,111,181,238,188,122,165,147,202,241,249, 11,242,116, 34,244, 27,238,142, 19,170,141,229,184,112,183,127,143,219,227,137, 24, + 35, 82,149,116,202, 28,143,137,239,189,251,136, 23,251, 19, 87,103,155, 31,255, 49,214,194, 71,143,175,209,162,246,226,115, 66, +171,149,174,219,217, 75, 44,192,216, 25,225,139,182,225,226,193,134, 97, 55, 48,221, 77, 60,121,239, 61,170, 52, 92,110, 28, 91, +166,187,218,160,210,168,169,176,189,188,160,118,133,143, 63, 42,228, 37, 83,152, 16, 85,106,245,188,120,241,130, 99,119,228,230, +197, 11,110, 55, 59,124, 31,105,206,113,182, 29,120,248,234, 91,108,124,199, 82, 10, 42, 59,130,139, 92,157, 57,206,206, 95, 33, + 77, 11, 47,142, 47,184, 58,243,188,122,182, 37,244, 29,211,221,137,143,110,158,225,124,199,253,251, 87,148,230,104, 41,243, 95, +125,237, 87,216,223,126,200,199,215, 55, 92,223,220, 48,198, 13,227,118,228, 60, 12, 12,189, 7, 47, 28,111,110, 13, 73,236, 19, +215,215, 47, 72,181,231,222,171,247,168, 37, 80, 83, 98, 24,182,148, 50, 83,138,169,130,239, 95,158,243,203,191,240, 6,135,227, +145, 15,175, 11,207,158,100,124,255, 42,231, 23,175,144,142,143, 81, 2,135,156,236, 53,236,148, 40, 30,239, 27,130, 39, 47,137, +110, 20, 74,178, 47,225,187,219,107, 36,120,162, 23,110,211, 17,223,116,189,160, 6,124,236, 32, 64,175,133, 49,102, 30,158, 23, +222, 62,247, 60,188,112,184,206,163,193,163,169,241,190,142,148,190, 18,212, 19,137,150, 31,105,149,146, 22, 66,232, 80,215, 24, + 54, 29,233,152,120, 62,221,209,111, 34,157,139, 38,164, 40, 48, 45, 71,250,101,100,236,123, 82, 8,180,229, 68, 75, 11,251, 37, +241,215,223, 89,216,236,174,184,242, 9, 63, 94, 90,218,119,201, 72,128, 16, 33, 83,120,250,226, 41, 65, 61,169, 25, 12,199, 64, +115,142,101,158, 41, 4, 14,203,145,227,113,207,217,120,193,213,249, 57, 63,255,246, 5,103,231,158,103, 55, 21, 61, 53,230,169, +112,151, 50,165, 8,253,121, 68,162,103, 57, 44, 20, 47, 84, 76, 45,169, 90, 41, 75,179,133,154, 23,178,107, 72, 81, 92,128,154, + 51,197, 7,226,208, 81, 75, 34,231,133,162,213, 38, 11, 91, 65,138, 80,167, 5, 87, 79,150,157,233, 3,165,206, 20, 13,182,218, +146, 96,197, 78,127, 66,134, 70,218, 3, 84,124,109,244,187,193, 40,123,161,176,164, 70, 40, 86,109, 27,182, 3,233,118,177,233, + 95,177, 76, 82,239,173,214,107, 97, 81,133,225,156,153, 66,215, 6, 80, 83, 25, 35,133,190,135,234, 29,125,245,180,217,113,146, +138,146,209,174,153,162,122,216, 16,200,248, 86, 41, 83, 68,197,190,211, 74,177, 14,253, 16, 11,193, 59,156, 4,203, 31,181, 64, +213, 76,168,133, 16, 35,247,207,182,108,215,158,250,240, 67, 51,243,149,146,245,233,255, 12, 63, 56,244,166, 53,239,172, 10, 11, +202,237,113, 97,122,242,140, 90, 50,174,115,196,205,142,176,219,126, 66,153,171,106,144, 3, 87, 45,148, 9,159,180,141, 45, 51, +165,214, 48,122,249,106,182,164,181,146,107, 99, 78,121,253, 46,111,236,239,142,104,131, 16, 2,136, 77,137,196,175,120,242,151, +255, 76,247,119, 59,118,219,218,171,175,173,218,185,194,103, 63,126,175, 57,211,170, 17,227,178, 66,169,133,146, 45,115,150,106, + 69,167, 70,236, 7, 90,231,104,105, 94, 21,201, 61, 83, 75,196,126,192,105, 79, 59, 60,102,123,190, 37, 29, 19,223,251,248,128, +182, 71,148,102, 23,108,156,177, 53,198,216,113, 42, 25,159,138, 93,192,226, 26,226,108, 11, 29, 32,177, 34,109,160,213, 68,236, +148,167,122,201,181,165, 88,194, 42,105,177, 67, 88,188, 95,193, 46, 43,215,121, 77,178, 91,177,208, 17, 92,161,184, 98,169,245, +102,191,140,206, 89,122, 62, 23, 83,116,138,115,235, 47,103, 91, 95,254, 47,247,215, 5, 21,219, 87,219,182,123, 53, 68,181, 74, +109, 66,240,129, 90, 22,112,206,196, 18,206,234, 97,226,237, 28,183, 17,126,253,164,119,238,219, 74,176, 11,246,114,110, 85,145, + 10,213, 85,219,155, 59, 7, 77,232,188, 35, 59,112, 81,160, 54, 60, 30, 87,100, 29,125,123, 35,193,169, 37,253,165, 52, 82, 43, +140,209,170, 10,166,118,181, 27,173,119,117,197,233,253,224, 3,218,188, 67, 37, 24,220, 98,129,216, 41,126, 69,199,138, 40,212, +130,230, 1,149, 66, 45, 66,161,112,121,177, 97, 28, 59,226,182,227,209,187, 31, 48, 77,139, 73, 39,240,168, 6, 91, 64,104, 99, +105, 51,115, 78,176,202, 69,166,101, 38,164,128, 68,103, 96,154,148,136,125,180,151, 95,232,208, 52,115,119, 60,128,152, 96,163, + 34,100, 50,167,105,226,227,119, 63,226,247,126,255, 15,248, 95,127,251,127,250,177, 31,243,239,124,227,175,248,207,223,123, 15, + 21, 11, 52,150,101, 70, 3,196,109,207,176,233,209,229, 4, 97, 96, 51, 68, 14,251, 27,254,224,247,255, 45,190,239,217,132, 17, +197, 51,108, 55,136,120,186, 24,185,216,236,232,165,103, 57, 77, 28, 79, 39,210,105,193, 23, 49,200,141,246,164,164,164,249, 96, + 48,160, 82, 72,122, 34,207, 19,253,174,199,119,194,208, 95,242,236,241, 99, 35,125,213,134, 43,137,155,155, 74, 87, 2,126,124, + 70,220,245,208, 42,175,157,191,205,118, 60,231, 91,223,124,159,219, 23, 31,242, 7,127,242,151, 60,126,242, 28, 45,149, 16, 60, + 47,246, 47,248,240,233, 13,149,106, 10,219, 69,226,193, 0, 0, 32, 0, 73, 68, 65, 84,211,211,194, 49,100,138, 38,206, 54, 14, +233, 59, 46, 99,207,248,202, 21, 31,223, 92, 51,157, 78, 76, 83,162,106,207, 91,159,123, 72, 58,135, 15, 63,124, 76,120,249, 37, +221, 28, 81,225,213, 55,238, 83,232,248,214,119,102,142,233, 62, 89,183,252,242, 91,191,204,245,237, 53,169,218,225,237,154,224, + 91,143,180,133, 73, 11,195,176, 65,242,201, 94, 75, 51, 86,249,235, 6, 62,120,250, 49,103,219, 11,150,201, 0, 40,213,217, 69, + 87,201, 92,196,204,131,209, 14,244, 93, 8,188,241, 90, 71,191,235,204, 5,144, 28, 50, 10,249,174, 82, 82, 68,165, 16, 98,103, + 64, 37, 26, 82, 42,169, 11, 88,230,171,225, 93,160, 68,219,196,217,142, 54, 24, 68, 42,128, 75,153,219,167, 31,154, 39, 93,132, + 86, 28, 77,205,133,144,150,198,197, 69,135,239, 58,118, 18,152,150,147,177, 42,212, 81, 11,180, 86,153,247, 19,206,123,170,194, +236, 32,202,192,110, 48, 31, 66, 58, 90,242,126, 24, 54,132, 97,203,107,175,244, 72,175,124,252,244,192, 41, 21,106,132,229, 80, + 56,156,160,180, 68,119, 47, 88, 63, 61, 6, 90, 45, 22,100,109, 61, 85, 29,165,174,106,229, 32,248, 86, 56,145,136,110, 96, 51, +116,200,224,109,164, 93, 27,197, 59, 58, 81,178, 91,209,166, 34, 86,181, 28, 58,160,226,114,193, 81,105, 21, 34,118,209, 31,186, + 74,174, 13,246,158,216,143,180, 58, 81,146, 39,102, 79,149, 74,171,133, 56,120, 90, 24,112,169,209,230, 6, 33,178, 80,169, 83, +194,197, 1,239,242,234, 5,243,196, 2,117,185,161,250, 64,212,145, 77,244,204, 90, 73, 85, 40,222,177,243, 74,189, 19,102,151, +161, 9, 18, 70,196, 53, 11,226,105, 97,222, 10,211,148,233,179, 35,110, 58,212, 43,203,169, 33,187,128,116,129, 86,148,156, 51, +125,244,166,164,118, 14, 98,143, 14, 29,225,103,244,146,143,230,214, 6, 96,135, 35,236, 6,158,238, 55,156,142,123,130, 8,175, + 63, 56,251,177, 47, 95, 93, 15,211,151, 63,104,138, 29,248, 47, 51, 87,117,125,249,163,164,162,204,199,153, 82,103,220,186, 50, +120, 49, 21,246,101,193,203,130, 97,203,193, 7,103, 13,171,182,174, 86,229,165, 46,219,173, 20,207,151, 57,174,151, 60,122,187, + 2, 28, 83,101, 58, 76,168,179,151,237,233,184, 55, 24,149,179,224,167,172, 43,220,127, 24, 77,174,160, 75, 66,235,234, 78,168, + 21,231,173,118, 24, 67, 33, 29, 26, 76,153,224, 50,179,119,148,236,168,186,103,112, 27,170,243, 8, 21,231, 61, 75,157, 81, 87, +193,245,212,184, 32,110,135,228, 17,105,149, 89, 27, 57,207,134,171, 30, 34, 46, 39,148,142,226, 27, 46, 37, 74, 87,168,169,225, +156,163, 27,183,236,252,194,219,111, 92,217,159, 15,113, 47,107,103,235,174,218,252, 85,180, 86,205,226,229,215, 93,117,211,181, +183,110,164,170, 38,213,252, 47,205,125, 66,140, 67, 13,202,162,173, 65,181,215,108, 83, 11,206, 73,244,166, 39,109, 74, 94, 57, +240, 81,172, 46,235,221,218,131,111,118, 11,110, 43, 2,182,122, 75,212,231,154,140, 60,236,236,239, 83,103, 35,247, 66,251, 4, +112,227, 93, 65,124,160,153, 41,154,206,201,154, 4,182,223,136,190,247,168,247,120,167, 72, 53,171, 28,234, 13, 55, 43,182,253, +111,213,120,217, 78, 28, 75,203,136,115, 44, 88,112, 47, 74,160,173,216, 90,251,121, 11, 65, 76, 98,163,173,173,112, 17, 71, 45, +141,141,119,184,102, 17,212,174, 11,180,182, 16, 92,192, 59, 33, 87,199, 82, 23, 74,106, 92,221,123,192,110,179,227,219,127,243, + 93,110, 15, 71, 98,103,201, 93, 85, 89, 43,133,117,237,185,103,227,205, 59,135,122, 79,173,142, 16, 27, 83,154,168,119,153, 24, + 58,124, 7, 75, 93, 56,206,137,174, 55, 95,183,186,149, 29,191, 36,210,205, 51,254,236, 63,253,223,188,184,123,198,231,238, 63, +224,234,222, 3, 94,185,127,143,171,251,151,252,241,159,254, 9, 95,255,139,191,230,246,230,134,211, 50, 51,207, 11,173, 21, 68, + 97,123,118,193, 38, 58,138, 92, 48,167, 19,231,225, 1,175,221,223,241,221,179, 11, 78,211,194,221,124, 71, 81,165,221,124,140, +132, 64,171,149,143, 62,122,151,179,110,128,174,231,237,207,125,133, 77,220,114, 10, 7,131,127, 56, 71,210, 66,144, 17,239, 12, + 40, 34,162,104, 52,120,198,160, 3,115,170,252,163,223,250, 37,254,213,191,250, 23,252,233, 31,253, 49,239,125,248, 30,167, 52, + 17,179,176,185,127,206,183,255,242,175, 72,203,129,239,125,251, 91,124,249,139,111, 18,203,115,156,116,252,218,175,253, 58,254, +207,255,154,179,205,192,247, 30,189,207,114, 58,113,251,252,150,205,185,231,213,251,231, 60,123,188, 97, 81,101, 89, 22, 92,189, + 37,231, 72,220,109,185,186,186,160,107,142,219,219, 61,187,237, 8, 26,249,222,119, 62,228,176, 79, 36, 45,156, 14, 71,130, 9, +171,233,250,142,123,151, 15,184, 73,194,184,185,143, 15, 51,231,175,188,197,131,207, 93,241,225,147,239,208,123,101,142,137, 88, + 42, 50, 26, 62,173, 29, 19,117, 57,161,193,209,134,136, 84, 65,100,195,199,207, 62, 32,116,141, 7,247,207,248,214,163, 39,244, +193,115, 62, 78,108, 99,226,225, 78, 56,223,122,122, 47,120,215,177,180,138, 68,199,112,181,161,204, 19,165, 19, 66,111,137,149, +187,211, 68,173,133, 49,244,182, 19, 69, 56,169,193, 91,108, 2, 20, 72,185, 24,214, 23, 97, 42,142,121, 90, 8,210, 32, 6,227, +236, 47, 11, 73,247, 43,202,217,242, 47, 49, 42,125, 28,232,186, 1,233, 60,253,102,195,225,217, 1, 87,149,230, 44, 1, 47,205, + 62,147,115,129, 82,102,198, 56, 66,240, 76, 57,227, 66, 97,202, 7,198, 46,226,226, 25, 15,238, 13, 60,120,112,198,130,112,172, +194,254,174,145, 75, 99, 58,101,150,165,174,135,174, 24,131, 62, 11,185,122, 92,236,112,193,144,174,100,103, 97,209, 90,104, 47, +171,172,197, 19, 34,136,118,159,144, 26,195,176,195,215,128, 43, 51,121, 49,106,185,247,138, 23, 80,239,209, 9,168,227,234,163, +104, 20, 85, 38, 87,160,244,164, 50, 17, 6,207,224,118,100, 63,147,105, 12, 10,117,169,132,104,141, 19,154,226, 90,160, 31, 50, +148,130,110, 59,202, 98,147,204,144, 70,170,203,232, 0, 97, 9, 4,151,217,179, 39,106,193,123,165,186, 17,114, 69,114, 70,123, + 27,179,250,176,218, 29,181,163,180,106, 50,151,187, 64,140, 1,233, 59, 82, 80, 70,233,217,141,197, 50, 67,197,162,138,131, 88, + 24, 43, 55,199, 16,123, 19, 40, 53,165, 11,159,145,157,173, 42,181, 54, 68,161,239,194, 79, 28,101,127,234, 46,176,174, 87,225, +135, 10,117, 65,126, 40,225,126, 58,235,121,242, 97, 35,165, 76,140,158, 87, 95,127, 64,232, 59,211,153,174,255,190,234, 86,140, +117,181,148,121, 91,167, 3,154,171,101,169,212, 81,180, 65, 42,102, 73, 44, 74,202,153, 60,159,140, 77, 33,141,214,148,247,158, + 29,248,248,118,198, 96,253, 48,120,111,144, 48,252, 74,131,115,230, 36, 15, 86,130, 86, 85,147,248,120, 89,207, 59,181,233,147, +216,138,116,159, 26,199,219, 23, 20,210, 39,147,213,212, 18,217,123,171,231, 22, 1,183,144,252,158, 78, 34,193,193, 60,205,184, +208,168,115, 33,181, 19, 72,226,162, 63,163,212, 30, 45,135,117, 77, 36, 20, 87, 40, 28, 16,173, 12, 93, 68,203,200,114,154, 8, +253,136,107, 74,171, 51, 62, 11,174, 52,170, 91,136, 99, 79, 73, 19, 78, 35,231, 62, 18, 66,111, 98, 33, 37,175,250, 59, 83,192, + 57,117, 54, 38,199,161,205,106, 89, 22, 76, 91,157,203,120, 75,201,131, 17,231, 84,215,181,236, 26,220,248,132,250,166, 86,181, +112,198,144, 71, 87,110,112, 85, 42, 32,157, 71,155,253, 6,138, 56,114, 41, 56, 31,108,244, 94, 10,213, 25,182,213,173,211,130, +166,246,246,151,216,209,105, 91, 59,142,107,112, 78,109, 20,228,164, 33, 65,112, 8,226, 12, 54,225,165, 81,138,237,249, 35,158, +220, 10,206, 9, 46, 4, 43,247, 23, 5,201,208,108,231,212,212,170, 36, 77,236,114, 97, 53,162, 70,107,150,158,206, 25, 74, 2, + 85, 91, 63, 56,177,142,176,115, 98, 19, 0,239, 88,138,173, 19,130,116,248, 16, 8,177, 82,214, 17,183, 84, 79,150,134,244, 30, +173,194,102,179,227, 43,191,240, 85, 30,189,251, 46,143,159, 92,219,174,170, 11,118,211, 93,105,118, 52, 27, 97, 53, 39,116, 62, +112,222, 69, 14, 47,110,169,181, 50,105, 35,167, 74, 88, 50, 9,251,226,110,185, 80,170,195,239, 60, 41, 7,230, 50,115,115, 7, +137,200,237,254,207,249,155, 7,103,108,124, 79,204, 21,183,233, 56,236, 15,236,143, 51,121,158, 57, 78, 39,230,211,158,121, 89, + 75,127,249, 68,206,137,193,143,228, 84,152,188,176, 95, 50,175,127,241, 29,104,130,239,148,227,221, 76, 94,102,114,154, 40,197, +163, 53,177,204, 55,136,194,217,253, 11,110,110,230, 21, 94, 4, 75, 5,143, 93, 56, 8, 3,174, 54,148,202,182, 31, 17, 31,216, +108, 54,124,233, 23,191,204,111,255, 47,191,205,118, 28,248, 23,255,242, 95,178,164,196,233,120, 66, 81,238, 93, 93,241,239,127, +255,223,241,111,254,207,223,165,186,204,147,103,143,249,173, 95,255, 60, 47, 94,204,116, 33,208,117, 59,254,217, 63,255, 26,255, +120, 89,248,223,255,183,223,225,233,245, 19,222,216, 94,114,249,218,134,123,207, 95, 97, 90, 86,164,166,206,220,221,237,121, 49, + 77, 72, 23,217,109, 7,166,220, 80, 13,204,167,137,155,155, 9,209, 12,209,155, 32,161, 22,232,224,226,225, 3,250,113,195, 54, +246,198, 95, 24, 59,222,126,235, 53,158,127,252, 33,215,207,159, 34,120,164, 5,212, 53, 42, 9, 52,152,209,206, 7,202,188, 48, +196,158,109,220,112,154, 22, 78,167, 27,222,122,251, 45,150,214,240,226,120,112, 89,248,210,165,114,113,111,131,168,210,185,222, +178, 42,210, 8, 19,104, 88,237,127,157, 35, 31, 51,117, 49, 9,205,126, 78, 56,233,240,206,217, 23,163,102,150,178,112, 56,220, + 48,158, 93,160, 88, 24,169, 54, 99, 84,111, 54, 27,230,227,222, 94, 44,169,174, 33, 46,243,222,131,226, 90,165,180, 10,173, 34, +163,167,235, 7,134,190,163,186,145,105,190, 54, 83, 93,112, 68,111,234,219,172, 54,109,211,164,102,123, 43, 19, 53,205, 12, 30, +198, 46,224,194, 25,231,231, 3,239,188, 57, 66,173,124,240,254,129,146, 78, 44,115, 35, 33,104,241,204,121, 34,196, 96,201,142, +154,172, 82, 26,236,133,149,106,166,148,134, 84,104, 62,211, 90, 36, 68,165,147,194,178,156, 56,180,145,158,108,136,215, 20,137, +179, 34, 93,196, 69, 59, 56,106,200,248, 26, 57,238, 79,132,222,227,197,161, 36,106,137,184,126,125, 12,104, 35,118,129,164, 66, + 44,137,185,100,186, 93, 88,105,154, 59,136, 29,130,160, 82, 81, 31,208,206, 30, 27, 53, 71,134, 26,104,237, 14, 84,168, 62, 18, +183, 59,123,101,114, 36, 59,147,222,104,201, 28,136,248,112, 64,147, 77, 27,194, 24,233,180,152,164,131, 8,206,156, 6,217, 5, +124, 95, 73,217,130,177, 99,115,198,236,239,192, 47,142,190,111,104,113,104,240, 72, 47,198,203,112,106,210, 45, 17,186, 24,127, +230, 87,232,167,223,176, 90,215,174,183,115, 4,255,217, 81,217, 58,183,158, 29,193, 51,244, 29,219,161, 3,160,247, 6, 0,250, +161, 81,183,117,156,112, 63, 58, 17, 88,113,173,121, 13,215, 54,251,186,228,250,230,196,124,253,130,211,180,167, 11,194,238,222, + 5,174, 31, 73, 21,180, 86,230, 21, 41,142, 42, 45, 25,144,201, 46, 28,197, 88,244,101,177,243,196,153, 64, 43, 83,104,165,208, +106, 51,221,248,169,216,180,170,158, 40,181,177,148,108,121,179, 92,145,102,240, 36,205, 13, 37,114, 76,208,186,202, 54,118,204, + 68,114,223,136,197,209, 74,228,148, 15,244, 98,159, 17, 21,135,107,153, 86, 29,157,223,208,188, 82, 59, 19, 24, 57, 23,153,211, +158, 14,161, 91, 65,145,140, 29, 45,219,154, 60,116,194, 50, 45, 38, 24, 91,153, 82, 65,109,134, 78, 83,187, 97, 57, 12, 72,111, +163,235, 98, 35,118,111,234, 79,219,155,136,241,183, 9,148,102,212, 42, 17,143,183,118,153,197,214, 90, 69,171,172,151, 4,197, +117, 98,135,165,179, 81,119, 45, 5, 87, 26,234,189,101,216,138,237,144,181, 53, 11,239, 52,104, 4,196, 41,222, 53, 8,130,170, + 16,157,144, 83,182, 3,212, 9,205, 25,126,214, 55, 11,237, 41,160, 69, 9,107, 87,183,161,116,226, 64, 43,185, 88,175, 54,186, +245,128, 44,217,166, 9,209,110, 96,181, 53,114, 89,209,153,234, 8,120, 11,137, 52, 71,108,129, 89, 51,139,154,139, 26,113, 72, +243, 20, 50, 62, 10,154,131,229, 13, 80,194, 92,241,155, 96,127, 24,170,144,114, 37, 70,165,106,198,121,143, 68, 37,210,129,102, + 83,188, 98, 52,181,119,222,249, 18,155,190,231,221,247, 30, 83,150,100, 31, 20,231, 63, 9, 2,170,179,177,120, 16, 35,119,125, +124,123,195,146, 50, 33, 4, 82,201,230,106, 30,162,153,223,106,163,208,112,201, 42, 99,211, 97, 33,247, 74,105, 79, 25,150, 13, +211,146,200,189,253, 28,143,143, 23,104,205, 26, 9, 45,179, 44, 11, 89,149, 66, 93,117,180,141,229,228, 9, 87, 61,193,207,156, +191,250,128,167,127,253, 30,239,126,231,235,132,254,156, 94,192,135,136,247,145,224, 61,195, 24,240,253, 14, 13,247,209,211,129, + 52,221, 48,151, 19,126, 24,208,121,161, 74, 69, 80,186,206, 51,158,157, 49,205,197, 62,115,162, 72,140, 56,173,252, 23,191,252, +107,108,199, 31,140, 16,251,174,163,239,186, 79,126,252, 27,191,249, 95,242,159,254,228,143,120,113,253,132, 37,103, 66,188,199, +217,121,230,201,251,239,241,241,211,143,248,254,211,107,254,199,127,250,235,252,206,239,254, 33,215,183, 7, 30,172, 97,160,148, +102,110,175,247,156, 93,108,184,119,255, 62,205, 85,238,110, 14,236,247, 71,206,118, 35,231,155, 13,115,158,113,169, 90, 54, 67, +196,242, 37,193,177,217, 12, 60,124,237,156,175,254,242,207,179, 45, 35, 14,225, 88,238,120,237,245, 55,152, 78, 7,190,253,141, +111, 35,178,165,184, 76,203,109,149,247,216, 31, 98,240,156,166,140,150, 70,205, 21, 55,220, 17,198, 66,215, 5,196,123,106,186, +230,213, 11,229,193,182,241,234,133,224,124, 64, 85, 62,249, 22, 11, 3,236, 98,103,196,197,176,162, 91,233,209, 34, 60,190,113, + 28, 82,199,249, 54,114,170,176, 9, 30, 57,205,156,106, 35, 45, 71,115,168,111, 70,251,179,136,160,213,129,120,134,221, 5,183, +119, 31, 83,115,161,235,251, 85,225,153,237,101, 38, 66,231,189,217,237,188,167, 11,194,232, 58,234,148,168,190,225,162,179, 9, + 66,236,137, 94, 57, 29,102,156,243, 52,231,105, 53, 83,188, 85, 49,247,139,162, 50,176, 57, 59,231,141, 87, 35,155,251, 61,251, +199, 19, 55,119, 39,114,182,170,102,170,246,197, 92,251,192, 86, 60,157, 12, 44, 46,179, 44, 14, 98, 98,104,129, 41,173, 85,219, +174, 67,124, 66, 17,242, 58,133,208,214, 19,218,128, 84,165, 95, 39, 33,181,154,119,186,206, 29, 93, 39,244, 81, 32, 41,185, 56, +202, 97,194,109, 55,182,143,214, 74,107, 30,150,202,208, 65,114,133, 62, 10, 37,103,218, 70,200,205,211,171, 35,233,132,250, 70, +239,172,131,174, 37,225,179, 16,194,198,148,188,121, 33, 12, 17, 90,164, 21,165,206, 11, 85, 27,213, 23,194,176, 69,221,140, 6, +207,232,183,132, 54,225,154, 61,152,244,120,160,116, 17, 52, 33,174,178,137, 29,139,131,238, 44,154,197, 47,207,204,171,189,109, + 24,140,252, 24, 98, 32,217, 93,145,224,212,132, 91, 1,170,135,232, 10,193,143,182,155,254, 25, 14,244, 19,176, 89, 15,208, 35, +112,156,138, 77, 87,117, 53, 86,126,102,118, 54, 91,219,184, 6,241,167,116,223,253, 79,154, 8,172,255,187,255,145,191,189,158, +245,148,125, 64,230,192, 48, 70, 62,255,202,149, 9,193,128, 5,155, 32, 56, 32,175,151, 0, 89, 91,111, 47, 93, 35, 75,174,246, +136,109,138, 86,229,176, 44,246,247, 22, 71, 93, 10,243,179, 61, 78,158,144,247, 51, 1,101, 84,152, 22, 7,235, 67,180, 81, 25, +123, 88,230,192, 60,207,132,188,224,220, 57,120,193,231,231, 56,109, 8,145, 37, 37,146,191,166, 16,169,203,129, 57,120, 74,128, + 94, 78, 56, 63,160, 51,168,156,112,120, 40, 14,183,137,232,210,161,238, 72,117,149,160,133,178, 20,188, 84,104, 91,230, 67, 36, +189,247, 17, 31, 15,151,118,168, 59,111,187,107, 45,197,246,199,110, 37,169,137,141,148, 69,237,213, 38, 65,112, 77,236,214,236, +148,205,253,215,184, 55, 46, 60,127,124,205,169, 88,154, 84,170,251, 36, 53, 46,212, 85,101,106,149,145,210,204,175, 46,226,237, +189, 95, 45,217,222,104,198,120,119, 38, 89,209, 21,251,162, 84,106,182, 15,148, 11, 14, 13,224,242,202, 1,244,110, 77, 58,234, + 75, 27,186, 49,235,155,208, 58, 11,209,181,182, 38,192,157,128,175,182, 22, 48,224, 59,218, 10,170, 74,107, 30, 9, 66,110,118, + 9,240, 30, 51,189,149,180, 42, 42,253, 58,106,244,148,100, 7,152,147, 98, 88,206,218, 96, 81, 58,103, 99,208,170,216,205,168, +100, 58,245,132, 94,105, 98, 47,140,232,172, 37,144, 37, 91,122,116,101,222,233,250,169, 18,132,183,190,240, 54,195, 56,240,189, +239,189,203, 33, 37,134,110,164,143, 29,185, 20,243, 25,163,228,101,226,246,214,155, 33, 46,152,167, 57,101, 35,227,213,210,200, + 41, 17, 98,199,249,213, 37,181, 86,168, 51,173, 66, 90, 10,141,196, 49, 39,134,227,145, 83,116, 52,239, 63, 33,238,213, 6,165, +206,228, 50, 83, 75,161,212,130,163,145,151, 74,154, 39,150,231, 31, 19, 54,142,171,123,231, 12,187, 29,191,242, 75,191,193,146, + 61,183,211,129,105,127,205,148, 27,249,116,164,164,132, 11, 17,156,242,240,242, 21, 74, 90,136, 69,120,112,113, 73, 14, 71, 94, + 28, 28,197,159, 16, 9,204,211,204,213,249, 57,131,143, 60,190,185, 35, 58, 8,155,142,205,249,229,223,250, 7,253,236,236,140, + 55,222,124,133,143, 63,124,204,180, 63,240,238,199, 47,248, 39,191,249, 53,110,238, 30, 19,187,198,183,191,241, 61,246,255,232, +171, 28,231,180, 94,182, 28,243,205,204,105,127,199,254,120, 96, 90, 14,148,101,225,193, 43,151,184, 93,227,238,144, 13, 97, 28, + 29,154, 13,113,252,242,146,170, 41,241,218, 91,111,240,181,255,250,159, 82,239, 14,244,165, 82,242, 66, 12, 29, 67,191, 97, 51, +108,152, 31, 63, 99, 19, 59, 66, 63, 82,202,204,220, 47,182, 39,173,142,139,152,136, 57,115,229, 79, 68, 14,140,125,161,239,206, +120,244,100,207, 23,223,190,207,231,223,112,204,143,159, 17, 46, 46,141,205, 80, 33, 86,243,120, 59,169, 44,174,193,198,211, 19, + 32, 4,194,166,195,221, 38, 56, 19,150,187,196,205, 93,198,133, 13,231,195, 57,161, 84,168, 74,212,194,205,109, 69,169, 76,211, + 29, 34,202,184,187,132,102,204,119,233, 28, 37, 85,134,126, 67,209,163,129,155,154, 7,239, 88, 45,204, 54, 6,119,230, 93,151, +206,227, 99, 79,118,149,232,123,106, 41, 84,117,212, 82,216, 79, 21,161, 90,221, 78,132,162, 48, 32, 76, 84, 22,223, 19, 55, 59, +206,207, 2,157, 84, 62,250, 96,207,233,102, 97,154,103, 74,237,241, 33, 82,164,176,180, 74,153, 42, 97,240, 52,151,236, 59, 33, + 39,118, 46, 16, 9,204,173,210,121, 40, 57,127,114,169, 46,181,224, 17,188, 79, 56, 47,196,110,139, 27, 35,156, 38,124,139,248, +146,168,222,248,234,209,121, 22, 10,157,143,208, 57,106, 73,136,136, 17, 21,235,130,120, 27, 97,163, 13, 87, 77,197, 27,219,186, +150,104, 25, 33,227,188,146,178,226,221, 25,137, 59, 10, 29, 73,149, 24, 55,224, 22,219,173, 10,200,224,201, 53,209,137, 71, 36, +226,146, 25,223,134, 81, 72,117,166, 52,199, 86,108, 53, 55,229,194,216,197,149, 20,185, 48,107, 68, 75,101, 57, 45, 70,169,220, + 88,250, 57,120,152, 5,235,115, 23,243,169, 55,177,118,146,184,138,211,130, 22, 40, 62, 48,244,221,207, 68,126,115,134,158,255, +193, 69, 26,251,238, 47, 43, 0,167,143,241, 51, 59,212, 75, 81, 92, 45,150,123, 10,159,177, 22,181,169, 53,183, 4,235,246,175, + 78,249,176,254,247,229,127,226,203,255,211,238, 71,110, 15, 63,178, 98,168,187,136,137,187,237, 61,255,193, 43, 23,124,243,235, +133,116,247,156,206, 57,114, 20,166,156,168,116, 68,157, 0, 79, 41,133, 67,190,193, 95,108, 24,117,228,116,187,103, 92, 34, 55, +181,208,188, 80,124,193, 43,140,178,195,199, 35,174,141, 52, 6, 98, 59, 80, 92,162,158, 38, 66, 27,232, 6, 79,105,141,141,246, + 84,122,146,155,105,174, 32, 5,156, 27,112,113, 36,178,144,253,194,215, 15,137,119,255,245, 95, 82,142, 95, 39,120, 31,144,151, +135, 81, 19,123,181,161, 80, 65,157, 88, 8,161,130,203,106,125,116, 26,184, 70,118,145,207,125,249, 87,249, 31,222, 89,248,227, +223,253, 15,124,253, 90,105, 75,181, 32,130,179,125,151, 45,217, 61,181,218, 66, 95, 80,162, 40, 69, 87, 35, 91, 19, 35,200,173, +221,116, 95,141, 23,239,229,101,229, 77,105, 98, 35,110,106, 53,162,155, 91,143,240, 44,248,206,210,128,173,217, 17,169,206,174, + 3, 53,155,223, 92,116, 69, 16,198, 8, 43, 52,163,174, 59,199,128,162,222,236,107, 37,151, 79,104,115,100, 51,204, 41, 74, 43, +224, 67,179,253, 23,130,115, 38,135,137,222, 58,245,234, 5,223, 11, 78, 35, 81,140, 80,167,213,254,249,174,239, 87,239,174,176, + 52, 33, 52, 51, 64, 69,137,120,223, 67,104,232,100,187, 65, 71, 67,164,195,121,229,213, 55, 94,165,235, 59,190,243,157,119,121, +113,119, 68, 66, 64,130,133,231,188, 19, 66, 23,120,122,243,204, 46, 58, 17,150,197,126,109, 93,133,172,133,171,123,247,248,210, +231,223,166,223,142,124,248,193, 7,136, 15,220,221,158, 8,205,184,216,173,155, 56,228, 4, 39, 35,226,137,116, 70, 94,106, 88, +216, 9,152, 15, 51,237,101,118, 65, 3,167,195, 45, 50,156,227,124,199,221,243, 39, 60,250,246, 55,141, 96, 21, 58, 54,195, 5, +103,231,247, 12,252, 83, 46, 13, 52, 84, 10,167,227,173,217,138, 28,108,182,155,213,172,215,115,207,119, 60,187, 89,168,100,206, +119, 3,189,247, 84, 93, 12, 36,227, 26,154, 26,211,225,248, 83,172, 81,133, 52, 21,118,231, 87,208, 18,105,233,233,183, 15,209, +149,172,246,238,163,239,243,236,110,194, 85, 71,154,142, 28,151, 45, 13, 56,205,139,173, 77, 90,224,249,237, 29,139,102, 94, 63, +191,162,247,149, 82,204, 81,223,196, 35,162,184, 98,140,241,165,101,158, 63,187, 97,186,153,185,186,122,149,235, 39,239, 50,140, + 14, 87, 51,159,127,243,171, 8,240,253,231,215,120, 81,122, 61, 90,182, 4,143,180,198, 23,198,231,120,157, 73,163,240, 96, 87, + 8,109, 65,189,227, 46, 45,148, 71, 11,191,250,155,111,194,233, 49,213,193,195,171,130,139, 61,167,131,131, 14,216,246,224,149, +174,234, 58,202,245,132, 24,113,110, 68,130, 25, 15,143,183,133,219,195,196,249,189,183,136,221, 22, 14,215,148, 83,101, 18, 11, +140,122,231,200, 57,155,171, 62,118,132,110,131, 72,160,181, 66,144, 8,227, 6,113,194, 52, 29, 17, 87,168,185, 80,106,166,243, + 17,117,150,192, 31,199, 13, 1,207, 16, 60,167,101,161,235, 5,217,158,113,186,155,168,243,132, 35,154,208,169, 40, 34,133, 41, + 43,179,107,184,176, 97,220,189,206,217,133, 39,250, 3,251, 67,193,105, 92, 17,211, 17,215, 26, 83,106,164,146,209,220,232,156, +195,251,142,146,102,170, 23, 36, 6,166,162, 44,221, 66,183, 3, 95,148, 67,171, 72,139, 54,230,198,211,168, 12, 50, 16, 6,103, + 99,208,187,196,128,131,205,154, 9, 82, 33,116,141,101, 41, 84, 50, 4, 33,184,106,225,221,213, 51, 49,148, 13,201, 37,186,160, +212, 58, 48,251,133, 94, 60, 93,141, 20, 81,106,141,168, 70, 98, 41,204,193,161,105, 97,187, 9,204,185, 33,197, 80,196,217,101, +220,104,154, 94,106, 54,208, 11, 21,167, 91, 74,205, 8,149,105, 82,124,203,208,119, 76,173, 24,132,203,123,212, 45,200, 46,162, +203, 96,102,189,206,104,149, 81, 43,116, 35,227,176, 78, 22, 23, 97,174, 21,162,167,223, 40,164, 66,245, 66,107,158,224, 26,190, +247, 56,113,116,209,127, 38,132, 54,183, 10, 87, 68,149,226, 28, 49,126,118,227,247,164,186, 62,160, 28, 42,254,255, 23,184,243, +159,250,241,223, 87,202, 90, 75, 51,162,156,107,196,240, 15,191,136,124,114,214,191, 12, 19,138, 49, 1,130, 19,170,154,129, 47, + 87,172, 53,177, 88,229,181,212, 72,110,142,208, 22,242,236, 81,173,168, 84,194, 24,200,115, 37,248,134,171,129,197, 5,182, 99, + 79, 21, 71,157, 26,241,204, 26, 21, 4, 79, 22,143, 78, 51,190, 55,205,106,157, 14,120,109,168, 90,112, 83, 28,204,211,145, 41, +218,218,219,119, 61,233,242, 21, 38,132,224,176,194,187,174,166, 54, 93,123,228,118, 62,138,117,143, 81,243,141, 27,246, 1, 47, + 17,239, 42,207,191,245, 23,252,217,181,240,100,178,157, 96,176, 24,188,129,106, 20,131,169, 84,219, 97,171,151, 31,252, 53,103, + 48, 3,195,193, 54,235,151,250,178, 66,230, 86,133,233, 10,157, 11, 86, 12, 4,111,137, 92, 93,145,172,184, 70,203,150,127,192, + 85,180, 9,162, 66, 11,246,247, 87, 53, 41, 72, 21,104,174,128, 90,216, 33,231,178, 6,255,108,154,160, 6,180, 39,116,206,120, +196, 89,137,226, 44,184, 81, 50,234, 28,185, 25,112, 65,196, 81,114, 93,131, 68,138,111, 74, 77,128, 20,186, 16,209,182,226,118, +189,197,248,144, 72,104, 98, 1, 41,103,225, 31, 20, 92,172,248, 92,105,173, 33,205,252,206,205,182,238, 40,149,203,251, 15,248, +213,221,134, 71,143,190,207,163,247,159, 90,190,176, 42,103, 87,103,252,252,207,125,129,247,223,251, 62,143, 62,122,198, 40, 27, +180, 21, 51,214,105,195, 17,249,202,151,222,225,234,254, 22, 84,216,124,249, 43,180, 6,115,158,200, 83,194,187,142,221,110,224, +241,147,143,120,250,244,104,191,155, 50,211,133,145, 70, 64,235, 66,174, 51, 57,103, 28,214, 71,173,181,218,120,191,156,232,117, +228,250,250,142,126,247,128,216, 15,204,121,207,237,221, 11,230,156,137,181,145,171,141, 25,251,184,193,139,103,232,133, 41, 85, + 52,216,103, 1,233,232, 46, 29,113,138,180,226,240, 49,174,174,110,143,143,141,211,146,137,161,240,245,191,252, 11,190,246,181, +223,160,239,187, 31,251, 7,237,253,247, 62,228,131, 15,222,231,181, 87, 95, 99,220,237,192,111,120,254,228, 9, 76, 13, 87, 34, +199,219,103, 60,122,247,125,148, 70,231, 34,117,105,236, 79, 51, 23,187, 45,173, 66,109,141,128, 48, 79, 11,183,113,143, 70, 79, +175,158,227,146,168, 90, 44, 83, 82,170,125,246,188,141,209,238,158,126,200,253,205, 6, 36,147,102,197,249,158,243,179,158,253, +211,175,179, 13,143,136, 2,199,121,203,102, 19, 56,203, 21,164,242,202,189,133,233, 4,110,138, 52, 10,210,121, 72,194,243,103, + 71,182,247,207,216,141,133,235,239, 63,101, 28, 58,100,211,115,188, 25,169,229,110,229, 27, 84, 66,223,225,218, 14, 23,193,185, +128, 23, 27,239,226,149,229,232,121,116,179,227,195,147,242,243,159,219,210,220,200,243,169, 17,155,178,204,153, 37, 79, 8, 16, +199,136,184, 64,154, 22,212, 11,145,113, 85, 16, 87,130, 15,136,239,169, 49,147,107, 33,132, 72,169,101,109,190, 52, 66,236, 57, + 59,123,192,249,189,123, 12,227, 21,183,251, 39,196,222, 70,225, 81,140,222,168,181,146,138, 93,150,251,104,125,106,245, 35,219, +225, 62,187,173,160,203,145,219,101,166,247,208,123, 79, 6, 74, 13,148,188,144,106, 70, 51, 28, 14,123,238, 93,245,252,220, 23, +239, 49,207,129,103,199, 35,125,180,149, 95,142,133,187,155, 3, 47,174,175,137,126,195,235,175,188,202,177, 36,124,107, 4,215, + 16,169,104,139,180,156,240,126,196, 7,103,149,169,147,162, 20,124, 52,208,120, 71, 67,179,163, 9,196,173,208,138, 61, 54,212, + 37,106, 81,166, 90,169,109, 54, 36,167, 64,214,134,182, 96,235,188, 65,200,115, 3,215, 35, 52,234,172,196, 65,200, 65,112, 11, + 4,239,169,197, 19, 26,168,203, 68,215,152, 22, 37,236, 26, 44, 24,209,207, 53,134,190,103,113,133, 82, 33, 23,103,176,159,206, +130,198, 13, 65,157,237, 69, 99,117, 36, 31,232,166,133,218,108, 53,210,162, 82,151,140,248, 64,206,153,236,133,141, 88, 11, 72, +125, 79,109,235,247,175,243, 63, 51, 88,229,135, 14, 94,160,164, 98,185, 35, 32,126,134, 47,106, 49,118, 23, 77,173,170,247,233, +139,132,252, 45, 63,231,186,254, 56,124,106,167,254,233, 3,119, 86, 88,166, 76,107,109,117,130,132, 31,170,186,125, 22, 64,218, + 92,204, 43,226, 29, 28, 74,101, 74, 74,144, 30, 55, 77,164,166, 36, 45,160,153,128,195,157, 2,141, 9,215,195,161, 58, 92,217, +224,234, 45,161, 68, 90,107, 56, 58,246, 37,227,202,137, 74,163, 46,142, 48, 20,160, 67,150,194, 84, 11, 74,228,164, 19,174,101, + 70,191, 5,215,113,200,119, 22,104, 45, 11,210,237, 24,171,240,139, 95,220,242, 43,255,243,127,203,247,159, 94, 17,112,206,226, +248,230,248,179, 95,200,108,227,110, 39, 43,216,197,131,120,143,150,182,150, 6, 5,239,149,252,226, 49,127,241,194,210,165,118, +248, 11, 72, 4,193,210,211,110, 69,155, 54, 16, 53,196,107,105, 86,163,241, 56,123,193,171, 17,200,218,122,137, 48, 81,131, 29, + 82, 34,193,144,161,235,225,167, 78, 86, 73, 12,159, 48,174,113, 66,112,172, 85, 44,108, 7, 36,142, 32, 74,198,254, 61, 20, 19, + 97,212,102,216, 82, 93,245,173,130, 82, 74, 35, 68,161, 38,163,141,137,183,159, 79,158, 51,206, 59,130,218,184, 8,111,136, 91, + 39,142,214, 26,222, 91,127,190, 85,243,123,215,100,146, 25, 21, 65, 20,124,177,169,133,250, 96,105,222, 48,224, 37, 67, 51, 39, +188, 23,104,209, 94,157,218, 48,152, 14,142,230,132,208, 18, 97,136,188,253,165,183,216,237,206,169, 53,115, 56, 45,156,157, 95, +210,143,145,135,175,220,231,163,143,111,208, 82,233,134,184,122,163, 43,125,216,224, 98,100, 78, 86,193, 25, 70, 83, 93,246,253, + 14,189,104, 72,242, 60,127,254,156,187,187, 19, 14,165,204, 51,205,121,178, 59,130, 55, 52,173,106,229,101, 35,194,225,112, 93, + 88,237,123,133, 89,149, 23,143, 31, 49,205, 47, 24,135,183,184,216, 92,114,113,246,144,219,219,103,244,206, 48,164,115,177, 3, +101,217, 31,121,243,245,175,130, 6, 90,154, 41, 65,104, 45, 32,203,108,122, 95, 23,168, 75,165,219,120, 42,106,142,240,224,241, + 10,143,191,255, 33,255,230,223,253, 91,254,249,127,243,223,209, 5, 79,252,212,232,239,250,249, 53,127,240, 7,191,199,233,238, +150,235, 6,178,143, 76,169,241,246,195,192,197, 89, 79,107,149, 37, 87,254,245,255,241, 59, 72, 28,105, 34, 44, 9,134, 93,207, + 63,249,173,175,240,127,253,135,111,241,244,238, 22, 51, 86, 11,105,177, 26,166, 15,144,150,180, 34,132, 65, 42,104, 23, 9, 94, +120,184,187, 36, 68,199,205, 71,239, 18, 58,225,112,154,121,253,231,190, 68, 44, 79, 56,119,223,100,120, 53,177,191,117, 12,187, + 91, 54, 99,166,157, 58, 62,122,218,113,151, 3, 23,103, 71,182, 15, 28,233,197,108, 19, 37,231,120,126,211,120,248,246,142,116, +216, 35, 45, 65,236, 56,220,118,224, 50,190, 87, 52, 85,154, 44,116,125,135,122, 65, 7, 65,178,210,150, 68,206, 71,188,122,158, + 94, 15, 60,158,206,232,251,142,155,219, 59,196, 39,202,162,168, 43,102, 64,212, 12, 78,232,194, 64,236, 70,235,237, 47, 9, 25, + 35,173, 57, 68, 76,119,107,169,183,142,150,109, 28, 26,215, 44, 71,109,141,205,112,193,120,190,227,193,229, 61,230, 35, 76,185, +225,155,173,128,232, 4,124, 32,169,221,144, 5,199,210, 26,125, 23, 25,119,247,233,134, 30,209, 76,201,137, 60, 85,234,208,177, +144,232, 53,178, 52, 37, 85,135,150,142,170,153,172,149, 39, 79, 15, 44,105,207,151,223,124,157, 23,127,249,140,143,158,156, 24, + 98,228,233,205, 19,110,158,223,225,154,145,229, 92,239, 56, 59,123, 96,181, 75, 38,240, 13, 41,222, 12,138,100,150,230,200,197, +225,135,128, 43, 5, 85,143,108,140,194, 85, 74,181,239, 29, 21,234,146,104, 40, 41, 20,180,244,116, 77, 13,104,163, 30,151, 43, +211, 18, 80, 89, 24, 46, 34,170,137, 84, 10,204, 21,113, 29,213,121, 92, 81,164, 21,170, 20,186,230,241, 14, 78, 53,177,137, 30, +178,183,106, 97, 62,225,182,129,124,108,116, 97, 68, 27,196,224, 40,157,173, 11,187, 97, 64, 93, 37,157,236, 21, 47,234,140, 59, +191,233, 33, 10, 12, 30, 21, 79, 89,167,135,226, 35,199, 19,196,170,196,141,241,197,131,119,168,203, 54, 80,246,202,184, 27,127, + 50,148,229, 83, 7, 96, 94, 15,186,254,101, 71,125,125,149,134,245, 16, 45, 73, 73,203,178,230,171, 62, 91,233, 74, 45,109,101, +111, 56,179,168,253, 4,248,139,251,145, 31,251,191,101,223,142,109,101,168, 24, 63, 4, 17,124, 63,124, 42,112,103, 23,149,237, +167,113,178,107,134,224,211,193, 59,247, 83, 38, 5,211, 60,211,218, 66,195,227, 87, 7,130,235,149,124, 91, 80, 58, 58, 47,100, + 61, 34, 62,160, 93, 79, 57, 28,105,197, 83, 66, 15, 67,164, 78,141,230,103,124, 56,163,164, 66,235,102, 98,128,232, 27,126,240, +236,143,130,204, 71, 2,231,200,118,135,182, 35, 29, 14,189,244,212, 69,113,243, 76, 44,166,218, 29, 7,129,141,178,193,241,213, +215,183,124, 65,206, 89,206, 49,162, 92, 67,241, 47, 3, 96,120,178,227, 19,222,187,119,110,149,184,120,154,232, 15,232, 57, 5, +130,120,226, 90, 13,123,249,101,216,164,125,178,143,111,168,225,103,197,222,248,205, 53, 11, 70,172,157,115, 47, 74,171,197,110, +130,171,222,213, 85, 71,109,198,141, 86,209, 53,125,105,123,138,182, 34, 85, 95, 86,219,156, 98,176, 14, 21,219, 49, 97, 47,246, +134, 35,169, 65, 32, 80, 49,248,189, 84,208, 70,117, 54,150, 67,188,133,201,104,148, 82, 77, 60, 34,107, 23,163,218,175, 71,173, + 10,222, 83,197, 33,162,248,232, 9, 56,114,158, 41,217,211,247, 27, 74, 49, 45,107,213,134,167,208, 36, 80,115, 69, 54, 17,130, +179,169, 68, 3,159, 87, 37,173, 20,124, 11, 20,177, 47, 17,141,118, 33,104,174, 64, 21,131,245, 7, 97, 94, 50,170,194,195,123, +247,136,131,167, 84, 49,226, 83,106,156,157, 95,240,234,195, 11, 30, 63,189, 37, 47, 70,246,138, 93,224,236,226,156, 32, 80,106, +163, 73, 99, 33,211,240, 48,191,236,114, 86, 62,122,250, 17,143,159,191,160,243, 1,156,193,115,178, 90,231,190, 54,161,185,117, +114,211,148,110,231,173, 81,224,172, 25, 17,170,224, 78, 19,154, 10, 79, 63,252, 14,199,124, 66,157,195,227,145, 40, 12,177,163, + 15, 27,206,118,247, 56,138,112,182,219,177,159, 38,134,176,163, 54, 33,170, 50, 79, 71,235, 27,123,147,205,120,223,184,221, 79, +148,234,232,123, 33,137,227,120,218,243, 71,255,207,127,228,155,223,248, 14,247, 46, 47,120,112,239,146, 47,189,243,121, 88, 22, +126,239,223,255, 33,239, 63,126,204,188, 63,112, 58, 77,196,205,134,219,155, 59,254,223,161,241,171, 95,126,157, 40, 66,109,202, +120, 54, 82,179, 99,105,133, 24,160,204,153, 15,223, 59, 49,149, 25,175, 6,199,120,137,167,240, 78, 89, 84,215,254,181,224,130, + 17,178, 28,142, 94, 60,103,151,247, 72,251,138,187,223, 56,223, 69,222,184, 55,240,149, 47,110,233,239,254, 35, 26, 23, 14, 93, + 79,139, 39,134,169, 80,138, 33, 64, 47,174, 64, 36, 89,130, 41,247,168,159, 16,215,113,183, 20,138,115,124,238,141,135,148,235, + 15,233, 66, 79,115,158, 90, 19, 93, 95, 56,165, 72,208, 72,136,141,148, 19, 54,106, 50,175,114, 62, 57,110,246,142,167,215, 29, +251,101, 96,244,202,112, 21,160,235, 56, 30,102,156, 47,180,230, 41,115, 66,124, 71,236, 61, 33,122,243,219,171,176, 28,246,220, + 29,239,184,188,188,180,133, 87,174,228,102, 47,205,214, 15,164,154,104,106,248,206, 86,149,243,243, 43,118,155, 11,198,205, 25, + 47,158,191, 71, 43, 11,169, 26, 24, 67,168,120,107,151,161,186,126,198,125,160, 31,175, 8,113,196,187, 74,107, 25,145,104,137, +241,140,237,225,163,163,250, 68,178, 14, 4, 75, 58,226,125,227, 23,127,225,115,164, 60,243,231,255,249,187,148,165,242,252,197, + 19,158,127,124,141, 11,194,102, 24,113,193, 32, 27, 79, 30,189,135,255,252,192,118, 59, 90,218,183, 58, 36, 42,174, 23,131, 74, +105, 71, 80, 8, 90, 89,180, 18, 11,244, 1,102,239, 9,126, 67, 45, 39,234,105,213,175,138, 9,125,134, 80, 41, 85,112,100, 74, + 22,212,213,117, 28, 15,237,164,230,147,112, 29,161, 11,204, 62, 19,154,224,155,218, 84,175,223, 80, 45, 73,134,111,149, 84, 71, +144,108, 50,169,214,163,139, 97,176,203,148,169,222, 49,248,145,214, 42, 50, 40, 77, 19,109, 47,248,234,169, 99, 69, 6,135,207, +133, 69,103, 34, 91, 91, 48,204, 11,226, 60,101,191, 16, 8,184,161,225,134,141, 77, 55, 91, 35,231,198, 38,142,102, 27, 44,208, +253,132, 49,185,251,145,157,114,248, 17,142,155,251,212,143, 51,112,147, 77, 6,148, 90,161,113,142, 23, 0, 0, 32, 0, 73, 68, + 65, 84,165, 15,145, 69,127,112, 0, 46,216,134,232,103,141,206, 45,185, 82,138, 77,119,253, 63, 96, 2,224,126, 28,237, 77,219, + 58,101,244,156,125,202, 84, 23,249,225,154,157,124,234, 66,243,147,254,153, 63,122,168, 79,192,225, 52,211,202, 68,201,153, 30, + 72, 90, 44,204, 24,132,150, 23,188, 4, 66,232, 8,203,196, 41, 47, 52,141,148, 58,209, 82, 35, 72, 97, 16,225,168,133,224,102, + 52, 24,143,164, 86, 91, 69,248,147,152,183,161, 8, 69,178,181, 73, 74,162, 15,158,244, 60,209,188,208, 74, 37,186,158, 83, 77, +116, 94, 24,171, 35,151, 68,191, 25, 1, 79,106, 16, 60,158,230, 44, 92,224, 94, 26,115,212,217, 72,219, 16, 13,171,200, 69,215, +145,181,141,171, 85,130,237,157,155,237,216,197,123, 11,190,181,213, 8,227,141, 72,231,197, 58,133,205,173,213, 47, 49,212,107, +203,213,168, 72, 47,251,144,162,120, 9,182, 71,199, 17, 58,135, 40,148, 98,123,115, 39,209,122,181,171,130,209,254, 53,214,215, +108,222, 38, 10,157, 4,170, 87, 74,179,241,187,119,166, 46, 44,206,172, 85,110,221, 79,138,179,215,246, 74, 93, 52,176,136, 96, +248,197, 82,215,202,213,218,159,198,234,106,150,210, 95,236, 38, 31, 87,173,234,186,178,168,190,224, 75,195,181,128, 43, 54,157, +104, 8, 46, 91,213,199,135,206, 94,193,226,104, 20,230,214, 80,173,132,106,247, 27,234, 58,133,112,142, 42, 21, 71,135, 68,197, +103,187,116,100, 53,253,161, 58, 75,113,123, 31,248,202,151,222,225,254,195, 3,185, 38,134,113,100,211,111,233,198, 14,209, 66, + 43, 17,223,155,186,146,220, 8,206, 28,218, 55,251,107,110,175,111,108, 76, 39,142,136,167,170,251,132,205,223,124,163,101,251, +253, 84, 17,188,115,212,154,152, 21, 54, 97,160,245,149, 83,153,184,188,119,159,216,117,228,230,168,243, 76,106,153, 99,157,201, +165, 66, 61,113,188,121,142,139,157, 9, 71, 92, 37,173,230,168,165, 40,172,181, 67, 4, 74,104,248,248, 50, 51,224,200,115,195, +105,166,133, 98, 59,112,247,148,180,191,227,253, 15,222,229,207,254,226, 79, 41, 83,102, 90, 18,203,124,203, 60,207, 44,173,176, +153, 50, 85, 23, 62,248,254, 51,126,233, 11, 15,108,100,223, 10, 55,199, 59,186, 56,178, 25, 7,230,211, 66,163, 50,205, 51, 85, +215,117,144, 49, 73, 8,162,108,134,158,227,105,162,105, 37, 52,112,179,210, 44,198,192,229,131, 75, 62,247,160, 35,184,202, 69, + 55,240,133, 87,110,120,235,171,255, 24,233,133,229,100,149,147, 33, 85,102,231,168,190,209,242, 57,170,202,217,246,136,182, 64, +229,138,114, 56,208, 82,133, 51,199,147, 23, 11, 23,151, 27, 6, 89, 56,201, 1,221,192, 48,128, 31, 6, 90, 43,148, 59, 51,133, +157, 52, 48,212, 74,217,207, 76, 75,230, 46,119,188,127, 29,153,231,158,180,114, 21, 36,118, 92,157,141,212,234,185, 93, 14, 36, + 38,242, 2,121, 57, 89,109, 47,120, 11,123,182, 96, 59, 56,204,212, 54,197,158,126, 99,175,152,224, 26, 45,118,116, 98,198, 66, +117, 2,146, 41, 73, 56, 27,122,222,122,237,138,139,139,115,190,245, 87,123,136, 66,155, 11,115, 58,225,102, 24, 55, 29, 62, 10, +117,113,136,143,244,103, 15,136,103, 59, 68, 11,129, 5,231, 60,115,134,166,214, 88,169,185,225, 90, 50,233,156, 64, 37,115, 74, + 51,175, 92,116,252,247,255,236,171,124,253,111,222,227,247,255,240,175,185,119,241, 42, 95,124,243,117,182,177,231,241,243, 23, + 28,150, 76, 23,157,141,214,181,241,228,241, 99,222,249,252,231,112, 46, 16,157, 18,139,210, 34,150, 18,198,170,105,181, 6,134, + 2,205, 43,139,102,243,171, 91,210, 21,137, 74,213, 68,206, 38, 98,129,198, 82,214,183,154, 24,246,147,222, 19, 22,161,229, 74, +127, 30, 12,126, 19, 5,169, 66, 91, 38,180, 10,221,184, 33,100,161, 48, 35, 18,232,253, 64,106,230, 63,112,209,163, 29,232,146, + 16, 55, 34, 90,112, 29,104, 84,220,177,162, 62, 50, 77,149,209,117,200,232, 80,153,209, 56, 26,217,178, 22, 90, 72, 44, 71,203, + 18,117,113, 93, 81,141,158,221, 38, 48, 55,101,174,137,179, 94, 16,177,138,177, 52, 79,232, 59,198,177,251, 59, 31,136,159, 62, +192, 62,141,171,233,214,106,121,106,213, 30,105, 94,217, 14,225, 39,190,144,255, 94, 33, 57, 32,167, 68,211,102,174,144,207, 48, + 85, 95,212, 86,177, 65,148,248,119, 64,196,254,232, 95, 13, 63,102, 77,192,143,132,235, 20,152,115,162,104,165, 86, 97, 86,168, +222,218, 21,210,132,156, 10,245, 48, 81,181,209,141,231, 84, 89, 80,122,144, 70,190, 62, 18,206, 3,231,117, 67, 77, 66,199, 9, + 63, 56,138,139,212,101, 97,246,208,230,163, 57,217,135, 13,131, 42,167, 85,169,155,197, 19,171,163,185,140,107,194, 38,108,168, +117,134,147,226, 98, 88, 45,147,149,114, 82, 66,117, 47,181,169,206,196,239,106,175,113, 93, 83,143, 77, 60,226,204,181,110,190, +150,182, 6,119,214, 78,183, 83,112,230, 18,246, 56,147,148,180, 8, 78,136,174, 25, 32, 64, 27, 62,172,149,154,214,112,226, 41, +174,174, 92,121, 91,158,139,179,157,116,109, 25, 39,150,202, 38,216, 24,221,240,178,182,131,111, 52,210,122,208,135, 0,117,174, + 16, 28, 21, 71,171,206,190,152, 0,180,179,221,187, 54,242,210,108,117,192,203, 73, 67, 67, 34, 68,132,172,150, 90,237,229,255, + 99,237,205, 98, 45, 75,207,243,188,231,251,135,181,214,222,251, 12, 53,116,245, 88, 61,112, 38, 37, 82,180, 76, 39, 82, 36, 74, +148, 37, 37, 78,100, 9, 9, 32, 88,113,128, 0,214, 69, 46, 18, 32, 1, 2, 4,200,101,224,171, 92,229, 34, 64, 6,192,129, 51, + 8,200,128, 0, 70,224, 68,177, 69, 71,130, 16,197,178, 72, 81,164, 56, 72, 34,155,108,246, 60,213,112,170,206,180,247, 94,107, +253,211,151,139,111, 85,117,177,173,144,138, 36, 52, 26,232,234, 83, 56,117,206,169,115,246,250,255,239,123,223,231, 89, 72, 65, +226,112, 62,216, 78, 28, 65,107,125,168, 28, 52,135, 58, 86,161,107, 74,166, 17,156,167,149,138, 58,207,220, 20, 47, 74, 23, 61, +174, 21, 27, 51,247, 1, 39, 17,231, 27,162,133,154, 29, 77, 10,195,202, 96, 38, 62, 58,124, 22,170, 52, 83,108, 46,240, 28,169, + 66, 63, 68,114,105,184,218,232,125, 68,139,146, 92, 65, 85,136,253,138, 39, 14, 6, 99, 59,135, 30,105, 86,211,171, 56, 99, 18, +103, 59, 84,120,239,105, 90,112,222,190,118,226,252, 67,169, 67,140,129, 32,222, 38, 35,170,212, 44, 4,255,128, 9,174,248, 4, + 29, 22,232,201, 57,211,230,142, 91,119,239, 50,158,126,155,126,216,224, 99, 79, 23, 61,113,221,227,187, 53,155,213, 26, 65, 8, +171, 3,182,121,203,249,253, 83,130,157,147, 40,121,182,190,123,244, 6,204,168,149,185,244,232, 62, 49,132,158, 81, 38,138, 8, +190,236,205, 1,150, 12,120,225,189,195, 79,149, 41,237,184,156,246,108,199, 75,171, 29,145,201,187,204, 60,120,138, 54,238,140, + 39,188,242,246, 93,226,106, 69, 20,225,236,100,203,209,113,224,217,231,143, 77,147,153,205, 56,232,101, 32,185, 9,143, 18, 37, +128, 15,104, 17,230,212,208,162, 38,210, 64, 81,129,227,131, 21, 63,249, 67, 55,184,249,116,230,221, 83,143,115, 23, 28, 29, 94, + 67, 14,110,146, 79,111,195,240, 12,180, 13,125,184, 96, 85,207,200,229, 10, 78, 58, 58,119, 6,171, 64, 58, 19,104,103, 56,151, +137, 7,142,253, 88, 56, 61,175,124,252,211, 31,160,230,123,184,150,185,220, 59,134, 85,224, 96, 0, 55,122, 14, 14, 10,111,159, + 52, 94,127, 11, 14,214, 14,207, 33,231, 23,141,153,158,222, 5,170,239, 24, 6,171,202,141,185, 33,108, 8,226,152,234, 72,158, + 26,243, 52, 51,151, 76, 83,165,186, 74, 77, 25, 41, 91, 27,147,171, 16, 92,100, 26,119,224, 3, 33,246,139, 41, 14,112,129,206, +175,200,204,164, 42, 92,185,118, 68,119,180,230,240,224,152,182,155, 24,167, 4,189, 1, 72,214, 18,153,200, 86, 67, 69,232,186, +136,116, 43, 54,171, 35,250,224,112, 37, 49,207, 51,161, 63, 36,198, 64,214,104,135, 81,141,104,112,208,132,150, 39,198,201, 84, +176,247, 46, 43,191,247,251, 47, 45,246, 43,229,206,221,119, 88,175, 27, 63,242,169, 23,248, 81,255, 33,190,250,226, 43,188,254, +218, 29,214,174, 67,112, 76,211,196, 91,183,111,243,228,147, 79,179, 90, 69,147,174,204,149,232,134,197, 50,231, 81,241,132,230, +217,107,182,126,187, 52, 90,171,172, 36,146,138, 9,167,106, 49,228,245, 28, 20, 47, 29,201, 57,186,117, 52, 10,228,174,208, 2, +104, 31,105, 41,131, 58, 84, 61, 45, 55,188,174,104, 94, 73,173,146,107,194, 43,132,190,225, 58, 33, 54,135, 52,227,170, 51,103, +162,219,224, 37,216, 42,174,122,116,191, 99,213, 7,116, 63, 83,116,192, 31,116,120,167,132,186, 34, 77,129, 18, 27, 97,180,117, + 95,136,221, 18,234, 83, 84, 26,109,182, 70,207, 16, 21, 23,173, 77,180,118,246, 90, 72, 16,196,117,198, 25,249, 75,224,167, 79, +185, 34,205, 2,211,113,245,189,187,239,240, 23,124,168,151,130, 1,187, 98, 48, 27,202, 35,123,252,248,200, 99, 62, 63,178, 14, +120, 48, 50,119,239, 67,194,126,207,175,139,210, 82,165,101,197,245,242,151,170,138,125,240,177,207,243,204,202, 41,179,135, 57, +229, 69,128,212,200,187, 61,110,125, 72,214,153,189, 38,162, 40,171,174,177,203, 30,241, 14,167,197,166,122,251,153, 77,131, 34, +144,106,135,248, 25, 95, 42,190, 53,166,150,141,219,226, 87, 20, 26,110,170,148,150, 12,173, 78,193,201, 64,107, 3,165,237,209, +222, 83,242, 4, 73, 56, 8, 27,222, 26,143, 72, 56, 78, 78, 19, 65,181,162,213, 88,233,178, 40, 82,131, 55,219, 79, 83,227,157, +179,116,199,213, 89, 74, 94,104, 6,154,193,129,154,177, 72,197, 82,216,136,221, 14, 16, 35,190,217, 62,253,193, 72,183,154,175, + 61, 40,190, 51,212,163,170, 25,201,106, 43,118,243,118,106, 58,206,102,112, 26, 84, 17,241,152,243,209,118,174, 56,115,142,183, +172,104,176, 74,150,119,129, 89, 0,191,140, 80,155, 82,117,217,141, 54,197,105,163,169,144,106, 65,125,176,240,202,226,127,175, +213,222,246,224, 59,168,180, 68, 88,184,242, 78,192,171,128,135, 92, 45,103, 64,107,232,242,173, 93,213, 92,238, 33,120,114, 85, +171,130, 84, 51,187,249, 46, 16,154,162,146,104,193, 81,212, 66, 78,222, 89, 69,174,137, 16,177, 48,159, 56,232,250,222,130, 74, +197,166, 25, 53,171,213,118,186, 64,244,158, 52, 11,173, 89, 95, 89,105, 72,232,160, 22,242, 52, 17,189,195,135,193, 32, 47,117, + 54,199, 47,198,218, 23,129,177, 38,198,113, 52,155,174,135,224, 59,186, 85, 79,223,247,236,118, 23,160, 22,242,168, 77,208,180, +180, 2,156, 82,163,195,137,125, 60, 87,142,215,124,250,211,255, 18,183,222,126,147,251,103,119,153,247,151,220,191,191,131, 19, +197,199, 64, 23, 34, 18, 35,173, 42, 87,175, 29, 83,212, 66, 65, 38,118,240,120, 9, 84,167, 84,201,212,148,153, 46, 42,171,227, + 3, 90,107,204, 83,193,119,150,234,236, 66,199,156, 19,167, 23, 23,236,199, 29, 36,165, 57, 33,239, 51,117, 46,156,207,149, 86, + 44, 85,156,198, 29, 5,165,150,204,119, 94,123,139,171,199, 27, 91, 39,133, 1,109,141,219, 39, 91,214, 49,154,194, 54, 55,156, + 15, 4,231, 8, 78,112, 62,224, 67,199, 88, 10,213, 43,145, 1, 93,110,172,162,153, 15,127,240,113, 62,248,194,134,213,234,194, +210,211, 99, 38, 94,185, 74,222,159,161,231,223,180,131,111, 4,164, 35, 72,135,211, 45,184, 66, 43,160, 91, 65,231, 5,164,189, +169,172,250,129,123,167,137,110,117,200, 83, 55,174,112,255,245, 55,160,121,166,226,232,178,103,188, 63, 50,109, 29,219, 82, 57, + 25, 3, 28, 30,113, 55, 23, 86,178, 38, 15,153,142, 72,240,176, 58, 94, 17,179, 9, 63,242,246,140, 57, 43,251,113,103,233,125, +169, 20, 77, 76,105,102,183, 61,163,180, 66, 23, 15, 24, 86, 43, 66,173, 52, 49, 42,218, 56,111, 81, 46,216, 28, 30,219,172, 78, +196,128, 23,106,135, 57, 39,194,213,227,199, 76,179, 59,108,248,218,119,190, 78, 89,146,248,234,150,201,139,115, 86,141,171,142, + 33,172, 88, 29, 95, 33, 68,197,101,155,132, 84, 13,203, 65,122, 34,202,154, 68, 99,154,103, 36, 5,196,121, 82, 77,164,150, 64, + 6,246,251, 11,190,252,245, 87,249,220,191,240, 49,254,173,191,245, 89,100, 74,124,249,235, 47,243, 71, 47,191,194,175,252,194, +207,240,153,191,242, 97,254,201,111,253, 1, 95,250,195, 23, 81,241,196,174,113,121,113,206,181,195,107,180,254,128,230,109,125, +225,164, 18,100, 77,118,150,187,217,251,134,120,193, 39, 15, 99,164,180,137,209, 55,251, 30,244,118,104, 5, 3, 3,229, 92,112, + 77,201,201,234,132,171,161,177, 45, 21,167, 6,175,170,185,209,165,137, 62,116,184, 67, 71,155, 43, 45, 87,112,198,233, 80, 7, +105,106,248,104, 89,158,170,208, 73,160,133,108,108,125,215, 51,172, 6,114,139,168, 40,185,121, 84, 2,181, 37, 92, 22,130,239, + 17, 55,209, 38,197,187, 21,117,127,137,187, 22,108, 66, 55, 69, 66, 31,113,185,114,162, 35,171,216,115,221,119, 56,113,228, 86, +172, 62,217, 34, 78,160, 45,225,176,253, 34,171, 92,201,123, 33,178,184,148,156, 30, 70,143,220,123, 15,197,162, 60,180, 56, 42, +182,174,170,181, 46,176,174,225, 61, 57,203, 95,180,113,214, 32,213,130,115,142, 33,122,250, 71,198,239,241,125,247,118,247,255, + 49, 14,127,240, 64,159,129, 71, 19, 4,151,115, 33,231,100, 23, 59, 85,106, 93, 90, 30,203, 3,249, 81,174, 93,251,115,132,230, +170, 66,200,153,210,178,101, 58,138,253, 63, 31, 42, 26,131, 53, 46, 66,166, 59, 56, 34,236,246,236, 79, 71, 88, 71, 58,157,153, + 71,135,244, 27, 66, 41, 76, 98, 95, 91, 57,190, 66,190,156, 81, 77,104,173,116, 94, 41,128,234, 37,101, 87,105,186, 38,116, 17, +205,179,181,173,116,162, 85, 79,141,142,218, 28,226,122,138,143, 28, 68,229, 67,207, 60,206, 53,132,119,143, 58,130,151, 96, 72, + 62, 47,184,186, 48,132,213,152,201, 78,108,247,104, 15,251,102,227,119, 22, 45, 33,203, 45,125,233,181,138, 55,186,156, 87,191, + 16,233,140,132,230, 88,202,253,165, 17,188, 35, 99, 34,230, 7, 70, 31, 53, 74,235,242,103,250, 69, 82,176,140,216,155,129, 54, +170,100, 43,245, 56,111, 52,160, 86,105, 73,136,222, 89,226,212, 91,248,172,168, 18,213,170,107,234, 50,218, 28,117,193,181,214, + 38, 86, 51,241,206,254, 50,139,221,254,171, 46,182, 57, 97,209,214, 45, 93, 93, 53,137, 75,171,182,110,144,210,240, 11,210,182, +169,141,239,130, 55, 58, 85,197, 94, 8,135,222,240,131,222, 41,196, 64,163,224, 37, 82, 68,145,234, 8,206, 45, 1, 64, 83, 32, +154,113, 73,232,131, 51,153, 77, 82,188,120,235,136, 59,161, 23,135, 39,146,188,144,165, 34, 1, 66, 54,129,128, 58,240, 73,141, + 20, 38,158, 82, 51,171,222,166, 6, 41,101,110,159,220,163,150,202,225,193,192,170, 27, 88,173, 6, 46, 79,183, 76,165,178, 90, +247,108,142, 14,249,247,255,163,255,152, 31,249,216, 71,120,229,165, 63,230,127,248,239,255, 62, 47,189,252,214, 82,200,180,124, + 68, 23, 59,230,125,230, 96, 19, 17,102,238,223,186,205,143,255,216,143,195,167,254, 42,111,191,125,139, 34,153,221,253, 11,238, +156,223, 35,231, 9, 45, 59,198,221,158,147,211,219, 92, 59,126,154,131,110,205,249,254, 46,113,115, 8,179,249,152, 3,142, 40, + 98,221,227, 80,209,224,136, 40, 79, 61,214,179, 27, 39,230, 84, 24,167, 70,196, 49,233,204,165,216, 33, 72,240,104,158, 73, 57, + 81,180,208,230,196, 79,253,244, 79, 51,167, 61,191,243,187, 95,164, 11,194,253, 91,247,185,118,116,204,193,202,130, 97,206, 69, +154,122, 70,169, 72,129,121,202,148,105,182, 16,147,139, 6,161,200, 51,185, 85, 92, 5,233, 2,222,119,136,102,142,250,129,143, +126,224, 10,235,112, 73,157, 51,199,125,133,110,141, 47, 74,125,231, 11,164,253, 27, 68, 9, 72,215, 83,171,210,202, 12, 93,135, +107, 74, 25, 21,157, 3,185, 40, 26, 34,235,180,163,249,204,155,119, 70,174, 93, 61,228,229,215, 79,248,206, 87,247,124,240, 89, +219,244,189,245,182,112, 54,130,205,118,174, 67, 23,241,186,226,106,111,128, 39, 47,206,124,219,186, 65, 90,230, 98, 60,229,234, +241, 39,184,126,176,230,157, 87, 95,225,114, 30,105, 53, 81,202,204, 52,110, 73,105,100,218, 79, 52,105,172,122,240,190,167, 52, +171, 9,170, 3,223,121,210, 60,225, 68, 88, 29, 94,181,105, 74, 54, 58, 91,201,149,131,131, 21, 67, 31,249,232,115, 55,105,213, +113,247,242,130,232, 12, 42,229,197, 49, 12, 3,117, 55, 81, 70,160,107,208,123, 67, 39, 79, 91,146,141,122, 44,145,174,102, 8, + 47, 1,250, 18, 40, 58, 51,215, 75,188, 95, 25,179, 98, 33,173,137, 11,156,156,142,124,249, 15, 95,229, 23,127,233, 6,186, 25, +184,117,235, 62,111,221, 61, 35, 95, 78,252,157,191,253, 11,252,123,255,246,223,228,233,231,174,241,249,207,255, 33,243,156,104, +210,184,123,239, 45, 14,143,123, 14, 55,199, 76,169, 25,107, 95, 2, 44, 53, 62,149, 70, 88, 13,164, 86,112, 50,131,235,151,202, +212,142,185, 86,130,115,116,210,168, 52,246,213,122,157,126,223,160, 15, 20, 31,104, 15, 2,106,165, 89, 69,213, 5,171,208,238, + 19, 81, 54,164,160,168, 76,148,106, 42,232, 46, 40, 85, 10, 77, 58, 98, 83, 28,129,138, 55,182, 5, 80,245, 18, 45, 66,138,145, + 20,132,206, 9,185,100,112,158,148,148,153, 75, 6, 31,145, 78,241,171, 67,163,117, 6,193, 83,145, 4,184, 76,140,160,205,113, + 57, 11, 71, 3, 54, 21,164, 67,212, 38, 62,135,171,254,225, 56,253,209, 75,123,147,247, 30,138, 5, 56, 3,186, 5,188, 50, 43, +104,130, 7, 45,220,185,192,180,159, 13, 54, 86, 22,110,135,218,107, 92, 93, 14, 11,127, 94,124,122,173, 80, 91, 33,171, 61, 15, +190,223,142,252,251, 5,227,220,251, 30,232, 15,108, 50,181, 54,187,228, 5,111, 83,161,229, 48,176, 93, 66,113, 15,150, 19,151, +203,127,175, 30, 9,210, 77,239,235,234,151,247, 77, 37,182,251,153, 52,238,105,205,112,228, 33, 40, 33,249,165,181,227,208, 52, +211, 87,197,213,142,117, 28, 56,201, 23,232,124,128,168,167, 6, 79,139,147, 5,184, 75,143,247, 5, 77,163,173,126,166,153,134, + 48,116,157, 93,252,182, 66,136, 61,206, 59,107, 5,177,129, 44, 84,127, 73, 65,232, 52, 34, 53, 51, 28, 15, 92,110,149,213, 58, +112,116,124,104,159,107, 42, 4,231,108,239,137, 51, 64,190, 87, 80, 28,109,145,188,219, 67,203, 42, 53,110, 9,196, 72,176, 91, +176,106, 35, 58,219, 7, 91,178, 72, 81,178,185,214, 77,197, 98,123,122,103, 60,243,134,165,232,197, 43, 53, 21,166,106,236, 93, + 45, 75,205,205,137, 77, 6,106,163,137, 1,105, 92, 23,177,159, 46,191, 36,214,253, 3, 42,173,253, 62,117, 24,116, 71,161,218, + 13,186,170,209,225,252,226,126,215, 86,105,193,225,151,221,162, 85, 30, 26,234,162,173, 30, 36,152, 19,221,186, 58,214,169,110, +208,154,163,106,197,137, 82,197, 86, 20,210,202,194,195, 95, 48,182, 78,232,157, 29, 2,134,222,132, 26,206, 5,188,132, 37,112, +213,112, 64, 8,182,255,215,232,104, 30,250, 26,104,174, 48,205,201,126, 48, 99,164, 54, 35,232,105, 21,156,239,204,196,149, 43, + 90, 28, 18,237,182, 44,189, 39, 86,131,235, 84,105, 75,197, 67, 16,241,108,239, 95,242,198, 59,111, 51,101,216,239,102, 74, 43, +220,194, 2,141,171,190,179,131, 86, 16, 74, 42,124,246,167,127,150, 95,250,249,159, 1,224,249,103,159, 65,167, 51,254,147,255, +244, 63,167,137,163,228,132,243,158,161, 95, 49,244, 29,165, 41, 29, 43, 46, 47, 78,249,167,191,247,121,142, 86, 87,216,237, 51, +155,163, 35, 98, 92,209,197,192,149, 43, 55, 56, 58,124,158, 90, 2,219,221, 61,124,170, 92,142, 91, 98,183,194,183,128,250, 74, +196, 49,166,153,139,179, 61, 93,223,113,227,234, 21,180, 58,134, 88,121,242,217,199,120,245,181, 19,238,159,238,137, 27, 97,190, + 76,203, 10,167, 35,248,192,225,141, 35,230,221, 22,220, 49,183,111,191, 67,191, 90,243, 55,126,241,167,168, 57,241,165, 47,125, +157,148,118, 92, 92,156,115,114,118, 65,183,238, 97, 95,233, 87, 29, 62,216, 43, 87,115,118,136,148,192,210,115,134,222,121, 35, +147, 57, 79,236,141,242,229,213,209,212,243,145,231,158,229,153,117,143,184,145,166,130, 78,153,107, 79,222,160,238, 47,184,127, +239,109, 84, 59,214,131, 66, 46,104, 18,235, 38,207, 80, 71,129, 62, 24, 98, 55,153,156,200, 69, 97,123,158,216,239, 3,159,252, +225,199,249,221, 47,191,198, 31,191,217,112,157, 99,238, 58, 78,247, 29,195,224, 24,188,167,118, 61,171, 85,207,122, 29, 57,234, +110, 48,215, 66,174, 91,188, 22,230,109,129,203,145,183,223,189,195,217,105, 79,236, 10, 46, 40,140, 19,190, 22, 52, 14,148,122, + 74,169,214,182,112, 84, 74,205, 76,243, 14, 90,193,187,184, 76,218, 34,195,186,163,212,204,246,244,148, 56,244,212, 58, 83,114, +161,235, 6,174, 95,187,198,245,171, 87,233, 36,242,165, 63,250, 2, 37, 21,155,176, 45,171,148, 26,133, 48, 68,166, 92, 25,100, +131,147, 72,246,106, 10,226, 49,225, 86,157,221, 94, 49,204,106,107,133, 73, 4,245,142, 58, 37,114,134,121, 30,145,154,160, 86, + 36, 4,214,155, 21,111,223,191,228, 31,126,254, 75,124,238,175,254, 16, 31,255,240,115,156,167,202,187,119, 79,249, 7,255,251, +239,112,248,183,127,142,127,227, 95,249, 49,242,228,248,252,111,126,145,166,202,184,175,156,220,189,199,102,115, 68,136, 27,124, +115,204, 50,226,102,123,116, 55,167, 84, 45,100, 87,232,171,105, 74, 75,222, 81,246, 5,149, 14,130,103,146,138,164, 66,140, 17, +245,166, 61, 46, 8, 37, 79,248, 0, 45, 13,104,180,158, 49, 62,176,175, 74, 84, 79,239, 21, 81,191,188,214,101, 52, 87, 90,244, +132,208, 19,187, 35,202,254, 30, 37, 58, 52, 89,230, 60,246, 61,154, 38,154,107, 20, 34,157,175,228,233,146, 1,161,117,107,240, + 9,159, 86,100, 21,106, 13,200,202, 94,223,230, 42, 32,129,190, 21,243, 77,196,200,208, 53, 6, 81,230,108,175,153, 3,138, 4, +165,123, 36, 24,246,254, 91,232,250,125,187,225,199,220, 35, 1, 48, 1,233,223,219,171,223,119,182,118, 45, 98, 90,106,215,121, +178, 88,254,253, 92, 33, 52, 56,244,239, 77, 0, 86, 96,129,233, 63,195, 13, 56,101,227, 33,104,109, 22,214,253,203,228,206,212, + 70,173,141,185, 54,174,244, 6,252,122,112, 88,120, 63,206,234,240, 79,201, 24,116, 63,192,254,118,154, 48,194, 92,206,214,238, +138,142,178, 47,184, 36,244, 3,108, 91, 65, 91, 71,109,133,203,208,208,117,132,177,176, 19, 79,105,151,144, 60,121, 46,116, 85, + 72, 96,248,226,208, 97,210, 93, 97,218, 89,203,192, 71, 71,101, 79,211, 64,218, 22,188, 43, 20, 85,156, 14,116, 50,209,106,164, +133, 76,157, 3,174, 12, 28, 13, 74,136,246, 49,142,165, 16, 84,173, 59,142,179,157, 34,222,180,171, 52, 83,178,162,203,206,221, + 60,110, 56, 39,104,110, 22,132,211, 66, 22, 19,182, 32,246,123,156, 8,169, 85,156,243, 15,107, 99,176,116, 49,155,249,157, 93, +179, 91,189,170,208,196,108, 60, 77,176, 10, 25,230, 95,175,205, 35,190,217,255,127,112, 32, 16,165, 52,219,229, 57, 91,205, 89, +210,173,181,135,249,188,162, 15, 84,136,150,231, 20,245,148,102, 26, 64,117, 14, 39,105,129,227,244,150, 33,104,141, 24, 44, 56, +102, 41,125, 83, 64,122,156, 17,241,194,210, 31,109, 13, 13, 75, 87,178, 53,162, 11,244, 3,164,182,124,238, 98,234,189,220,160, + 67,113,177,218,174,210,155,211, 57, 21,187,105,187,162, 56, 23,169,106, 19,143, 0, 20, 28,154,171, 5,105, 48,189,103,112,142, +148, 50, 33, 64, 31, 34, 65, 29, 91,153,113,173,210,199, 72,206,106, 66, 27, 5, 25,236,139,241,230,203,239,112,122, 97, 80, 36, + 23, 2,146,178,201, 14,106,101, 63, 45,135,156, 16,104,206, 51,166,249,123, 67, 34,118, 93, 51, 44,112,181,144,137,146, 40, 57, + 18,194,129,237,118, 58,101,123,153,216,239,118, 36,122,110,157,223, 39,231,145,174, 27, 24,164,227,236,232, 42, 50, 52,250, 32, +232,152,137,195, 33,161,235,137,177,144,181,144,166,138, 75, 91, 98, 16,142,143, 35,173, 84,106,201,108,174,174, 41,217,113,251, +222, 5, 23,219,153,176, 19,188, 55,161, 69, 0,234, 60,113,126, 43,209,173, 87, 60,125,253, 6,117,156, 25,250, 21,117,110,172, + 98,199, 79,255,245,191,198,111,252,227,223,134, 84,121,245,197,111,115,229,198,117,134,131,171, 28,246, 3,199,107,229,246,217, +222,118,116,213,214, 36, 94,122, 67,250,122,103, 66,153,106,183, 16, 23,236, 64,243,248,213, 53, 79, 63,182,225,183,191,124,194, +179, 79, 10,159,252, 96, 37,118, 29,155,199,159,229,252,205,111, 49, 37,197,119,149,145, 30,153,161,151,130,167, 65,243,180,185, +224, 54, 14, 29, 42,161, 8,190, 43,196,131,192, 75,175, 86,214, 87,174,243,204,135,110,242,220,203, 47, 49, 63, 21,185, 87, 86, +164,230, 56,244, 29,117,174,180, 94,216,108, 60, 87,175, 92,227, 74, 55, 32, 52, 58,223,225,227, 21,206,238, 93,176, 62, 84,246, + 23, 74,167, 27,144,145, 34,224, 91,164,170, 16, 98,228, 50,103,230,125,230,227, 47, 60, 73,113,142,111,126,243, 13, 59,140, 86, +147, 18,185,165,152,228, 96,201, 19,120, 74, 25,217, 94,236,169, 90,233, 67,224,234,213,167, 56,216, 28,177, 14, 43,190,254,226, +183,184,115,231, 62, 67, 31,105, 5,106, 47,228,154,161,120, 75,125,235,136, 87, 37,150,140,203, 43,250,225,136, 57, 20, 92, 20, +116, 46,100, 43,143,224,221, 49,181,206,200, 16,105,211, 37,105,218,226,107,161,180,134, 58,111, 42, 94, 81, 98, 12,188,253,206, + 61,190, 32,223,230,115, 63,249, 41, 62,242,241,167,152,247, 91,254,233,239,189,200,127,245,107,191,206,191,243, 43,255, 42, 31, +120,225,121,158,185,249, 46,111,188,245, 26, 83,206,156,220,187,228,169,107,247,185,241,212, 77,238,238, 38, 88, 68, 30,221,225, + 10,191, 47,212,125, 53,239,183,120,170, 90,243,165,198, 64, 20, 79, 47,134,169,213, 6, 83,153,241,157, 16,252,138,170,153, 78, +149, 16,122, 92,176, 14,121,147, 74, 73,246,240,170, 52, 74, 48,143,131,138,169,166,155, 52, 38,245,116,169,160,220,163, 70,193, +141, 25, 87, 61, 97,213, 40, 36,156,118,136, 79,168, 20, 92, 30,240, 62, 66,200,148,146,240,170,132, 3, 71,218, 90,235,199,237, + 42,174,235, 16, 95, 73,206, 94, 51,215,190, 55,184, 86,117,164, 40,132,104,215,111,239,128,232, 24, 66,247,103,222,153,127,143, +157,237,253,129, 48,133,154, 27, 46, 89, 95,255, 96,136, 15,147,226,209,238, 50, 15,111,176, 77,190,247, 33,254,253,138,111, 25, +216, 78,153, 92, 51,226, 48,103,192,131,212,250, 95,176, 71,174,139,114,181, 21,203,113,133, 31, 0,203,113,127,202,175,221,247, + 9,206, 57, 96, 88, 72,134,169, 86,102, 4,149, 74, 88, 21,202, 56,113,177, 23,138, 87,134,169, 81,210, 5, 71,221, 26,201, 29, +251, 92,104,117,162, 95, 59,146, 0, 57,146, 99,161,120, 37, 68,165,159, 51,179, 8, 94,170, 65,134,188,199, 13,145,142, 53,187, +147, 29, 12,246,189, 85,115,130, 57,146, 67,161,181, 29,131, 56,210,229, 4,222,211,133, 21,100,165,172, 32,157,109,241,207, 60, +245,228,223,109, 11,152, 69,237,217,101,184, 86,100,129,205, 44, 38, 52, 85, 28,134, 76,245,222, 63, 8,184, 91, 21,162,153, 83, + 92,155, 73, 86, 92,112,134, 98,173,246, 62,188,247, 38,136,192,161,206,110, 73,226, 29,190,139, 72, 91,174,245, 18, 88,228,163, +168, 24,114, 85,176,132,185,170, 65,122,155, 46,220, 96, 17,196,217, 3, 81,212,204,113, 2,120, 23,172, 83, 14,102, 42,114, 75, +239,212,252,127,152,255,197,225,154, 61,156,107,179, 16, 92, 23,172, 10,145,115, 93, 70, 75,246, 80,177, 19,154, 34, 77,141,161, +237,133,224,237, 22,111,117, 55,232, 6,112, 5, 84,132,150, 27,161,143,116,241, 65,174,160,218,237,218,117,104,106,134,225, 21, +161,105,165,104,195, 5,197,247, 17, 47,193, 32, 50,226,151, 21,135,209,238, 52, 91,106, 92, 69, 73,217,170,127,165, 66,105, 32, + 68, 66,203, 54, 34, 83, 72, 37,243,206, 59,119,112,222,186,218,173, 54,114, 30,121,143, 34, 96,243, 56, 47,102, 32,186,115,235, + 29,134,245, 17, 55,159,121,154,183, 94,254, 54,255,205,223,251, 53,222,186,115,178, 76, 63, 44,148, 56,172, 14,192, 53,164, 54, + 98,151,129, 74, 46,158,132,195,220, 60,133, 46,216,168,200, 71,232, 92, 79,236, 58,148,198,208,119,244, 93, 52,117,172,102,130, +120,246, 83,166,185,194,170, 83,180,102,230, 73, 89,109, 34, 47,220,188,206,203,175,221,226,237,119,207,137,125,192,171,237,187, + 37,152,227,190,150,196, 60, 37,182,151,123,166,221,204,213,235, 71, 28, 93, 57,224, 91,223,124,133,175,125,245,155, 76,101,230, +153,167,159,225, 3, 31,120,158,143,126,248, 5, 86,113,197,110, 59, 19, 66,207,110,183,165, 91, 13,180, 8,151,251, 61,181,194, + 16, 3,190, 11,248,224,208, 82,141,158,183, 8,115,134, 85,207,167, 63,241, 33, 66,140,188,248,206,125,134,174,227,249, 39, 54, + 28, 93,185,198,229,249, 37,103,103,247,136,157,163,140, 9,230,130,106, 49,112,200,250,208, 38, 75, 30,252,122,141, 43, 9,223, + 28, 49, 6, 90,234,248,253,151, 39,206, 39,199,110,234,121,249,157,115,246, 5,170,239,192, 41,227, 56, 51,151, 74,139,106,129, +172,105,102,220, 79, 92,140,123,134,154,185,125,114,155,211,251, 59,238, 95, 94,178,159,102,186,131, 3,230, 92,232, 93, 69, 75, +229,116,123,142, 58,199,246,236,146,203,237, 25,159,250,244,211,252,216, 95,251, 40,127,242,173,119, 25,231,132,243,128,243, 4, +241,214,228, 0, 83,172, 98, 57,151,214, 42, 89, 43,199, 71, 87,121,242,241,199,121,226,137,171,100,113,188,123,231,222,146, 32, +246, 56, 41, 32, 80,117, 48, 99, 96, 15,157, 95,217, 42,105,232,240,195, 33,206,135,135,175, 29,218, 96,221, 31, 34,174, 35,251, +130,111, 66, 75,141,113, 60,183, 20, 58,133, 18, 4,105,158, 90, 51, 90, 44,120, 43, 30,238,221, 63,101,183, 29,121,238,153, 43, +188,250,250, 45,254,248, 59,111,115,251,100,203,173,123,119,121,250,169,235, 60,249,248, 77,158,124,114,195, 60,237,185,119,186, +163,181, 29,207, 60,187, 97,181, 94, 49, 93,236,209,102,135, 51,175,150, 1, 48,251, 21,204,169, 64,111, 63, 3, 62, 88,208, 53, + 33,228, 44,172, 67, 48, 23, 67, 80,104,153,214, 58,170,111, 76,101,111,249,157, 38,208,121,186,206, 2,168, 89,139,133,255, 92, +160, 73,197,247,107,164, 21,115,173, 87, 71,105,129,208, 5, 2,141, 85, 12,132, 40, 20,245, 86, 35,237, 28,186,175,244,177, 48, + 22, 33, 59,135,103,128,150, 17,188,173, 35,253, 76, 17,115, 99,196, 67, 65, 23, 45,174, 93,198, 27, 53,152,148,170, 61,184,148, + 0,171,213, 1, 55, 30,187,242,240,117,226, 65, 78, 76, 22,178,246,131,181,248,251,147,239,237,125,227,239,211, 89, 57,191,123, + 65,201, 51,206,195,141,235,199,108,150,177,190, 91,198,224,242, 72, 77,206,125,159,135,229, 63,119,219,221,101,166,221, 30,113, +202,209,193, 1, 7, 75, 90,127,126,164, 42,247, 16,126,243,200,131, 53,189,239,253,191, 31,164, 83, 20,238,157,141, 92,236,118, +212,218,120,226,234,134,131,245,230, 47,117, 18,112,231, 98,228,242,238, 61,198,105,194, 81,104, 69,209,201, 42,116, 89, 58, 74, +201,236,118,231,248,205,138,172,141,172,130,186, 66,220, 40,117,231,145, 82,113,131, 39,196, 21, 89, 7,106, 58, 95,204,116,106, + 23,201,141,199,247,158,118, 57, 51, 81,104, 85, 8,181, 81, 19,120,137, 38, 28,243,150,241, 10, 56, 66,104, 76, 85, 57,232, 29, +155,155, 79,243,250,252, 36,183,190,243,109, 66, 93,126,192,141,254, 98, 16,133, 86,154,221, 24,195,146,115, 47, 13, 93,130,111, +198,123,145,135, 29,116,167,141,228, 60, 62, 24,101,173,149,106,200, 23, 15, 78, 21,117,158,212,148, 32,222, 94,168,157,157, 46, +131, 83,154,150,197,135,235, 9,190,209,176,138,134, 87, 53, 53, 42,141,146,203,210,153, 55,232,141,136, 25,208, 68, 27,117,169, +223, 57, 93, 2,122,222, 91, 37,170, 85,163, 93,225, 64, 11,193, 71,178, 61, 93,237, 95, 87, 45, 43,208,132,170,149,172,142,188, +116,211, 69,253,210,213,110,120,196,184,241,193,126, 64, 68, 44, 45,232,189,177,115,157, 58, 52,217, 70,198, 97, 63, 96,165, 21, +186, 37, 53, 90,232,140, 19,223,189,247, 45, 47, 33,224, 3,132, 36,120, 13,120,245,139,193, 44, 24,169,174,233, 66, 11, 82, 98, +240,246,103, 86, 69, 52, 24,168, 68,204, 91,175,204, 75, 93,208, 81, 82, 98,220,110,209, 90,169,229,130,230, 28, 41, 77,104,179, +159,236,166,182, 94,113, 78, 81,241, 52,148,113,119,193,127,249, 95,252,103,252,175,255,243,255,196,246,252,148,221,126,107, 93, +245, 82, 41,101,166,235,143,128, 7, 95, 19, 37,180, 72,106, 66,115, 29, 65,236,118,209, 84,208,214,152,211,200,102, 24,216,177, +103,152, 18, 8,244,135, 27,114, 26,105, 85,168,213, 48,158, 62,122, 14, 36,112, 54, 87, 82, 41,184, 88,152,179,112,247,206,158, +183,222, 62,193, 5,227,113,135,161,195,199, 72, 23, 3, 94, 11,147, 52,156,107,148, 41,113,245,177, 67,126,245, 87,255, 77,110, + 62,243, 56,243,126, 68, 60,120,103,226, 17, 23,132, 85,191,230,183,127,243,159,241,223,253,218, 63, 96,211, 11,147,102,158,190, +126,131,147, 91,119,168, 89,113,177, 91,104,133,182,207,172,218,232,221, 0,113, 96,158, 19,171, 46, 48,244, 43,124,127,192,143, +127, 34,243,220,181, 25,119,188, 98, 74, 29,227,118,135, 44,156,240,119,223, 62,102,117,165,113,124,148,169,219,194, 80, 46,172, + 98, 53,172,108,125,133, 80,157, 50,110,247,188,113, 55,112, 57, 29,240,177, 79,124,156,219, 39,247,185,119, 41,136,139,172,170, + 35,174, 86, 6, 34,233,123,214, 7, 3,219,109, 33, 68, 33, 28, 56,242,229,158,211,147, 29,231,243,158,146, 35,110, 19,201, 84, +174, 28,117,220,124,226, 38,223,125,233,143, 57,159,118,184,150,105, 34,248, 40, 12,235,200,183, 95,124,151,191,242,195, 31,230, +147,159,120,158,223,253,202, 55,112,150,238,164,170, 29, 78, 89, 64, 82,210,234,195,124,198,193,176,230,202, 99,143,113,112,124, + 5, 21,199,201,253,219,198, 55, 92,156, 3, 4,235, 65, 11,150, 34,207, 89,136,171, 64,239, 54,132,205, 10,141,130,228,134, 87, +111,153,155, 85, 71, 83, 71, 45,208,183,142, 89,102,230,233,130, 58,143,180,186,216, 4, 83, 67,235,140,167, 26, 42,179, 46, 83, + 61, 58, 94,124,233, 54,162,133, 79,124,232, 89, 30,187,118,141,183,111,223,231, 91, 47,189, 13,237, 11,124,246,199,254, 69, 62, +242,161,143,114,180, 62,228, 11, 95,252, 6, 39, 39,151,188,245,250,187,124,244, 99,143,179,141,141,154, 39, 52, 4,168, 5,241, +142,181, 10, 37,122,230,113, 79,153, 61, 62, 24,184, 69, 39, 35, 70,122,215, 81,130,163,230, 25,102,165,143, 61, 45,194,148,132, + 32, 17, 45, 13, 23, 86, 12,209,156, 0,169,179,155,172,199, 70,226, 85, 32, 76,138,120, 7, 4,102, 95,136,190,210,215,142,230, +214,164,108,175, 89, 45, 84,196, 7,218,110,166, 86,163, 11,210, 69,250, 94,144, 50,225,178,163, 6,155, 24,133,122, 68, 11, 17, + 50,248,125, 37,123, 65, 92, 37, 27, 52,130,190,137, 29,174, 10,180, 97, 89,151, 14,253, 67,200,202,101,131, 67,103,225,183,139, +102, 60,129,195,110, 9,152,229,101, 90, 19, 23,186, 91,130, 85,120, 79,144,150, 39,179,252,229,154,232, 36,210, 61,178,251, 46, +143, 60,212,255, 60,129,179,154, 42,173,102,188,126,111,143,124,248, 1,245, 50,255,131, 58,228, 13,114,174,232,130, 36, 79,242, +222,251, 30,177,251, 93, 39,223,131,136, 55,254,198,159,245,227, 6,230, 57, 81,107, 6, 77,164, 84, 40,173,178, 79, 80,198,138, +110, 34,186,111, 28, 13, 29,181, 57,146, 2,113,166,141, 35, 85, 61,114,220,147,207, 61,165, 64,164,209,105,162,100, 72,110, 38, + 0,153, 14, 77,145, 50,158,219,101,179, 12,248,133,214,216,130,195,133, 2, 13, 98, 13,212, 80,113,205, 81, 4,250,206,113,116, + 44, 92,121,238, 9, 70,239, 24,227,138,176,120, 84,140, 37,110, 91,223,101,148,108, 8, 87, 37,224,163, 49,207,205, 82, 39,203, + 11,129, 44, 55, 58, 11,160,213, 82,241,205,238,133, 84,219,201,120, 49, 94,108,192, 25, 86,210, 41,190, 42, 4,104, 52, 90, 82, +196,119, 56,173, 52,113,214,215,166, 89, 29,100, 97,165,107, 5,139,215,251, 37,173,105,138, 84,125, 48,194,151,197,219, 46,138, +207, 9,143,163, 74, 32,107, 35, 46,200,214,220, 10,173,218,126,136, 96, 61,117,167, 24,119, 88,161,230, 98, 21, 47, 31,200,181, +210, 59, 1, 1,134,126, 0, 0, 32, 0, 73, 68, 65, 84,251,179,164, 51, 56, 69, 91,186,244,161,127,112, 50, 14,132,224,108,142, +209, 4,193,155,192,193, 67,201,141,164, 22, 46, 81,111, 14,116,153,167, 69, 50,176,120,219, 91,160, 44, 12, 30,166, 76,232,109, + 10,162, 37, 49,170,137,110, 98,215,227,162,199,181, 7,253,203,102,208, 22, 26,100,165,118,216,250, 64, 58,180, 9,187,253, 72, + 74,118,107, 12,150, 60,196, 19,104,106,188, 1,215, 22,158,189, 52,180, 37,219, 51, 55,225,157,183,222,178, 31,145, 90,201, 45, + 83, 74,166,161,132,206,227,165, 46,129,178,198,168,202,230,232, 58,183, 95,255, 22,115,154, 8, 97,160,239, 7,212,193,208, 29, +224,180,227,202,241, 53,198,237,125, 46,166, 29,211, 56,178, 25,122,154, 86,230, 22, 73,165,114,120,117,224,246,233, 57,219,139, + 29,157,131,253, 69,229,238,201,158,239,190,122,143,232, 29, 67,215, 17,187, 64, 28, 34, 71,171,235, 56,157,104,217,161,181, 50, +187,106,178, 29,239,185,119,114,193,115, 79, 63,206,245,107,135, 11,168, 72, 41, 53, 83,107,102,154,148,183,223,124,139,147,147, +219, 92,185,222,243,137, 79, 61,199,147, 87,175,240,221,111,191,140, 84, 91, 51, 8,198,152,111,206,153, 19,220, 5,154, 4,130, + 87,250,126,205,110,204,236,118, 39, 60,241,184,135,120,131,105, 14, 28,220,120,142, 34, 47,226,136, 84,231,152, 58,207, 91,183, +225,137,169,227,153,131, 83,210,168,104,109,108,219,204, 52,121,238, 95, 42,103, 59,199,221, 93,207,157, 83, 65, 92, 32, 17,184, +123,114, 74,158,118, 84,241, 36, 42,107, 9, 92, 91,111,136,171,222, 64, 43,190,208, 92,207,217,118, 68,231,140,102,171,103,169, + 76, 70, 30,163, 39, 79, 66,127, 24,168,173, 81, 53,211,135,206, 58,207,125, 32,117, 29,183, 78, 46,121,243,181,219,124,246, 39, + 62,196,215, 94,252, 14,121,204, 4,223,240,193, 20,194,186,160, 70,170,152,180,103,211, 13, 28, 93,123,140, 43,135,199, 56,239, + 57,189,191,133,217,234,154,185, 36,114, 43, 56,233, 64, 34,120,199, 16, 35, 26, 7,164, 11, 56,233, 88, 29, 92, 99,204, 51,170, + 59,154, 23,162,116, 84,117,228, 98,175, 15,185, 66,157, 51,211,116, 66, 45, 19, 56, 71, 45, 98, 33, 91,129, 42,206,198,139, 44, +248, 89,103,106,230,151,222,184,195,241,245, 99, 62,245,201,103,249,248, 7, 31,231, 96,240,124,237,197, 91,252,222, 31,124,131, +127,237, 23,127,134,159,250,177, 79,241,115,159,251, 81,254,143,127,252, 59,252,179, 47,124, 19,105, 47,242,145,143,125,132, 55, + 73,228, 54, 19,163,133, 98,231,169, 17, 40,172, 67,103,158,119,177, 92,181,196, 14,169,141,226,161,105,165, 15, 29, 26, 42, 57, + 23,152,132, 97,216,224, 92,177,183,209,104,123, 69,134,128, 56, 71,240, 3, 90, 77,102,211,247,107,230,253,142,160,158, 62, 54, +198, 58, 67,237,200,204,132, 62,227,194, 33,117, 63,226,195, 12,226,233,157,167,197, 70, 81, 79,215, 55,166,105, 34,174,122, 80, + 33,170, 34,177,183, 20,187,155, 40, 69,240,225, 0, 90,178,135,144,218,218,196,247,182, 86, 36, 8, 45,219, 19,235,250,193,128, + 95,198,233,171, 71, 72, 43, 71, 14,106,103,183,224, 10,236,253,123, 41,248, 75,224,188,193,161, 13, 30,169, 21, 78, 47, 70,107, + 27,161, 20,173,108, 83,121, 56,126, 79,179,193,124,188,183,151,211, 90,149, 85,144, 63, 19,138,182, 0, 83,158, 77, 21,221,197, +229,114,244,103, 27,143,251, 31,240,246,240,240, 57,166, 12, 14,174,174, 86,223, 91, 69, 91,246,232,229,193,199,161,112,117,209, + 44,108,129,109,131,235,242, 94, 54,192, 84,217,186,128,215,224, 50, 55, 46,183,231,148, 60,211,106,161, 8,196,217,211, 13,141, + 62, 4,146, 83,212,247,224, 34,173, 77, 48, 38,220,176,166, 27, 18,181,173,144,152, 8,212, 5,159, 94,113,172,241, 94,233,244, +156,174, 27,160, 37,166,180,165, 70, 71, 72,118, 20, 25,181, 32,226, 9, 46, 82,247,224,188, 18, 84, 73,234,152, 53,209,210, 33, + 85, 19,172, 28, 79,116, 43,238,102,144,150, 8,118,235, 93,198,179, 52, 30,220,220,131, 19, 10,222,186,213,213, 6, 52,162,142, +182, 32, 33,205,229, 26,105,203,200, 73, 48,252,171,228,250, 48, 26, 41,152,176,196,251,104, 39,201, 82,104, 78,104, 85,237,228, + 37,142,166,217,110,176,213,254,226,154,229,221,236, 59,166,232,146,158, 55,254,145,107,208,188, 33, 76,171, 46, 15,243,218,168, +106,200, 62, 17, 93,172, 66,106,245,184,133,184,132, 83, 27,187, 3,181,101,178, 90, 88,202, 73, 93,242, 2,139,198, 81,140,146, +213,180, 45,182, 43, 65,154,163, 95, 69,230, 57,153,104,193,137,125,231, 7,219,134, 75,174, 84, 47,164,146,233,162, 91,128, 55, +158,186,236, 89, 75,213,133, 86,103, 70, 53,239, 35,117, 54, 62,177,239, 76, 74, 51,231,204,208, 10,181, 46,208, 28, 31, 17, 45, +228,162, 68, 49,211,156, 60,232,196, 59,193,119,230,222,205,115,177,177,120, 39,204,187,209,108,109,221, 10, 17,187,253, 55,181, +106,130,115, 74, 93, 68, 61,174,202, 82,231,115, 52,153,236, 24,167,182, 18,104,173,218, 65, 77,141,251, 60,151,132,228, 30, 41, + 19,155,205,134,245,193, 21,198,221, 37,251,253,142,110,216, 48,237, 70,138,102,130,222,226,174,143, 28,222, 59, 96,181, 58,198, +247, 61, 83,157,153, 83,197,187, 2, 62,226,106,133, 20,152,230,153,253,148,217,230, 68, 55, 4, 82, 18,156, 23,250, 56,208,197, + 64, 92,109,248,236,207,126,150,159,253,201,159, 37,141,123,254,159,223,249, 29,190,248,165,223, 67,200,136, 54, 90, 58,227,159, +252,214,231,249,194,239, 63,205,207,252,248,167,185,241,196, 33,243, 60, 83,146,249,144,239,221, 63,231, 11, 95,254, 6,190,139, + 76, 83, 99,186, 40,124,235,221, 55,216,167,194, 16,156, 85, 1, 69,104,222,225, 21,138, 56,170, 83, 14, 99,196,245,145,227,205, +154,143,125,252,211,236,211,204, 27,111,253, 9,231,231,247,184,122,237, 5, 46,170, 35,157, 29, 83,231, 68,201, 66,119,237, 9, +142,217,113, 57, 77,188, 90, 6, 86, 82,185,216, 43,183, 47, 50,219,217,147,230, 70,149, 21,174, 19,118,229,148, 92,206,249,163, + 63, 25, 57,189,123, 98, 22,172,126, 96, 51,244,212,156,216,237, 18, 7,172,184,188, 84,142, 6,123, 96,108,183,230, 8,232,163, + 65,121, 74,174,236,242, 25,169, 20,100, 31,185,152, 47, 24,167, 68,104,176, 47,137,146, 29,251, 41,241,236,227, 87,249,240,205, +167,248,246,203,247,249,232,167, 62,206, 7,158,123,138,175,127,227, 37,214, 43, 79,109,149,224, 59, 10, 74,171,149, 90,224,232, +232, 58, 7,135, 27,214,155, 35,214,253,138,150, 10, 5, 65,131, 35,165,198,156, 50,142,229, 48, 16, 20,109, 25,149, 64, 84,112, + 85,161,171,132, 16,113,187,137,226, 29,222,175, 80, 49,223,115,149,140,119,145, 57,159,115,122,242, 10,210, 70, 91,211, 45, 24, + 79,105,130, 83,143, 86, 75,192,135, 86,169, 69, 13, 32,227, 34, 41,123,190,242,141,239,242, 83,159,249, 4, 31,253,192,147,124, +229,171, 47,113,114,114,159,119,110,159,240,129,231,175,242,185, 79, 63,205,245, 15, 63,201,191,251,252, 47,163,205,241,213,111, +190,200,199, 63,254, 24, 79,221, 56,230,213,119,182, 12,172,204,123,176,200, 93, 90,105, 28, 12, 61,147, 22,106,106,168, 55,241, +147, 47,153, 92, 26, 37, 70,218, 36,104, 16,188,119,104,155,104, 1,162, 31,152, 53, 83,139,195,239, 18,210, 53, 92,235, 9, 97, +160, 50,161,117, 66, 91, 65,250, 21,147,155,108,135, 41, 21,207,176, 76,218, 10, 18, 29,161,143,196,234,216,205,141,216, 71, 42, +202,188,205,104,245,139, 13, 46,208,250, 1,178, 67, 24,161,122, 19, 37,249, 66,152, 42,253,224, 45,107,226,141,251, 80, 16, 92, + 51,121,140,107, 29,171,254, 79, 23,152, 60, 74, 83,115,192,245, 71,170,108, 7,192,106,176,212,183, 3,118, 30,238, 68,161,166, +108, 23, 53,113,182,190, 90,210,225,123,243,229,224,151,219,113,153,148,245, 90,240,206, 38, 0,157,194, 81,247,222,237, 57, 46, +107, 90, 7,140, 99,177,247, 43, 98,120, 95,249,203, 3,207,212, 10,115, 46, 70,242,139, 29,195, 35, 59,245, 67,224, 80,222,179, +207, 85, 96,237,222,251,154,108,150, 33,174,123,127, 18, 95,228,225,127,239,213, 81,170,233,110,147, 42, 45, 53,154, 23,198,148, + 24, 90, 67, 74, 35,104,100, 91, 47,112, 58, 51,196, 13,151,197,170,172,101, 63,147,199, 61,145,142,214,175,112, 61,204,103,231, +164,253, 14,231,149,236, 28,228,102, 78,117,231,104, 78,192, 71,124,217, 80,229,146, 86, 60, 67, 23, 24,105,180,180, 35, 76,142, +172,142,110,227,169, 20, 86, 49,114,137,103,103,100, 31, 66,244,193,146,222,186,144,211,156, 1, 87, 74, 51, 93,170,184,133, 19, +221,202,146,100,181,219,178,125,210,206, 30, 32,213,198,245, 45,200,195, 94,116,196,144,119,185,218,105, 15, 28,189,247, 75,240, +237,193,208,198,210,244, 42,214, 35,199,217,195,187,177,164, 46, 85, 22,104,131, 80, 91,163,184, 10,205, 25,187, 90, 77,145,105, + 55,210,138,111, 66,110,138,247,206,170,120,234,168,173,154,185,197, 59, 84,131, 81,237, 44,189,134,119,214, 33,110, 15, 20,147, +174, 46,129, 49,103,201,126, 23,141,120, 20,236,244, 23, 69,150, 61,164, 66,179,212,180,177,237, 61, 61,145, 74,161, 22,143, 70, +235,243,250, 69,148,243,224,155, 67,163,117,254,231, 50,161,222,250,249, 41, 57, 60, 66,168, 74,170, 86,173,241, 42,164, 60,179, + 31,149,225,112,141,139, 14,223, 11, 45,219,109, 79,104,230,123,110,138,132,104,183,138,166,108,119, 35,181, 53, 92,171,230,133, + 55,186,192,210, 74,112,104,205, 54, 42,111,150,113,160, 62, 32,136, 89,240,207, 45,241, 73,109,217,170, 59,205, 38, 49, 37, 39, +240, 66, 33, 35,235,198,148,102, 86, 7, 87,120,234,153, 15,154, 11, 28,161,213,145,119, 94,127,133,119,110,191,195,245,235,133, +167, 54, 31, 36, 51, 2, 25,175, 1,117, 21,193, 83, 4, 66, 23, 9,222,198,248, 93, 55,224,125, 51,181,167, 90,167,248,198,141, + 39,248,229,127,253,111,113,245,232, 8,128, 39,111,222,228,245,183, 95,231,237, 87, 94, 65, 75,229,246,189,115, 30,211,192,217, +189, 87,249, 31,223,122,137,117, 60,224,114,119, 78, 78,133,161, 59,160,232,196,157,251,247, 89,175, 14,104, 21, 94,125,227, 46, +103,231,103,120, 58,106,176,181, 74,231,132,169, 22, 68, 29,174,102, 82, 42,236, 90,197,133,200,106,238,120,241,229, 63,226,202, +181, 27, 92,191,126,147,169, 42,175,191,123,135,111,126,251, 53,250, 24,185,156,247,196,120,200,227, 69, 89, 29, 94,103, 95,183, + 92,156,120,242, 52,218,195,144, 2,101,207,249,110,164,247,153,141,174, 41,101,164, 37,200, 58,177, 94, 15, 52, 2,158, 70, 60, +112,172,165,167,150,198, 92,236,176,188,223,194,110,123, 66, 65,113, 62,176,109,153, 52,111, 73,205, 72,139, 85, 43, 33,121,198, +203,153,177,238, 12,166, 68,161,105, 96, 55,103,238, 95, 20, 62,253, 67, 79,240,251, 95,251, 54,175,191,244, 22, 31,126,254, 25, +254,240,107, 47,209,176, 80, 43,106, 36,200,212, 42,235,245, 1,215,158,184, 65,232, 58,250, 62, 24,112, 36, 70,196, 91, 55, 91, +114, 33,134, 64,145,108, 19,186,220,140,154,213,219,193,208,171,167,182, 72, 73,213,166, 63,177, 35,198,158,113, 63,162, 62, 33, +210,179,187, 60,225,242,246,203,180,113,143,239,196, 14,242, 15,249,178,102, 87,108,216,106,200,182, 86, 54, 85,202, 98,244,183, + 41, 21,190,244,181,151,112,210, 24, 54,107, 14,214, 7, 28, 31,109,112,192,237,187,103, 92, 57, 10,108,110,220,228, 63,248, 15, +127,133,191,247, 95,255, 47,124,241,203,223,225,111,254,220, 79, 80,175, 31,242,230,173, 83, 35,177, 73, 64, 35, 36,109, 84, 81, +156,174, 8,100, 40,149,172,160, 82, 17,181, 21,154, 12,171,101, 60,108, 19,198,162, 13,153, 27,193, 5,123, 98,161,184,214, 19, +189,199,117,153, 82,122,234, 60, 34,126, 32,251, 74,116, 74,171, 1, 90,166,120,232, 90, 71, 78, 19, 93, 24,104,123, 97,234, 43, +177,247,224, 44, 87, 18, 92,160, 56, 99,114, 52,105,204, 85, 25, 92,195, 85,171,202, 54,153,200,115,165,174,215,244,218, 32, 87, +182, 69,112,210,144,222,163,157,146, 68, 88,187,102,135,165, 63,227, 40,217,189, 79,179,234,190,167, 27,222,136,205,234,124, 33, + 8,199,189,167, 95, 38, 0, 71,221,123, 15,195,181,135,243, 3,247,240, 64, 80,130,253, 30,255,160, 71,110,195, 24,226,242,235, +243,220, 76,205, 44,118,113,152,170,213,132,235,195, 94,255, 82,129, 94,254,253,255, 51,214, 47,205,214, 66, 82, 50,113,129, 86, +125, 63,146,156,255, 62,218,217, 63,109, 50,176,242, 38, 96,223,215, 76,117,130,134, 64,206,149, 58, 54, 38, 23, 41, 53,145,211, + 93, 91,175,224,152,194, 76,223, 6,198, 57, 81, 91, 0, 57,160, 56, 71,187, 44,100, 86,184,184,160,194,181, 18,242, 76, 66,173, + 5,210, 53,210, 22,198,113,166,111, 51, 68,155,132,239,118,123, 90,180,103,170,215, 25,113,145,178,191,192, 59,207, 65,173,148, +180,167, 92, 6, 72,151,132,222,123,166,214,150, 27,177, 37,182, 5, 65,220, 18, 48,211,138,226, 13,226,176,116,201,155,179, 49, +130,228,138, 11, 38, 86,105, 77,109,177, 31, 30, 4,220,132,212, 12,214,162,213, 72,102,245, 1,179,189, 57, 11,190,213,102,183, +124, 7,170,197,126,128,150, 29,121,107,141,214,132, 38,246, 64, 16, 31, 17,169, 22, 40, 83,197,133, 64, 45, 21,167,118,234, 47, +181,128, 55, 29,163,107, 32, 49,162,217,198,239,158, 96,154, 60, 49,230,187,195,126,136, 58, 9,212,133, 45, 31,196, 48,183, 21, +243,240,186, 96,102, 45, 21, 33,100, 69, 37, 16, 6, 37,149,229,246,219, 44,165, 46,234,209,206, 84,146,190, 86,180, 58,114, 51, + 72,133,132, 0,165,218,225, 40, 53,138, 47,184, 22, 44,192,179, 28,162, 74,178, 27,178,138,195,117, 15, 18,225,149,179, 93,165, + 93, 92,114,120,116, 68,191, 50,253,171,151, 70, 28, 12,132, 49, 56,111,187,243,160,228,113, 98,174,137, 90,149, 14,243, 92,219, + 6,195,120, 2,134,184,109, 54,134, 95, 2,145,162, 25, 33,216, 45, 73,160,166,134, 11,126, 89,195, 8,120, 79,206,141,224,148, + 46,120,114, 75, 92,222, 61, 69, 85, 89, 29, 29, 82,242, 72, 74,137,166,158, 43,199, 79,112,253,169,155,220,122,243,187, 12,235, + 35, 98, 31, 40,163,113,168,115,105,180, 73, 89,173, 55,204,115, 65, 74, 0, 55,208, 57, 49,205, 39,150,172, 46,216,129,172,247, + 16, 30, 41,193,246, 49, 18, 67, 96, 86,111, 68,184, 56,112,243,249,143,112,237,218, 49,125, 84,154, 23,206, 79, 46,249,194, 23, +190,200, 27,111,190, 78,191, 90,177,238, 6,243,219,215, 74, 74,198,122,183,239,217,128,199, 51,151, 66, 73,213,186, 57,173,225, +189, 35,213,130,247,145, 89, 29,175,189,246, 26,249,181,215, 56,238,143,121,242,185,167,120,225, 67,159, 96, 62, 57,163,215,198, +189,233,140,221, 56,242,206,155,223,197,175, 87,244,210,113,184,186, 70, 59, 88, 51,107, 98,222,109,153,178,101, 75,148,142, 49, + 59,210,156,233, 92,111,163, 55, 4,169,182, 99,205,115,101,102,162, 69,135,168, 77,109,234,121,162, 57, 59,240, 94, 78,231,104, +115, 12,193,248, 13,117, 86, 18,201,234, 70,219,115, 11, 85, 90, 28, 27,213,153, 77,231, 56,223,141,172,142,122,158,121,238,105, +254,228,197, 55,248,133,159,253, 81,190,250,149, 39,121,253,221,123, 48, 84,170,142, 24, 37,216,179, 94, 15, 54,117,171, 66,155, +205,178, 70,245,140, 57,145, 41, 72, 16, 92,243,184, 92,105,181,226,124, 52,186,164,243, 20,103,213,208, 94,149, 60,205,200,234, + 0, 39,133, 77,244, 76, 33,145,246, 51,251,203,187,220,187,243, 50,144, 88,135,142, 90, 20,155, 3, 44,202,101,169,212,106, 2, +165,154, 43,142,182,216, 24,205,255, 32,170, 12,113,197,217,118,207,215,191,243, 22,191,244,185,207,240,153, 79,125,148,163,213, +134, 23, 62,240, 24, 55,159,140,248, 78,217,191,243, 46,253,213,107,252,234,223,249,101,254,254,127,251, 15,249,131,175,254, 9, + 63,250,163,159,228, 98, 92,179, 59,155,201, 82, 76,149,106,223,214,212, 58,209,102,136, 61,180, 16, 40,179, 3, 55,145,104,116, + 8, 78,109, 5, 24,134, 64,221, 67,146,202,224, 7,211,157,170, 64,204,168,102,180, 68, 92, 19, 90,240,116, 85,208,170, 80,122, +130, 88,141,205,209, 76,161, 42, 32,109, 68,197,209,106,165, 23, 24, 75, 37,234, 6,245,166,210,236,156, 35,202, 33,174, 51, 21, +113,237, 4, 70,101,232, 35,162, 43, 98,232, 73, 50,163,217, 38,139, 97, 8,148, 38,228, 6, 7,193, 20,187,127,244,173, 87,184, +126,229, 24,245, 29,199,253,192,225,225, 10, 9,142, 82,149, 97, 8,116,193,217,199,160, 60, 36,205,188, 63,173,174, 10,105,159, + 40,146,105,181, 16,252,202,116,218,127,202,239,109,203, 46,252,193, 62,252, 64,222,227,169, 59,108,156,253, 61, 15, 74, 7,105, +206,148,148,113,171,129,184, 76, 22,116,129,229, 60,144,198, 38, 96,191,140,199, 31,132,228,178,194,230,145,209,120, 85,232, 31, +121,255,227,152,208,106,175,123, 65,222, 11, 5,126,191,244,191,252,128, 52,253,163,111,159,114,165, 44, 57,165,152, 29, 90,148, + 90,148,232,128,117, 65, 47, 26,193, 31, 44, 33,234, 61, 42,153,182, 27,241, 62,208, 92, 79,232,140,147, 17,157,226,135, 3,202, +121,195,249, 83, 90, 41,164,206, 49,238, 61,206, 79,172,139, 82, 80,164, 57,178,107, 56,237, 23, 18,168,226,200,104,129,172, 30, + 9,221,194, 89,232, 57, 29,215,188,248,134,112,114,247,140, 54, 37,252, 51,207, 60,251,119, 31,161,225,219,174, 73, 28, 18, 76, +242,193,242, 96, 94,152, 52,214,245,117,178,208,253, 22,213,159, 51, 32,253,131,127,156,115, 11,174,181,162, 77, 9,203, 13,163, + 53,111,178,145,165, 2,102, 94, 15, 75,138,251, 7,212,185, 37,245,206, 66,138, 83, 89,232, 52, 78, 12,227,185,128,113,170, 86, +104, 6, 95,209,224, 89,144,117,118,255, 87, 59,245,139, 55,105,140, 20, 27,201, 71,239,168,173, 45, 78,109,123,187,243,138,115, +216, 13,191,115,244,222, 45,206,103,183,136,105,236,175,214, 5, 79,177,200,188,125,174,178, 36,233,189, 85, 80, 68,173, 90,231, +154,129, 82,146, 86,114, 73,230,105,239, 28,203,194, 1, 39,206,190, 46,226, 8, 94, 9, 20, 90,183, 32,122, 27,244,222,177,223, +237,184,127,182,231,226,114,203,246, 98,100,188, 24, 57, 59,219,114,177,207,140,185,146,246,149, 92,132,210, 60,165, 88,229,112, + 30,247,156,159,143,196, 16,169,181, 44,232, 87,155, 14,104, 85,107, 31, 88, 88, 2,169, 75,253,208, 25, 14,152, 5,192, 67, 51, +173,108, 12,142,213,106, 67,240,145, 0, 4, 21,196,119,140,247,239,113,127,187,165, 15, 29, 93, 28,168,165, 26,244,100,233, 27, +239, 46, 47, 56,186,254, 56, 93,183, 38,231, 25, 45,101,105, 28,116,214,253, 47,137, 86,151,114,100,205, 84,105,120,137, 22,226, + 19,115,205,143,101, 66, 53,240,194, 11, 31,160,182,194,111,252,163,127,196,151,191,242, 21,202,172,236,114,226,147, 63,252, 17, + 62,246,177, 15, 16,250,142, 62, 12, 56,223, 24,214, 29,211,104,208,157, 0, 52,117,236,246,123,200,198, 31,119, 94,152,243,140, +247, 61,173, 9,251,221, 37,170,130, 15,145,218, 76, 94,130,115, 28,172,215, 28, 31, 31, 49,239,246, 28, 29, 94, 39,181,194,106, +125,200,143,255,244,207, 51,206,123,198,105,207, 19,207, 61, 78,168,158, 77,183,226,208,219, 48,239,236,226, 18,210,142,205,209, + 53, 94,120,246,195, 60,126,229, 73,226,176,230,232,198,117,222,125,251, 93,166,121,164, 11, 1,213,202,110, 63,211, 20, 98,176, +219,132, 83,103, 14,104,129,105,159,200, 58,147,198,137,253,180,227,252,114,203,184, 79,156, 93, 92,112,114,255, 62,248,200,102, + 24, 8,189, 61, 32,199,253,104, 57, 23,130,117,200, 83, 33,167,202,213,227, 99, 62,124,243, 57,222,124,247, 46, 7,135, 71,188, +113,247, 30,119,239,157,227,188,131,230,232,253,134, 46,116,172,215, 43, 36, 70, 60, 74, 23, 86, 68, 31,153,210, 72,245, 13,247, + 96, 50,144,102,168, 14,113,209, 38, 99,157, 71,188,183,191, 83,183, 97,221, 7,250,110,192, 71, 79, 23,122,106, 21,182,219,123, +220,187,243, 58,187,211, 55, 41,121,182, 29,190,243,248,216, 45,109, 14, 3, 89, 17,212, 88, 22,205,204,114,205,137,113,211,155, + 57, 37, 84, 31, 40,143, 61, 23,231, 59, 90,109,124,230,211, 31,230, 71, 62,120,157,167,158, 57, 96,181,233, 17,233, 72, 37,243, +198,203,119,184,241,204,211,252,208, 15,127,140,175,124,253, 21,230,180,231,195,207, 63,205,235,239, 90,163,195,139, 67,163,135, + 28,240, 57, 81,125,176,212,119,107, 72,103, 93,250,206, 45,175, 63, 33,208, 52,163,165,224, 8,224, 34,222,155,136,199,213,128, +107,106,164, 47,173, 54,185, 43,145,230, 86,204, 76,196, 14,195,193, 6, 37,101,165,182, 64, 8, 3,197, 87, 88, 57, 92,178,139, + 75,215, 27, 45,204, 59, 97,181,234,145,108,181,218, 13,133, 57, 21, 36, 21, 52, 22,218, 98, 46,116, 99,162,101,155, 44,224,236, +208,208,121, 24,170, 77, 37,213, 9,231,211,196,221,251, 91, 46, 47,118, 92,156, 79,188,115,114,193,219,119, 78,185,117,118,201, +221,147, 51,110,223, 57,231,157,187, 23,220,189,117,193,126, 59,115,185,155, 57, 57,155, 57, 63,219,209,114,161,228,194,249,229, +196,201,221, 51,198,113,139,102,232, 87, 29, 79,222, 56,198,251,240,207, 89,204, 30, 80,218,226, 35, 15,249,239, 87, 36,187,119, + 81,216,158,159,211,180,176,217,172,120,250,177,227,135,239,111, 37,223,235, 46, 31, 30, 9,177, 45,174,177,135,111,175,134,249, +127,248,231,206,192,237,179,137,253,217, 37,115,202,116,209,115,237,250,177,249, 54,128,221, 2, 77, 19,121, 0, 79, 91, 38, 18, +143, 16,244, 30,109, 7, 40, 44, 42,172,247, 30,235,183,183, 51,119,238,222,226,252,108,199, 52, 85, 18, 25,154,133,229,116,103, +151,223,234,123, 10, 35, 93,233, 40,115,198,123, 8,222,145, 52,145,117,132,177, 32,125,197,245, 3,251, 59,231, 56, 41, 20, 28, +115, 74, 56,113, 84,102,166,125,166,102, 79, 63, 68,106, 72,148, 57, 17,157,195,117,129, 90, 60,110, 48,219, 41,165,144,164,114, +180, 17,126,230,231, 62,202, 71,126,232, 51,220, 45, 7,220,123,253, 93, 66, 91,234, 98, 15,190,241,155, 23,139,234,103,115,198, +214,229,129, 78, 83, 36,152,209, 74,112,148, 7, 99,115,140,224,211,176, 94,186,136,125,209, 60, 66,112,150, 15, 85,177, 19,191, +202, 66, 83, 19,165, 36, 75, 86,235,194, 59,207, 8, 94,150, 29,186, 42,173, 20,106,131,208, 5, 80,219,195,137,148,165, 23,106, + 61,114,130, 77, 8, 36,103,196, 27, 0, 70,205, 38,251,176, 26,167,205, 44,102, 33, 56,219,117, 53, 27,193,106, 16,180,217,126, + 71,156,152,181,168,168,221, 98,157, 80,164,176,146,184,168, 72,237,243,181,139, 68,180,155,223, 98,165, 83, 20, 41,133,220, 26, + 82, 4,239,132,216, 57, 51,176, 53,104,222, 19,233,141,218, 87,102, 90, 92,198,255,203,144,169,212,197,112,229, 58, 90, 45,204, +173, 50,230, 14, 71, 99,221, 57,196,119, 52, 10, 18,204, 84,119,255,100,143, 23, 59,244, 12,253,218, 86, 33, 90,232,250,235, 60, +253,212, 1,185,205,204,105,100,222,207,168, 22,106,173,148,156, 45, 84,232, 5,215,170, 37, 88,197, 18,246, 15,146,209,141, 69, + 35, 88, 5, 31, 58,123, 88,231, 70, 8, 27,146, 98, 55,178, 50, 35, 90,216,237, 47,112,161,179,128, 89,109,104,155, 73,251, 75, +156, 10,117,222, 83,253, 64,154, 13,222,177, 34,224, 36,225,195,192, 62,101,212,193,188,132, 77,162,119, 52,177, 93,101,140,214, +199,204, 99,226,255,250,245, 95,231, 43, 95,249, 3,240,194,189,147,187,104,109,180, 54,113,243,233, 99,170, 20,222,189,117,135, + 16, 86,108,186,142, 55,223,124,131, 59,183, 95,163, 21,207,245,163,171,108,231, 29, 90,102,126,254, 95,254, 9,238,221,185,199, +239,127,233, 59,172,174,172,113,109,101,180,186,121,107,122,209,230, 72,251,189, 53, 60,130,179,158,121,205,236, 46,182,228, 73, +241,110,205,147,143,223,224,160, 19,190,240,127,255, 58, 13, 33,250,142,187,247, 46,184,115,126, 10,222,209,227,241,209,113,245, +184, 71, 69,184,113,112,200,144, 18,111,222,187,195,241,225, 33,170,141,237,124,138, 11, 54,101,152,246,137, 42, 25, 69,153,178, +169, 74, 83,218,210, 82,102,206,102, 53,211,214,204,144, 23,133, 16, 34,210, 5,122,223,211,111, 54,248, 24,240,206,147,210,100, +193,207, 96,130, 32,209,142,185,212,133,165,238,120,237,246, 57,143,223,124,154,245,209, 99,252,111,191,249, 7,108,207,183,244, + 93,135, 11,129,232, 7,250,245, 1, 74,163, 52, 33,138, 48,108, 6, 90,129,185,101,100,176, 70,135, 43, 30,245,138,139,246,240, + 83,183,160,149,137, 4,241, 16, 34,125, 55,152, 8, 40,128, 87,207,156, 28,101,188,203,233,237,183,184,188,119, 11, 13, 88,202, +189, 41,181,102,124,231,233,196,112,201, 37,202,210, 79, 53,203, 34, 84,162,216,164, 45, 89,111,149,232, 29,133, 66, 8, 3, 93, + 8,124,243,165,119,248,226, 87,190,201, 71, 62,244, 89,168,137,179, 19, 24, 14, 60, 49,218,223,195,139,127,252, 29, 62,249, 35, + 63,204,223,248,249,191,206,255,249, 27,191,197,241,230, 29, 62,245,241,155,124,235,197, 83,180, 22, 84, 51,213, 39,235,135, 55, +103, 29,121, 18, 45, 55,186,197,142,213,188, 49, 48, 92, 28,112, 69, 9,226, 24,181,226,170,163,182,137,182,138,196,169, 99,191, +157, 24, 54,158, 50, 21, 52,102,188, 88,168,169, 37, 27,227,171,122,252, 16,168,169, 80, 67, 51, 63,197, 69, 70,250, 3,138,155, +112, 5,138,140, 72,240, 54, 0, 15,142,224,247,108, 39, 91,243,185,160, 72, 56, 36, 5, 37,249,194, 52, 27, 68, 43,104, 35, 14, + 7,182,202,156, 11,251,206,113, 32,176, 94,175, 57,252,127, 89,123,147,102,205,178,235, 60,239,217,221, 57,231,235,110,151,153, +149,213,100,101,181,168, 42, 64, 16,193, 34, 64, 74,180, 40, 43, 20,116, 72, 17, 30,216,161, 31,160,137,127,132,198,254, 35, 30, +122, 34,135, 71,178, 29, 86,216,164, 45,211, 20,200, 32, 1, 16, 96,161, 41,161,250,236,187,219,124,205,105,118,179,182, 7,235, +100, 86, 17,166, 24,118,132, 48,170, 74, 20, 10,153,247,187,247,156,189,215,122,223,231,121,253, 77,140,117, 76, 87, 61, 98, 91, +245, 60,196,136, 76, 3,219,108,245,114, 54, 36, 40, 35,207,118,123, 76, 80, 67,152,254, 57,245, 70, 37, 51, 84, 39,103,161,105, + 42,253,126,224,103, 63,255,146,213,170, 35, 2,199, 77,203,217,209,138,166, 9, 28,178, 96, 76,197, 47, 3,198, 58,173,253,121, +243,119,184,200, 35, 57,205, 72, 84,255,255,221,192,246,155, 29,242,223, 52,174,121,244,121, 47, 57, 99,210,204,199,152,153,242, +117,238,210,127,243,133,125,152,141,115,221,252,107, 59,129, 49, 67, 59,103, 1,146,192,120,136,172,151,141, 62,163, 4,250,139, + 11,124, 18, 98,174,180, 77, 97, 26, 51,251,221,132,149,164, 96, 54, 3,174, 92, 49, 13, 19,201,119,116,139, 37,135,148,137,185, + 82,211,132,229,136,232,206,217,108, 22,148, 26, 72,236, 9,214, 34, 4,188, 68,204,148,193,119,212,186,215, 74, 47, 22, 91, 52, +235,165,246,163, 68, 25, 7, 74, 93,178, 12, 66,242, 45, 98, 4,147, 42, 47, 5,195, 17, 90, 49, 94,185,130,207,136,126, 65,230, +151,160, 17,139,109,132, 90,102,187,238, 44,251,112,104, 15,189,212,130,115,118, 14,151, 41, 7,182, 86,143,153, 11,238,117, 62, + 85, 85, 81,170,131, 1,146,204,164, 28,167, 31,143,169, 85,193, 50,202, 12,196,186, 0,165, 32, 24,170, 5,107, 10,115,167,141, +146, 53, 64, 80, 49,179, 14, 83, 19,245,213,104,240,197,207,130,136,156, 10,214,205,181,173,130, 90,198,172,211, 14,169,100, 74, +153,247,253,243,136,207,187,231,183, 83, 94,220,178, 49,144,147, 65,235,182,149,169, 68,108,112,170,133,149,164,174, 92, 17,252, + 92,165, 43,169, 32,206, 41, 71,220, 88, 37,188,213,140, 21, 1,111,177, 30,140,173, 20, 25,193,120,106,227,161, 20, 74, 74, 24, +175, 74, 71,153,213,123,173,215,154,223, 97, 40, 28,118,153, 41, 30, 88,116, 45,198, 85,213,241,121, 15,141,163, 75,253,252,141, +106, 49,177,103,215, 15,204, 57, 70,188,181,115, 63,188,101,113,163, 99,179, 62, 66, 82,230,217,249, 83,250,254, 64, 46,145,152, + 19, 41, 37, 13, 63, 74, 37, 81,213, 11,236,156, 62,140, 76,197, 89,139,115, 94,253,213, 86, 67, 82,166, 66, 28,162, 2,138,124, +230,234,252, 49, 24,163,170, 71, 49, 76,169,199,251,134, 48, 39,136,237,252,112,139,166,208,152, 74,208,239, 48,156, 8, 38,171, +140,194, 56,131,137, 5,239,102, 9, 70,137,212,236, 17,147,248,252,139, 95,179, 10,157,190, 0,242,132,107, 42, 71, 75,207,207, +127,242, 11,126,145,126,134,247,122,131,170, 78,141,119,102,210,207,212,174, 29,191,255,159,253, 14,255,228, 7,223,230,241,163, +135,220,187,115,143,255,112,247,138,182, 89, 18,135,131, 58,151, 69,244, 5,134, 18, 10, 13,232,139,199, 24, 46, 47,207, 49, 77, +203,211,203,175,232,251,128, 91,108,184,121,252, 50, 55,110,222,196,213,194,230,104,197,106,189, 98,138,133,139,167,231, 20, 99, +112,161, 37,201,132,136,227,201,197, 83,206, 31,222,163, 61, 57,230,171, 59,119,152, 14, 61,205,114,205,152, 34, 83,142, 56, 35, +140,135,158,203,180,213,155,168, 85, 40,204, 98,233, 89, 47, 55, 44,252,146,166, 83, 1, 10,243, 84,171, 68,152, 36,170,173,171, + 20, 98, 44,136, 84, 90,223,208,143, 35, 49,239,169,162,129,215,177,100,238,222,125,130, 55,134,221,152,216, 15, 19,190,105,177, + 97,193, 34, 4,170,209, 91, 72,157, 34, 87, 67, 79,170, 89, 13,109, 46,225,219, 21,118,178,248,234,169, 68,200, 89,171, 63, 14, +146, 76,248,118,165,245,211,166,165,216,128,219,180, 4,219, 64,233,152,204,196,246,226, 49,219,199,159, 50, 30, 46, 8, 33,168, +101,177,106, 32, 13, 17,100,170, 20,175, 63,247,186,118,179, 84, 91,240,198,225,196, 80, 68, 3,164,198, 10,198, 27, 61,236, 86, +245,150,135,110,137,193,243,231, 63,249,148, 91,183,174,241,143,127,239,239, 97,189,167,157, 6, 22,173,227,236,100,205,211,187, +231,124,254,249, 23,252,238,239,191,195,186,245,252,155,255,249,223,114,251,205,142,215,110,175,121,116,231, 41,141, 93, 50,213, + 94,201,141, 37, 81,242,200,132,193,132,128, 77,153,236, 50,193,118,186,222, 75,149,224, 42,197, 38, 76,177,100, 96, 49,179, 35, + 50, 35,185, 26,226,228,176, 86,247,237,147,140, 4,211, 96,168, 72, 45,216,146,113, 98, 17,211, 48,236,123, 66, 23,192, 54,120, + 12,185, 84,162, 12, 4, 87, 9,238,152,113, 60,208,148,134,188, 88,144,164,208, 68,167,134,189,210, 19,166, 21,165,241, 74,181, +155,132, 82, 44,195, 54,225, 54,149,188,240,116,217, 34, 85, 56,190,126,196, 15,222,186, 65, 4, 30,165, 51,174,207, 30,139,203, + 2,187,190,114, 20, 12,131,192, 97,204, 12,219, 65,217, 5, 37, 51,236, 6,117, 24, 88,139, 76, 17, 59,236,245,121,105, 21,214, + 84, 74,229,124,119,224, 98, 55, 34, 8, 79,141,229,179, 4, 77,167,129, 96, 41,176,232,148, 43, 97,141,227,108,189, 36, 4, 79, +117, 30,145,204,178, 11, 52,222,145,157,225,176, 61,167,164,164, 43,132, 89,176,245,159,194,210, 86,103,154,156,154, 55, 11,203, +198,254,141,140,192,145,249,155,187,242,179,223, 88,183, 47, 44, 44,154,175,167, 12,163, 5,187,234,104,230,105,193, 96, 96,204, + 13, 70,132,208,102, 98,111,176,135,217,180, 25,150,200, 98,164, 92, 85, 14,195, 68,201,142,188, 16,232, 51,118,156, 48,102,143, +208,208,116, 9,153, 4, 57, 20,114,152, 53,220, 38, 82, 35, 84, 87,208,183,223,252,238,179, 14,114,192,103,139, 11,153, 20, 51, + 22,171,208, 49, 25,153,170, 78, 77,154, 92, 89,156, 56,218,229, 53,157, 94, 28, 20,230,229,165, 84, 29,141, 86,131,215, 97, 18, +214, 88,156,211, 29,145, 11, 78,189,228,229, 57,196, 68,197, 15,234,108, 81, 26, 92,121,158, 54,127, 94,137,123, 62, 34,153,199, +233,179,247, 74,127,176,231, 79, 33, 24,131, 4,221,239, 72, 45, 47,170,116,165, 42,191,215, 26,131,183, 70,193, 51,206,226,157, +114,220,141,104,189, 75,252,188,159,182,138, 0,181,115, 98, 94,127, 7,162, 59,228, 26,181,190,100, 29,222, 25,130, 84,178,105, + 20,202, 96, 4,103,213, 33,238,190,177, 37, 50, 86,145,171,197,161,225,170,162,202,211,198, 26, 4,136,169,204,117, 15,149, 39, +212,148,168,206,234, 65, 33, 84,138, 64,202,250,123,118,165,208,120, 29,225,149,154,161,177,164,249,129, 44,217, 34, 46, 19,240, + 88,175, 35,242, 82, 13, 37,122, 66, 99, 72,180,184,166,165,177, 22,130,163,163,225, 16, 7,104, 60,142, 66,140, 58,178, 92,172, +150, 72,150, 23, 35,247, 49,234, 72,118,154, 6,182, 87, 87,132,118,129,115, 45,155,227, 14,239,172,170, 78,141, 97, 24, 15,108, + 47,175,216,247, 61,165,102,221,229, 27, 67,227, 21,120, 81,158, 47, 83,156,197, 73, 75,131, 99, 55, 30,240,203, 21, 39,167,103, + 42, 17,153, 50,222, 59, 98,201, 16,237,172,225, 69,201, 72, 88,130, 11, 88,215, 33, 76,140, 78,176,222, 80,162, 30,170,150,109, + 51, 7, 44, 13, 18,202,220,151,181,100,153,176, 70,171, 80, 67, 44,136,113,216,106, 24, 37,241,201,175, 31, 48,142, 73, 67, 85, + 67,193,218,137,205, 38,144, 68, 15, 80,165, 22,214,171, 5,215, 78, 91,254,215, 63,250,247,252,203,255,230,191,230,191,253,240, + 45,254,213,191,250,239,120,178,157, 8,203,134, 52, 36,166, 52, 97,157,193,139,195, 26,209,239,163,182,125, 49,130, 11,206,176, + 63, 12, 44,142, 58,166, 92,120,248,232, 46, 95,222,251,138,197,122,201, 75, 47,221,228,214,237, 55,185,121,109,195,178, 89,241, +236,217,125, 18,133,216, 11, 95, 92,125,142, 49,130,219,172, 40, 86, 87, 30,198, 58,166,113,192, 91,143,228, 66,182,218, 77, 63, +190,190,210,158, 61,186,190, 42, 70,144,236, 72, 50, 40,131,189, 8, 53,171,158,152, 86,201,119,181,177,244,243,205,118, 72, 61, + 49,121,210, 48, 81, 4, 98,173,180,190, 35,248, 76, 21,248,242,222, 57, 85, 42,109,183,208,181, 79,169, 51, 2, 56,145, 74,102, +154, 70,106, 85,184, 17,146,217,108,150,180, 86,195,111,160, 42,211,146, 52, 27, 35,185,224, 66,139, 37,232,195,191, 6,214,139, + 13,222,119,218,117,143, 79,185,123,231, 83,246,151,247,168,146,232,218,133,170,153,171,232, 4, 44,105,175, 54,229, 76, 2,150, +174,193, 24, 79,170,133, 92, 51,182, 38, 13,147,226, 49,161,168, 93,208, 43, 46,218,160,124,136,156, 35,109,187, 38,102,225,207, +254,244, 99, 36, 10, 31,124,247, 61,222,127,253, 38,130,174, 3, 79, 54, 11, 62,249,244,215, 28, 45, 91,190,253,157, 87, 57, 63, +252, 30,127,244, 71,127,206, 43,183,110,176,186,190,226,242,178,135, 98, 73, 40,247,125,101, 90,182,146,152, 36, 97,131, 26,214, + 74, 77,228,121,117,133, 13,152,236, 85,155,106, 10, 83,227, 97, 80,102, 71, 45,149,104, 10,203, 38, 16, 83,197,219, 35,178, 31, +177,232,196,101,152, 50, 77,208, 23, 90, 48, 11, 72,134,246, 52, 64,202,144,160,115,158, 98, 2,166, 70, 92, 42, 36,132,144,206, +112,229,130, 33, 27,214,116,140, 6,138,221, 98, 19,234,203,246,107,252, 96,168,141,114, 60,156,131,100, 43,193,192,217,106,243, +194,145,126, 22,190,198,160,182, 14, 78, 55,134,245,252,247, 79, 23,158,254,100,195, 53,171,253,237,199,227, 41, 27, 3,161,129, + 93,129, 39,247, 14, 76, 95,125, 73,157, 38, 50,142,211,107,167,180, 55,174,147,147, 80,182, 7, 42, 17, 41,144, 81, 77, 50,214, +208,103,109, 11, 65,228,208, 23, 50, 5,177, 80, 75,161, 51, 14, 68,137,146, 53,139,230, 74, 26,199,195,167, 23,148,148, 88, 46, + 87, 24,231,104,156, 99,189,108,241,193,147, 5,172, 17,218, 54,188,128, 36,105, 6,195,252, 71,161, 54, 41, 37,114,137, 10, 61, +242,255,255,240,179,225,111, 33,236, 45,236,223,172,203, 97, 12,251, 24,137,169, 48, 85,101,171,132, 69,160, 63,244,152,152, 48, +101,129, 11,215, 40, 54, 97,167,145,108, 51,102, 9, 77, 92, 51,164,145,105,220,107, 32, 58,195,224, 14, 80, 51,249, 42, 99,188, + 16,167,132,167,193, 38, 5,250,102,155,136, 84,178,100,188,237, 16, 91, 40,217,224,186, 37, 85,122, 76, 53,172,221,130, 62, 30, + 8,211,158, 69,235, 25,129,114,216, 83,235,132,111, 27,131,136,142,158,197,104,247, 91, 63, 32, 64,202,220,251,158,237,100, 69, +129, 45,198, 43,134,181,166, 57,236,102,133, 82,253,215,139,247, 92,177, 78,247,104,207, 67,114,213,168,162,206, 88,125, 33,102, + 51, 3,111,170, 32, 51, 57,169, 72,213, 23,185, 5,231,176,137, 30,187, 0, 0, 32, 0, 73, 68, 65, 84,204,139,132, 54, 78,113, +178,144,102,252,172, 67,234, 60,254,174,186, 23,182,243,218,192, 22,245,164,219, 90, 52,224, 97,130,142,249,170,190,132,131,201, + 24, 12, 89, 64,234,156,130,159,169,109, 37, 85,108,251, 92,248, 82, 8, 62, 19, 81,121, 76,114, 94, 67, 85, 34, 36, 99, 21,246, + 49,243,127,141,171,212, 73,187,246,110, 86, 63, 58, 83, 16, 3, 57, 59,138,181,216,182, 98,114,154,233,123,117, 54,177,169, 31, + 62, 20,221, 3, 27, 42,203,227, 87,113,135,158,152, 70,156, 13, 88,223,224, 92,197,153, 64,157, 14,120, 83,145,172,135,146, 90, +149,157,111,109,125,145, 26,181,226,177, 51,192,162,136, 64,158,200,162,135,182,222, 42, 7, 61, 52, 29, 88,195,226,232,132,211, +155, 47,235, 52,101, 72, 96, 34,219,203, 11,253, 28,139,106, 5,167, 67,101, 29, 28, 25, 33, 17,233,252, 9,190,237,232, 28,152, + 14,218,118, 5,161,240,244,254, 67,221, 49, 74,101, 26, 70, 85,236, 82,233,108,162,159,138, 2, 56,156,144,115,166, 98,184,245, +234, 9,143, 30,156,179, 27, 38, 37,128,121,121,209,157,173, 22, 66,117,164, 82, 8, 70,168, 88,198, 60, 42,144,103, 86, 77, 78, + 83,164,109, 60,227, 36, 88,163,234, 91,113,134,163,166,229,231, 63,253, 5,239,190,251, 29,154,106, 56,191,186,224,218,145,227, +211,207,206,241,139,160, 15, 21,163, 35,198, 82, 43, 73,132, 96,132,102, 54, 72,229,106,105, 93,135,196,200,227,251, 23,156,156, +174, 49,221, 9,157,207,148, 56,241,197,103,159,240,232,222, 87,172, 22, 39, 88,167, 7,213,208, 53,180, 33,208, 54,150,225, 80, +216,246, 59,134,113,100,218, 31,168,222, 48, 13,137,108,116, 77,229,231,195,242,238,114, 75,206, 25,235,103, 6, 66, 99,177, 4, + 38, 23,104,157, 39,216,138,105, 91,172, 53,196,152, 72, 49,210, 87, 88, 52,170, 2, 29,199,129, 82, 10,195,161,103,213,174,184, +241,210, 53, 14, 99, 36,111, 71,140,211, 92,139,128, 18,243,138,182, 86, 28,149, 49,141, 32,133, 38,120,154,176, 1, 3,195, 56, +145, 43, 28,155,128,115, 94, 5, 50, 94,237,124,181,104, 65,212, 85,193,136,224,221, 18,227, 23,184,102,195,184,219,113,121,126, +159,195,197, 67, 14,219, 39,152,214, 99,173, 87, 42, 26,170,215, 21,175,251,187,106,173, 94, 14, 18, 16, 58, 92, 51, 63, 63,130, +161, 74, 3, 24, 92,209,113,174, 65,127,102,107,181, 24,231,230,198, 73, 68,100, 98,189, 56,225,222,179,129,255,229,223,125, 68, +173,134,163,197,138,245,106,201,144, 18, 79, 30, 63,227,215, 95,126, 65,101,193,111,125,167,242,247,223,127,131, 39,143,246,252, +217, 15,255,130,151,222,120, 13, 91, 3,210, 0,105,134,221,200, 2,159, 35,181, 38, 76,237,244,112,104,147, 66,149,166,204, 36, + 70,215,104,168,181,210, 20, 13,206,154,164, 42, 87,103, 13,185, 26,164, 36,214,109,161,151,202,161,168, 36,198,153,138, 13, 6, + 91,162, 62,203,170, 69,174, 18,214,154, 57,219,224,177, 50,145,140,199,209, 32, 38, 19,250, 45, 7, 28,213, 78,244, 56,237,105, +205,207,214,241,188,176,238, 52,180, 76, 48,196, 92,241, 83, 33,172,192,210,210,217,191, 93,141,106,126,227,165,229,140,214,216, + 86,243,203,171,111,225,229,121, 63,253,178, 7, 57,105,249,242,158, 69, 44,180,213,240,222,155, 47,113,114,186,162, 7, 30,239, + 54, 52, 85, 48,193,209,199,204,184, 31, 8,109, 32, 98, 48,147, 32, 49,107,149,180, 8,210,143,138, 71,181,142, 40, 17,219, 15, + 24, 91,136,195,128,145, 74, 50,142,251,231, 61, 97, 55,105, 40,219, 24, 13, 99,163,239, 35,107, 43,141,179, 52,222, 81, 43, 44, + 27, 71,187,104,113,214, 50,101,161,177,149,197, 34,224,156,227, 50,102,118,151, 23,218, 4, 42,170, 27,254, 79,249,159, 2,212, + 49,146,178,190, 92, 73,137, 36, 5, 16,188, 43,228, 33,227,218,129,197, 8,161,104,181, 51,153,162,113, 51,241,212,162, 46,146, +156, 61, 39,214,146,165,144, 76, 67,105, 50,213, 6,106, 74,216,208, 96,188,197,246, 66,204, 19,126, 81,169, 67,197, 78,130,105, +243, 60,141, 76,216,149,133,232, 48,165, 34,109,229, 80, 10, 31,127,244, 25,241,233, 45,158, 61,249, 4, 17,193,235, 13,220,104, + 96,196,234, 75, 66, 94,220, 88,156,170,247,230,128, 87,170,122, 75,111,140,195,168,140, 82, 71,158, 70,125,230,214, 42, 78,177, +154, 58,247,158, 13, 37, 11,174,153, 21,172,115, 80, 11, 99,230,219,106, 70,164, 18,188, 74, 89,172,204, 90, 87,163,100,150, 82, +243, 76,181,155,199,238, 85, 11, 48, 22,247,141,223,155, 87, 38,124,142, 84, 49,208,232,148, 1, 81,227, 90,148,130, 49, 6,111, + 52, 15, 80, 69,215, 6,166, 90,114,141,202, 67,199,205,139, 23,171, 15, 26,167,171,132,113,202,248,224,102,151,122,209,191,182, +250,200, 50, 50,191,188,139, 40,160,198, 86,160, 80,170,165,206, 98, 1, 93, 1, 40, 30, 54, 20, 79,232,244,167,170, 74,157,191, +145,161,184, 74,142, 9,239, 2,194,146,118,115,157,253,213,151, 96, 58, 76,211, 33, 69,199,251,217, 36, 22,109,160,100, 40,117, +196, 89, 40,232,206,191,177, 78,165,111,162, 55,236, 90,181,111,174,244, 93,165,216, 7, 44,213,233,105,215, 20, 51,247,148,133, +108,122,114,169, 56, 31, 56, 94, 29,115,184,186, 36,214,172, 55,173, 12,169, 22,174,234,129,102, 95,168, 69,119,102, 67, 63, 40, +125,203, 24, 82,172,132,206,207,112, 29, 29,193, 21, 50,206,122,138,133, 93, 26, 8,126,201,178, 89,113,232,207, 57, 90, 45,184, +218, 79, 60,124,186, 69, 36,107, 11, 34, 21,106, 22,138,171,115,210,214, 18,131, 96, 37, 48,150,132,109,140, 6, 42, 75, 36, 35, +196,164, 73, 23, 51,187, 0,168,208, 4,237, 60,187,198, 51,140,137,179,163, 83,238,124,122,193,191,249,227,127,207, 54, 85,190, +245,247,222,224,226, 98,207,246,234, 48,211, 1,245,229,154,199,136,233, 44,110,209, 81,114,162, 90, 67,205,145,198,183, 28,157, + 28,115,180,106,232,199,130,245,154,103,166,107,169, 70,136,105, 75,220, 37, 50,130,223, 26,112,150,213,122,193,162, 57,193,153, +150,233,240,148, 73, 70,210, 88, 20, 68,100,181,134, 25,163,208, 46, 3,199,203, 53,253, 48, 97,201,196,172,140,130,104,244, 65, +145,197, 81, 98,198, 4, 85,122,230,113, 36, 77, 19, 75,115,132,179,186,200,144,152,232,199,137, 36,208,154,202,181,235, 55,152, + 30, 60, 96,187,123,138,169,142,213,122,205,205, 27,215,145, 82,185,186, 58,199,248,145,103, 23,145,110,217,226, 93, 71,104,151, +224,170,106,104, 75,203, 36, 19,195,238,192,209,250,136,234, 43,105,212,138,161, 32,136,215,125,123, 75,128, 34,196,113,199,179, +103,119,136,253, 51, 98,191,199, 59,171, 50,145,170, 36,189, 33,141, 4,239, 21,148, 82,117, 5, 85, 49, 52,120,166,156,216, 14, + 59, 22,169,193,181, 94,215, 31,214,171, 42,211,168,189,177,216, 12,121,206,173, 84,131,179,129,106, 43, 53, 71,162, 63, 32,193, +210,231,204, 31,253,217, 47,248,233,175,238,112,251,205, 87,120,235,213,155,252,242,227, 47,232,115,100,179,186,203,191,254,159, + 62,227,159,255,227, 63,224,159,253,225,247,216, 14, 87,124,254,213, 83, 94, 57,187,206,231, 79,159,104,202,202, 26, 14,110,192, + 57,193, 69,133,107, 17, 42, 77,235, 73,201, 96,151,142, 90, 91,164, 10, 53, 69,196, 20,194, 98,137,243,158,202, 72,152,131,178, +181, 24, 66,219,113, 96,164, 86,139, 55, 45,206, 10,217, 57,234, 60, 21, 60,148, 1,147,133, 54,180, 4,223,113,152, 18,181, 43, + 24, 9,172,130,103,148,145,198,121,170,201, 80,133,182,109,112,169,227,144, 71, 58,148,241,145,210,200,182,100, 22, 97, 65,189, +180,248,205, 2,223, 24,236,228,136,222,112,255, 42,195, 81, 37, 78,153, 38, 70,236,217,138,224,225, 48, 63,159,218,206,129, 5, +159, 53,203,132, 51, 47,158, 25,246, 27,142,211,154, 50,117, 78, 96, 47,154,192,201,178, 37, 0,199,128,217, 88,214,115,178, 98, +183, 8, 12, 71,129,107,115,248,108,171, 86,105,150, 86,131,107,207,226, 10, 39,149,106, 33, 21,184,122,122,201,197,253, 7,100, +163,181,221,245,233, 41,238,232,136, 44,134, 58, 37, 58, 99, 49,193,147,162, 96,210, 68, 33,209,151, 74, 47, 5, 91, 42, 59, 17, +100, 27, 85,174, 85,133, 90, 4, 87,133, 49,167, 23,151, 54, 74, 70,128, 95,127,245,152,243,203, 61,139,101, 75,193, 17, 92,224, +120,213,105,149,215, 25, 98,206, 44, 90,175, 43, 34,163,191,191,174,245,115,190,225,121, 34,252,235,205,126,173,232,212,215, 25, + 98,173,132, 81,139,212, 81, 70,188, 24, 38, 91, 9, 2,187,105, 7, 37, 83,140,224,219, 53, 69, 96, 55,237,105, 12,120,191, 34, +199,137,166,243,140, 25,178,157,112,161, 69, 74,194, 86, 71,154,246,200,160,117,237, 54,104,170, 61, 97,152,196,226, 38,240,197, + 83,106,160, 92, 69, 48, 17,227,159, 33,180,132, 35,199,179,107, 27, 70,183,198,199,204, 33, 38,188, 48,215,199,204,108,168,154, +103,251, 82, 43,209,184,121, 92,110,200, 34,170, 40,181, 78,137,254, 51, 49,184,136,158,122, 29, 50,215,225,148, 23,175,215, 4, + 93, 74,212, 57,144,245,252,135,212,200,204, 98, 55, 78, 79,179, 78, 41,106,224,245,133,110, 12, 66,193, 88, 52, 16, 39, 80,201, +154,204,118,110, 30,213,171,164, 33,103,181,121,129,213, 27,138,209,111,210,130,210, 4, 92,177, 47, 14, 19, 2, 42,104, 40,134, +138,130, 21,168,162,166, 40,235,212, 98,102,244,100,168,141,116,175, 39, 98,107,112, 86,253,201,206,185,185,250, 45,136,119,212, +108,200,197,128,171,200, 28,148,107, 90, 67, 78,122,250,180, 86, 15, 30,206, 84,178, 81, 58,154, 21, 53,119, 57,241,228,164, 82, + 22,239, 42,147, 52,236,174,158,176, 29,158,178, 88, 46,240,181,165, 11, 51, 52,198, 54,148, 0, 98, 43, 55,150, 11, 46,246, 79, +216,165,137,205,250,136,245,122, 67,153, 70,236,120, 32,102,153,119,147,105,134, 15,120,124,240, 56, 31,104, 44,148, 89,162, 44, + 81, 40, 34, 4,223,128, 15,172, 54, 43,134,237, 57,211, 52,225,219,142,105, 42,115, 61,177, 98,163,238,143,210,152, 89, 44, 1, +171, 4, 62, 42, 24, 39, 80, 53,205,190, 92,157,178, 58, 57, 33,197,158,241,208, 83,162,193,216,150,176, 80, 27, 94,183, 90, 96, + 75, 36,197,196,209,170,163,235,214,236, 15,151,216, 70, 52,153, 42,154,161,176, 14, 36, 22, 77, 71, 91, 75, 73,149, 82, 39,170, +204,146,156,172, 31,121,176, 1,114, 34,138,161,100, 75,215,120,142,218,150,123,251,200,131, 71, 15, 9,203,202, 85, 31, 56, 59, +187,197,135,191,253, 62, 95,126,113,159,255,227,255,254, 33, 67, 63,205,244,192,164,225, 71,235,112, 52, 76, 53,170, 12,199, 26, +144,196, 43,175,189,202, 43,175,223,230, 87, 63,253, 49,103,103,175,114,243,214,235,124,252,243,143,216,110, 31, 67, 8,108, 78, +174, 19, 69,216, 93, 92,112,254,228, 17,235,147, 99, 94,189,190,193,212, 72,117, 70,189,234, 84,188,115, 76,113,210,252,132,241, +184, 73,232,107,164, 31, 14, 72,213,188,135,161, 98,141, 35,116, 14, 17,157,108,184, 90, 21,106, 98, 19,203, 69,131, 55, 48,142, + 35, 82,149,237,141, 36,114,156,184, 24,119,252,201,159, 60,210, 85,151,247,100, 73,236,250, 43,222,222,188,206,186, 61,225,104, + 5,223,255,246,134, 63,249,217, 21,143,158, 29, 48,165,224, 27, 59,175, 63,230, 22, 72,134, 33, 78,152,253, 21,174, 9, 4,223, + 97,179, 6, 74, 69, 34,140,202,166, 31,166, 3,231,219, 61, 57, 31,232,108,160, 86,171, 4, 72, 99,177, 53, 83,170,197, 89, 63, +131,193,245, 25, 97, 45,228, 44, 76, 85, 25, 8,182, 84, 98,142,116,193,178, 89,174,153,198,137,195, 52,226,157,218,221,164,102, +170, 3,111, 23,154, 74,167, 34,174,197,251, 70, 67,156,249,128,136,176,221, 78, 92, 94,142,124,113,247,130,191,104,126,197, 36, +142,155,175, 28,243,213,103, 15,120,250,108,207,221,119,223,224,214,173, 83,254,224,251,191,197,253, 47,255,152,103,231,119, 56, + 91,159,241,236, 98,192, 74, 98, 81, 13,169,120,106,227,176, 49,232, 84, 35, 86,188, 15, 16, 39, 36,136,138,157, 66,197,136, 39, +149, 72,138, 3,221,162,165, 24,193,196, 22,108,102, 28,244,246,218,181, 6,153,132,128, 78,202,172, 47, 12, 67,130,234,112, 71, + 75,109,154,148,138, 95,120,186, 77, 75,154, 42, 83,204, 52,193, 83,147,103,139,197,214,137,236, 60, 99, 61, 16,130,163,164,168, +249, 23,107,201, 86,152,124, 97,221, 90, 66,152, 33, 93, 41,115,220, 29,243,234,237,151, 56,221, 24,238, 15,158,135, 59,195,179, + 90,113,197,144, 46, 19,140,145,205,233,138,206,194,238,114,192, 53, 13, 97,165,153,135, 97,183,103,187, 10,172, 59, 79,113,134, +195,197, 14, 91, 38, 74,204, 52,139, 64,248,134, 73,237, 55,251,236,207, 33, 52, 14, 56, 49, 95, 99, 87, 27,192, 54,176, 80,231, + 38, 5,248,229,188, 38,148,156, 41,222,241,202,171,103,188,116,188, 33, 1, 79,179, 78, 15,156,211,250,218,118, 16, 85,242, 58, + 67,202, 66, 25, 35,214, 58,140,181, 20,169,164, 49, 66,133,156, 43,109, 41,212,233,128, 25, 70, 14,211, 78, 51, 76,206,242,116, +210,128, 90, 77,218,176,192,239,176,181,206, 85,223,140, 7,130,181,196, 82,144, 82, 89, 45,155,153, 36, 42,148, 92,241, 54,177, + 88,119,184, 10, 87, 83,225,201,211, 11,166, 62,225, 99, 33,251,192, 48,238, 16, 19, 73,217,210, 24,199,148, 28,185, 89, 66, 25, + 49, 37, 99,178,197,230,129,182,201,228, 62,211,218, 74,148, 29, 82,215,164, 73, 43,113,245,144,112,173, 90, 30, 73, 30,215, 84, + 38, 91,145,164, 33,110,124,165, 74,196, 20,143, 24, 75, 44, 19,222, 23,106,234, 40,102, 66,226,200,153,179,188,252,214, 53,238, +197, 21, 61, 19,213, 56, 60, 50,199,133,172, 80,213,187, 58, 7,221,132,156,235, 92, 11,208,189, 59, 70,117,172, 50,195,115,109, +117, 32,149,130,222, 74,109,169, 51, 95,122, 70, 8, 82,102,154,155, 2, 47,220,204, 22, 87, 75,154,211, 32,153, 49, 96, 4,107, + 27,173,145,155,170,117, 44, 83,177, 98,212,202,102,173,210,234,170,210,238,140,177,196, 28,177, 24,149,203,168, 98,125, 54,199, +169, 96,198,184, 58,215,125,244,252, 33, 70,111,163, 38,100,204,188,171,179,222, 80,196, 35, 58,225, 39, 4, 75,197,106,255,221, + 27,220,243,145,108, 17, 26,111, 41, 20, 13, 46,165, 2, 78, 79,156, 98,116,119,228,103,119,175,169,122,216, 48, 54, 41, 48,164, + 26,188, 17, 29,215,100,171, 72, 83, 3, 77, 1,124, 80, 81, 78, 22,114, 29, 73, 57,233,205,165, 91, 98, 29,152, 52, 34,214,129, + 4,166,105,162,154, 68, 17,161,217,156,113,249,213, 5, 15, 31, 61,229,178,235,240,161,211,155,145, 49, 4,223,224,155,150,211, +211,155,148,152, 24,135,131, 6,223,130, 83,227,155, 13, 20,111, 72,174,210, 86, 67, 76, 9,153, 6,204,122,161, 7,180, 82, 84, +224, 18,156, 6, 26,173, 78, 94, 92,240, 8,133,126,119, 78,108, 26, 93, 13, 52,142, 38,168,188, 71,114,101,181,217,112,118,186, +225,242, 65, 15, 65,237, 97,166, 22, 66, 73,236, 14,123,198, 52,210, 20,104,188,163, 84,195,229, 56,205, 97, 72,165,148,121,235, + 53,209, 41,224,172, 86,243,158, 19, 12,173,204, 88,220,162,193,160, 96, 45,161,113,140,212,153, 71,144, 57, 58, 59,229,144, 44, +219,221, 72,173,240,236, 28,250, 67, 98,189,218,240,229, 87,143,248,241,143,126,202, 97,119, 0, 11, 83, 41, 56, 2, 50,155,238, + 98,218, 83, 98,196,186,134, 73, 42,139,206, 99,156,229,147,143,127,201,205,151,223,228, 59,223,253, 62,126,225,120,250,248, 9, +103, 71, 55, 88, 28,117,124,240,221,239,177, 61, 63,240,249,199,127,205,110, 24,160, 86, 46,206,239, 3,142,105,154,136, 83, 84, +170,159,211,100,112,170, 5, 67, 38, 77, 21, 41,154,189, 16,165, 47, 97,124,214, 17,123, 4, 35,149,156, 51,165,100,130, 51,116, + 75, 71,183, 88, 98,171, 48,148, 76,154,132,126,232, 25,198,253, 92, 47,115,132,160,159,191,136,193, 53,134, 24, 35, 15, 31, 94, +240,206,235, 39,164,210,176, 92,182,252,243, 63,252,125,254,183,127,247, 11, 30, 63,122,160, 65, 84, 59, 35,115, 49,220, 56,125, +153, 49, 30, 40, 49,145,147, 33,215, 9,147,210, 60,141,211,157,252,249,112, 69,154, 84, 3,233,189,215,160,172,241, 58, 61, 74, + 17,231, 53, 37, 43,243,193,218, 25,117,127, 23, 41,243, 65, 94, 19,216, 21,131,169,158,113,200,108, 26,104,187, 5,209, 36,210, + 52,225, 77,131, 21,167, 98, 27,139, 98,150,189, 99,121,116, 74,231, 87, 76,211, 78, 95,162,250, 95,210,182, 58,129, 58,136,134, +143,238,222, 59,231,193,253,103,120, 10,255,253,191,254,183,252,159,127,250, 19,190,117,251, 77, 86, 11,199,163,203,158,183,143, + 95,226,144, 87,148,105, 75, 73,149,138, 39,197, 68,181, 9, 71, 71,202, 35,190,142, 26,240,155, 34,141,247, 24,103,168, 4, 76, + 30,105,131,131, 40,202,139,159, 49,162,109, 99, 89, 5,203, 32, 19,214,173,144, 80,177, 11, 37,169,120,231,105,124, 67,204, 90, +157, 28, 67,131, 11, 13, 38,170,127,189,202,156, 3,106, 43,126, 44,224,143, 40,195,158, 98, 60, 49, 39, 76,151,176,102,129,115, + 94,229, 86, 35,244,214,178,114, 66, 29, 60,178,180,116, 77,224,149,101, 32, 24,184,222, 25,150,141,231,196, 43,254,244,178, 52, +176, 14,200,198,178, 43, 80, 83,199,241, 70, 39, 64, 87, 2,231, 91,207,238, 42,209,244, 21,201, 19, 87,151,231, 20,137,140, 41, +147, 75,225, 98, 55,209,110, 90, 74,130,126,156,216, 44, 60,222, 26,246,177,176,112,118,166,178,252,191,129, 54,205,111,252,125, +141, 25, 43, 5,231, 29,161, 11,156,180, 13,205,252,207, 57,175, 7,134,231, 27,243,110,105,105,105,105,102,138,221,246,184,227, +236, 27,166,183, 67, 93,178,156, 47,212, 61,240,232,233,134,243, 59, 95, 34, 86,240, 22,142, 94,186,137,217,156,104,198,106,200, +122,250, 9, 26, 2, 54,227,115,198, 64,161,148,164, 24,238, 56,114,153, 29, 53,101,144,136,175,149,113,154,152,238, 95,144, 37, +235,116, 50, 79,108,183, 3, 54, 11,198, 8,146, 50, 18, 26,170,139,228,201, 82,137, 44, 3, 28,166,130, 47, 29, 83, 19,149,254, +153, 26,172,131,125,156, 48,174,101,127, 56,103, 40,158, 58, 78, 24, 2,185, 47,186,202,113,142, 88, 34, 34,137,130, 99,100, 67, + 93, 78,216, 82,144,201, 82, 91,131, 59, 36, 36, 27,240,153,152, 33,229, 3, 86, 54, 4,183, 70, 98, 70, 38, 33,198, 17,143,247, +122,178,192,145,171,254,240, 41,180,223,226,189, 94,246,124, 53,218, 35,157,249,192,169,228, 23, 99, 9,227, 45,118,126, 25, 40, +253,209,234,203, 84, 12,214,169,140, 69,106, 81,143,121, 53,216, 16, 48, 98,230,186, 89, 81,213,170, 85, 89,140, 41,243, 45,237, +185,252, 4,135,216,168, 55,110, 9, 90,133,171, 21, 51,235, 87, 67,103,168,197,169, 15,222,168, 62,179, 86,173,209,132, 10, 41, +231, 57, 21,222, 48,214,164,123,231,168, 52, 60, 49, 6,147,237, 60,154,215, 67,140,100, 48,182,224,131,199, 59,136, 89,247,194, +214,235, 14,191, 58, 75, 41,162,226,131, 10, 50, 10, 33, 24,156,171, 68,129,234, 29, 34, 66,137, 19, 93,104, 8,115, 53, 39,249, +249,235,117, 40, 4,239, 72,214,144,171,176, 40,137,146, 10, 38, 24,114,174, 60,188,247, 41,175,190,115,202,122,125,157,169,223, + 99, 91, 77,153, 22,209,244,237, 52, 8, 71,171, 13, 67,220,242,236,106,135,181,158,148, 53,248,101,202,124, 10,157,121, 1,207, +158, 62,196,121,199,234,232, 38, 55,207,174, 67,217, 19, 92,203,194,105, 44,118,108, 20, 76, 83,140,208, 45, 20,209, 58, 28,118, +228, 90, 33,103,220,188,203, 52, 34, 52,221, 2,170,182, 22, 98,140,136,101, 14,152, 25,210, 52,106,110,162, 86, 26, 23,200,219, + 81,251,226,193, 97,170,161,144,145, 0, 77, 52,196,170,139, 20, 39,149, 60, 36,198,148,113,214,145,139,161,198, 66,105, 10,165, + 56, 82,137,152,160,105,124, 11, 20, 87,112, 34,148,164, 16,153, 82, 51, 71,221, 2,103, 29,216,136, 51, 21,111, 61,215,175, 95, +231,226,124,135,100,161, 9,134, 59,247, 30,112,216,238,153,178,240,179, 95,126,196,211, 39, 79, 9, 78,199,215,214,232,104,217, + 59, 71, 27, 90,114,140,184, 82,104,215,158,161,143, 88,239,184,247,249, 39, 12, 83, 36, 95,236,168, 99,130,101,195,131, 71,119, +240, 4, 94, 59,126,139,199, 15, 30, 48,197,196,122,185,226,232,104, 73,201, 25,113,134,169, 31,200, 89, 27, 24, 38,170, 62,184, + 82,200,169, 16,154,150, 97,156, 88,110, 2, 47,191,118,141, 60, 21,190,248,236, 19, 98, 17, 66,235, 40, 73,237,131,213, 24, 82, +201,212, 98,153,162,176,219,238, 88,175, 50,226, 13, 54,107, 32,211,134, 5, 93,227,145,108,181,246, 34, 26, 42,147,249,214,127, +117,249,140,225,149,215, 89,118,215,249,226,193, 21, 63,248, 48,209, 54, 58,117, 11,141,199, 54, 6,107, 61,203,229,146, 91, 55, + 94,231,209,147,251,108, 47, 47,200,185,208, 31, 70, 98, 63,168,113,111,177,152, 81,197, 5,113, 6, 95, 28, 38, 87, 6,147, 48, + 70, 56, 57, 58,229,228,250, 45,238, 62,184, 79,141,232,106,199,206, 45, 10, 84,171,106,172,135, 34,243, 74, 77,215, 93, 21, 97, + 59,238,216, 44,215,116,190,163, 12, 35, 80, 9,206, 17, 69, 25,237, 77,187,164, 89, 30,227, 67, 71,191,219, 18,199, 43, 68, 10, +214, 84,226,172,138,246,115,250,217,184,231, 13, 28,133,178,220,185,127,201,221,199,123,254,226,163,207, 56, 93, 29,241,210,245, + 19,124, 87, 57, 59,109,120,112, 95,215, 82,206,103,186, 84,233, 83,162,184, 68, 87, 85,138, 66, 87,169,163, 85,247,247, 60, 5, +116, 33, 96,173, 97, 74, 74,187,116,193,106,144, 49, 87,114,110,176, 38,224, 27,163,177,225,209,144,197,226,140, 71,170, 96, 74, +135, 53,133,148,244,230, 53,182, 3,221,216,232,203,165, 1, 41,158,174, 49, 24, 41,140, 69, 48,181,199, 20, 8,245,152,214,130, + 35, 48,150, 72,227, 27, 76, 22,170, 19,228,144,240,213,209,189, 26,120,158, 13,139, 73,159,209,155, 89, 19,125,153, 43,171,133, + 62, 63, 14,192, 50, 88, 94,153,171, 91,199, 64, 58,235,104, 58,117,203,212,190,129, 39,231, 28,178,126, 29,253,178,129, 77,195, +193,194, 37, 48,137,225, 73, 54,164, 92,113,187,204,170,115,236,130,230,161,198,109,225,164,181,180,173, 30,192,135,177,176, 90, +232,215, 39, 2, 83,127, 96,200, 25,201,153, 53,134, 96,237,223,200, 0,152,223, 32,220, 53,243,175,181, 51,202, 54,124, 35,212, +182,252, 70,129,125, 13,140,193,241, 76, 12,198, 27, 58,215,240,222,235,215,105,218, 64, 69,211,255, 94,148, 87, 95, 42,244, 69, +101, 60, 56,200,165,146,146, 48,236, 38, 92,215, 80,196,144,106, 38, 93,246,184,105,160,171,149, 60, 38,232,175,104,154,158,243, + 93,161, 68, 37,134,182,182, 97, 26, 51,181,115,200, 48, 80,171, 78, 17, 91,239,152,106, 34, 30, 70,164,105,113,165,193,155,137, + 90, 45,212,194, 97,159, 48,121,160,109, 59,198, 24,201,181,210, 82,161,140,250,125,231,150,136, 76,152,216,235,202,122,206,165, +229, 49,106, 79,205,130, 15, 25, 87, 42,213, 46, 56, 57, 57,162,203, 32,105, 55,187, 85, 10,190,166, 57, 94,255,220,186,230,173, +122,207,171,193,104,174,234,185,128,117,246,170,204,100,117, 83, 49,166,144,147,198,217, 77,208, 20,185,153, 15, 6, 98, 2,198, + 54, 32,170, 85,172,243, 92,220, 24,163,251,231, 58,143, 69,130,222,222, 21,253, 10,217,152,231,155, 12, 4,193,185, 70, 81,152, +186,216,192,136,130,237,149, 2,103, 16,171,129,183,231,128,193, 96,225, 5, 60, 78,147,116, 84, 91,104, 69,147,244, 82,235,140, + 66,172,170,145, 21, 53, 57, 37,141,187,206, 7,131,185, 59,110,102,170, 15, 85, 51, 3,206, 18,208, 91, 98,181, 66, 42, 90,205, +114,193, 97,242,156,166, 55,250,117, 44, 82,177,193, 82, 74,213,177,158, 5,231, 60,177, 36,133, 69, 24, 71,246,218, 20, 48,174, +193, 27,139,228,129,187,119,191,224,157,183,190,205,194,180,180,139, 64, 88, 54, 28, 46, 46,233, 92, 75,235, 15,184, 50,113,245, +236, 25,187,253, 78,111, 43,179,228,198, 91, 59, 91,162,244,192,145,166,137,126, 72,172,142,111,210,110,142,136,227,172,128, 93, +122, 76,174,172,138,144,108, 34,224, 89,173,142,120,251,229,107,220,249,228,231, 84,227,181,198, 49,244,186, 27,178, 65,247,243, +117,161,255, 95, 62,208, 45, 55,234, 7,240, 30, 95, 97,191,155,193, 38,206,114, 57,142, 36, 17, 29,107,137,142,200, 93,123,204, +123,223,126, 19, 83, 96, 63,246, 76,135, 61,249,160,183,130,219, 31,188,206,209,209,138, 31,253,249, 79,120,252,240, 41, 47,191, +124,202,230,116,205,254,114,164,228, 68,140,137,126,223, 51,149,202,148, 11,113,154, 88,117,158,174,105,233,211, 56, 27, 4,161, + 91, 44,248,214,219,111,242,127, 61,248, 41, 69,224,201,179,145, 39,207,118,228, 60,241,249, 39, 95, 17,251,145,214,251,185,179, +170,211, 5,107, 44, 97,177,164, 6, 71,156, 34, 1, 59, 31,236, 12, 38, 23, 82,170,220,126,253, 45,142,215, 39,148, 42, 60,252, +252, 14,183,223,122, 27,113,137,187,159,254, 7, 62,254,197, 30,231,130,174,113, 74, 38,204,107,153, 49, 38,189,245, 27,207,192, +220, 47, 77,145,229,170, 99,181, 92, 99, 37,115,235,221,219,188,113,251, 13,188, 52,156, 30, 45,248,203,159,252,148, 52,150,121, + 90,161, 15,172, 96,245,179,200,104,179,224,176,239,213,101,237,252,204, 78,247,148, 25, 36, 81,179, 98, 50,155,198,115,124,124, +157, 87,111,191,193,189,175, 62, 97,215, 63,225,253,219,239,242,248,217,129,253,249, 21,175,189,124,202,103,119,238,226, 60, 52, +190,161, 90,195, 56,236,248,232,227,159, 65,206, 88, 35, 28,134,194,217,201,138,127,242,207,126,192,143,126,252, 43,238, 62, 73, +172, 86, 11,188, 85,157,239, 56,238, 53,131,177,120,137, 55,222,120,149, 91,175,191, 69, 4, 46, 46, 47,184,232, 47,180,219,155, +161,144,180,122,105, 85,249,154,156, 18, 41, 77, 97,158,200, 84,198, 24,113,236, 89, 46,214, 44,150, 29, 37, 38,181, 53,186, 66, +215,116, 44, 55, 39,148,106,216, 30,158,146,251, 3,214,184,249,198, 38, 24,201,244, 7, 8,205,188, 38, 20,176, 2,222,169,120, +198, 89, 75,168,138,183,221,110, 15,140, 83,230,141,151,143,121,247,237,119,120,242,224, 74,177,190, 85,136,146, 0,135,199,131, +215,167,157,137,158, 96, 60,153, 1,146,163,161, 50,153, 66, 44,133, 22,253, 92,240, 6, 95, 51, 83,103, 95,212,241,166,169,195, +212,130, 4, 37,164, 52,203, 64, 78, 66,176,122,177,169,174, 98, 90,161,164,202,193, 68,157,128,229,145,146, 38,106,211,210,132, +137,246,108,205,164,215,106, 82,217,171,216, 41,247,212,102, 69,173, 6,147, 38,250,125,197,187, 6, 95,132, 80,103,152,143,213, +233,143,117,240, 12,195,121, 69,235, 80,235,128,199,208, 72,197,203,215, 53,178, 94,244, 89,233, 23, 26,154,219, 75, 97, 28,122, +164, 86, 58,223,177,234, 22,156,206,189,115,211,130,109, 26, 78, 28,108,129,167,171, 5, 55, 29, 4,171, 35,243, 97,109, 73,214, +208, 91,216, 71,168,201,208,181,134, 84, 97,234, 43,233, 50,146,179, 6, 54, 75, 20,206, 47, 7, 78, 79, 52, 92,157, 83, 97,181, +112,179,182, 23,130,232, 69,239,155, 47,249,191,155,251, 46, 72, 42,148,177,210, 93, 91,176,249, 70, 9,254,229,111, 50, 97, 13, + 28,207,238,121,243, 66,233,234,200,199,129,229,115,180, 45,129, 71, 39, 11,130,213, 3,227,174,192,227,175,174,216,125,250, 43, + 76, 81,135, 70, 63,141, 88,163,161,199,233,208, 99, 83, 70, 74, 98,155, 12,206,137, 74,180,178,165,173,153,146,174, 52,171,225, + 45,165, 55, 72,244,212, 38, 33,206, 81,203, 4,182,165,250,150, 82, 38,156, 24,176, 29,198, 10, 57,143, 32, 29, 86, 77, 13,164, + 49, 35, 82,232,130, 35,143, 78, 65, 97,206,240,171, 59,231,236,255,135,255,157, 75, 2,110, 0,169,215,240, 69, 34,118, 38,138, + 9, 6, 51, 91, 85,202, 60, 84, 41, 69,199,227,102,222,161,214, 44, 90,109,211,121,247,204, 69,127,142,125, 4,193, 98,130,193, +198, 74,169,250,250,244, 86,193, 51, 25,189,157, 75, 21,172,168,158, 53, 75,153,107,104,110,254,226,103, 61, 73,212,217,102, 46, +115,186,156,172,234, 86, 99, 84, 31, 89,209, 96,156, 17,144,130,181,102, 78,221,234,173, 63, 43,200, 29, 35,133,130,193,123, 13, + 0,138,209,125,186,173,122,108, 72,243,175,233,152,244,121,216,175,104,213,205,155,121,223,170, 20, 44,221, 65,122, 98, 17, 26, + 23,240, 77, 37, 71, 29, 9, 25,163,182,164,234,212, 46, 23, 83,196, 22, 59,123,213,117,117, 80,157,193,207, 35, 95,243, 60,220, +234,117,135,234, 76,203,235,175,191,202,231,119,238,113, 56,188,198,233,217, 53, 98,191,195, 75,199,162, 91, 17,115,194,118, 13, +139,124,197,189,123, 59,114, 18,156,215,138, 95,209, 20,131, 30,168,230,219,176,118,246, 61,155,213,134, 6,139, 52,158,118,213, + 96,170, 2, 72,130, 53, 72,234, 89, 57, 79,160, 98,107, 34, 22,157, 82,136, 8,185, 10, 37,103,109, 45,148,204, 20,123,253, 67, +196,204,212, 15,180, 93, 32,103,149,217, 84,235,112,214,178,234, 54,156,157,157,112,137, 78,110, 48,130, 53, 30, 87, 11, 79,174, +182,172,221, 17, 77,187,102,181, 88,209,189,220, 98,172,165,219, 24,228, 16,249,193,135,191,139, 9,158,235, 71, 43,214, 55,142, +217, 93,142, 24, 34,113,140,244,211,200,238, 48,114,249,244, 41,219,195,158,243,135,119,169, 89,173,129,214, 88,240,142,183,190, +245, 14, 77,215,145,178,165, 31, 70,126,253,217, 35,174,246, 59, 14,253,150, 24, 11,214, 55,179, 55,125, 14,188, 89, 93, 2,182, +141,195, 91, 24,147, 32,139,142, 41,103, 86,190,225,218,245,235,124,231,251, 31,178,123,114,197,227, 7,119,213, 82, 88, 39,202, + 84,248,157, 63,248,125,222,126,251,187,124,244,211, 31,243,224,203,207,192,168, 59,185, 11,150,125,223,147, 69,205,102,146, 19, + 18, 19,135,254,192,230,104,201,135,191,243,219,156,157,157,129, 20, 90, 23, 48,162, 45,137, 15,190,247,219,152,245,154,143,254, +242, 39,244,135, 81, 9,123,162, 21, 52, 99,244,175,141,115,138, 44, 14, 26,162, 19, 10, 62, 4, 4,253,217,189,113,114,202,107, +175,190,194, 75, 55, 95, 99,185,217,176, 12, 1, 91,180,239,223,191, 54,224,186, 5,159,127,245,132,215,175,223,102,213, 46, 41, +185,178, 29,175,152,198, 68, 49,133,166, 9,180,182, 99,113,180, 65, 56,240,218,203, 55,248, 23,255,213,127,129,111,225,243,255, +241,167,172,151, 71,228, 26,233,150, 75,126,235,195,239,227,214, 11, 90,183,100,233, 2, 77,163,134,193, 55,223,124,143,171,243, + 31, 34, 57,227,108, 75,178,133,198, 7, 13,223, 58,161, 21, 75, 65, 31,236,198, 88,188, 81, 92,242,144, 10,193,102, 92, 23, 72, + 26, 68, 96,181,184,193, 98,121,194, 97,188,162, 76, 7, 82, 63,234,234, 75,228,107, 81,209,252,115,249,124, 77, 40,165,146,141, + 33,203,136, 23,139,119, 13, 83, 5, 59, 39,250, 15,195,200, 87,119,182,124,247,219,149,211,117,199,253,167,207, 52, 48, 73,131, +177,122, 8, 77,136, 6,101,171, 80,219, 57, 15,147, 60,253,116,208, 80,157,109, 40,157,163,179, 6, 51,194,224, 5, 91, 33, 89, + 75,231, 61,251,113, 84,126, 67, 9, 44,187,134,148, 34,141, 3, 92,102, 18, 15,165,161,198, 3, 54,235,100, 20, 83, 9, 93,192, +174, 13,101,128, 92, 61, 38, 22, 93, 59,186,138, 23,205, 42,237, 99,131,235, 2, 14,135,152, 37,101, 42,212, 32, 56,239,120,182, +189,226,227,207, 31, 19,154, 21,207, 46, 46,113,109,195,242,120, 67,172,133,254,106, 75, 91, 55,132, 46, 48,246, 19,173, 49, 60, + 47,188, 73,213,155,111,154,199,231, 41, 38, 74,138,100,209,166,139,107,190,238,129, 95, 22, 56, 65, 43,212, 30, 8, 2, 43,255, +117,186,126,221, 26,110,204, 87,171,243,165,118,194,158,247,193,159,181,134, 95,220,235,104,140,182, 25,194,178,225, 73,183,224, + 66, 12,142,138, 75,112,210, 64,231, 97, 42, 48, 30, 10,155,149, 37, 56,203, 56, 9, 18, 11,155, 77, 96,182,113,107,139,228, 27, +144,155, 20, 35,212, 76,245,133,229,194,254,157,140, 88,243,183,212,217,252, 55,114, 2, 11,224, 86,203,243, 99,155, 94,100,174, +173,121,242,105, 75, 26, 35, 78, 2, 83,222, 51,153, 72, 77,144,226,132,175, 75,192,176,236,132,152,123,100,128,214, 44,169,229, + 64, 53, 45, 67, 26, 41, 46,225,109, 71,179,246,148, 4, 83, 26, 20, 57, 92, 11,102,172,148, 98, 17, 95, 49,249, 74,243, 3, 85, +167, 47,209, 25,124, 54,106,237,100, 32,138,182,237, 13, 66, 83, 13, 95, 92, 28,184,243, 87,119,104, 76,207, 27,175,157,233, 84, +171,214, 58,223,195,231, 0, 97,169, 51, 72, 70,193, 17,182,206,163,112, 91,103,151,178, 82,230, 44,134, 84,100,102,191, 91, 36, +101,213, 84,204,169,107,230, 36,175, 65, 73,116, 20, 75,205, 19,198,122, 13, 34,205,165, 74, 91, 44,213,107,229,205,160,190,114, + 85,186,206, 19, 0,163, 72, 85,102, 76,136,173, 22,201,133, 16,180, 79, 91,107,197, 27, 79,117,149, 34, 21, 17,139, 55,142, 98, +202, 92,230,215, 91,115, 49,250,178,107,141,165, 24,139, 17,193, 20, 77,219,106,152,195,227,157, 82,219,244, 97, 57, 75,102,188, +165, 68, 8,157,213,127, 87, 81, 55,124, 45,234,127,182,179,111,222, 27, 75,156,247,207, 82,138,142,231,106,213,180,172,179,148, + 25,225,105,157, 42,105,253,156,176,172,200, 44,159,201,216,224,121,235,214, 25,247, 30,254,138,163,213,111,227,221,130,188,159, +152,134, 75,134, 60,210, 46, 12,173, 77, 92, 92, 94,206,252,226,231, 99,100, 93, 31, 24,163, 10, 90,106,165, 22,131, 15, 13, 16, + 8,141, 69, 14,208,228,249, 27,194, 10,165,241, 56,177,212, 98,249,173,111,127,151,171,243, 59, 76, 99,194, 89, 75, 44, 66, 46, + 69, 43,140,190, 97,181, 58, 34,229,145, 20, 39,140,169,164,212,147,147,197,206, 19,155, 54,104,132,230,206,221,207,121,122,222, +210,120,199,245,211, 99,182,251,158,102,113,198,247,254,254,239,146, 77,100,187,223,209, 95, 93,240,120,215,107, 47,159, 17, 41, +130, 21, 33,180, 29,103,215,110, 16, 39,224,201,136, 12, 3,110,181,162, 9, 29,116,134, 27,199, 27,222,187,245, 38,171,227,142, +191,254,171,159,113,247,206, 93,174,250, 61,211, 52,114,118,237, 6,239,127,251, 45, 62,253,228, 62, 34,153,195, 40,220,121,240, +144, 88, 70, 36, 39, 22,139, 35, 36,171,139,222, 86, 33, 75, 81,200,137, 1,211,122,165,250,145, 89,122, 85,254, 38,147,184,254, +202, 43, 60,184,251,128,187,159,126,194, 98,179,226,123,223,253,144,227,179, 51,198,237,196,163,123,119,184,127,255,115,190,253, +238,251,200,238,138,187,207,158, 32,113,164, 79,115, 90,124,230,140, 99, 42, 82, 34,103, 39, 27, 62,252,189,223,225,230, 75, 55, + 48,165,146,104,180,206, 40,218, 79,150,100,120,231,214,155,156, 28,159,240,232,225, 51,126,245,227, 31, 51,164, 17,177, 42, 27, +122,158, 34, 52,117,102, 74, 80,231,240,165,186,203, 91,187,224,173,183,222,227,253, 15, 62, 32,203, 72, 38,211,199,204,141, 55, +222,226,179,175, 62,229,114,187,229,229,235,175,176, 27,133,111, 95,155,248,224,253, 55,249,171,191,254,132,195, 94, 39, 13,139, +197,138,206, 7,154,174,197,225, 9, 77,199,249, 46,243,236,201,192, 7,239,189,199, 34,252, 25,125,127, 78, 51, 59,231, 99,108, +121,213,111,168, 33, 83,114,196, 73, 67,168,153,215,222,122, 23,131,229, 23, 31,253,152, 24, 39,156, 88,205, 85, 88,125,104,196, + 82,192, 20,170, 24,154,224,230,166,129,138,149,118,211,158,224, 58, 68, 60, 77,227,233, 66,199, 48, 30, 24,251, 11,242,164,104, +221, 44,149, 96, 50,182, 86,245, 68, 56,143,179, 22, 59,135,103, 73,117,246, 76, 23,178,171, 26, 74,117, 6, 68, 15,159,141,107, +184,255,228, 25,159,223,185,199,217,201, 17,143,118,129, 58, 65,176, 69,167, 51,226, 73, 18,117,133,103, 42, 62, 42, 3, 62, 51, +225,237, 66,205,107,141,135,160,159, 51,174, 98,109,160,193,145,108,166, 24, 71,231, 90,162, 76, 24,201, 76, 51, 81,178,105, 44, +185, 36,178,129,154,213, 58, 41, 73,159, 97, 54, 88,166, 52, 96, 75,192,165, 22,150, 13,102, 42,248, 88, 25,131,208,181,150, 69, + 13,140, 43,149,185,148, 54,225, 59, 71,119, 48,179,231,194,176,104, 90,226,209,154,193,122,226,206, 19,142,143,216,173, 61,117, + 15,206, 44, 25,125,199,101,132, 56, 56,182,219, 75,134, 81, 45,120,151,253, 64,205, 61,167,103, 27,178,129,254,226, 10, 72, 12, +162,158,137,165,255, 6, 7, 93,163, 33, 0, 92, 61,127,185,126,163, 39,158, 51,152,249,159, 31, 43,172,191, 33, 90,247,117,102, + 87,152, 66, 54,137,110,179,224,157,163,192, 2,157, 40,132,206,113,242,141, 94,125,119,228,191, 86,189,206, 67,196,111, 0, 0, + 32, 0, 73, 68, 65, 84, 6, 75,177,134,105,126, 33,231,153, 19,182,156, 47,224,187, 65,184,188,184,132, 44,152,226, 24,135,204, +148, 42, 46,232,115, 93,210, 44,212,124,158,238,151,249,157,111,254,227, 47,250,223,108,185, 27,169,196,148, 84,116, 70, 65,156, + 37,143, 66, 91, 58,146,107, 72,131,157, 51, 36, 21, 87, 91,162,201, 76, 68,188,175, 36, 1,159, 28,113, 40, 44,143, 13,190, 57, +101,251,244, 9,141,201, 52,174,161,207,149,106, 28,248, 60,191, 31,149, 67, 33, 8, 37, 30,244, 0,236, 26, 44, 22,153, 43,167, + 18, 15,122, 17, 53,149,215, 95, 95,115,237,157,127,192,176, 23,138,236, 40,163, 50, 24,180, 17, 96, 44,150,175, 57,233, 50,203, +142, 53, 32, 46,243, 11, 83,230,112,141,222,200,125,208, 31,168, 42,147,254, 51, 70, 89,241,122, 65,183, 84,209, 68,108,148,129, + 90,131,134,227,140,204,120, 26,189,237,171, 81, 77,230, 17, 47,207,211,112, 56, 87, 53, 20, 87,133, 58,239,252, 93, 80,137,132, +195, 81,171,238,210,189,117,234, 98,151, 66, 99, 33, 74,129, 10, 78,192,250, 74, 78,149,214,233,169, 88,114, 65, 92,160,206,227, +124, 77,249,139,214,223,108,157,129, 41, 30,178, 50,228,109,167,228,184,106, 10,166,232, 3,180,186, 10,190, 34,105,198, 23,250, + 74,202,138,200,245,182,146, 77, 69,170, 39, 4, 71,107, 69, 43,117,212,121,207,175,161,195, 62, 37,108, 12, 44,218,160,201, 99, +128,154,145,169,208, 46,142,121,121,189,229,215, 63,251, 19, 76, 56,194,134,134, 16, 26,186,176,160, 91,172,233,150,158,107,103, + 71,132,174,101, 28, 19,125, 63,204,250,219,249, 86,231,244,198, 98,208, 61,230,106,115,196,171,111,188,205,195,123,159, 51,140, +145,165,135, 85,112,244,117, 66,106,228,157, 91,183,184,253,234,107,252,241, 47,127,196,229,118, 71,219, 46, 84,191, 91,170,126, + 54, 70,200,101,164, 36, 61, 52,104, 54, 98, 22, 60,216, 25,182, 35,145,106, 97,123,245,144,221, 54,224,188,229,230,181,150,221, +213, 21,239,222,126,151, 38, 44, 41, 87, 61,139,234,105,143,174,115,116,221,146,134,145,106, 35,229, 32, 80, 71,206,175,118, 60, +186,251, 21,190,105,200,189,130, 81,138,113, 84,211, 18,235,200, 38, 44,185,118,124,198,230,248, 24,186, 83,222,252,214,117,188, +111, 24,251, 29,171,227, 13,203,197, 41,199,103,194, 7,223,218,240,206,237, 3,191,248,245, 47,185,184, 18,108,163,211, 33,140, +157,201,132,202,222,214, 3,170,101, 26,138,238,220,112,164, 56,177, 94, 46, 56, 94, 93,103,119, 56,240,240,206,167,124,239,187, +255,136, 55,223,123,155,166,209,207,192, 28, 85,238, 62,254,130,195,213, 72,124,169,114,242,210, 13,238, 95,221, 39, 71,157, 38, +121, 58, 76,233,137, 57, 33, 89,153, 9,175,190,113,155,147,213, 25,121, 44,212,214,226,115, 85,141,172,245, 88, 35, 76, 73,153, +207,157,107,121,233,236,136, 79, 22, 75, 44,208,182, 65,167, 63, 89,213,157,243, 23,159, 16, 2,222, 5,140,169,132,160, 80,166, +237,110, 75,174, 3,217,232, 33, 49, 69,189,149,157, 94,191,206,195,123,143,121,227,198,107, 28,164, 97,219,239,248,189,239,189, + 77,145,235, 88, 43, 92,108,159,114,255,254,231, 84,175,173, 14,103, 33,180,129,221,110,224,231,191,252,132,127,240,143,190,199, + 91,111,223,228,231, 63,123,132, 44,175,115,180,110,185,118, 20,177,193,130,243,116, 38,208,167,200,141, 83,203,155,111,222,230, +139,179, 83, 86,235, 51,254,250,103, 63,100,183,189,192,214,140, 45,173,190, 0,141,209,238,185, 8, 5,253,121, 47, 85,176, 77, +171,187,235, 97,160,109,215,180, 97,193, 48,237,217, 79,189, 30,124,210,132, 9,110,158, 74,105, 45,179,193,145,171, 46,198,152, + 10,213,234,158,182, 72,197, 25,247,226,223, 93,171, 1,215, 16, 40, 56, 87, 25, 73,252,240, 39,159,242,237,183,110,177,244,107, +182,195,158,208, 4, 16, 33,214,136, 95,120,106,178,212,152,193, 38,124,104,201,217,208, 89,129,174, 85,227, 99, 78, 76, 57,225, +218, 14,151,133, 98, 50, 62, 55,136,205,180, 11, 71, 25,148,189,225,124, 67,200,115,117,116,244,170,118, 54,134, 18, 45,166, 22, +106,227, 48, 46,195,193,235,215,223, 27,210, 48, 81,131,199, 53,134,206, 27,108, 50,196, 18, 48,238, 64, 49, 81,221, 25, 7,161, + 13, 75,202,243, 29,250,210,177, 92,183,140, 9, 22, 93,203,245, 27, 45,226, 96,111, 45,203,182,229,205, 83, 61,248,127,190,241, + 60,245,150,184,246, 92,141,117,174,131, 53,236, 14, 14,151, 18,233,252, 64, 28, 35,197, 20, 22,222,243,248,217, 64,117,151,136, +241,108,135, 9,183, 94, 98,214, 29,206, 85,236, 88,160, 13, 74,225,172,186,246,120, 33, 75,145,175,189,228, 0,251, 4, 37,141, + 72, 1, 41,150, 96,194, 11, 43, 90, 6, 22,223, 0,203, 57,244,133,253,252,127,126,108,121,161,242,254, 90,177,102, 94,176,232, +218,206, 34,206, 33,162,111,251,118,181,164,204, 47,244, 61,186, 67,223,204, 19, 5, 3, 92, 13,149,198,131,107,117,205,155,250, + 74, 87,133,118,165, 97,174, 90, 32, 77,137,197,194,235, 10,192,192,216, 15, 80, 53,204,150,146,134,122,107, 83, 57, 92,237, 49, + 36,196, 70,188,141, 28,246, 25,187, 57, 33, 48, 80,198,145,140, 33,197,158, 28,139, 6,177, 99, 70,124, 37,212,105,198,172, 43, +122, 56, 90,139,165,208, 58, 67, 52, 80, 37,227,154,134, 84, 58, 76,142,148,146, 52,192,233,188, 78,141,107,165,150, 21,214, 78, +124,240,238,187, 28,127,255,191,228,203,143,239,243,244,203, 31, 98,242,132,151,250,252, 37,172, 1, 26, 59,143,188,235,236, 35, + 47,250,211, 65,145,138,113,141, 42, 35,141, 90,154, 76,173, 26,146, 50, 22,239, 20, 7,235, 85, 72,174,187,229, 96,217,156, 94, +199, 15, 91,158, 92, 13, 84,167, 99,120,176,138,127,116, 16,139,158,132,236,204,187, 5,139,179, 96,108, 70,202,115,233,138, 2, + 58,100, 14,213,213, 90,245,219,193, 5,172, 55,212,156, 72, 89,107,110,166,234,184, 29, 28,146, 52,161,158, 4,178, 88,173, 43, + 80,168,104, 2, 48, 87, 69,212,106, 93,194, 32, 89,171, 35,198, 25,154,249,207,145,178, 96,189,135, 90, 41, 89,244,247, 84, 11, +181,212,185, 34,103,213,189, 92, 53,124,209,200, 12,199, 49,150,132, 30, 8, 26,103,168, 98, 73, 78,141,108, 4, 13, 63, 76, 53, + 19,138, 66,103,138, 87,146,217,144,133,213,233,154,183, 23, 13,219,126, 96, 40, 61,227,225,156,253, 46,243,224, 1,108, 95, 62, +227,165, 91, 47,177, 62, 63,112,247,201,142, 49, 85, 92, 26,245,179,152,119, 82,207,157, 74,205,106,197,230,228, 8, 25, 71,188, + 51,220,190,245, 38,199, 97,131,233, 84,184,179, 92,108, 56, 61, 89,114,181,187,228,203, 59,247, 20,192,243,252,246,111, 52,197, +236,168,164,148, 94, 16,150,157,209,151,125,174,149, 82,193, 24,253, 90,138,168, 5,173, 9, 30,219, 58, 62,254,236, 17,235,245, + 13, 94,191,117,139, 47, 31,124,197,210,117, 20,233, 33, 26,194,114, 65,168, 13, 11,211, 48,173, 71,118,135,204,122,177, 34,183, + 45, 93,215, 82,143,133, 56, 70, 44, 69, 31,116,178,160,138,193, 47, 4,161,231,217,179, 61,105, 59,226, 27,203,208, 79, 8,133, + 95,255,170,195,135,150,213,241, 41,255,244, 15,255, 33,201, 28,248,241, 95,126,164,243, 66,107,136,227, 56,147, 16,245,176, 88, +234,188, 18, 17, 33,215,162,120, 78, 12,135,105,228,246, 27, 55,185,118,122,194,131, 59,159,114,116,227, 37,174,159,156,210, 15, +122,208,160, 86,190,248,245, 39,236,134, 29,155,227, 99,190,188,147, 41, 9, 53,156,121,143,171,129, 96,245,231,197, 89, 75,104, + 22,124,241,249, 23,124,242,233,103,188,246,210,171,252,224,195,223,194,217, 66, 31, 29,182, 17,166, 84, 72, 53,233, 33, 35,234, + 62, 63, 52, 1, 59, 25, 36, 38,172,109, 41,161,170, 88,200,104,184, 12,171, 2, 18,231,156,234, 12,178, 38,122, 75, 18, 76,227, + 24,134,145, 50, 70,186, 16,120,249,250,171,252,245,189, 31,113, 49, 92,112,188, 58,229,206, 87,143,248,238,135, 7, 94,125,229, +152,161,102, 22, 71, 29, 79, 30,222,215,145,102,176,232, 19, 0,164,142, 60,184, 56,231,149,151,110,240,225,123,239,113,231, 78, +207,247,126,251, 59,172,164,240,159,255,195,247,121, 50, 86,254,244, 79,126,201, 97,191,195,251,145, 15,222,122,159,247,223, 56, +227,181,151,175,225, 28, 92,110,159,240,241, 95,253, 8,103, 61, 98, 5,227,220,220, 38, 49,200,156, 57, 41, 49,225,189,161,228, +168,181,211, 92, 41,174, 48, 12, 17, 91, 71,114,234,145, 25,126, 83,167,252,194, 32,232, 28,140,162,193, 61, 55,163,155,181,178, +234, 17,169, 90, 75,156,167, 25,136,144, 25, 24, 71, 71,215,181, 52, 62,112,185,235,249,232,147,251, 92, 59,189,137,245,122,203, +244,238,136,106, 7, 98,158,176,198,227, 91, 67,118, 42,217,176, 38, 80,172,193,228, 9, 75, 59,115, 61, 44,117, 72, 84,239,136, + 21, 54,193,208, 15, 5,107, 35,206,174, 64, 70, 24, 43, 9,160,232,228,175,241, 66, 9, 80, 14, 3,193, 4, 74,244,184, 54,210, +174,244, 79, 54, 38, 33, 88,237, 57,247,131,208, 82,241,141,103,178, 7,150, 29,152,148, 40,209, 16,173,197,120, 21,237,228, 88, +168,255, 15, 95,111,246, 99, 87,150,157,249,253,214,218,123,159,115,238, 16, 17,140, 32, 51, 73, 38,153, 67,101,149,170, 84,115, +201, 37, 27, 18, 90,106,117, 11, 6, 26,240,147, 95,140,126,233,127,202,143, 54, 96,192,232, 23,191, 88,134,219, 13,195,237,182, + 44, 72,109, 89,182,212,173, 42,149,106, 72,101,229,156, 36,147, 12, 50, 24,211, 29,206,176, 39, 63,172, 19,204,148, 0,247, 27, + 25, 36,131,113,239, 61,231,236, 53,124,223,239, 19, 79, 74,149,184,139, 54,149, 72,118,217, 19,133,131,240, 37, 59,189,164, 74, +235,148,117, 23,104, 3,236,199, 5,254,104, 9,235, 0, 19,188,232,119,164,139, 51,210, 84,209,133,178,186,117,135,253,241, 17, +155,125, 70, 38,199, 11, 9,124, 17,177, 0,147,151,123,198,126, 65,219, 52,108,198,129,113,191, 35, 31,118,100,148, 93,204,172, +214, 13,139,131, 6, 28,196,109, 34,237,182,140,113,196, 59,135,247,198,213,152, 99,184,204, 55,207,151,137,108, 58, 11,229,248, +143,128,100,229,171, 81,177, 53, 91, 19, 42,133, 59,235, 37,203,175,140,214,215,221,151, 42,252, 2, 28,172,228,213,247,206,192, +212,152, 23,252,102,192,220, 23,184, 76,208,102,155, 8, 76, 3, 92,156,245,236,243, 64, 85,111,236,253, 98, 52, 71,173,133,236, +161, 40, 70, 10,213,204,216,159,163,123,179,228,225, 64, 39,107, 36, 93,137, 56,239, 72, 98,241,227, 58,245, 12,213, 32, 69,181, + 38,139, 33,151, 6, 77, 38, 12, 78,195, 22,157,181, 87, 74,162,117, 29,149,137, 84,123,106,113,160,153,224, 60,239,190,243, 26, +175,127,103,197,211,243,219,180, 23, 29,154, 34, 94,171,237,147,115, 49,111, 40,115, 74,154, 58,179,158,152, 50,205,112,176, 55, +239,228,152,204,102,150,170,237,158,188, 51,225,145, 24,134,157, 60,171,218,107, 14,132,118, 65,147,246, 38,164,210, 74, 46,206, + 64, 54, 20, 26, 47,184, 57,163,221, 7, 43, 18, 10,118,104,203, 92,145,219,120,220,161,126, 30,101, 87,219,185, 57,175,148, 20, +137,179,239,253,102, 2,224,157,204,234,122,235,254, 27, 60,144, 72, 84,200, 74,118, 22,187, 26,102,193, 84,117, 66, 35,206, 86, + 2, 10, 99,177,162, 69,156,163,162,120,141,120, 49,141, 65,240,144,139,237,101, 27,231, 77,241, 62, 36, 92,107,235, 8, 37, 80, + 92,124,101,123,115,170, 72, 19, 40, 14,210, 56,153,136, 37, 64,171, 74,163,222, 84,186,185,216,191, 47, 66,174,246,128,238,113, + 44,219,142,245,194,177, 42, 14,110,217, 5,185,221, 90, 20,231, 56, 86,190,120,113,197,182, 31,168,117,196,169, 21, 61,175,162, +239, 68, 56, 60,186,197,235,175,221, 99,181, 92, 51,244,137,126, 63, 18,215, 19, 79, 47, 30,113,231,248,136,215, 31,188,205, 98, +153,121,255,151,127,197,175,127,245, 75, 62,127,250, 20,117, 86,188, 8,197,184, 2,213,168,117, 82,138, 37, 67,137,152,126, 64, + 5, 63, 95, 55, 34, 5, 55, 19,161,106,206,164,172,248,228,240,135, 7,252,222,239,252, 1,107,223,178,115, 3,186, 86,114,239, + 17,215, 82,138,210, 28, 89, 92,237,254,202,118,164, 37, 77,228, 4,131, 14, 38, 62,164,210,116, 13, 33, 4, 66, 14,180, 30, 14, + 78, 60, 7,238,144,117,179, 70, 95,119, 52,173, 99,220, 23,174,166, 61,251,235,115, 54,219,137,183,111, 47,217, 95, 63,225,229, +211,103,168,122,170,247, 76,211,254,213, 77,155,171,145, 0,107, 45,132,102,129,111,221,172, 19, 49,213,178,122,207,203,235,103, + 60,124,240,144, 91,135,183,249,197,207,255, 3,206, 21, 3, 66,184,150,203, 93,207,179, 23, 79, 56, 58,185,195,213,126,195,211, +103,143,161, 84,170, 4, 90,117,164, 34,236,243, 96,107,153, 10,164,194, 56, 68,166, 56,241,233,240, 41,111, 60,124,157,251,247, +222, 32,151,194,180, 27, 73, 34,116, 97, 69,210,129,208, 65, 63, 86,106,205,228,152,192, 41,146, 38, 76,215, 87, 77, 52, 90,157, +125, 30,179,232,202, 8,117,194, 40, 66,174, 19,139,157,103,168,106, 36,186,154, 89, 30, 29,114,116,120,204,233,139, 51,110,127, +253, 62, 47, 55,129,167,167,207, 41,181,240,236,179,107, 78,238,189,201,250,224,136,139,243, 83, 36, 55,116,115, 12, 40, 77,224, +131,247, 31,241,254,251, 31,242,163,255,236,183,248,225,143,127,139,111,125,243, 1,255,227,255,252,191,241,191,252,171, 63,165, + 31, 71,222,255,236, 11,150,139, 35,222,124,227, 30, 87,151, 35, 67,206, 12,187, 11,116,120,206,119,191,253, 13,158,124,246,107, +174,174, 54,116, 4,242, 20, 9, 98,154, 24,180,190,242,240,215, 92,190,212,244,136, 90,224,135, 84,242, 52, 18,167,105,214,219, +204, 76, 9, 28,170,217,182, 17, 21,188,187, 57, 24,172,112, 19,169,136,218,115, 64,146, 82,196,248,226, 82,153,125,244, 80,147, +224, 29,236,118, 35,185,110,185,119,239,117,146, 86, 50, 91,179,139,166,134, 28, 50,213,183, 4, 2, 46,155, 96, 74, 91,193,213, +209,214, 70,227,132, 72,160,107, 29,217,108, 50,108,250, 17,231,139, 81, 96,221, 14,151, 6,208, 9, 93,118, 72,156, 44,205,177, + 40,211, 62,226,180,226,138, 32,101, 98,234, 43,226, 12,211,234,150,149, 26,231,128,161,156,169,185, 97, 40, 9,183, 44,228,216, +210, 72, 99, 57,218,165, 82,119,133, 26,148,182,107,112, 37, 51, 93, 92, 48,245, 6,125, 98,154, 31, 5, 99, 69, 87, 95, 30,137, +165, 86,156, 24,170,116, 55, 20,198,126, 96,117,176,194, 13, 70,190, 78,177,103,170,149, 28, 11,237,210,113,251,100, 73, 88, 11, +135, 75,207,216,122,190,126,104, 77,243,163,234, 56,243,135, 12,107,184,206,208,239,141,117, 50,101,235,144,199,113, 79, 68,209, + 28,168, 21,182,207, 46,137,211, 96, 20,207, 6,246,187, 29, 47,174, 70,212, 53, 12,113,130,206,193,194,191, 26,143,231, 27, 95, +245,108,105,107,255, 35,217,234,187, 49, 49,236, 7, 10, 19, 94,133,182,253,251,208, 87,253, 7,191,254,234, 20, 32,204,207,116, +153,253,244, 8, 44, 91,184,213,134, 87, 35,248,125,128,151, 39,135,240,129, 18, 68,184, 30, 54,116, 41, 34,105,207,232, 42,208, +146,182, 61, 73, 18,197, 21,220,222, 92, 43, 97,117, 11,145,145,202, 14,145, 68,236,133,237,184,131,225,140, 28, 39, 3, 13, 21, +135,211, 53,232,104,133,116, 30,209,154, 9,218, 18,107, 32,165, 17, 69, 73, 8,169,246,132,162, 68, 73, 64, 34, 87,143, 47,153, + 59,171, 3, 90, 32,244, 17,250,202, 88, 21, 95,196,212,227,222,155,122,182,224,237,225, 86,211,172,120,247, 56, 95,240,174,218, +222, 68,101,206, 53,159, 44, 61, 77, 60,181,220,220, 60,118, 16,168, 81, 99, 16, 34, 47, 30,125, 65,213,106,232, 73,249, 74,149, +229,205, 30,102,149,183, 29,104, 22,228, 98,192, 20, 81,143, 56,243, 76,103, 49, 21,117,112, 66, 77, 51,162, 53,207, 75,155,153, + 84, 87, 36, 19, 75,161,157, 11,128,169, 36, 2, 58, 71,190, 90, 72,139,175,142, 92, 48, 59,136,128,102, 35,219, 85,181,241, 93, + 85,193, 37,157,199, 59,201,246,247,115,132, 43,181, 32,173, 39, 36, 19, 0,170, 42,171, 32,228, 34, 20,230,174,214, 65, 28, 65, +171, 37,222, 81, 10,105,204,102, 67,114, 14,173,113, 94, 73, 8, 77,211, 18,107,154,145, 78,102,127,203,238, 38,220,166,204,187, +102, 71,156,234, 92,197, 65,183,236, 32, 10,251,161,103, 24,109,199,234,213,145,138, 49,235, 13,220, 97,135,100,183, 88, 48,238, +206,249,248,195,191,225,254,253,175,147,199,204,243, 47, 78,233, 14,148,187,247,191, 73,186,126,201,159,252,233,255,197,207, 63, +124,143,113,200,228,106,246, 46,153,163, 97,197, 9,174,204,193, 53,197,210,170, 42, 86,208, 84, 49,242, 20,243,103, 22, 93,153, +201,126, 6, 40, 72,185,242,214, 91,191, 65, 88, 52,156, 62,191, 32, 44, 26, 98, 63,226,107,135, 54, 48,140,145, 38, 22,174,174, + 71,210,104,249,224,197, 53,144, 38,106,246, 20,111,240,139, 69,109, 17, 17, 58,175, 44,188, 99,216, 65, 88, 69, 88, 8,187,109, +207, 69, 63, 34, 69,105, 91, 71,115,112,135, 7,111,220,226, 31,253,206,111,240,201,175,127, 9,210,144,189,162,190,208,213,134, + 44,142,137, 74,238,123,198,113,164,233, 26,139,188, 44,137,156, 11, 65, 90,211, 66, 36,199,246,242,154,103, 95,124,198,119,191, +255, 99,126,254,183,191,224,207,254,207,255,149,197,122, 73,208, 5, 85,132, 7,111,190,203,189,251,111,240,222,207,127,194,229, +139, 83, 92, 19,112, 10, 67, 63, 80,141, 48,140,160, 76, 41,177, 79,145,162,214, 85,199, 92,248,228,211, 71, 28, 31, 31, 19, 17, +164, 22, 59,148,102,173, 9, 89, 89,132,194, 55,126,227, 29,206,175,182, 44,125,192, 21,161, 52,142, 71, 79,158,176,219,238, 16, +231,205,245, 32, 55, 76, 4,101,210, 66,158,172,240,220,105, 65,163,208, 74, 32, 74, 66,125,224,222,253, 55,249,228,209,175, 89, +181, 31,177,219,140, 60,126,178,161,143, 31,115,121,177,231,181,211, 83,142,143,143, 57,123, 89, 40, 83, 68,186, 5,177, 38, 68, +225,241,211, 43,254,213,191,249, 63,248,175,254,203,127,198,249,203, 45,255,245,127,243, 63,240,211, 95,124,196,110,211,227,170, +231,224,232,144,227,213, 49,187, 77,230,175,127,242,136,197,226, 47,249,226,209, 99,190,247,131,239,240,253,215, 30,114,117,241, +125,254,237,255,254,127,147, 98, 37,231, 4,193, 25, 43,162, 78, 72,182,144, 10,211,225, 22,212, 89,242, 98, 45,133, 52, 12,228, +156,240, 85, 13,175, 91,197, 92, 43,154,173, 48,159,175,199,224,220, 92,208,207,189, 71,101, 22,248,154,104,215,116, 58,214, 24, +148, 42,244, 83,164, 9, 1,147,202, 36,246,187, 11, 46,175, 60,183,110,223,166,138, 77,232, 74,205,180,206, 19, 83, 37, 53,153, + 86, 42, 83,206,140,219,194, 66, 27,138,236, 17,239,105,218, 3, 92, 26,233,199, 72, 77, 5, 23, 20,218,128,196,134,117,169,108, +176, 9,160, 27, 43, 94, 43, 62, 44, 24,174, 35, 53, 39,194,177, 35,237,204,235,172,186,194,171, 41,229,157, 0, 83,198,217,248, + 18,105,148, 80, 65, 6, 33, 39,199, 94, 71,104, 35,153,150,181, 46, 24,114,198, 73, 97,191,175,164,167, 27,166, 56,178,110, 22, + 60, 31, 2,161, 49,113,223,245,201,146, 5, 75,162, 42,195,249, 30,169, 35,190, 58, 26,169, 76, 53,227,196,152, 9,105,152,144, +212,227,213,132,121,190, 10, 33,216,136,122, 63,193,162,124, 25,192,214, 22, 35, 56, 30,118,176, 1,210,232, 57, 88,174,240, 71, + 75,166,177, 66, 73,116,119, 23, 52,141,253,131,243, 77,103,200,106, 87,104,213, 17,155, 53,159,187, 57,240,231, 42,178,219,140, + 28, 30,172,112, 8,187,253, 68, 93, 5, 14,150,142, 22,136,251,204,113,107, 60, 2, 17,131, 24,217, 36,215,238,129,105, 28, 41, +105,100, 28, 35, 7,141,167,105,220,255,111, 46,122,153,187,243,240, 15, 16,176, 95,253,125,154, 39, 8,242, 21, 14,124, 29, 19, +227, 16,233,247, 3,149,145, 73, 33, 54,138,139,137,234,123,100,154, 40,125, 75,146,129,214, 5, 19,106,199, 61,212, 1,180, 34, +177, 80, 73, 76,185,101, 74,209, 52, 79, 69,112,161,162, 50,146,103,138,165,196, 74, 85,103,105,118,217, 65,241, 84, 77,212,226, + 13, 1,238, 21, 98, 32,168, 37,222, 45, 58, 97, 29,132, 1, 72,113, 32, 75, 38, 8,120,170,249,203,185,177,250, 84,243,212, 82, + 29,206, 87,106,174,166, 40,143,198,236,206, 55, 8,189, 36,179, 72,125,142,239,155,163,213, 67, 8,212, 92,172, 99,244,182, 35, + 23,153,243,198,113,160,201, 70,246,217, 89,125, 36, 38, 99,213, 92,113,248, 89,145, 81,173,170, 46,166,104,167, 8, 89, 1,157, + 87, 2, 21,163,199, 57,179,171,196,106,140,250, 82, 19, 17,103, 64,135,170,134,244, 3,130, 26,235,125,114,149,160,246,134,166, + 98, 99, 61, 45,118,211,122, 28,161,129,224,149, 88, 12,119,169,181,154, 98,218, 57,180,152,241,211,205, 73, 58,137, 68, 42, 51, +192, 35,151, 89, 83,144, 76,132, 17, 44,140, 34,107,197, 21,251,243, 27,223,189,159, 67, 93,118,195,136,243,106,130,185,105,206, +146, 22, 83,124,150, 70,137, 99,161,109, 59,104, 10,169,239, 13,250,147,236, 51, 25,134,158,148, 71, 27, 89,206, 35,241, 92,103, + 57,171,152,149,175,107, 27,218,133,231,229,243,207,249,252,195,247, 17,231, 56, 56, 60,100,181, 62,228,242,197, 11,190,120,244, + 49,103, 23, 87,196,100,193, 48, 94,237, 82, 54,208,198,108, 99, 17,219, 93, 21,245,148, 57, 51,190, 9, 45,119, 95, 59,161, 93, + 6,203,166,159, 42, 69, 76,237,190,221,141,196,156, 88, 29, 30,112,239,248, 30, 47,175,246,140,174,112, 84, 19, 50, 20,122,245, + 52,101, 98,218,103,188,107,184,115,247, 1, 31,255,221,223,176, 62,186, 69, 61, 90,179,189,188,196, 57,207,225,193, 9, 39,247, + 79, 72,174,240,242,249, 19,182,195,134,186,110, 89,234, 33, 90, 2, 87,187, 61,203,195, 91,116,154, 24,251, 17,159, 38, 70, 15, + 15,223,188, 77,191,189,224,209,227,151,132,238, 0, 39,167,104,130, 50,227, 80,115, 52, 39,134,118, 13,161, 93,128, 84,114, 54, +155,163,107,221,172,138,207,224,132, 79, 63,127,204, 23,103,167, 48, 37,210, 48,177,190,243, 38,183,110,157, 64,104,153,210,200, +255,251, 23,255,142, 28, 51, 77,232, 40, 57, 83,181, 24,162,182,223, 19,179,129,114,210,124,168, 84,148,170, 6,107,186,190,220, +178,185,222,114,120,112,196, 24, 42, 82,148, 41, 70,100, 37, 4, 7,107,127,192, 55,126,227,219, 16, 71, 66,178,117,149, 4,199, +110,219,179,187,218, 32,110,142, 64,158, 29, 34, 57,219, 97,144,211,192,208, 23,203, 30,200,150,174, 54,104,182,117,135,111,105, + 23, 11, 78, 47, 47,241,201, 49,228, 96,157,230, 26,158, 63,125,196,234,240,144,166, 13,148, 26, 25,163, 50,196,209,162, 36,181, +225,227, 15, 46,249,111,255,187, 63,226,211, 79,207,216,150,202, 65,115,200,173,213,138,234,148,197,162, 33, 28,174,233, 55, 19, + 87,189,240,233,135,215,220, 58, 58,226, 15,127,255,135,156,159,245,252,238, 15,190,207,175,254,246, 67, 62,127,246,212, 18,204, + 74, 69, 66, 67,238, 51, 34,145, 86,149, 8, 76, 53,226,146,117,158,130, 93,103, 69, 60, 56, 67,154, 72, 6,167,106,107, 10,241, +166, 1,154, 57, 18,206,219,164,162,148, 74, 8,134,179,166,202,171, 53,146, 83, 3, 95, 49,147, 50,243, 56,160,221,138, 82, 18, +101,152, 56, 63,115,172,143,110,209,122, 99,103, 72,235,169,162, 52, 2,105, 28,152, 26,187,255,125, 54,173, 17,190,179,232,231, +146, 40,121,154, 95,211,124, 10,228,142,152,122, 44,223,210,132,168, 26,102, 4,109, 63,145, 67, 65,157, 39,245,149, 82, 6,252, + 34, 64, 25,169,222, 19,180,176,159, 18, 53, 7, 80,199,202, 23,162,102,166, 88,233,154,195,249,190,172, 22, 89, 92, 18,181,141, + 48, 9,135,221,130,219,183,239, 35,171,187, 92, 95, 94, 34,235,142,225, 78, 71, 63, 86,210,147,137, 39, 23, 27,158,238, 12,102, + 52,109,174,241,237,130,221,246,154, 52,244, 12,211, 57,157,142, 56,237,216,239,123,166,161,103,146,121,175,171, 38, 0,102, 86, +186, 31,126, 69, 61, 22, 13, 73, 63,191, 78,251,130, 48, 18,164, 49, 69,191, 10, 39, 65, 8, 24, 28, 70, 99,164,143, 19,219,148, + 89,174, 58,110,221, 94,225,214,106, 33, 36,105, 65, 8,208,175, 28, 53,131,147,150,215, 14,141, 12, 58, 2,251,198, 60,246,141, + 13, 10,185,188, 24,105, 93, 98,209, 5,114, 76,188,248,226, 37, 18, 11, 82,173,169, 27,250,129,197,218,226,107,166, 89,200,236, +189,190, 58,165,165,252,253,246, 93,255,193,120,127,156, 15,242,175, 30,250,113, 63,225, 90, 11, 77,242,172,241, 97,100,220,239, +153,118,150,172,201, 52, 33,181, 69,189, 50, 14,153, 80,149,212,122,198, 62,210, 0,213,123,188,207,116,139, 5,211,126,133,166, + 75,138, 55,171,120, 78,189,137,211,205,179,132,184,132, 74,139,142, 61, 34,129, 41,123, 60,145,166, 86, 6, 50,226,171,141, 59, + 72, 20,133,143, 31,159, 18,203, 51,174, 95,190,143,108, 35, 67, 4, 31,173,173,128, 98,225, 41,106,139,108, 19, 95,161,184, 27, +133,106, 1,211,130, 90,171,166,106, 27,240, 82,110,100,117, 70, 96,171,217, 70, 84,170, 16, 39,195,124,218,133,111, 93, 92, 41, +198, 62,119, 90, 64,189, 9,125,162, 69,171, 86,111,130,183, 89, 70, 55,231, 56, 43, 97,190,200,114,130,132,220,228,192,160,206, +104, 60,168,169,226,187,106,130, 56,227, 69,207,156,115, 53,101, 57,197, 65,181,200,205,224,173,194, 23, 39,175,164,144,149, 76, +140, 74,158,233,117,181, 64,118,230, 93, 53, 38, 61,212,166,224,146, 80,197,207,239,147, 21, 44, 81,237, 80, 20,159,161,192, 52, +152, 21,172, 83,103,129,246,129, 87, 52,189,154, 43,190, 83, 24,147, 17,210,170, 34, 76, 56,231,172, 91, 44, 21,179,146,218, 78, +213,226,116, 29,174, 6, 38, 73, 56,173,102, 37, 43,133,206, 55, 22,154,131,220,212, 70,228,148,172,171,111, 58,163, 95, 21,153, +193, 64,145, 54, 6,142,221, 17,103, 47,191,224,229,213, 37, 5,104,187,134, 92,235,172,202,181, 7,144,159, 85,244, 55, 49,172, +162, 50, 67, 52, 18, 93, 27,248,222,119,191,203,242, 48,240,226,197, 5,169, 70,222,122,248,144,213, 98,201,199,159,124,198, 79, +126,242,115,110,223,186,199,195,119,191,195,233, 23, 31,153,250,184,117,196, 41,225,194, 64,223, 79,140,185,242,237,111,252,136, +147, 3,248, 55,255,250,231,108,119, 61,222, 59,138, 42, 33,116, 28,174,143,121,227,193,155,118, 99, 78, 3, 85, 2, 11,109, 56, +186,187,230,162,223, 50,140, 61, 77, 92,210, 54, 43,154,133, 67,170,227,181,213,109, 94,191,123,196,211,103, 31,242,233,147, 79, + 89,250,150,160,193, 92, 5, 73, 73,197,148,218,200,172,145, 16,163,251, 53,174, 33, 89,196, 31, 93,219, 26,212,100, 24,232, 25, +209,177, 16, 84, 80,239,121,118,246,132,179, 23, 79, 12,169, 76,182,204,109,153, 87, 69,206,155, 7, 23,229,106,219,191,138, 40, +174, 89,236,189,195,214, 26,234,133,218, 56,134,169, 18,114, 34,180,129, 82, 10,157,182, 20, 96, 17,132, 90, 70,115,152,228,194, + 46, 13,172,154, 5,181,100,186,198, 96, 62,165, 84, 52,207,164,230, 90, 16, 18,162,118,191,185,160,182, 2,144,194,100, 40, 7, +134,105,195,167, 31,255, 10,113, 13, 18, 28, 77,211, 82, 82, 36,107,166,140,153,169, 76, 60, 59,125,108, 19,163,154,145,170,180, +161, 97,213, 52,108,211, 72, 14, 13,191,254,248, 12,239,148,147,163, 3,148,198,160, 48, 65,104,154, 5, 71,139, 35, 14,186,192, +229,117,143,200, 45, 67,140,166, 66,240,158,223,249, 79,190,205,251,159,127,198,127,255, 47,255, 39,218,101, 64,130,112,188,128, +218,172,120,118, 62,226, 60, 44,157, 67, 39,177,157,100,172,104,176,150, 80,147,209,214, 74, 52,117,176,101, 74,152, 42,184, 74, + 69,114,193,121, 37, 71, 8,162, 84, 41,228, 34, 52,206, 28, 56,206,153,176,208,214, 46,142,224,132,152, 50, 12,133, 92,118,168, + 42,190,105,137,169,103,220, 95,210, 29, 31,130, 19, 92,177, 7,116, 13, 43,202,126,164, 68,193,181,115, 1,213, 10,190, 4,219, +157, 78,201, 14,247,166,218, 36,207, 41, 37, 77,212, 16,232,227,104,207, 49,183,132, 49, 50,213, 68,179,114, 44,180, 35,230,129, +154, 58, 52, 12, 52, 85, 72, 9,180,107,140, 57, 48,237, 8, 11, 37,120,199,229,126,164, 45,106,121, 19,139, 66,147, 29,121, 47, +164,169, 71, 23,129, 90,150,184,234, 9,157, 71,124, 67,112,208,133,150,147,215, 91,222, 56,132,235, 34,124,122,181,228,160, 93, +144,151, 11,250,253, 72,215,182,188,246,230,138, 77,133,103,143, 19, 92,192,101, 81,242, 62,209, 15, 59,118, 49,145,182,213,138, + 45,205, 60,249,252, 57,242,212, 38, 55, 26, 90, 14,244,150, 49, 57,174, 19,203, 82,112,165,177, 2,170, 31,217,135, 61,185, 47, + 76,125, 65,107,195,225,108,112,122, 89, 97,191,143,140, 90, 40,162,180,206,209,181,142,251, 88,151,255,196, 9,185,181,213,174, + 83,179,198,221, 88,225, 10, 70,154,185, 51,119,207, 17,136, 39, 11, 86,150,105, 67, 95, 33,189,184,164, 31, 39, 38, 28,190,194, +181, 40,147, 49,207,216,109, 10,141, 66,123, 96,167,243, 48, 84,220, 16, 57, 57,110,152,135,138, 92, 92, 79, 44, 91,111,147,128, + 10,113,200, 44,194, 44,195,191,241,174, 79, 19,187,190, 82,138, 67,100,193,245,254,194,172,207,181,103,200, 35,101, 29,168, 87, + 61,178,203, 22,254,162,209, 58,235,153,103,146, 83, 71, 91, 38,130, 52,184, 42, 36,151,200,170,132,125, 38,137, 93, 63, 37, 26, +138, 88, 98, 33,106,143, 4, 99,168,120,103,244, 77,153, 85,248,140, 22,253,171,192,209, 90,144, 7, 15,184,112, 39,196,190, 16, +128, 73, 3,182, 81,152,253,228, 41,103,163,190,105,182,176,140, 60,119,236, 78,240, 26,140, 28, 87, 11,226,189,249,205,139,165, + 99,169, 24,109, 12, 81, 82,169,120, 53, 76,100, 77,144,179,137, 89,114, 41,184, 57, 41,230, 70,213,110,157, 82, 65, 84,105, 52, +224,212,120,243,126,190,121,111, 64, 49, 57,155,226, 79,252, 77, 80,139, 9,186,210,100,147,128, 90,132, 18, 42,204, 42,244, 66, +162,173, 74,214,106,234,118,102,229, 62,198,249,141, 41,145, 68,104, 48, 85,174, 40, 20, 2, 34, 38,190,105, 80,138, 51, 53,121, +245,246,128,245, 34,102, 27, 83,251, 63,114, 18,188, 7,157,249,181, 94, 11, 99, 44,166,194, 68, 17,241,150, 79,238,178, 65, 77, +230,180,185,154, 11,184,140,134, 96, 92,123, 50, 78, 28, 22, 92,152,172,234, 20,135,107,109,204, 58, 77, 19, 73, 42,161, 88,129, + 52,165,145,126,187,183,164,185,154,172,128, 18, 1,175,166,172,205,137,197,114,137,122,229,244,233, 11,174,174,182,104, 48, 81, + 71, 65, 89, 31, 30,114,125, 49,130, 42,222, 7, 84,234,252, 57,206,242,213, 98, 86, 9,197,248,141,130,173, 77,156, 84, 68,220, +156, 11,173,124,240,203, 15,249,244,209, 35,164, 13, 52,178,226,219,223,186,141,111, 28,169, 36,110,191,246, 22, 97,209, 64, 73, +200, 8,146,123,104, 50, 99, 4,101,193,209,235,183,120,251,205,187,124,242,179, 63,229,122,179, 65,213, 84,165, 72,101,156, 44, + 41,238,233,163, 15,112,218,160, 77,224,157,119,127, 68,247,224, 77, 54,253,134,125,205,172, 15,238, 16,135,132,166, 9, 45,133, +195,251,119,249,241,143,190, 71,218, 62,229,227,191,253,132,247,222,123,194, 15,191,247, 77,139,202, 77,133, 80,212,162, 35,243, +140,120, 76,246, 89,105,105,141, 71, 79,139, 58,187, 78, 26,223,144,107,182,221,110,169,228,236,232,211,136,244, 61,237,106,197, +218,169,133,170,164,200,197,102,139,115, 29,183,110,223, 97,216, 93,177,219,237,136, 83,111, 33, 17, 83,180,194,115,214,162, 20, +108,189, 53,108,119, 92, 93, 92,112,120,120,136,196,128, 91, 20,106,137,232, 84,137,147, 55, 11, 75,153,152,178,221, 68,117,198, +170,130,146,197, 32, 40, 70,175,242,198,197,207,133, 68, 97, 28, 39, 54,167,167,180,175, 63,164,201, 45, 81, 18,117,156, 56, 63, +123,201, 46, 79, 28, 54, 97,198, 32, 23,114,142, 76,253, 68, 77, 25,231, 26, 46, 95,156,178, 92, 46, 57, 56, 56, 6,239, 13,164, +113, 61,130,115,132, 91,129,110,185,194,137, 41,171, 65,209,208, 18,164,218,251, 52, 13,136,243,196,254,130,135,247,239,178,217, + 9,239,253,234, 11, 46,174, 94,240,238, 91,239,242,251,255,233,111,243,254,167, 47, 73, 87, 47,121,251,173, 35,218,166,229,206, +241, 9,255,242,143,254,148, 41, 15, 6, 1, 82,197,181,133, 60,102, 92, 85,210,100,163,243, 90,231, 74,149,138, 84,251, 51, 40, +120,148, 76,157,237,183,222,214, 5, 65, 81,241,164,132, 89,197,180,144,179,216,181,237, 32,197, 57, 76, 88, 2, 57, 86, 66,107, +140,128,156,132,151, 47,206, 56, 62,184,101, 41, 88,193,147, 53,146,226,150, 42, 66, 35, 66,138,134,147,246,177, 50,197, 13,206, + 5, 82, 30,144,198, 64, 64,185, 84, 36,155,181,215, 75,161,122, 79, 78, 35, 69, 38,156, 58,218,218,224,134, 64, 8, 48,186,150, +218, 42,194,138,156, 19, 77, 59, 7, 39, 57,229,112,217, 48,214, 76,140, 17,201,182, 38,204,147, 67,106,102,146, 1, 77,126, 70, + 27,119, 12,123, 37,231,158, 69, 56, 0,181, 53, 97, 43,153,219,173,185,208,163, 81, 62,168,222,168,140, 82, 42, 93, 19,120,171, + 53,120,204,245,177, 35,200, 49,254,214,138, 58,129, 62, 45,188,124,122,198,203,205, 72,179, 44,220, 10, 71, 44, 78, 94,103, 75, + 96,243,242,140,126, 26, 56,125,108,161, 89,227,230,130,182, 21,218,139,181,161,141,183,231,172,214,194,116,157, 24, 99,196,215, +134,243,197,146, 69,231,208, 88,200,211, 21,165, 36,134,169,144,178,217,140,183,179,245, 45,204,158,115,153, 69,114, 94,255,254, +232, 60,127,165,179,150,153,148,119,248,149,196,185, 84,139,173,205, 70,155, 2, 60, 56, 57,192, 91,142, 16,254,216,177,158, 19, +232,112,112,237,133,109,211,208,219, 35,156,161,192,117, 53, 93,213, 84,205, 35,127,181, 43, 92,151, 17,127,184,198,101,184,120, +185,103,127,253, 4,134, 61,181,191,102,146, 72, 30, 91, 98,218, 89,195,236, 3,117,155, 72,100, 86,193, 38,102, 83,154,168, 53, + 17,242,146, 84, 54,212,120, 65, 12,194, 16,148, 49, 93,195,228,168, 30,106, 91, 41, 67,197,181,129, 82, 11,105,220,163, 69,240, + 62,144,167, 61,133,150,152, 34,165, 90,163, 23, 52,160, 82,136,217, 50, 51,171, 56,252,176,180, 6, 54,192,180, 76,172,250, 9, +239,213, 83,106,157, 21,229, 70, 98,147,202, 92, 45,103, 98,169, 22,216,162,179, 93, 65,205, 34,164,100,178,204, 99,141,146, 45, + 62,179,218, 76, 31, 21, 82,174,168,138,217, 75,164,190, 82,150,163, 2,217, 98, 74, 45,220,229,102, 53, 94,113,115,246,122,158, +253,237,102,123,179, 15,160, 5,166,100,135,139,177,227,132, 52,103, 70,136,218, 24,147,234, 40,213, 10,143,209, 87, 52,169,205, +137,196, 32,254, 2, 56, 31,230, 61,124,161,144,112,213, 2, 92,114,158, 88,180,158, 44, 80,178,208,120, 37,213, 27, 7,133, 89, + 99, 74, 18, 70, 41, 6, 6, 81,243,196, 87, 17,114, 77,164, 8, 57,123,212, 85, 92, 51,171, 77,243, 60,248,147,138,195,190,103, + 73,102,225,207,106,107, 13, 93,120,123, 80, 22, 32,154,130, 61,168,241,204,227,156,164, 36,177, 16,125,162, 38, 75,189,155,114, +165, 86,193, 59,207, 84,147, 9, 75,146, 85,137, 69,141,135,255,252,197, 25,215, 87, 87,118,112,123, 71,144,128,136,210,199,129, +235,205,198,132, 67, 40,164,132, 96, 55, 86, 74,204, 81,183,206,252,144,197,126, 30,106,181,248,214,156,168, 89,248,232,211,143, +249,236,227,207,168,185,226, 50,156,159,191,160,250, 55, 72, 83, 79, 77,240,236,241,199, 44,219, 63,224,251, 63,254, 49,159,125, +254,132,139,151, 79, 72,125,133,152,232,142, 29,239,126,237, 45,150, 26,249,171,159,254,148,152,139, 29,254,226,112,206,108,149, + 69, 42, 85, 61, 5, 97,209,118,180, 11,101,136,231, 80,146,105,179,213, 33, 8,251,180, 37, 69,207,189,195,187, 28, 30, 30,241, +171, 15,127,201, 47,255,238, 3, 46, 55, 23,108,119,251,217,250,145, 24, 74,102,204,217, 14, 79,113,120,103, 35,217,126, 26,152, + 98, 34, 52, 45,109, 23,240, 65, 9, 89,144, 27,209,103, 46,196, 52,226,150, 1, 34, 76,215, 3, 27, 95,240,174,101,202,153, 24, + 51,168, 50, 14, 61,253,176, 99, 26,173, 16, 24,167, 72, 41, 51, 97, 81,103,241,167, 26, 77, 45,215,194,233,217,115,222,122,248, +128,198,141,212,164,140, 41,209,202, 28, 83, 92, 5,167, 13,203,160, 51,125, 43,163,203, 22, 31, 58,144, 68,241,205,204,111,152, +193, 21, 88,194, 89, 63, 70, 62,248,236, 51,170,243, 28, 30, 62,176,136,223,201,177, 90, 30, 17,218, 96, 26,150, 84,153,234,192, +148, 35,251, 52,226,130, 7,104, 24, 82, 0, 0, 32, 0, 73, 68, 65, 84,199, 21, 33,199, 9,117,158, 41,103,164,100, 98,138, 80, + 10,235,245, 9,174,182,212, 2,174,109, 76,132,164, 54,149, 24, 39,179,181, 93,111, 55,172,110, 57,188,203,124,254,197, 19,182, + 19,124, 99,123,159,229,186,225, 79,254,236,223,178, 60, 56,230,187,223,253, 14,231, 79, 30,243, 79,255,233, 15,121,126,118,206, +122,125,194,237,227,191,229,201,227, 71, 36, 55, 39,129,168,167,250,201, 14, 95, 17,139,123,118,222,146,190,100,122,245, 44,176, +191, 91,161,120, 19,204,137, 32,120,188, 51,209,216, 56, 89,116, 42, 85, 64,131,101, 45,196,136,136,105,119, 4, 11,175, 26, 75, + 34, 71,197,139,103, 63, 76, 92, 94,109, 56,188,117,200,152,139,249,221, 67,194, 47, 91,139, 91, 78, 74,145, 68, 77, 3,197, 59, +202,140,123,106, 93,139,244,142, 84, 19,206,101, 35, 72, 98,164, 60, 81,165,230, 68, 10,194,178, 13,196,156,185, 78,145,154,153, +225, 34,137,218,169,253,172,193,209,167, 61, 75, 15, 58, 8,251,216,207,244, 76,227,111,176, 16,242,101,158,225, 80,183,144, 52, +146,229,154, 66, 99, 73,152,155, 45,101, 44,208, 79,140,219, 53,155, 22,174, 7,240, 37,209, 6, 79,118, 51,149, 45, 8,215,179, +207,220, 77,133, 57, 41, 11,231, 32,199,104,238,167,153,202,215,180, 45,221,162,133,226, 40,139,142, 69, 23, 8,135, 75,250,100, +219,197,213,235, 45, 91,175,228,231, 17, 55,100,134,112, 0,107, 71, 30, 34,244,137,143, 6,101,186,174,212,205,158, 97,179, 99, + 24, 43, 62, 9,174,122, 54,207,247,164, 67,211, 2, 77,155,107, 22, 97,133,107, 3,113,194, 68,147,173,252,189,147,253, 70, 41, +159,110, 44,115, 55,251,239, 10,113, 44,196, 58,145, 75,100,221, 28,226,103, 94,174, 0,157,124,169,162,103,206, 72,111,154, 47, +179,210, 59, 15,225,150,127, 53, 25,192, 67, 61, 9,244, 4, 82,176,255,107,220, 59,134,113, 98, 75,162, 70,230,128,157, 13,117, + 26,240,174, 35,145, 73,195,128,120,216, 77,213, 26,161, 32,148,152, 16,137,100, 58,164, 38,163, 3,206, 90,145, 80, 60,117, 76, + 36,111,150, 64, 70, 59, 20, 60,144,107, 38,167, 72,160, 37, 75,176, 64, 23, 17,180, 22,180, 70, 82, 77,120,245, 80, 23,136, 8, +163,174, 72, 57, 19,195, 68, 70, 40,177,224,139, 84, 84, 43,181,122,156, 51, 91, 87,169, 17, 73, 54,238,242,150,210, 48,103,101, + 39,196, 43,226, 10,105,176, 19, 79,171, 69, 94,214,155, 0, 7,205,182,135,206, 2, 37, 65,219, 89,212,101,153, 19,177,196,153, +231,214,158,205,102, 19, 42,115,154,155, 20,164,204, 73,113,246,204, 2,205,120,173, 76,213,208,126,234, 28,121,102,192,215,146, +201,226,112, 5, 74,137, 51,208,195, 4, 95, 53, 23, 34,217,126,254, 56, 3,118,212,132, 48, 78, 21, 87, 44,104,165,170,155, 59, +244,185,171, 23, 3,243,249,121,198,239,138,169,104, 83, 49,144,164,162, 76, 36,116,126,111,166,152,240, 34, 68, 18,185, 10, 29, +134,174, 21,145, 87, 97, 13,121, 78,186,171, 65, 17, 47, 52,217, 19, 73,115,161, 80, 77, 57, 25, 45,192, 70,189, 99, 44, 22,150, +225,114, 52, 14, 64, 53,100,173,165,150, 53, 28, 31, 29, 18,227,165,117,206, 94, 45,109,236,166,187,174, 74,236,123,246,165,208, + 52,193,222,139, 98, 8,217, 90, 12,255, 58,140,102, 33, 50, 60,176, 55, 61, 66, 41, 56, 39,243,215,197, 38, 18, 53,218,216, 71, + 61, 65, 1,223,177, 27, 6,174, 63,253,212,172, 40,206,186,198,231, 47,158,115,246,236, 5,101, 40,136,120, 46, 46, 30,243,222, + 47,126,201,239,252,227,127,204,215,222,129,135,111,222, 99,218,108, 73, 35, 52,135, 29,223,120,231, 29,182,167,191,226,163,143, + 30, 81, 82, 54,109, 70, 73, 68,177,131, 48,207,196, 61,173,176, 88,220, 97,233,215, 76,155,200,234,240,136, 32, 19, 49,159, 19, +163,144,196, 88,231,203,118, 73,206, 91,222,127,239, 23,124,248,228, 41, 42, 5,113,149,160,194,249,190, 71,231,145,108, 21, 11, + 32,138, 53,207,233,103,194,225,209, 33,139,245,154,152, 71, 64, 73, 41,162, 1, 26, 28,165, 40,253, 52, 49,109,119,182,207, 76, +130,235, 51, 89,247,198,137, 78, 19,174, 31,216,237, 95, 82, 81,214,139, 53, 94, 34,187,105,178, 21, 43, 5,201,166,102, 86, 53, +158,182,212,202,213,229,134,205,245,134,229,221, 59, 54,197, 9, 1,151,173, 64,108,154, 66,173, 29, 83,158, 8, 20,106, 3, 50, +139, 88,237, 38, 51,244, 49, 8, 69, 21,153,169, 92, 34,149, 49,102,206, 79,159,243,218,237,215, 25,198,204, 80, 11,139,131, 67, + 86,221,138,188,223, 19,125,161, 31,123,250,253, 68, 22,165,235,132, 58, 51, 6,250,126,164,120,165, 85, 79, 35,158,234,109, 2, +185, 10,149,141, 47, 52,141, 71, 93, 71,209,132, 79,217, 52, 36, 81, 25,153, 56, 17, 71, 94, 44,249,233, 47,159, 83,130,160,225, +231,252, 23,127,240, 53, 62,255,252, 57, 79, 78, 63,224,135,191,253,187,188,253,224, 46,175,221,121,200, 55,223,121,151, 79,158, + 60, 65, 93,182, 34,167, 20, 11,140, 74,182,238,169,226,230,233,159,165, 59,230, 82,172, 16, 83, 33,170,233, 96,236,154, 81, 74, +245,136,171,102,149,203,153, 41,142, 38,214, 44, 6,240,200,181, 7, 21,188, 4,212, 91, 66,100, 42,137, 90,103,183, 8, 13,217, + 87,130,120,206, 46, 94,208,172, 15,173,171,243,230, 33, 78,113, 52,178,216, 28,207,236,202,154,156,247, 72,181, 34,167,150,108, +118,222, 98,215,111,170, 21, 63, 13,150,191,160, 74, 40,129, 84, 51,125,172,212,164,136, 47,180,210,146,202,100,226,215,186, 64, +181, 32,113, 66, 74,166,210, 18,131, 3, 47, 52,131,146,146,197, 64,167, 77, 36,165, 68, 19, 2, 67,186,100, 93, 21,239, 58,170, +107,112,221, 93,134,241,136,169, 31,216,143,103,196, 95, 79, 44, 22, 75, 43,100,167, 29,151,233, 16, 31, 58,202,184,229,126,115, +196, 49,129, 93,129,116,157, 88,104, 70,114, 37,141, 19,211, 52, 32,100,234,148,240,107,133,198,209, 87, 97, 51, 64,217,143,164, +226,105, 90, 3,201, 84,129,215, 87,202,170,129,179,209, 19,167, 35,218,163,150,102, 5, 99,104,184,117, 2,119, 79,108,159,254, +249,203, 67, 46,207, 58,106, 86,150,157,226,151,107,206,155, 53,177, 8, 58,128,244,202,213,139, 68, 40,153, 58,141, 20, 87, 9, +175,159,160, 78,232, 83,102, 59, 36,186,163,214, 92,119,185,152,222,107, 86,184,143,179,222,165, 47,153,234,197, 92, 88,175, 32, +227,166,185,254,234,194,124,151,161,169, 95,118,254,181,254,125,145, 28, 38,219,226,142, 55,122,222, 22,248,192, 9,215, 35,108, +206,175,240,217,210, 63,243,156,110,152,118,153, 18,237, 57, 78,198,114,227,139, 71,164, 65,165, 33,231,129,170,153,145, 72, 30, + 10, 46, 95,163,213, 49,229, 45, 46, 44,168,141, 82,199, 29, 41, 38, 52, 56, 68, 2,190,142,148, 28,152, 92,162,230, 4, 25, 52, +120, 34, 35,211,188,150,213,162,148,218,115,220, 30,114,114,114,155,103, 27, 40,209,244, 91,187,184,199,223,224, 93,107,205,228, +153,218,228,110,204,253,110,174,138, 83, 68,234, 44,248, 73, 21, 55,199,166, 82, 44,117,201,200,104,117, 78, 37,178, 61, 99, 82, + 19,198, 85,201,175, 68, 98, 42,118, 8,220,120, 82, 74, 46,175,240,178, 18, 64,138,216, 65, 58,239, 50,110,118,222,137, 98, 93, +225, 60, 34,173,147,237, 33,196,207, 25,186,197,118,228,185, 22, 43, 80,164,226, 52, 32, 57, 89,193, 0, 22,198, 48,219,231,110, +236, 77,150,200,150, 44, 11,218, 91,247,171,226, 44, 10, 22,219,153,167,100, 9, 63, 55,251,242, 82, 51,190, 85,100,178,135, 54, + 84,166, 98,246,165, 32,182, 23, 86, 21, 82,181, 64,156, 6, 99,196,171, 10,165, 6, 84,140,217,171,210, 80,234, 64,174,144,147, +216, 67,205,164,208,243,251, 90,102, 81, 98, 33,207,121,232, 57, 71, 50,149,219,119,110,179,223,247, 92,247, 19, 82,173,227, 23, + 53,203,142,201,105, 42, 77, 99,121,193, 34,193,120,253, 51, 59,255,242,252,226,213,254, 87,253, 77,148,173,189,150, 20,235,171, +194, 73,213,108,126, 82, 13,102, 82, 29, 4,167,196,148,200,201, 14, 76, 17,219,183, 95, 94,109,248,127,254,242, 61,155,188, 80, +240, 62,243,241,175,255,146, 55,223,254, 22, 37,238, 56,186,115,155,161, 79,168, 83,218,245, 1,135,203,142,191,252,217, 79, 25, + 99,229, 7, 63,252, 46,247,238,157,240,179, 95,126,192,217,243,151, 44,187, 37,139,174, 99,219,111,152,166,137,176, 58,196, 45, + 2, 77,211, 34, 58,146, 93,161, 12,230,203, 45,165,114,112,231,136,227,195,142, 47, 62,255,136, 95,252,250,215,236,182, 3,109, +171, 44,218, 37, 71,235, 29,159, 61,218,217,174, 60, 56,218,102,193,225,178,163, 91, 47, 89,174, 15,185,117,124,204,221,215,142, + 1, 79, 30,237,189, 78,147,141,114,139,128,155, 25, 14,195,126, 32, 78,209,186,162,146, 44,124, 33, 21,166, 52,112,118,126,193, +211,167, 47, 88, 45, 91, 92,200,236,175, 6,131, 23, 5, 12, 48,145,203, 92,116,126, 73, 15, 44, 49,114,122,246,148, 55, 30,190, +198, 36,138, 47, 38, 54, 44, 81, 73, 37, 19,221,136,100,193,185,150, 26, 42,231, 47,207,249,226,217, 83,156,115,228,148,241,106, +121, 8,133,196, 27,247,238,240,214,219,111,241,232,209, 19,250,221,158,243,235, 13,251,113,207,144,149,177, 22,186,210,114,235, +240,117, 62,120,246, 83,188, 91, 16,171, 41, 96,186, 38,224, 85, 40, 26, 8,173,224,241, 54,161, 83,203, 81, 48,248, 77,203,241, +201, 49, 47, 55,215, 72,202, 72, 26,137,177, 16,199,132, 6,152,250, 1, 74,228,162, 93,112,123,113,204,243,122,198,216,195,123, +239, 61,166,201, 91,222,251,236,140,253,245,196, 63, 82,248, 39,191,255,219,180,139,142,147, 55, 14,120,244,228,115,242, 4,205, + 98,193, 56,109,205, 1,227, 21,226, 76,177,100, 22,188,137,206,194, 32,157,185, 9,137, 58, 39, 25,182,234, 73,206,158, 29,100, + 75,137, 44, 81,230,248,228, 57, 50,245, 70, 87, 83,237,254, 52, 44,171,162,217, 18, 36, 19, 9,167, 5, 23,132,113, 10, 76,125, +207,193,241, 17, 83, 1, 39,147, 77,140, 80, 98, 42,136, 26,191,157, 17,194, 90, 41, 53, 19,167, 74, 44, 3,206,117, 51,168,105, + 36, 75,107, 5,186, 20,115, 56,136,217, 17,125,174,208, 4,198,209, 38, 5,222, 59, 92, 84, 38,201, 72, 99,248, 95, 42,168, 47, +180,169,193,117, 17,137,149, 82,128, 98, 5, 94,138, 19, 90, 43, 3, 45,190,192, 97,235,249,206,253,183, 8, 15,151,156,158,173, + 25,159, 14, 12,205,158, 40, 19,125,159, 57, 56,120,131,122,188,160,239, 43,151, 87, 91,250,203, 71,156, 95, 30, 49, 20,165,191, +218,144,155, 37,110,119, 77,205, 59,174,175,183,140,147, 77, 32,243, 96,251,112, 95,108,191,188, 17,104, 23,129,234, 45,184,133, + 49,113, 57, 65,227,160,201,149,212, 56,220, 45,108,132, 61, 84,154,165,176,158, 5,103,167, 57,179,155,140, 34, 88,114,228,248, + 96,201,119,239,219, 74,224,195, 73, 25,215,199,112,104,226,187,124,209,177,237, 39, 62, 80,200, 35,212,173, 9, 33,163,237, 38, + 25,174, 50, 75,205, 12,199,129,156,225,249,211,107,242, 16, 41,181, 35,213, 61, 83, 78,164,161,199,249,150, 88,197, 78,245,238, +203,121,190,212,155,176,176, 47, 69,112,238, 31,122,228,212, 58,124, 1, 58, 96,223,103,246, 99, 33,212, 74, 74, 91,134, 60,224, + 85, 9, 42,244, 53, 83,247, 17, 41, 66,242,150, 54, 39,201,236,152, 40,228, 50,145,231,231,114, 27, 32,180, 29,151,227,142,218, +100,106, 30,208, 1, 98, 76,136, 4,210,100,231, 46, 41,145, 40,116, 62, 32, 76,134,235,142,166,119,210,154, 16,239, 72, 37, 26, + 34, 61, 69,134,151, 31, 49,108, 54,248,241,154,214, 79, 20,237,240, 57,102,212,123,235, 84,115, 70,164,204,105,107,206,184,233, + 86,214, 98, 9,227, 50,195, 71, 12,241, 88, 74, 34, 23, 67,200,170, 19,106, 21, 50,182, 3,114, 98, 55,106, 53,137,174, 21, 76, + 58,163, 81, 42, 72, 99,221,171, 20,193,169,146, 71,163,111, 73,149, 47, 15, 19, 75,111,177, 32,150, 89,225,253,213,232,215, 80, +230,156,247, 82, 80,149,153, 60,107, 22, 13,235,252, 5, 98, 52,230,122,245, 38,153, 85,211, 9,136,193,227, 77,157, 92,204,170, +231, 10,212, 49, 83, 22,214,173,230, 10,206, 21,219, 93,204,118, 56,106, 66,179,146,213,147,106, 66,213, 70,235, 49,154,229,162, + 36,179,151, 53,141,199,205, 74,123,201, 54, 41,240,206, 94, 95, 46,153,148,220,108,197,145,121, 79, 89,201, 67, 33, 43, 52,173, +101,199,231,152,237, 53,120,172,178, 37,152,175,210,101,250,105,132, 92,230,104, 84, 3,247,212,155,209,180,128,115,206, 72,248, +206,124,147,204, 95,179, 17,166, 55, 76,110,193, 40, 90,126, 38,112, 80, 8, 93,103,162, 73, 53,159,126,137,118,129,218,228,193, +118,154, 86, 72,153,178, 69,138, 35, 52,142,253,245,196, 24, 7, 99,146, 75,203,230,250,140,159,252,244,207,121,247,205,119,185, +222,236, 88,180, 13,119, 31,222,229,246,235, 39,156,159,126,196, 95,252,213, 79,216,236, 6,124,104,249,205,111,125,143,211,211, + 43,174, 46, 94,242,214,219, 15,248,237, 31,255,136,225,122,207, 31,255,249,159,243,224,225,215,249,205,239,253, 22,169, 76,236, +119, 23,180,186, 36,229,204,182,159,104,221,146, 34, 27,254,226, 79,254, 53,164,107,126,253,233,199,168, 26,124,232,229,213, 57, +183,142,142,249,222,247,190,207,225,193,154,131,147, 53,235,238,136,131,197,130,148, 19, 46,172, 24,114,207,148,108, 18,228, 92, +135, 91, 37, 22,165,179, 81,189,154,226,186, 19,199,113,179,102, 20,240,226,201,110,132, 90,104,154, 53,228,196,102,184,226,234, +229, 57, 93,211,225,124,195,127,248,247,127,205,227,211, 51,203,110, 78,243, 14,251, 6, 92, 36, 66, 8,128,120, 94,156, 95,177, +221, 12, 28,174, 22, 76, 2, 34,142,182, 21,198,169,208,185, 76,241, 11, 38, 28,161,102,246,151,123, 54,215, 91,139, 44,118, 95, +146,229, 52,195, 91,111,156,240,245,175,127,131,214, 47,249,236,241,103,188,120,254,130,253, 56,226,253, 1,161,129, 97,234,185, +188,190,160, 31, 19,200,158,174,109, 8, 65, 9,174, 49,204, 44,153,160, 30,117,130,171,198,251, 44,106,250,146,235, 97,203,184, +157, 8,234,216,111,183,168, 11,236,211,104,227,236,164,243,207, 18,216,109, 55,188,118,116,155,182,105,240,113,100,189,128,191, +248,217, 19, 84,148,127,241,207,255, 25,255,228, 15,255,115, 54,209,113,121,158,184,125,187,130, 54, 44,143,142,184,216, 77, 48, +153,176, 48, 21,197, 57,235,144,107,182, 67,216,114, 17, 44,153,175, 96, 8, 88,165, 5, 45,134,125,214,121, 20,174,102,239,116, + 40, 37,203,236, 10, 41, 84,211,247,218, 4,178,154,149, 13, 47,104,227,208, 84,172, 64,106, 90,170, 10,113, 24,216, 93,188, 96, +189,238,184,220, 95,115,107,189,160,241, 13,113, 42, 4, 28, 69, 51,148,136,243, 13, 49, 22,187,175, 75, 36,168, 53, 4, 82, 35, +146,156, 77,227, 38, 40, 62,209, 52, 38, 64,141,217, 26,147, 80, 27,138, 14,182, 40, 46,149, 68, 52, 25, 80,204, 56,233, 40, 49, +205, 2, 75, 11,195,137, 78,240, 73,209,198,172, 92,217, 9,109,105,136, 85,153,114,207,241,193, 61, 78, 14, 26,220, 45,120,250, + 28, 86,141,112,176, 92,217, 51, 4,199, 15,190,182,102,117, 0, 61,240,211,124, 76,222, 79, 92,215,200,126, 24,168,186,226,240, +193, 93, 74, 7,155,139, 53,233,233, 57,253,238,154,212, 7, 66,215,178,159, 22, 76, 79,182,212, 56, 17,251, 11,214, 10,126, 92, +146,251,129, 86, 21, 73, 7, 76, 23, 80,246, 19,135,157,178,242, 38, 92, 67, 45, 17,141,185,211,189,232, 19,187,237,134,158, 17, +175, 45,173,111, 95,169,203,151, 2,165,133, 67,129,209,195, 54, 24,175,191, 30,136, 5,172,180,129,183, 23,112, 48, 39,119,126, +210, 6,238, 72, 96, 61,135,200,108,142, 14,136,143,159, 18,115,196, 83,184,170,202,123, 87,214, 60,148,169,208,140,123, 94,191, +119,203, 10, 40,224,252,108, 71,117,153,241, 96, 69, 43,194,102,152, 56, 64,224,168,125, 69,198, 99, 42,132,133,137,167, 5,168, +227,200,126,191,195,209,130, 36,212,239, 16, 42,177, 86,106,177,107, 55, 84,161, 76,149, 41, 23,132, 72,174, 25,149,130, 47,102, +229, 83,231,169, 36, 8,158,178, 51,129, 97,174,197, 24, 44, 5,179, 60,183,133,210,239,236, 62,208,192, 56, 88, 46,138,243, 74, +156,122,112,138,215, 14,167, 74,146, 17, 73,158,235,101,199,211,180,224,250,122, 75,222,143, 36, 41, 68,153,179, 45,140,241,110, +129, 37,168, 81,171, 12, 32, 99,213,206, 13,181, 73,103, 27, 77, 44, 51,208,161,216, 97,219,168,169,205,115,170,243, 46,220,118, +222, 69, 44, 67,221, 20,171, 38, 42,171, 26,240, 70, 11,158,225, 16, 74,150,108,110,172,106,126, 95, 74, 65,107,166,168, 80, 75, + 50,206,112, 53, 58,189,237,125,205, 55, 30,163, 5, 93,136, 86,202, 76,220,210,249, 97, 35,181, 82,113, 84,175,120,197, 10,148, +108,118, 56,117,138,243, 30, 41,201,184,209, 50,127,255,217,254,162,165, 48,206,166,198,234,103,104, 5,118, 0,203,156,156,229, + 21,139, 2,173,224,165, 34,165,226, 26,219,145, 57, 4, 87,178, 41, 23, 69, 8,193,160, 44, 54, 27,168, 72,201,104,205,136, 83, + 75,154,147,108, 55,182,179,159,183, 98,170,248,166, 89,144,242,100, 7,119, 18,188,122, 60,130, 52,129,215, 94,191,205,147, 71, +167, 20, 23,230,177,134,249,201,133, 74, 19, 26,144, 66,117,134,230,144,108,201, 85,181,232,171, 11,124, 63, 76, 76,217,212,149, + 54,218, 53,200, 79, 46,217, 30,144, 2, 82, 12,207, 91,106,166, 76, 25,130, 29, 62, 37, 89,241, 33, 57, 83,124, 33, 84,143,247, +102, 13, 44,147,165, 9, 5, 31,184, 58,251, 59,254,253,147,247,200,213,113,114,114,143, 91,143,111,115,252,225, 9,236, 30,243, +249,233, 11,112,202,118,215,179,233,123,226,184, 71, 27, 3,122,248,101,195,254,244,140,102,185,100,181, 56, 96,247, 98, 79,179, +106, 57, 56,186, 79,231,148,234,225,120, 95,248,236,163,159,243,215, 63,249,119,164,152,120,112,247, 46, 95,123,248, 53, 46,118, + 59,250,221,142,203,231, 47,249,246,239,125,155,119,111, 31,205, 5, 85, 96, 26, 71,226,100,116,193,169,238,168, 37,226,252, 18, + 23, 28,244, 17,246, 38,222,112, 85,137, 84,198,201,147,202,100,193, 21,181, 18,217, 81, 70, 72, 57,145, 83,161,161,165,115, 11, +186,119, 30, 82,122, 37,141,133,251,111, 60,228,217,203,231,148,120,131, 63, 54, 12,113,227,213, 64, 73, 85,240, 8,219,205,200, +227,211, 83,190,251, 27,223,192,149, 72, 86, 71, 85, 79,219, 8, 37, 37, 10,189,141,163,219, 5,205,193,138,224, 3, 99, 76, 86, +120,214,104, 35, 63, 17,170, 76,108, 46,159,115,112,116, 11,127,250,156,146, 42,227, 4,141,115,140,215,123,222,123,255,175,233, +119, 59,186,102,133,119, 66, 27, 26, 98,206, 44,194,130, 84, 19,168, 57, 92,212, 89, 17,127, 51,169,147, 2,211, 16,121,114,241, +130, 69,219,112,169,158, 48, 89, 10, 93, 33, 17,240, 44, 87,135, 44,252,138, 88,119,236,227,196,237,147,135, 60,125,254, 25,103, +231,151, 92, 95,111,248,195,223,253, 49, 63,254,237,223,229,241,197,192,139,139,196,237,131, 53,207, 47, 35,103,151, 91,179, 68, +169,162, 77, 99,221,149,155,241,209, 89, 64,146,105, 6,102,196, 50,234, 13,237, 43, 9,215, 40, 41, 87, 74,157, 32, 42,190, 58, + 34,160,206,174, 73,102,167, 65, 86,197,205,216,106,193, 50, 25,100,126, 46,213, 50, 39, 47,138,226,178, 13,199,130,180,214, 60, +148,145,237,217, 57,187,151,158,187,175,221,101,213,117,100, 73,148,212,216, 97,220, 85,202,212, 82,203, 30,113,142, 92,213,104, +138, 98,254,242,220, 79, 56,241, 72,105,104,156, 35,107, 38, 39, 71,169,137,212, 79,248,197, 44,254,242,134,122, 19, 58,147,114, +167, 72,246, 66,141,149,126,215, 67,240,132, 54, 19,147, 53, 92,193, 41,211, 24, 25,171, 18, 22, 29,177,122,214,206,115,112,228, +104, 61, 28,118,149,243,150, 89, 64,156,105,146,190, 58, 92,125,129, 54,103,218, 69, 32,123,129,236,105,218, 53,223,127, 29, 66, +128,159,138,227,243,218, 49,198,194, 80, 11,199,183, 86,124,235, 91,239,176, 95, 42,143, 79, 43,227,163,150,151,131,121,198,251, +113,226,200,119,148,199,149,161, 20,246,155, 43,142,218, 74,188, 56, 98, 32,147,210,128, 95, 31, 67,107, 62,115,237, 13,115, 90, +118,133,208, 65,219, 52,175,188,227,185,192, 90,173, 35, 30,128, 58, 21,110, 32,226, 2, 44, 4, 86, 95,230,170,240,154,179,168, +213,155,224,149,133, 19,134,168,148, 60,145,170,242,206,253,215,120,251,238, 1, 21,216, 20, 24,167,134,182, 53, 57,242, 0, 12, +173,227,160,245,100,175,108, 10, 60,155, 10, 23,227,200,129, 4, 58, 39,244,165,176,189,220, 49, 29,175,112,234,232,119,153,221, +243,151,104,204,140,227, 14,173, 59,234, 14, 70, 25, 81, 18,101, 80,114,134, 36, 61,121,178,226, 83,147, 37,178, 77, 82, 24,117, + 66,213, 83,114,162,248, 21,251, 84, 40,113,162, 58,227,177, 36, 87, 64, 91, 36,101,107,148,178,195,137, 80,235, 96,114, 7,177, +176, 44,117, 70,194,175, 89,136,101, 36,150, 76, 39,137,175,223,123,141,251, 95,255, 14, 79,246,231,208,180,108, 46,182,196, 33, +226,115, 49,128,193,124,251,204,108,236, 57,155, 91, 76,224, 83,196,225,102, 49,157,204, 33, 30,222,153,162,187,148, 74,158,199, +230,130, 9, 29, 10,160,115,234,145,136,224,155, 57,189,165, 96, 0, 22,177,145, 90, 85,190,140,122, 85, 49,142,110,149,121,132, +236,236,208,159, 11, 13, 41,216, 14, 78, 50, 34, 30, 39,197,118,239,197, 70,219, 41,153,184,201, 32, 18,106,202,200, 89,200, 84, +102,136, 74, 81, 71,171, 51,201,170, 22,219, 87,207, 53,217, 92,202, 80,156,129,101, 40,101, 30,135,151, 89,244,102,135,112, 64, +168, 89, 81,167, 84, 73,136, 42, 83,129, 34, 9,193, 58,231,226, 20,173,102,193,139,213, 66, 81,156, 73,160,201,117, 78, 66,104, +117,246,220, 87,242,208, 81,188, 69,241,149, 41,145,130,117,249,157,243, 56, 15, 57,101,178, 84, 83,168, 55, 13,165, 86, 90,223, +224,212,186, 26,212,148,178, 94,157, 69, 51, 86, 59, 80,166, 60,204,239,149, 35,206,175, 35,204,138,216,251, 15,239, 16,199, 29, +155,171,173,137,117,164,188, 18,102, 57,167,248,106, 74,255, 44, 6,103,169, 53, 19,199, 72,201,149,140, 9, 7,133,202, 66, 90, + 82,129, 49, 78, 38,176,186, 9, 42,201,133,111,191,249,128,232,170,229, 14,239, 71,174,207, 62,225,236,139,247,200,100, 98, 76, +196, 34,108,246,123,210,144, 25,246,189, 21, 77,190,161, 76, 19, 79, 94, 60,165,115, 11,154,101,195, 85,127,205,129, 91, 19,188, +121,248,217,246,252,236, 47,255,152,247,223,251, 9,221,250,128,119,191,245,155,220,191,119,155, 85,187, 96, 36,195,188,159,109, + 69, 72,251, 13,213,205, 80, 30, 5,100, 66, 27,235,232,106,118,248, 82,241, 37,210, 75,143,182, 74, 78,222,146,163,170,199,231, +140,180,158, 65, 18,205, 60,109,202, 81, 77,120, 88, 3,169,169,228, 26,113,251, 53, 83,158, 32, 13,156, 28, 31,179, 90, 44,185, + 28,174,205,246, 41,157,221,236,222,252,188, 57, 21, 35,196, 21,229,244,217, 11,190,246,238,219, 52,139,142,101, 50, 27, 26,193, +155,245,209, 9,173, 91,178, 75, 59, 62,249,228, 67, 92, 80,150,190,101,138,211,124, 95,217,114,179,223, 12,156,215,167,232,242, + 53,206, 94,156, 18,188, 35,172, 86, 76, 62,209,167, 43, 74, 74, 52,221, 18, 77, 54,125,152,146,165, 36, 86,151,145,234, 80,245, +115, 78,128, 67,106, 33,180, 13,205,210,163, 53, 16,251,202,230,106,203,209,131,251,220, 90, 20,118,195,149, 77,124, 66,224,246, +201, 29,214,221, 33,139,176,164,234, 29,174, 54, 27, 98,222,224, 59,229,244,124, 36,180, 75,220,250, 14, 31, 60, 27,232,251,202, +242,176,165,184,196,126, 19,249,232,195, 79, 56, 63,125, 66,144, 5,109,104,153,246, 91, 60,158, 50, 79,177, 84,133,164, 25, 71, + 32,168, 89, 41,197, 7,131,135,212,108,227,243, 50,119,187, 58, 71, 81, 85,197,221, 68, 30,123,161,200, 92, 28,171, 77,175,124, +177,112, 38, 81, 71,174,213,208,181,185, 48,185, 9, 31, 86,136, 23,250, 24, 41,201,177, 92, 29,240,236,217,231,228,184,229,193, +155,239, 32,190,101, 44, 61, 94, 50,235, 81,153,234, 22, 45, 5, 87,132,118,225, 76,184,234,140,165,161, 98, 19, 56,117,158,177, + 79,176,244,224, 19,154, 2,117,236,169,213, 35,221, 2,156, 39,110,118, 56, 95,112,174, 18,197,209, 21, 40, 93, 69,119, 86,219, +148, 58,143,221, 9,198,188,200, 66, 70, 88, 23,200, 37, 18,100, 98, 56, 27,105,155, 14,223, 79,232,120,141,107, 3, 83,204, 4, + 89,224,111, 2, 88, 34,108,135, 9,105,122,155, 20,142,153,197,218,219,212, 8, 8, 61, 76,195,134,181,131, 73, 35, 75,241, 60, + 88, 43,180,112,242,134,240, 41,183, 56,188, 15, 23,123,232,158, 31,179,174,176,126, 8,245,218, 49,196, 59,236, 67, 98,240,142, + 52, 64, 26, 29,191,124, 33,248, 45,184, 17,174, 79, 47, 41, 83,194,141,142,112, 80,137,251,129,221,254,128, 18,224,250, 60,114, +103, 33,184,198,211, 85,216, 76, 5,191, 54,127,187,204,193, 45,175,130, 88,248, 42, 2,123,166,189,109, 51,101,234, 25, 98,162, +115,129,195,182, 53, 95,248,188, 27, 63,240,238, 85,246,122, 11,212,163,142, 35,247,229,247,240,183,151,120, 89,176, 84,211, 61, +105,113,220, 90, 29, 16,156,177,242,179,119,196,118, 77, 2,166, 9,100, 40, 72,201, 20, 63,144, 82,166,209,134, 82, 50, 83,201, + 52,174,144,138, 67, 67, 67,142, 19, 99, 26,105,154, 96, 48,177, 82,241,174,101, 31, 71,132, 72, 77,137,154, 21,167, 45,217, 7, +116,200,175,152, 32,177, 68,164,117,184,201, 56,214,105,156, 8, 44,208, 38,146,226, 64,138,166, 91,234,180,114,188, 88, 81,115, +203,176,217, 49, 93,101, 22, 65,145,168,120,145,106, 62,229, 58,139, 74,139, 29,160,182,153, 53,162, 91,205,182, 7, 55, 34,156, + 9,118, 68,103,124,163, 51,186, 91, 81,161,117,166,108,207, 89,208, 96,227, 94, 43,187,188, 89,162, 80, 68,102,183,123,181,129, + 62,115, 1, 33,179, 81,165,148,155,138,218,200,116,213,155,159,216, 94,178, 67,181, 34,243,190,222,196, 53,134,149,208, 57, 57, +174, 80,144, 44,224,234,171, 37, 74,214, 74,115,147,192, 53,127,224,200, 77,172,171,179, 78,124,182,207,136, 84,136,133, 70,148, +172, 54, 5,168, 69,230, 14, 54,162, 26,108,234,224, 61, 90,156,141,251, 75,196, 55, 22,110, 83,138,173, 34, 50,197,178,190,181, + 82,147,165,205,153, 96,207,196,108,169, 26, 46,182,250, 3,222,122,231,247,240, 77,226,239,254,230,207,184,120,121,137,184, 64, +101,228, 96,209,161,173, 18, 92, 71,163,152, 23,150,138,119,149,253,126,160, 93, 29,216,103, 37,133, 58,175, 66, 92, 51,103,200, + 39,179,177,184, 57,187,190, 74,161,122,177,253,190, 20, 94,187,123,143,131,182,229,195,143,254,142,167,167,103,102,205,153,119, + 73,165, 20, 98,132,174,179, 44,245,146,226,172,157,144, 25, 29,107, 65, 56,109,112,168,247,166, 38,142,150,125,174,222,196, 79, + 57,101,198, 10, 93,215,178, 90, 46, 89,189,222,176, 88, 31, 50,142, 3,207, 47,207,249,244,243, 71,228,253,196,238,234,138,253, +230,138, 49, 71, 40,137, 60,101,198,201, 49,198,196,227, 39,143,217,110,255,152,110,217,113,116,114,196,122,125, 7,114,195,139, + 79,254,150,245, 58,241,214, 59,247,216, 85,207,215,223,126,135, 92,138,133,241,212, 9,117,149, 16, 58, 38,122,234, 62,145, 92, + 33, 84,123,194,169, 40,226, 61,162, 35,163, 78,228,108,157, 45,206, 96, 33, 49, 43, 73, 28,190, 25,144,186,160,137,217, 82,151, + 50,100,117,132,133, 71,162, 35,230,200,212,155,237, 50,141, 47, 72, 2, 45, 5,215, 40,119, 78,110,115,126,117,101,197,239,236, +234, 72, 41,207,112, 32,131, 53, 5, 47,236,118, 59,174, 95,158,113,255,225, 27, 84, 31,208, 38, 19,175, 77,211,208,248, 64,140, + 61, 31,126,248, 11, 94,190,220,242,221, 31,124,155,243,203, 51, 62,126,255, 9,136,117,226,177, 86, 35,214,237,182, 60,254,228, + 9,231,231,103,124,243,155, 63, 48,239,125,222,225,180,163,113, 29, 99,156, 44,108,137, 66, 42,133,198, 57, 22,190, 35, 57,101, + 24,122, 84,188, 21,242,206, 17, 90,103,225, 65,126, 73,234, 18,155,235, 29, 53, 43,111,188,243, 53, 62,252,245,207,152,166,137, +245,162,227,232,214,235,172,156,103, 26,133, 84, 39,106,220,114,117,117, 74,173, 45, 77,112,220, 57, 62, 33,214, 21, 63,253,249, + 99,126,244,221,135, 44, 27, 71,154, 18, 49, 87,154,166, 35,105,162,164,145,133, 91, 48,104, 75,140, 3,162, 13, 94, 32,214,140, +102, 33,107,180, 93,191, 10, 82, 35,222,130,202,204,230,151,203, 28,163, 59,135, 71, 85, 33, 91, 58, 20,165, 26, 23,226,149,221, + 21, 69,170,218,180,174,164, 87,154,161, 34,144,134,145,136,167,109, 23,164,105, 98,179,221,242,236,236, 11,134, 97, 64,106,225, +122,115,197,201,157,123,248, 82,104,107,107, 32,153, 96, 20, 72, 21, 19,169, 74, 88,144,179,113,188, 53,168,173,173, 72, 70,197, +235, 33,122,179,227, 45, 23, 45, 49, 9, 68,168,236,113,183, 2,186,201, 76,219, 76,183,240,168,116,248, 49,227,187, 21,125, 30, +152,114,101,204, 3, 77, 11,117, 12,166,121,105, 97, 72, 59,196, 11, 31, 95,158,242, 71,127,246,167,172,151, 7,244,211,142,234, + 11,135, 93,197, 47, 90,252, 65,229,250,209, 33,171, 91, 13,211, 21,232,112,197,164, 61,154, 45,240,201,215, 89,184,164,160, 41, +227,210,192,245, 46, 50,101,101,237, 23,175, 14,211,221, 57,248, 30,242, 30,150, 51, 71,254,155,247,225, 96, 13,251, 37,252,252, +210,209,174, 28, 59,129,224, 61,183, 15, 23, 60,120,199,146, 60,207, 7,120,118,218,210, 39, 5, 34,161,233,184,208,142,231,103, +208, 42,140,207,119,236,229,154,208,182,144,161, 31, 51,233,246, 9,235,201,163,185,224,227,132, 44, 59,152,199,239,229, 43, 75, +240, 10,244,227, 72, 22,203, 60,200,121,100,135,114, 58,115,227, 47, 98,101, 85,235,255, 71,213,155,244, 90,146,101, 87,122,223, +233,204,236,222,251, 90,111,194, 61, 60,186,108,152, 73, 38,123, 17, 44, 21, 33, 86, 73, 66, 17,172, 65,141, 36, 64, 3, 13, 4, + 1,250, 5,130,254,129,126,136, 0, 13, 53,144, 80, 40,112, 34, 65, 20, 68,128,162,216, 21,197,166,178, 97, 50,155,136,140, 8, +143,240,240,231,175,191,141,153,157,102,111, 13,182, 61, 79,210,103,142,231,254,224,254,238,189,118,206, 94,123,173,111,113,178, +100,228, 38,133,235, 81, 25, 54,142,149,249,218,216,205,202, 42,194,208, 25, 62,118, 47,112,228,221,219, 61,251,208,195,119,157, +227,238,234, 64,170,133,226, 60,154, 64, 71, 27,180,234, 42, 80,196,170,121,179,218, 96,218, 90, 70, 36, 89,245,106,153,169,110, +137, 52,143,119, 86, 48,148, 60, 46, 27,133, 53,151,134,103,199, 76,195,139, 82, 17, 59, 43, 31, 60, 8,210,240,157,167, 49,225, +125, 36,197, 64,139, 80,179,153, 50, 43, 43,246, 99, 69,198, 61, 81, 15,212, 10,173,138, 93, 96,189,154, 33, 67,151,219,127, 21, + 49,132,101, 48,166,183, 91,246, 82,170, 15,183, 98, 3,216,187,197, 32,167,206, 45,211, 46,180, 32,230,208,109, 75,130,205,219, +196, 44, 14, 35,251, 16, 44, 87, 24,172, 1,238, 65, 26, 43,181,226,147,167, 75,145, 86,204,244,214, 57,135,139,158, 82,108, 29, +128,179,138, 83,117,230,128,181, 12,181, 77, 28, 86,237,103,153,251, 34,133,232,130, 69,220, 22,255,121, 19, 79,114,145,185, 25, +222,180,143,246,131,149, 38, 72,224,237,116,238,154,153, 69, 52, 26,104, 95, 69,209, 16, 9, 33, 90, 76, 69, 21,231,132, 60, 29, +172, 28, 4,243, 18,200, 82,145,169, 77,168, 45, 35,222,209,169,195,137,153,203, 4,107,120, 27,134,206,138,102, 4,130,119,108, + 78, 62,224,195,247,222,225, 47,254,223, 63,224,205,197, 43,226, 58, 81,114,161,214,204, 56, 77,200,178,246,240, 78,241, 49, 49, + 12, 29,221, 16, 25,139,165, 9,124,114,102,244,202, 66, 45, 19,206, 37,195, 0,133,133,103,143, 93,174,188, 70, 82,124, 40, 46, + 80, 2,141,208, 91,107, 94,109,213, 46, 51,205,227,172, 13,131, 24,236,147, 84,107,165,104, 69,170, 41, 32,210,154, 33, 63,189, +167,235,142,112, 41, 81,231,217,160, 55, 34,116, 62,130, 58,166,170,144, 60,174, 52,170, 54,242, 10,230,187, 27, 20, 56, 89, 31, +211,187,158,189, 76,148, 42,236,199,131,237, 66,241, 12,177,167,182,153,251,155, 59,182,247,183,108,119,247,120, 41,116,125,111, +106,141, 83,186,222,243, 95,252,243,223,225, 7, 63,120, 69, 81,165, 4,107, 20,156,165,226,131, 80,130,160,108,169,186,161,118, + 17,234, 76,150,201,120, 12,205,192, 70,218, 59,220,193, 17,164, 32,195, 98, 84,241,213, 60, 8,165, 18,139, 48,145,217, 77, 19, +235,245,198,222,175,169,209,228, 64,171,130, 87, 75,133, 52, 10,165, 54,138,203, 84,159,136, 62,240,254, 7, 31,241,242,171,175, +216,141, 19,210, 50,170, 86,190,128,115, 56,181, 66, 11, 23,149,185, 53,190,250,242,138,247, 62,120,223,228,244,217,140,152,104, +225,230,238,150,139,215, 23,188,252,244, 13,171,254,148,155,219, 43,238,238,182,248,104, 43, 34,177,155, 47,247,119, 51, 59, 55, +243,213, 87,175,121,246,244, 93,158, 61,127,135, 82,238,109, 90,124,104, 8,116, 74, 65,105,173, 25,116,195, 59,102,133,163,126, +197, 62,108,237,243,232, 6, 82,231,112,178,180, 85,169, 88,164,235,176,227,254,230,138,213,201, 49,201, 89,158, 23, 63,176,189, +188,230, 46,192,243,179,167,104, 19,238,119,183, 92, 92,188, 65,138,178, 90, 69,158,188,251, 62,234,214,252,229,159,254, 9, 47, + 30,255, 27, 54, 71, 3,227, 44,140, 99,225,247,126,247,183,249,226,179, 47,248, 63,255,232,207,121,242,104,195, 48,156,113, 91, + 94,227,100,196,165,136,199, 62,187, 1, 65,116,230,193,141, 43,120,154, 20,235,151,247,201,198,142, 5, 86,133,179, 67, 58, 46, + 23, 55,117,118,184,139, 19, 40,153, 52, 44,207, 29, 91, 96,145,165, 46,101, 32,214, 29, 97, 6, 93, 71,149,204,201,201, 35,118, +183, 55,140,234,185,185,190,225,241,201, 99,162,218,224,210,130,210,187, 72,105,149,185,143,132,170,196,108, 37, 44,120,144, 44, + 28,173,122,112,145,195,178, 74,136,205,180,199, 26, 71,106,141,184,154,241, 33, 17,103,161, 13,158,144,133, 62, 4, 91,215,100, + 3,151,212,185,216,186, 65, 61, 58,218,243, 81,189,173, 95,102, 73,248,166, 28,194,196, 79, 94,189,124,107,232,236,210, 17, 83, +222,114, 52, 28,177,234,182,252,237,247, 62,229,172, 95, 49, 83,153,226,204,170,115, 4,231,233,226, 64,127,186,230,101,121,194, +112,222,115,121,177,101,110, 19, 41,120,158, 36,199,102,243,115,124,220,174, 45, 54,154, 27, 8, 27,115,143,135,188, 24,207,156, +153,195, 66,132, 52,152, 93, 73, 70,216,240,243,164,214, 92, 39,154,102,139, 72,198, 53,191,246,222, 49,195,145,129,103, 62,110, + 27,106,173, 72,140,228, 67,163,239,214,156, 62, 25, 80,129,251,157,103,186,205,148, 38,172,135,129,210,132, 58, 54,198,231, 61, + 93, 15,211, 4,219,171, 29, 99, 22,102, 2,125, 84,200, 5,175,182,171,191,154,234, 98,109,183, 67,253, 78, 96,159,133,233, 40, +176, 90,246,253,219,172,140,209, 14,241, 14,152,170, 25,182,255, 49, 93,110, 55,102,170, 28,104,249, 30,137, 21,223, 2, 82, 60, +234, 34, 77, 51, 53,239,237, 98,169, 75, 33,129,243,198,209,243,214,195, 33,243,206, 64, 70,125,131, 18,112,213, 67,115, 84,215, +240,209,129, 68, 35,148,138, 53,181,165, 37,230,157,165,226,189,189, 39,231, 90,105,197,250, 87,156, 42,190, 57,171, 11, 22,161, +220,191,166,228,107,130,243,184, 99,101,158, 51, 49, 46,220,114, 31, 28, 30,121,219, 46,165,250,208, 16,111,153, 79, 17, 12,110, +162,214,134, 67, 52,131,153,119, 15,252,117, 53,233,252,161,103, 55, 6,147,187, 16, 44,138,106, 7, 53,242,208,209,103, 15, 16, +145,182, 96, 74, 61,218, 44, 1,170, 75,102,217, 34, 22, 98, 56, 87,111,230, 23,105,182,103, 15,186,248,188,117,201, 0, 59,219, +157,136, 46,123,153,230, 23, 40,142,117,166,107,131, 66, 37, 44,140,233,210,108,119,172,222, 19, 48,222,188,226,241,157,117,227, +206,181, 17,163,153,244,188, 43,132,152,136,222,227,170,163,136, 26,251,222, 47, 4, 60,175,182, 83,137,138,111,205,218,124, 8, +140, 37,211, 13, 61,130, 16, 92,162, 11,150, 51,183,142, 92,143, 36,193,197,192, 87,175, 62,225,243,175,126,134, 6,123,193,189, + 86,188, 58,236, 17, 4, 69, 43,181, 54, 92,173,204,211,104,198, 68,103, 43,141,182,180,188,185, 16,233,215,107,144,182, 0,112, +172,181, 14,241,111, 9,106, 34, 74, 45, 19,190,235,241,209, 86, 15,211,158, 41,176, 97, 0, 0, 32, 0, 73, 68, 65, 84,156,173, +113,110,233,255, 54,208, 76,192,133,184, 60, 48, 45,165,192,146,249,150, 38, 84, 81, 86,209,122,184,107, 41, 22, 45,108,213,252, + 19,181, 80, 90, 52, 66,112,104,116, 46,209,212,209,122,187,161, 90, 15,179, 48,244,137,118,173, 28,246, 19,151,247,123,114,201, +160,142,216, 65,157, 38,166, 60, 47, 17, 59,123, 13,134,110, 0,175,244, 67, 32,143,153, 79, 62,189,230,205,205, 53,231, 47,190, +129,215,136,186,209, 98, 99,234,209, 41, 34,189, 57,202,141,159, 29,152, 0,231,146,213,243, 78, 5, 41,222,114,157,206, 35,213, + 96, 70, 46,130,100, 15,117,102,114,129,226, 10,131, 11, 8, 5,239, 3,117, 55,211, 90, 69, 82, 68,165,210,147,168, 99,197, 31, + 41,238,222,145,186,136, 43,158, 46, 6, 30,157, 61,230,238,238, 83, 75, 18,184, 72,197, 89, 76,239,161, 96, 68, 5,209,192,155, +235, 91,238,111, 15,116,157,242,249,167, 95,240,234,242,150,105,222,145,107, 35, 52,168, 85,185,111, 91,174, 63,190,163,239, 61, + 67,244,204,139,132,142,194,235,139, 59,130,119,156, 29,159,242,157, 95,249,117,162,141,117,168,243, 12,195,176, 64, 92,170,125, + 46,213,222, 11,173, 52,238,239,175,240, 49,210, 13, 61,135,195, 30,197, 82, 13,157, 55,249,144, 24, 89,187, 30,183, 89,115,125, +119, 77,119,179, 66,187,129,118,152,216,239,111, 56,108, 95,241,248,201,123,172,143, 79,144,160,156,236,223,240,179,207, 43, 55, + 87,151,188,251,236, 29, 78,143,206,233, 54, 43,158, 61, 62,102,142,137,218,224, 48, 22,246,221,129, 15,222, 59,103, 56,219, 48, +229, 61, 69, 38,214,235,142,253,220, 25,152,196, 27,203,193,208,222,246,217,148, 7,133, 67,100,185, 88,186, 37, 78, 96,209, 82, +176, 94,117,145, 70, 85, 71, 23, 4,213, 96,208, 42,167,164,206, 47,101, 38,193,214, 85, 14, 58,103,132,201,138,163,180, 76,167, + 9, 23, 28,211, 97,207,187, 79,158, 83, 30,239,184,217,221,178,219,221,113,117,245,134,199,207,158,113,152, 71, 99, 90, 36, 8, +126, 96,190,207,132,206,225, 98,161,149,138,224,217,196, 21,227,161,160,110, 34,208, 83,240,116,169,210,212,147,115,160, 39,211, +130,213, 82,235, 88,112,157,145,246,154, 30,160, 57, 10, 13,169,118,121, 17, 2, 41,118,212, 82, 89,247, 43, 38, 23,168, 89,233, + 84,113, 73, 9, 27, 40,219,134,151, 74,212, 21,180, 61,206, 21,164, 20,238,101,207,253,148,184, 57, 28, 83,211,140,214, 76, 29, + 23,213, 18,199,143,227, 21,169,115,120, 34,181,131,195,152, 89, 19,152, 82,227, 71,159,127,193,217,191, 63,102,117,182,230,254, + 46,211,197,194, 81,119,142,108, 61,227,182,210,142,173, 7, 45, 8,172,131, 69, 31,227, 26,246,163, 29,168,110,209,183,183, 91, +200,247, 59, 43,177,137,194,209, 38,114,154,126,206, 88,247, 78, 57, 62, 90,211, 13, 43,198,144,121,228, 61, 31, 30,219,215,111, +142,224, 71,237,132,221, 9,108, 59,112,119,142, 71, 39,129,176,178,153,113, 31,172,210,117, 95,171,109,104,117,197,203,109,162, +253,180,112, 20, 29,251,219, 59, 78,134,137,246,248,156, 16, 61,119, 83,129,125, 65,211, 99,198, 30, 14, 2,117, 55,114, 52,244, +156, 46, 46,175, 88,117, 25,146, 22,121, 63, 47, 9,143, 86,168, 78,233, 18,212,221, 68,149, 25,213, 70, 55, 58, 6, 15,217, 59, +186,185,216, 96,151,108,133, 57, 75,179, 84,213, 92,105,109, 36, 14, 71,184,162,180, 58, 33, 56, 82, 48, 82,105,149,108,175,165, +122, 90,115, 20,138, 89,164,116,233, 42,105, 66, 71,160,213,106,190, 54, 60,234, 3,163, 10,159,222,122,194,103, 47,217, 93,220, +216,133,117, 25,160,162,177,150, 23, 89,245,161, 88, 94,151, 6,179, 69, 38,119,218, 12, 67,250, 64, 89,115,186, 72,216, 22,161, +114, 56,163,192, 45,210,172, 54, 59,217, 91,112, 11, 49,138, 37, 39,109, 6, 21,215, 89,105,137,229,107, 45, 3,158, 22,183,118, + 91, 14,102,175,214,111,238, 29, 54,117, 99,217,247, 66,123,203,145,215,133,247, 30, 31,148,118, 53,167,186, 41, 4,134,212, 12, +222,131,216,119, 54, 70,183, 51,160,195, 98, 68,112,222,178,201,193, 47,166,176,166, 84,105, 68,122,188, 66,244, 29,173, 41,196, +138,136, 21, 80, 24, 47,220, 50,244,210,132,184,180, 73,228,170, 11,154,214, 89, 68, 48,152,121, 48,161, 84,169,144,173,238,181, +239,143,204, 88, 19, 7,130, 42, 63,249,193,127, 96,206, 51,189,235,233, 26, 22,115, 74, 9, 41, 25, 23, 28,195,176,225,168, 31, +216,237,183,228, 82,105,109,166, 74, 38,122,111,209, 51,231, 44,182,181,178,106,220, 86,218,226,174, 52, 83,187, 46, 60,237,218, +172, 21,203,164,122, 97,222,239, 56,236, 71,251,217, 46,209,194,232, 19,222, 57,234, 92, 44, 26,228,140,254, 39, 11, 26, 88,150, +178,154, 71, 79,223, 97,232,123,110, 14, 35, 42, 98, 56, 97, 49, 92,112, 21, 37, 20, 65, 70,101, 28, 26,209, 39,250,104,170,137, +180, 30, 52,211, 13,131, 77, 36,181,178,223,239,201,243, 68, 63,116,100, 17, 90,243, 68, 9,212, 90,173, 25,207, 59,166, 90, 9, +222,177,146, 14,169,141,159,124,114,193,249,233, 19,158, 31, 63,165,239,132,169, 56,202, 44,214,126,164, 29,174,117,228,186,131, +108,241,196,161,247,100,233, 57,104,198, 57,139,103,105, 16,196,247,182, 22,105, 25,105, 3,149,201,204, 85,170,196,165,120,161, +228,106, 0,165,102,176, 23,230,138,122, 79,115, 66, 74,142,105,223,232,135,132,155, 70, 66, 72,164,216,243,181,231, 79,121,253, +250, 75,230,186, 76,189,206, 76,148,242, 16, 25, 21,131,255, 84, 7,243, 60,241,201, 79, 63,231, 39,159,125, 69, 41,178,224,135, +141, 54,214,245,198,229,238,187, 72,240,129, 67,153,144, 90,237,226,189, 8,145,255,242,183,191,205,217,217, 41,179, 79, 84,129, +166,129,170,137,251,237, 21, 74,163, 17, 44, 50, 38,205, 90,209,130,163,214,194, 97,127,203, 48,172,129,100,187,104, 53, 53,236, +176,219, 19,156,176, 62,234,113,226, 25, 15, 7,174,222,124, 69,215,159, 81, 68, 56,236,239, 73,210,248,232,253,196,201,163,158, +221,221, 72, 31, 87, 60,126,242,152,155,171, 75, 78,143,143,121,255,197, 47,178,122,124,198,127,246,235,207,249,252, 18, 46,111, + 50, 65,225, 54, 42, 47, 47, 50,241,248, 28,137,129,221,118,203,209,163,199, 28,175, 79,185,219, 95, 35,186, 48,160,213,246,156, +165, 64, 92,224, 87,110,169, 67,118,203, 20,110,198, 83,187,128, 42,134,135, 86,111,131, 71,195,226,173, 94, 44, 97, 35,210, 32, + 88,170, 67, 84,169, 44, 81, 80,181, 74, 82,113,137, 76, 33,226, 73,189,231,233,179,119,153,234,129,233,110,100,232, 10,223,254, +246, 9,223,253,193, 1, 45,130,182,192, 52,142,139,161,184,103, 87,102, 18, 74, 33, 82,139, 91,214, 35,158,135,108,216,202, 15, +168,116, 52, 49,205, 91,103,104,209, 67,114,212,241, 30,159, 86,184,100, 73,149, 42,129, 86, 21,223, 67,107,158, 12,134,136, 46, + 13,183,105,196,108, 23, 87,153,109,240,240,222, 83,155, 71,216,177,138,145,232,132,210,238,112, 18,208, 16,153,195,129,208, 60, +161, 54, 14,140,104,174,120, 13,204, 76,212,173,129,123,194, 96,133, 35, 45, 29, 83,139,242,253,221,103,188,252,242,154,156, 3, + 18,149,225, 88, 25,220,128,243,142, 97, 72,188,186,248,144,244,253, 99, 52, 42,249,176,229,197,211, 19,220,166, 35,103, 37, 28, + 31,129,246,111, 91, 4,157, 22,142,142, 35, 49, 58, 78,214,171,133,130, 99, 47,113,112,224,187, 72, 91,106,175,211,240,115,133, + 96,202, 16, 85, 56,238, 60,253, 26,246,197,241,110,132,163,229,143,116, 43,248,204,121,116,231, 8,181,241,209,243,115,126,237, + 23, 31,115,171,144, 5,102,247,136,204,158,151, 46,208,178, 82,238, 51,208,179, 59, 64,221, 89, 68,174, 93,101,227, 93,108, 22, + 37,229,106,199,241,243, 99,226, 58,208,121,184,189, 17,246,183, 55,132,214,131,115,228,125,161,150, 3, 49, 40, 78,109,216,168, + 4, 36,139,197, 93, 93,165,140,138,214, 70,140,157,149,135, 73, 35, 52,161,230, 25, 41,131, 49, 13,136, 20, 17,212,205, 4,141, +104,118, 72,155,223,182,146, 58,231, 33, 88,173,171,170,163,204,214, 65, 18, 30,162,231, 14,206,142, 34,167, 31,125,147,250,244, + 63, 38,125,250, 71,212,241, 43,180, 57,180,118,196,182,180, 20,171, 10, 20, 3, 45,184,133,118,246, 48,241,217,108,101,212,183, +228,157,177,104,173, 6, 9,109, 98,134,185,106, 55, 97, 23,197,118,243,152,212,137,179,239,221,150, 7, 37,222,211, 17,169,174, + 48,182, 70, 88, 56,237,226,108, 2, 87,113, 11,113,201, 38,249,234, 45,183,170,106, 17, 42,143,194,130,157, 93,144,221, 40,182, +251,110,213, 38,250,232,162, 69,197,156, 46, 15,212,102, 53,177, 49,216,102, 64, 11,170,113,145, 40,205,244, 21,156,167, 34,136, +122,164,121, 98, 90,214, 2,202, 2, 51, 49,156,163,171,101, 81, 86,132,114,176, 78, 31,245, 14,151, 28, 46, 45,146,254,188, 24, +123,106, 69,124,198, 71,219,255, 87,108,175, 45, 98,230,150,150, 35, 55,229, 13, 35,202,239,254,171,255, 18,157,110,184,120,249, + 41, 23,187,107,218, 62,147,156, 99,202, 51, 93, 90,243,238,139,175, 81,230, 74,113,194,122,213, 81, 14,247,236, 70,219, 31,111, +111,111,201,101,102,222,239, 9, 41, 17,213,218,117, 92,236, 24,146, 35, 14,145,104, 68, 13, 90,131, 16, 35,135,237,204,171,235, +175, 56,140,243, 82,155,106, 44,252,182, 24,228,250, 85, 71,157, 10,201, 5,178,155,200, 98, 81, 70, 71,225,252,236,148, 15, 63, +248,128,253,110,199,245,229, 27, 84,237,242, 52,137,225,108,115,206, 16,237, 66, 34,181,161, 49,224,170,224,179,210,188, 16, 82, +207,241,209, 10,180, 33, 90,185,190,186, 68,213,179, 94,173,108,111, 36,176, 58,222,224, 22,122, 88, 80, 37, 58,115,157,167,216, + 49,183,198,120,125,197,211,211, 99, 82,106,196, 38, 80,204,165, 31,130, 85,232,162,153,228, 18,210, 57,202,220,104, 35,168,223, +226,219, 66,201,243, 30,239, 19,181, 22, 52,131, 11, 74,174,153,216, 9,213, 43,177, 0, 93,135,115, 61,170,153,185, 20, 36, 91, +109,102,223, 41,174,154,122,225, 17,164,130,180, 10, 46, 16, 18,132, 42,156, 61, 62,225,228,236,152,139,139, 27,130,139,104, 51, + 63,132,247, 97, 49,165,217,202,232,116,213, 81,100,207,237,126, 71,109,249,109,124, 16,245,184, 10,197, 21,212, 65, 46, 6,218, + 96, 89,145,229,170,203, 26,197,243,197, 23,151,108,243,196,253,120,193,106,125,202, 59,239,189,195,246,171, 55,252,195,143,127, +200, 16, 18, 33, 26,224, 41,134,136,212, 6,209,227,171,167,204,149,174,131,110,112,236,239, 38,220, 16,217,237,183,104,171,244, +103,199, 86,138, 18,236,130,252,234,213,151, 28, 31,143,172,134,196, 56,205, 12,125,199,212,132,251,221, 87,228, 81,184,122,115, + 73, 27, 11, 41,245,164,213, 25,117,158,217,143,153,139, 85,199, 92, 42, 83,201,132,213, 0,179, 99,187,207,248,116,204,147,179, + 39,220,222, 94,115, 38, 14, 93, 15,176, 15, 72,153,205, 72,216, 44,146,134, 83,131, 57,105, 88,218, 32,237,240, 83, 21, 66,234, +108, 21,164, 51, 8,116,157,169,115,181, 69, 28, 13,159, 30, 12,133,134,167,110, 75,110,220, 59,208, 98,153,117,113,150,140, 8, +165, 48,105,230,205,254, 13, 77, 10,239, 60,127,198,163, 39,239,242,249,205,207,184,191,203, 28,135,200, 59,231,145, 47, 94,103, +200, 70, 64,212, 37, 6, 40,116,224, 29, 82, 51,208,112, 30,114,173, 22,177,213, 70, 11, 61,115,155, 80, 25, 41, 17,154, 4,162, + 76,180,220, 25,239,162,205,108,247,138, 46, 53,104,177, 10,178,244,110,135,169,210,134,138, 52,135,219,139, 65,182,164,167,235, + 19,161,102, 36,195,224, 6, 14,109,100,231,215,120, 18,154, 71, 58,223,161, 76, 22, 11,214,181,145, 27, 1, 41,133, 89,151,215, + 85, 29, 67, 31, 24,243,196, 84, 70, 54,125,133,245,128,204,133,157, 87, 90,139,180,172,236,199, 76,159,122,171,204, 13,158, 79, +190,184, 36,181,142,156, 34,110,206,156,157, 38,178,139,184, 80,120,167, 59, 99,245,151, 39,172, 87,137,203,121,228,254,122, 15, +100,116,240,124,121,113,205, 7,111,222,103,117, 28,185, 60, 64,189,191,167,239, 3, 49, 58, 60,149,245,170,255,185,244, 93, 45, + 20, 16, 23,146,169,102,204,108,250, 0,146, 25, 33,207, 35, 99, 30,153,238, 42,143,191,179,226, 60,194,249, 3,227,100,227,121, +114,116, 76, 26, 76, 70,255, 34,246,188,136,142,167,167,134,208,125, 57,195,237,250,156,211,115, 88, 43, 76,162,220,202, 49,183, + 41,216,129,175,240,229,181,112,127, 83,168,243,132,228,108, 43, 70, 13,196,180,240, 81, 90, 69, 74,179, 51,200, 53,106,109,230, + 55,138,142,181,171, 20, 21,178, 42,104,196, 77,107,202,116, 32, 56, 37, 57, 97,148,106, 7,127, 80, 92, 49, 26,168, 11, 44,207, + 39,131, 77,121,237, 45,230, 24, 65,169,104, 85,124, 23,160, 40,143,186,192,139,103, 79,216,118, 29, 63,165, 49,107,135, 59, 52, +180,108,137, 34,134,166,244,193, 52, 19,239, 77, 63,113,139,179,188, 25,189,218, 14,115, 75,155,225, 22,200,137, 96,123, 97, 34, +212, 98,147, 97,203, 14,162,129,102,104,198, 88, 55, 33, 77,233,146,183,134,180, 86,241,170, 4,177,184,155, 15,201, 48,128,205, + 14,108,231,171,113,191,197,147,107, 70,194, 18,167, 91, 58,241,122,239,200,205,163, 81, 9,106, 89, 63,197, 24,210,120, 43,239, +112,132,183,107,132,130, 46,135,133, 46, 57,109,171, 23, 85,117, 6,177, 1,198, 34,164,224, 73,189, 69, 92,194,162, 70, 20, 45, + 20, 13, 48, 54,162, 83,219, 41,170, 25,247,162,235,240,209, 28,183,125, 52, 18, 94,206,141,206,121,138,204,118,201,113,134, 13, + 84, 81,232, 34,174,122,166,150,233,221,154,169, 8,251,253, 27,158,188,255, 29,190,241,226, 59,188,190,252,156,240,225, 83, 30, +205,119,236, 14, 59,198,155, 47,217,237,239,216,110,239,249,225, 15,254, 18, 66, 79, 63, 12,188,251,206,135,116,105,224,163,143, + 62,226,228,241, 11,180,121,238,175, 94,115, 56,188,228,229,203,159,114,183,207,198,211, 70,233,194,128,142,158,236, 11, 81, 29, +199,167,231, 60,127,239,107, 92, 95,189,230,245,197,119,105,173,129,143,166,142, 96,236,113,154, 80, 75,161, 73, 49, 20,111,215, +179, 9, 61,130,181, 61,157,159, 63,198, 1,119,119,215,228, 86, 81,167, 28,173, 6,230, 92,120,232,102, 77,206,147,196,147,186, + 8, 94,169,251, 74,236, 55,168, 78,204,101, 98,125,188, 90,170, 20, 43, 87,151,183,244,113, 81,107, 98,164,202, 76, 74,157, 21, + 34, 52,168, 82,136, 49, 89,126, 25,248,218, 7, 31,113,180,129, 87, 23,215,116,111,222,176,121,244,132,232, 29, 29,142,169,205, +196,254,200,214, 44,147,162, 67,135,247,129,185, 30,240,173,225, 90,160,174,122, 8,130,211,158,164,149,169, 89, 53,106,244,144, +178, 73,159, 26, 28, 37,103, 67,229, 54,136, 49, 82,162, 67,154,205,115, 41, 98,105, 0,167,164,100, 81,169, 32,208,166, 66,115, +129,161, 63,226,189,231, 31,112,115,121,135,122, 83,145, 2,206, 58,222,245, 1,109,220,216,231, 3,251,233,142,103,239,157,176, +223, 29,184,223,141,111,125, 42,115,110,180, 57, 47, 13,138,102,202, 67,252,146,114,104,139,129, 85,249,238, 39,175,249, 96, 63, +209,173, 60, 95, 93, 92, 50, 28, 29,243,241, 79,127,204,110,183, 35, 28,157,208, 71,219, 63,139,143,150,227,175,213, 14,250, 6, + 49, 6, 54,233,152,156, 51,251,195,129, 60, 78,108,134,193, 98,155,234,144, 46,210,175, 55,200,197, 5,215, 87, 95,114,124,124, +134,247, 3,185, 86, 62,249,241,223,115,124,218,241,222,243,111, 50,214,239,243,249,151,159,162, 8,199,143, 79, 24,245,192, 7, +231, 79,185,222, 86,123,248, 23, 97,200,149,131, 58,182, 1,230, 61,124,240,225,135,220,222,188, 97, 46,123, 86,199,143,233,135, + 13,247,119, 35,218,132, 24,226, 66, 2, 52,122,151, 58,195,246,166, 24, 45,107,174,130,171, 70,132, 20,105,120, 31,192, 5,124, +180,173,121, 67, 44,105,224, 12, 41,236, 66,248,121, 12, 55,152, 31,200, 46, 79, 38,239,231, 37,221,160, 34, 92,223, 92, 65, 83, +198, 60,227,125,229,250,250,154, 39,155, 39,252,254,127,247, 47,248,163, 63,254, 49,127,252, 39,127, 69,174, 6,137, 74,235,206, +106,146, 43,164, 96,181, 86, 50, 11, 62,205,120,223, 81,106, 96,156,182, 52, 7, 74, 71,215,172,174,186,230, 29, 42, 7,179,255, +198, 13, 72,161, 28, 38,186,213,154, 26, 20, 87, 27,222,245, 84,159,209,226,136, 33,209,198, 74,117,158, 20,205,192, 92,197, 90, + 38,231, 84,169,179,224,100,194, 5, 51,155,214,176,181,232,218, 44,148,148, 9, 58, 16,171,145,243, 93,231,144,168,164, 82, 41, + 37, 82,107,181, 65,168,120,220, 88, 16, 28,101,156, 0,165,136, 18,130,210,176, 11,191, 31,123,154,236,233, 86, 3,125,115,212, +216, 56,236, 61, 89, 7, 36, 23,238,227, 30,247,250, 53,174, 21, 98, 50,118, 71,243,208,167,129,191,126,243, 19,126,248,241, 27, + 54,195, 9, 57, 10,174,220,115,114, 22,232,143, 86,180, 41,177,127,255,107,188,247,193, 57, 93,244, 92, 92, 23,154,142,132,251, + 19,210, 28,136,147,210,157,252, 28, 21, 51,102,200,101,180,116, 85,239, 57, 57, 30,254, 9, 84, 70,196, 86,138,109, 41, 26, 27, + 68, 89, 39,255,182, 71,125,173,112,186,129, 71,203, 69, 97,194,241,228, 60,112,244,243,123, 5,211, 20, 9,146,104,135,157, 41, + 63,169, 50,141, 86,214, 20,235,100,134, 78,159, 72,201, 46,142, 50, 46,109,144,210, 44,179, 31,109, 40, 81, 39,132, 96,173,157, +118, 69,169, 56, 49, 12,123, 93,160,232,193,123, 74, 81,164, 86, 82,112,120,183,178,179,214, 7, 91,245,202,178,214,104, 1,135, +176, 58, 77,248,254,148,171, 29,204, 45,147, 58,193,233, 49,174,215,135, 29,191,190,157,122,237, 96,183,195, 79, 84,151,155,231, + 3, 13,110,129,187, 60, 20,127, 44,109,170, 97,249,128,212,182,116,219, 57,103, 21,144,178,236,116, 19,111,177,143,210, 22,203, +106,176,250, 86,156,185,207,195, 98,138,107,139,228,217,212, 66,252, 49,218,206, 88,150,210, 2, 36, 82,171, 55,170,157,218, 30, +191,106,193,171,201,238,178,244, 47,123, 7,218,138, 85,138, 46, 50,123,240, 86, 51,235,196, 17,196, 62,208,213, 57, 98,122,168, +136, 16,106, 14, 6,179,240, 13,173,206, 88,234,209,106, 8, 15, 40,125,151,104,179,185,161, 9,208,185,165,219, 87,156,253,220, + 48,213, 1, 9, 72,140, 52,117,196,234,136, 78, 23,120,141,197,111,230,121, 66, 90, 34,172, 54,124,235, 59,191, 68,201, 91, 14, +119, 35,243,172, 48, 43, 46, 11, 45,121,186,147,133,250,164, 74,203, 35, 57, 31,216,239,110,240, 4,134,190,167,169,231,232,248, +148,190, 31, 8, 33, 50, 87,143, 91, 64, 30, 34, 54,233, 5, 5, 87, 97,162,146,111, 47, 56,121,250, 46, 71, 71, 3,211, 56,129, + 11,246,138,170,162,206, 50,248,121,158,241,213,189, 85,104,188,143,182,115, 70,137, 49, 48,141, 19,151, 23, 87, 28,246,123,154, + 52,134, 85,207,209,209,154,155,235, 91,136,182,139, 15,209,140, 97,213, 23,203, 18, 87, 40,190,224, 18,196, 20,233, 87, 27, 66, + 74, 32,158,253,126,162, 63,179, 86, 57,113,134, 3, 61,121,126, 70,252,161,103, 26,243,219,110, 0, 23, 60,215,183,183,188,120, +113,206,227, 71,199,188,186,218,113,250,232,212,146, 14,189, 67,102,150, 85,210, 68,201,201,144,160,187, 61,190,245, 16, 34, 85, + 22, 14, 65,181,203, 73,244, 70,113,115,189,229,211, 93,238, 56,180, 70, 11, 51,155,152, 40, 89,104, 73,136, 2,157,128, 70, 3, + 49,245,179,167,174, 18,206, 67, 96,166, 91, 37,202, 78,144, 54,226,162, 39, 55,161,185,200,147,231,143,121,252,213, 35,222, 92, +223,144, 98,180,215, 31,195,148,186,102, 74,193, 56, 86,174, 94,237,120,255,131, 71,188,255,252,140,191,255,233, 68,109,205,234, +140,253,210, 81, 32, 15, 29,225, 15,134,177, 98,223,107,121,207, 5, 60,219,253,200,179,179, 83, 82,171,124,246,217, 79,184,186, +190, 53, 78, 2,149,208, 29,211,164,145,130,103,136,199, 72,206,140, 58,146,231, 66,158,103,208, 13,222, 39,164,237,105,205, 92, +219,126, 22,106, 11, 68,151, 88,167, 53,235,245, 17,151,215,215,140,211, 27, 86,235,213, 98, 82, 85,198,237, 1, 61, 19, 3, 72, +181, 70,215, 13, 60, 59,125,143,163,147, 19, 83,229,122, 40,247, 14,124,199,172,133, 54, 55, 62,121, 61,113,183,207,172, 78, 31, +179, 57, 59,227,254,238,150,163,225, 49,155,213,154,221, 46, 44, 21,199,126,233, 30,176,216,166,168, 97,169,173,165,206, 76,149, + 66, 35, 69,165, 76, 6,164, 42,190,226,232, 77,213,195,224, 85, 94,163, 65,109,212, 88, 12, 86,169,236, 9, 88, 76, 83,229,161, +157, 80,145, 96,207, 2,135,227,118,119, 99,178,170,119,236,101,226,242,238, 13,143,223,255, 55,252,230,119,246,252,251,191,138, + 80, 61,131, 27, 24,235,150,210,130, 85, 38,171, 91, 36,101, 33,165, 21,173,121, 66,106,204,181,129,135,212, 85,242,210, 51, 17, + 21,232,140, 83, 97,240, 41,187,240,145, 50,243,190, 24,232,200, 27,240,167, 57,161,142, 7,162,122, 98,223,227,197, 49,141,149, +208,153, 34,170, 98, 28,254, 86, 51, 33, 23, 66,108, 32,137,198,204,152,133,164,112,104,247,168, 6,214,199, 3,229,208,136, 68, +170,120,196,239, 45, 25,161,142, 89, 43, 65, 38,196, 7,107,191, 11,230, 5, 82,215,227,117, 54,186,102, 29, 97, 8,212,170, 84, + 49, 19, 92,201, 43,188, 63,216,101,179, 10, 46, 30, 33,174,161, 85,232, 99, 99, 44, 30,225, 64,149,196, 97, 44,220,186, 27, 74, + 27,145,228,233, 46, 60,105,117, 76,157, 29, 63,250,248, 75,130,239,136, 36,124, 84, 98, 20,214,125,143,235, 3,157,143,124,249, +226,125, 78,159,156,178, 94,247,124,250,234,158,203, 47,223,176,241,214, 52,169, 26,255, 9, 19, 94,171, 69, 88,133, 96,205,105, + 89,232,207,126,126, 41,168, 2,253, 63, 2,201, 59,177, 60,255, 63,254,117,152,148,253,253,158, 41,239, 17,153,105, 1, 68, 38, + 27,150, 22,122, 92, 81, 35, 77,186, 42,168, 86, 74,141, 52, 58,148,140,148,153, 84, 60,174,115,140,171, 23,212,195,151,168,236, +169, 83, 37,116,142,130, 95, 90, 8,109,109, 27, 68,168, 96,170,138, 47, 84, 45, 68, 99,177, 98, 87,219,104,116, 87,113,156, 4, + 71, 23,142,144, 34,244, 2,210, 41,187,237, 37, 43,231, 77,169, 13,139,217,173,169, 29,186,193,189,141,149, 63,112,117,168,106, +192, 23,151,156,201,235,203,254, 88, 68,209,217,128, 43,205, 41, 49,184,101,234,118,164, 96,125,198, 56,203,111, 59,103,187,121, +197,150,224,226, 28, 62,218,238,184, 70, 37, 6,147,172, 61, 17,167, 70, 87,162, 45, 44,118, 35,200, 24,223,221, 45,209, 53,177, +105,218,121,171,141,141,222, 94, 44,239, 44,150,101, 14,216,229,129,160,144,194,207, 27,179,130, 51, 88,189,138, 29,216, 62, 90, +156,207,163,132, 5, 56, 19,162,163,102, 53,186,216,208, 25, 25,174, 42, 77, 23,153, 63, 6,107,171, 67,145,234,151,222, 92,195, +185, 58,183, 84, 16, 56, 71,205, 14,159, 34, 82, 77,166, 9, 62, 49,205, 51,251,195, 76,109,247,252,221,159,255, 95,120,127,202, +227,179, 15,249,230,135,239,211,157,126, 11,230,204, 63,252,236,111,248,226,243,159,218, 5, 37, 24,173, 78,176,250,218,224,148, +146,149,220, 42,187,221, 13, 78,133, 46, 13, 12,199, 39,196,193, 58,229,131, 58,124, 81, 90,172,196, 96,249, 4, 31, 58, 78,142, + 31,115,255,213,143,168,173,225,147,193,104, 84,221,178,159, 15, 20, 45,180,102, 26, 77, 67,241, 45, 25,198, 84, 11, 33, 69,138, + 20,242,238,142, 92,205,109,122,178, 94,225,117,233,155,214,229, 77, 25, 28, 49,121,219,105, 70, 15, 41,208,135,142,121, 62, 16, + 66,228,244,100,195,106,221,113,127, 51, 18,186,142,205,201,192,106,125,130,106,162, 76,149, 62,246,196,148,104,227,193, 28,192, +115,229,197,251,207,153, 51,140,219,145,240,232,132, 95,248,250, 55,121,255,197,115, 42,129,150,173,141, 43,132, 21,178,228,212, +125, 53,153, 90, 66, 49,198, 53,141,190, 79,196,154, 49, 42, 66, 91,222,151,129,105,223, 72,100,170, 52,196, 67, 65,104, 26,240, +115,165, 14,246, 51,225,144, 45,183,174,214,122,215,173, 19,117, 20,230, 41, 83,114,197, 71, 71,140, 3, 94,246,200,184, 39,132, +196,175,254,242,175,242,211,143,127,200,151,175, 47,205,108,234, 61,168,221,230,141,188,159,216,141, 7,212, 61,166,219, 12,116, +125,100,220, 90,150, 85,162,105, 92, 49, 44,229, 37,234, 44, 18,186, 16,201,112,198,115, 32,192,118,170, 76, 63,187, 49, 73,222, +111,109, 13,161,206, 12, 92,165, 18,131, 65,159, 98, 80,180, 11,116, 50,176, 45, 66,206, 19,210,172, 33, 77,107,163,230,145,146, +108,114,112, 88,158,221, 71,243,195,168, 40,173,206,236,246,133, 20, 34,155,245,154,146, 65, 98,130,206, 86, 79,143, 78, 79, 89, +159,111,200, 45,112,249,229, 4, 76,164,238,136,169, 4, 98,177, 34,197,251,253, 72,107,194,166, 31,120,247,233,251,124,255,213, + 95,179,219, 94,177, 62,123, 68, 63, 28, 51,239,175, 41, 11,163, 61, 5,255,182, 38,215, 47,228, 69,187, 92,154,163,127,154,171, +117, 54,121,165, 86,165,204, 35, 93, 26,232,215, 27, 52,207,204,243, 72, 76,105,233, 51,136,132,104, 80, 27,188,173, 7,213, 9, +177,115,120,215, 64, 13, 20,226,189,209, 47, 93, 12,184, 0,100,229,255,249,211,239,242,141,111,252, 33,223,248,232, 3,126,227, +215,191,193,231,175,110, 64, 2, 55,123,199,213,253, 22,239, 19,174, 5,130,159,168, 94, 81, 9, 36,223,200,217, 36,115, 92, 66, +139,165, 76,130, 4,212, 85, 66, 77, 11,145,243,222,156, 73, 30, 92,233,241,174, 81,212,122, 48,172, 3,161,144, 98, 7, 41,146, +141, 61, 12,222,211,180,218,228,217, 58,154,179,116,131, 56, 7,179,165,108, 96, 68,177, 21, 30,173,208,245,199, 6,202,241,133, +221,126, 71,148, 8,189, 67,199,138, 58, 71, 93,247,232, 44,148,118, 32, 49, 16, 93, 71,174,138, 31, 42,147,100,214,206, 17, 66, +199, 30, 97,156,246, 8, 35,177, 83,154,207,248, 18, 33,154, 34,229, 68, 40,226, 16,118,212,220,209,122,161,102,143, 20,207,208, + 57,114,236, 13,193,155,119, 20,103,159, 5,241,224,239,154,165,142, 90, 71, 77,208,213,202,205,106, 96,170,149, 21,137,207, 62, +121, 69,110,158,181,235, 16,221, 51,181,201,152, 36, 67,199, 31,254,201, 95,243,221,159,188,207,240,244,152, 81, 3,135,171, 43, +158, 61,118, 28,159, 28,155,177,117, 23,120,247,228, 5, 71,105, 73,105, 21, 8,255,168,237, 69,108, 51,252, 79,126,221,238, 51, +247,187, 59,124, 45,204,211,132,232, 1,241, 51, 77, 60, 99, 50,229, 5, 49, 19,115,240, 17,215, 39, 14,251,137,206,175,240,206, +145,139, 69,223,158, 61, 61, 34,156,127,157,253,229, 5, 50, 10, 93, 12,180,150,141,159, 17, 61, 84,123,158, 55,247, 64, 66,141, +111,227,228,213, 59,188,184, 37,154,108,207,184, 92, 10,243, 78,105, 23, 23,108,111, 51,251,121, 71, 24,149, 94,236,182, 18, 81, + 79,109,197, 36,170, 5,227,170, 11,140,196,171,237,174, 68, 22,103,131, 3,169,182,215,118,222, 19,156,183, 82,131, 96,127, 55, +169,145,169, 80,136, 24, 69, 45,250, 98, 84, 58,162, 33, 76,189,229,222,173, 43,221,234, 15,181,139,200,210,122,101,197, 42,246, +128,116,120, 51,122, 5, 71,109,101,217, 93,216,161,236,124, 64, 60, 36, 13,136,218,215,170, 90,249, 8, 78,150,138, 73, 89, 72, +107,160, 90, 77,254,240, 17,239,236,239, 58,191, 52,199, 57,107,116, 11, 41,162,190, 82,150, 56, 86, 12,145, 20, 42, 77,236, 80, + 14,173, 48,138,218, 5,160,202, 82,133,106, 32, 30,231, 33,183,182, 16,234, 2, 1,235,164, 87, 2, 18,148, 96,153, 65,251,186, + 87,238, 47,111,248,248,147, 47, 64, 28, 63,253,201,247, 9, 49,178,234,215,252,229,122, 67,191, 57,229,217,227,247,233,163, 99, + 62,220, 27, 34, 50,215,165, 24, 70, 30, 20,110,115, 41,107, 88, 12, 88,142,167,167,199,184, 20,201, 18, 25,210,128,119,142, 70, +195,135, 53, 82, 71, 90,203, 56,141,244,189,227,243, 87,159,227,151, 53,137, 69,157,150,127,183,131,226, 45,165, 96,210,149,241, + 8, 68, 45, 97,112,122,116,134,211,198,118,220, 83, 23,201,242,252,244,140, 60,238,104, 98, 13,114, 78,109,218,113, 93,135,206, +198,237, 71,149,171,114,203, 48, 56,230,169,177, 89,109,120,124,122,194,213,229, 29,189,172, 24,226,192,250,120,195,201,233, 17, + 58, 59,180, 38,214,253,138,157,155, 80,132, 34,133,175,127,244,132,243,205, 17,127,244,103,127,205,227,119,206, 57,123,250,158, +153,158,202,196,186, 37,180,247,180,216,153,225, 43, 23,156, 84,112, 61, 45, 85,218,164,196, 52, 80,154,229,249,155,247,228,113, + 38,249, 72, 72,150,162,104,181,226,131, 73,145,101, 20,124, 20,154,247,150,247,167,209,165, 72,169,224,250, 74, 8,145,150,103, +186,206,145, 91,160, 56,179,164, 4, 32,197,222, 46,146,115, 68,186,202,147,231,231,220,239, 14,220,221,236, 77, 74,246,142,152, + 58, 68,132,185, 21,214,213,113,115,127,199, 87,111,182,124,240,238, 35,222,123, 46,124,246,217,107,198,210, 56, 62, 90,241,222, +251, 79, 72, 78,249,248,227, 87,108,247,197,248,229, 34,248,206,226, 95, 18,172, 13, 81,100,121,207,247, 70, 73, 84,177,124,252, +118,183,231,228,228,132,105,202,236,247, 91,214,171, 21,155, 97,195,106,189,226,118,127,224,126,123, 67,203, 51, 57,207,172,214, + 71, 12, 67, 79, 85,152,166,130,248,204,118,159, 9,195, 96, 40,232,250,128, 49, 21,124,240,212, 92, 80, 85,162,139,132, 46,176, + 90,119,228,195,204,237,224,248,193,255,247,191,115,118,124,204,119,126,227,247,168,177,153,211,252,160,220,220,237,136,109, 75, + 47,149,231,207,158,243,233,201, 49,119,219,107,134,205, 49,155,126, 69, 25,205,225, 27, 30,184, 19,174, 45, 41,155,133,143,190, + 20, 54,181, 34,246,236,146, 96, 49,183, 24, 81,109,156,158,157,243,225, 47,254, 2,173, 84,238, 46, 46,120,245,250, 75,187,228, + 47, 41,141,232, 2, 56,107,138, 12,178, 36,104,130,135,154,145,197,236, 41,197,208,216,113, 25, 10,126,242,242, 75,254,221, 31, +252, 33,255,195,127,255,223,240,175,127,239,183,248,223,254,224,143,249,233, 39, 95,176,234,123,126,247, 55,126,145,191,255,228, + 75,238,118,123,212, 69,124, 54,169,181,116,205,202, 96,212, 17, 58,104, 69,240,213,227,123, 91,143,145, 13, 33, 42, 2,212,134, +174, 3, 97, 50,222, 66,138, 54,245, 6,215,152,179, 48,197, 76,202, 16,162,152, 9, 14,200,135,204,106,216,160, 28,144,108,241, +204,234,173,207,162, 77,158,160, 13, 92,134, 85, 71, 44, 3,165, 56,202, 52,226,186,137, 46, 37,100,154,201,147, 95,148,198, 74, +167, 30,241, 11,135, 1, 67,145,102,157, 88,183, 30, 25, 51,163, 43,196,184, 54,111, 81,174, 40,246,222, 71, 51, 49, 28,145, 73, +168,220,195,242,204,100,104,228,124,143, 76, 64, 58,193,215, 61,186,180,252, 57,146, 93,198,194, 72,110, 19, 82,123, 86,238,148, + 42,247,212,114, 64,231,200,236, 34,174,238,113,140, 52,183, 98, 47,141,224, 26,247,218,177,238, 11,226, 61,109, 82,122,223,248, +209, 87, 35,255,240,197,231, 68, 25, 40,209,227,147,208, 77, 21,215, 25, 83, 36,196,192,159,255,237, 51, 78, 54,103,244,113, 67, +158, 43,239, 60,143, 60,127,126,202,217,201,138,235, 61,156,169,231,131,143, 78, 89,175,108, 15,127,119, 53,242,248, 28, 86,238, + 93,182,183, 29,165,238, 80, 55, 81, 14,102,152,172, 65, 17,103,171,151, 67, 45,184,193, 19, 82,143,182, 9,231, 76,237,142, 73, + 57, 62,234, 24,125,135,140, 7,186,216,168,206, 8,161,170, 86,166, 86, 90,229, 80, 76,249,114,222,210,104, 97,233,215,200, 40, +205, 89,218,203, 98,209, 1,239, 61,183,110,195, 15,238,143,185,184, 58,144,184,183,245, 33,137,156,242,178, 83,199,204,106, 14, + 43, 61,104,117, 65,169, 58,193, 58, 81,252,226,124, 23, 51,130,121,139, 90,225, 13,103,106,249,117,143,249, 60,244,173,123,221, +187,182,160, 75,141,176, 70,176,195,214, 97,123, 74,231,148, 20,149,169,153,124,150,188,160,205,242,166, 42,129,232, 42, 4,147, +216,189, 26,247, 90, 84,169, 77,232,240, 84, 10,179, 40,209, 57,130,179,189,112, 85,197,249,246,143, 84, 6,115,203,187,176, 92, +131,154, 44,172,230, 72,169,149,228, 59,130,199,130,255,181, 17,156,253,191,145,165, 68, 38, 38, 84,133,105, 55, 25, 16,192, 27, + 24, 71,164, 49, 31, 26, 26,194,242,189,173,207,220,227,104,209, 26,150,156,218,110,194,227,168,206, 81,107, 99,149,220, 50,100, +153,210,161,222,176,164,222, 57,106,205,108,183, 51,119,219,107, 46, 94,253,212, 34, 72, 97,153, 22, 44,137, 99,182, 69, 93,242, +231, 30,139,249,137,209,252, 66,151,104, 75, 12,198,227, 40,206,227,187, 68,223, 29,243,173,175,253, 38, 87, 23,255,192,229,182, + 50, 29, 26, 55, 87,111,222,198,226, 4,139, 79, 4, 18, 99, 57,216, 52, 17,108,117, 98,105, 7, 97,158,103, 30,157,156,112,126, +210,113,121,121, 71,205,153,138,114,188, 26, 56, 59, 59,225,179,221,173,169, 48,162,224, 26,189,179,104, 18,193,177, 82,184,217, +223,113, 59, 70,186, 59,199, 23, 47,191,199,250,244, 20,161,231,236,232,148,224, 29,111,174, 38, 86, 39, 35, 71,231,153, 24, 18, +125,215,113,126,118,204,213,205, 29, 49,116,116, 93, 96,191,159,184,189,219,241,230,250,128,115, 3, 71, 67, 34,103,161, 75, 66, + 92, 41, 99,174,180, 67, 35, 97,128, 23,240,136,107,118,160,251,158,220, 10,110,174,248,206,145,151,162,154, 74,160, 22,135,104, +165,115,129, 92,148, 42,145,192, 76, 83,103, 85,184,213,211,187,140,247, 27,196, 87,146, 15,214,248, 85, 50,115, 8,212,234,169, + 84, 98, 3,105, 5, 15,246, 80,235, 26,119,215,111,208,185, 90, 78,122,121, 87, 90, 97,144,121, 48,168,149,219,109,227,254,135, + 95, 49,151,194,217,215,122,126,225,235,207,248,206, 47,127, 72, 19, 97,123,121, 75, 63,172, 56, 76, 35,171, 85,199,221,118,162, +235, 28,171,213, 64,174, 22,241, 4, 65,131, 85, 1,227,148, 92,140,116, 24,131,149, 63,156, 14,194,111,255,214,115,190,251,195, +151,124,254,241, 61,231,167, 39,108,206,143,209, 93,131,187, 45, 55,215, 23, 56,224,217,243, 15,120,250,228, 9,126,232,113, 10, +165,121,166,125, 70, 28, 28, 31, 63,198,135,142,237,213, 53,227, 60,162, 78,104, 98,245,162, 27, 10, 29, 29,193, 7,178, 10, 77, + 42,218, 38,174,183, 23, 56,175, 76,203,238, 58,111, 51,187,220,152,198,215, 28,201, 29,179,175,172, 86, 3,239,188,251, 1, 63, +251,241,223, 51,221,223, 18,195,192,241,241, 19,106,109,204,243,110,225, 95,152, 99, 61,245,150,162,152,218, 76,205,149,232, 61, +195,250, 17,247, 55,215,132,152, 8,209,153,114,161, 2,185,225, 90,229,249,187, 79, 57,204, 7,110, 46, 46,113, 49, 44,253, 20, +102,116, 12, 78,241,193,234, 75,141,157,241,144, 16,192,166, 97,167, 56,177, 84, 78,169,194,238, 80,112,195, 49, 79, 94,124,147, +211,211, 63,225,227,159,252, 3,191,255, 59,191,195,127,251, 95,255, 43,254,237,255,241,103,252,223,127,252,183,236,231, 76, 31, + 29,234,102, 82, 1, 23, 55,148,166,212,253, 12, 71, 61, 93, 53,167,247,216,132,193, 71, 84,246, 20, 73,118,200, 29, 4,245,141, +228, 19,115,174,184,208,104,179,149,217, 36,122,187,208,104,177,127,107,138, 16,132, 57,239,232,186,132,248,128,212, 70, 16,168, +190,225,235, 1, 73,130,106,194,207,149, 18,193,139,153, 46,141,198, 54,209, 69, 67, 78,183,185, 88,145,200, 65,112,233,200,208, +166, 34,148, 58, 82,235,196,168, 5, 52,224,155,103,150,108,165, 77, 46, 17,210,162,154,102,101,102,143, 58, 79,168,130, 23, 83, + 12,124,105,212, 41, 35,206, 19,219, 29,226, 29, 99,158,168, 18,112,105, 77,146, 25,157,150, 62, 14,151, 57,184, 59, 82,236,241, + 97, 99,245,220,146,153,243,150,147, 62, 81,230, 12, 65,168, 49, 18,202,196,174, 9, 65, 18, 62,194,174, 84, 98,237,113,117, 75, + 23, 38, 92,245, 52,129, 67,173, 48, 21,240, 27, 84, 50,183, 23, 87,104,141,164,116, 6,173,241, 31, 86,149,212, 26,126, 72, 16, + 54,116,181,113,118,116,198,209, 42, 82,188,242,249,171, 87, 28,118,111, 44,101,209, 12,249,186,218,156,144,206, 79,152,167,198, +237,216,113,127,123, 65,140,183,196, 89,209,113,161,109,182,133, 14,169, 21, 21,232, 66,207, 62, 13,182,238,197,153,122, 92,172, + 37,148,100,117,227,169, 91,145,235,193, 6,204,210,104, 78,222, 22,143, 65,160, 58,243,126,149, 92, 24, 2,252,202,215,223,229, +163, 95,249, 85,182,223,191,225,245,205, 15,168,108, 57, 28,148,239,124,116, 66,180,124,186,205, 99, 34, 75, 87,185,122, 50,178, + 62,150, 0, 0, 32, 0, 73, 68, 65, 84,104, 30, 9, 10,161, 17, 30, 36,243,229, 86, 27,253, 82,212,178, 84, 64, 6,171,164, 65, +189, 91,200, 89, 86,198, 16,150, 51, 84,157,208,180, 46, 82,167,185,202, 69, 20,213,194, 84, 18,162,141,212,117, 68,231,201, 82, + 76, 74,119,139,235,221, 5,203, 88, 58,147,195,194,242,176, 86,175,214, 92, 38,230,212,111,106, 21,142,193, 89, 93,163,149,180, +216,222, 13,239,113, 62,217,135,116,153, 66,113, 74,212, 96, 55,244, 20,232,106,163, 72, 35, 75,160,239,226,219, 98,122, 39,141, +134,152,105, 40,218,234,161,149,165, 14,114,233, 92, 71, 28, 89,204,193,152,212,246,210, 72,195,165,128,115,205,194, 51, 75,171, +214, 52,122, 82, 48,232, 77,242,209,140,106,216,247, 84,191,176,146,188, 93, 4, 68, 45, 50,231,130,201,161,194, 67,111,160,224, +189, 25,255,140, 96,100, 32,136,237,246,192,163, 39,239,144,142,158, 50,116,167,244,157, 50,142, 35, 45, 59, 66, 92, 49, 78,153, +117,223,243,249, 39,223,227,112, 56,224,221, 2,243, 88,138, 66,156,119, 72, 51,220,109,195,225,213,222, 92,173, 52, 30,157,157, +242,248,244,132,233, 48, 51,150,106,242,100, 85, 86,171, 13, 49, 5,198,253,193,202,103,180,226,194, 64, 58, 90, 27,115, 62, 42, +179,131,171,155, 29, 78, 31,113,177,187,226,110,119,203,246,176, 35, 6,199,249,163,119,108,189, 83,132, 79,126,252, 9,175, 95, +126, 78,236, 2,169,239,185,189,185,103,179,142,116,190, 35,118, 29, 87, 55, 91,126,233, 87,127,141,127,253,228, 67, 54, 39, 3, + 49,109,240, 13,138,142,236, 23,251,168,132, 74,158,227,162, 0, 57,163, 80,141, 86,195, 27,122, 40,181, 99, 26,183,136, 15,184, +190, 51,206,123, 81, 90, 45,236,151,154, 79, 97,178,221,170, 68, 66, 21,122,103,209,149, 97, 21, 65, 26, 53, 43, 41, 84, 52,118, +148,234, 8,173,218, 45,187, 55,121,124,174,224, 53, 82,202,150, 24,133,185,154, 63,163,137, 95,164, 63, 65,117, 90,208,200,158, +220, 28, 20, 51,194,125,117,117,207,175,252,230, 55,248,231,255,209,175, 81,220,158,251, 87, 23,252,205, 95,189,228,199, 31, 95, +114,125,127, 32,132,192,106,213,153,126,146,205,216,229,150,124,169,115,130, 52, 93,100, 91,161,235, 29,155,213, 49, 90, 39, 94, + 60, 61,230,183,126,245, 63,225,127,250,159,255, 16, 23, 59, 82,234,136,105,135,147, 74,215,117, 60,123,250, 46,199,143,158,144, +124, 66,180,195,105,166,150,145,105, 30,141, 47,161, 48,244, 39, 12,239,118,236,111,239,217, 30,238,161,217, 42, 96,142,137, 77, +127, 68, 23, 60,243, 56,114,123,125,205,251,167,194,123,143,158,160,171,129,150, 71,170, 15,204,115,230,240,230, 11, 86,171,107, +186, 77,160, 52,207,197,245, 27, 94,126,241, 25,185, 89,129, 76, 63, 56,186,225,132, 50,110,169, 85,173,156,197,131,208,240,101, +198,117,129,227,180,161, 36,207,254,176,227,249,139,247,121,242,244,140,151, 63,251,194,220,193, 46,160, 52,162, 55, 72, 75, 41, +194,166, 95,115,161, 21,223,108,213,168,234,240, 33, 18,186,100,123,236, 90,233, 98, 68, 80,178, 84,130, 6,171,157, 86,181,207, + 92, 48,186,230,103,175,174,249,155, 63,253, 30,191,255, 95,189,207, 7,239,189, 64,154,227,114,119,197, 52,222, 51,132,153,111, +125,227,140, 87, 95, 22,182,179, 41,135,179,100,122,217,219,231, 41,122,194,100, 57,241,185, 57, 6,239, 41,174,217,154, 44, 20, + 42, 38, 79, 35, 7, 90, 72, 84,231, 8,185, 18, 53,225, 59, 71,106, 25, 21,225,144, 43, 3, 17, 95, 4,219,228, 8,121,116,144, + 44,110, 89,180,226, 66, 34,231,137,212, 15,120, 87,104,234,161, 42,161, 21, 66,191,226, 48, 41,190, 84,220,176,194, 45,233,159, + 24, 61,206, 37,144, 70,150,145,134,103,192, 17,151,210,169,224,148,234, 49, 85, 84, 4,169,153, 54, 26,134, 52, 68, 65,203, 64, +240,145, 70, 91,148,216, 2,121, 99,220, 19,183, 36, 3, 52, 26, 11, 95, 14, 12,193, 49,231,106,113,216, 38,184,126,192,171,103, + 62, 20,196, 93,209,121, 7, 45,225, 80, 14,226, 44,127, 63, 23, 36,103, 92, 74,104,203,228, 90,208,232, 72, 7,143,180, 66,150, + 3, 99,112,132,190,199, 77, 66, 46,197, 88, 12,245,158, 92,196,226,168, 62, 80,154,195,133,145,178,159,200,179,162,247,205, 98, +146, 53,240, 38, 5,100,204, 20,167, 72,189, 71,155,146,101, 6, 38, 66,181,181,136,177,254, 29,234, 18, 41, 52,196,203,114, 62, +154,162, 73,179,104,181,184, 64, 45, 19,251,105,226,182, 93, 80,117, 38, 54,243, 93,169, 95,222, 91,162, 75,180,119,103,195, 21, + 11,221, 52,218,115,201,163,248,174,210,106, 88, 86,164,137, 80, 38, 62, 56, 31,248,232,235,142,191,252, 65, 69,182, 74,241, 10, + 97, 98,181,122, 70,120,250,228,236,127,124,216, 33,249,101,191,174,216,116,230, 22, 34,153, 42, 6,112, 89, 14,228,232,140, 64, +231,150, 47,122,239, 76,218,194,166,114, 22, 41, 95, 22,200,140,143, 14,151,146, 73, 18,206,166,210,214,108, 82,101,233, 74,126, + 27,145,115,118,113,112,222, 78,170,135, 41,223,249,128,136,253, 27, 2,222,118, 48,206,155,187,220,179,100, 79, 77,117, 72,206, + 72,105, 52, 5, 93,140, 96,210,136,203,254,209, 45,217,247,148,122,124,176,195,255,225,255, 34, 44,187, 22,177,216, 90, 69,112, +206, 19,176, 15, 58,206,126, 47, 26,208,100,135,225, 16,194, 2,239,193, 34,121, 64,145, 10, 85,150, 88,160, 97,108,131,127,160, +239,121, 82,234, 56, 57,217,112,114,188,102,189,217,112,116,212, 19, 22, 68,126, 45,229, 45,159, 94, 45,106,176,168, 33, 15, 36, + 39,219, 49,226,121,155, 90,112,206, 49,142, 7,246,247, 91,110,111, 47,217,110, 47,223, 2, 60,208, 70,107,133,195,118, 66,117, +226,245,197, 75,118,251,145, 16,252, 91,192,140,226,137,113,201, 0, 55,161,182, 70,105,149, 90, 50,169, 75,124,253,189, 23,164, + 46,240,250,230,150,105,158,109, 9, 21,192, 69, 83, 41,238,111,110,109,186,240,129,174,219,240,232,201, 57,143, 30,111,168,213, +110,184, 55,151,183, 92, 92,191,225,238,246,146, 38, 66, 80,177, 98, 56,111,142, 79,245, 54, 25,205, 99,102,191,223, 49,238, 15, +196,228,233,134,200,208,245, 4,129, 34,194,253,221, 45,121, 60, 48,229,202, 97, 63, 50, 79, 35,243, 56,147,115,163, 79,129, 46, + 26, 3,124, 86,112,174, 26,228, 72, 33,123,123,216,104,205,246,158, 81,165,200, 76,203, 21,154,185, 81,173, 67, 36, 27,101,208, +121, 82, 39,203,197, 81, 8, 39, 29,165, 9,210, 10,235,206, 25, 37,111, 22,235, 2, 16, 91,133,116, 17,124, 49,131,232,110,127, +107, 37, 16,206,113,241,230,150, 55, 87,247,102, 18,117,142,210,228,193,110,186,116,134, 87,112,198,214, 15, 17,190,249,205,231, +188,122,125,193,159,253,233,247,152,246, 19, 18, 2, 62,121,230, 82,169,217,214, 56,165,180, 37, 45, 18, 12,209,178,172,154,156, + 42, 62,120, 98, 76, 4, 31, 57, 62,234,216,239, 38,126,246,229, 37,207, 30,111,120,245,213, 53,215,119, 19, 39, 71, 27,154,204, +188,185,185, 98,189, 62,225,201,163,119,168,173, 80,201,248,106,109,141,187,105, 94,168, 86,129, 82, 27,170,197, 46,218,193,170, + 81, 75,153, 57, 63, 57,227,249,251, 47,152,155,112,245,250,134, 90, 51,231,231, 79,232,215,231,124,251, 91, 95,231,244,236, 9, +115,109,236, 15,123, 46,191,252, 17,167,113,203,215, 63,124,206,209,209, 17,115,110, 28,110,111,249,248,227, 31,219,206, 30, 83, +174, 28,176,219,221,210,202, 72, 23, 59,235,105,192,179, 26, 18,167,231,214, 15, 31, 99,164,136,103,123,119,201,215,190,254,109, + 78,207,207,184,189,189, 67,242, 76,151, 34,103, 79, 30, 3,106, 69, 45,120, 46,111, 46,205, 83,210,204, 64,231, 88, 76,109, 84, + 91,215, 53, 56,228,153,150,179,197, 89,101, 25,248,107,102,206,153,176, 0, 64, 62,123,125,193,123,207, 31,209,201,138,191,248, +155,239,179,221, 11,231,231,143, 57,236, 70,222,125,178,225,209, 81,207,253,190, 82,114,193,171,241, 32, 92,140,184, 32, 36,215, + 44,137,211,236,178, 47,218,204,189, 95,172, 58,182, 53, 59,228,188,139,182,182,107, 38, 49,135, 16,201, 84,164,130, 11,145,210, +148, 38, 25,245,198, 21,175,205,122,209,209,102,102,212,230,150,134,198,136,151, 70,109,160, 45, 80, 69, 81,205,132,133,169,238, +131,183, 46,239, 32, 52,137,148, 50,227,162,121, 10,172,119,126,180,125,183,243, 20,105,204,197,186,191,141,222, 55, 45,171,208, +106,230, 77, 5,105,142, 41,239,161,101, 90,155,161, 75,168,152,219, 95,219,132, 74, 94,138,141,132,178,175, 52,167,136,236,169, +174,153,239,200, 25, 75,189,201,126,121,254,100,186, 0,101,222, 82,164,216, 65,216,242,162,250, 6,170,100, 74, 62, 32,109, 70, +171,149, 83, 77,121,164,140, 35,173, 40, 62, 31,112,174,162,117, 54,133, 88, 26,181,140, 86,137,218,238, 40,211,222,160, 97, 8, + 77,118, 84,201,150, 74,104, 35,218, 50,170, 51,193, 21, 84,178,189,142,206,218,113, 28,106,117,202, 1,180, 85, 18,166, 80,149, + 86,236, 92, 91,210, 43,161,115,104,141,220,108,247, 28,238, 63, 5,217, 25, 33,212, 5, 26, 98,112, 44, 59, 44,236, 57, 44, 86, +121, 45, 90, 22, 86,129, 41, 92,190,197,229, 76, 21, 40,194, 32,153,255,244,215,126, 25,121,231,159,241,119,223,251,130,122,253, +247, 4, 13, 68,148, 95,253,198,115,226,219, 61,186, 44, 13, 70,206,118,190, 44,102, 51, 59,214, 23,201, 24,165,115, 75, 60,235, +193, 96,176,208,111,204,198, 98,121,111,195,199, 26,228,194,135, 37, 87, 90, 27, 69,149, 62, 26, 0,197, 57, 19,147, 85,109,199, + 25,151, 82,146,164,202, 92, 29,174,179, 55,164,168,218, 14,205,179, 20,202, 68,188,183, 9,179,105,163, 22, 33, 68, 59,148,157, +211, 37,183,186,220,238, 69, 44, 67,157,108, 10, 53, 31,151,237, 51, 13, 39,219, 72,193, 32, 39,101,201, 47,199, 96,145,152,172, + 75,159,185,154,193,166, 4,183, 84,209,154,129,197, 59, 71,203, 13, 31, 19,205, 27,100, 63,122, 99,107, 87,215, 8, 41, 25,116, + 0, 51,199,181, 37, 62,244,240,103,196,195,230,232,136, 16,237,208, 73, 41,218, 26,160, 9,227,161,112, 24, 15,236,199, 3,135, +105, 98,158,170,237,201,154,233, 34,110, 57,236,189,149, 80, 45,157,244,182,163, 41,109, 70,199,153,105,127,203,221,229,203,133, + 16, 20, 9, 33,112,122,246, 30,239,190,243, 28,173,198,242,143, 62,226,122,123, 56, 7,239,141, 85,175, 15, 78,225, 5,157, 25, + 34, 39, 71, 39,204,211,204,253,152,153,230,250,118,117,208,117,107,130, 31,120,115,241,134,237, 97,178,168,163, 26, 45,201,249, +128,215, 64, 8,142, 86, 71,166,177,224,156, 29,144,195,106, 69,183,238,153,166, 76, 45,150,221,174, 53,155,236,159, 28, 94, 34, +157,119,116, 36,230, 89,217,202, 76,138,158,182,107,220,221,155,195,124,211,223,211,109, 58, 60,118,128, 37,239,217,172,143,120, +246,238, 51,222,121,231, 49, 95,123,241, 53,126,246,241, 75,164, 76,196,174,224,102, 53,154, 26, 13,143, 48, 21,129, 69, 41, 73, +189, 25, 32,107, 19, 51,246, 45, 20,187,164, 61,141,108,135,113,105,132, 98,135,240, 84,237,193,239,165, 82,164, 48,183,198, 42, + 88, 42,130,224,136, 46,112,191, 29,185,157,175, 88,133,142,152, 28,165,152, 99,221, 7,191,168, 69,182,162,177,155,160, 67, 74, + 69, 81, 86,177,227,246,245, 61,223,251,201,103,188,252,244,146,211,227, 35,190,249,237,119,120,252,206, 9,207,198, 19,246,119, + 35,181, 61, 16, 20, 43, 84,107, 51,116, 97, 1, 5,133, 37, 65, 80, 27,177, 11, 68,191,226,120, 45,220, 92,237,248, 95,254,215, +191, 96, 63, 79,164, 24, 25,190,253,109, 66, 23,240, 18, 8, 41,112,123,184,167,115,129,225,104,197,102,125,206,201,211, 71,188, + 72,158,195,205,200,188,223,115, 56,220,177,155,247,228,189,210,170, 82,106, 49,252,113,104,108,134,142,117,255, 24, 93,159, 82, +238,183,100,153,185,159,111, 57,147,247, 24,101,203,184,223,242,230,226, 51, 98,190,226,195,239,252, 18, 71, 39, 1,169, 43,134, +254,192,217,147,167,252,194, 55,127,137,195, 97,207,245,213, 21, 37, 79, 28,109,206, 56, 26,142,185,159, 38,178,206,116,206,145, +186,142,212, 69, 66, 13,132,181,195, 53,161,239,123, 14,251,145, 79,126,250, 99, 75,157, 16, 88,159,157,112,250,244, 41, 87,151, +151, 52,245,244, 93,207,106,181,102,221,173,201, 50,154, 7,161, 46, 7,185, 58,164, 90, 49,149, 58,165,213,106, 23, 59,171,247, +192,135,142, 95,254,214, 51,142, 54, 43,190,247,131,151, 52,173,124,245,250,130,127,251,239,254,144,127,249, 59,191,193,147,119, +207,248,244, 71, 23,252,240,239,190,207,211, 23,239,240,249,103,175,248,207,255,197, 63,227,228,236,140,191,252,171, 79,184,157, + 22,124,109,109, 54,113, 15,107,252,221, 22, 31,102, 90, 14, 22,188,142,230,227,199, 53,195, 42, 87, 71, 45,149,208,139,145, 32, + 81, 74, 25,241,222,227,134, 64,173, 75,169, 82,112,248, 50, 66, 21,114, 45,244, 46, 65,112, 20,105, 11, 74, 55,178, 10, 22, 77, +213,160, 52, 9,132, 32, 4,177,122, 73,117,145,156, 27,193, 25,147, 33, 12, 66,136, 22, 49, 46, 57,144,232, 77, 9,212, 74,144, + 3, 46, 68, 58,140,113, 78,155,145, 4, 65, 27,161, 84, 83, 69, 92,161, 53, 33,121,227,150,180, 10,174,217, 37, 73,253,194,142, +104, 80,138,173, 55, 92,205, 20,109, 4,237,173, 23,195,141,212, 52,211,251,101,197, 58, 78,248, 80, 24, 75, 66,212,227,213,131, + 31, 16, 85, 10,153,228, 43,174, 21, 40,142, 22,205,120,216,230,131,109, 88,179,165, 49, 66, 20,242, 60, 65, 76, 56,111,209, 91, +137, 9,218, 14,201, 51, 77, 51, 49, 64,205,130,239,103, 74, 85,180, 22,134,144, 40,128,202, 68,147,100, 6, 81, 21, 90,205,248, + 2,154,150,102,211,169,226,147,163,170,162,197, 84,193,224, 44, 71,229, 66, 67,138,224,150,150, 54,223, 20, 77, 1, 45, 21,201, +211, 2,230, 89, 32,104, 75,122,170, 73, 53, 16,141, 91,218, 60,107,120, 91,179,167, 53,226,165,218,128,153, 28, 23,173, 35,126, + 5,161,218,231,121, 30, 27,171, 1,158, 61, 93, 19,189, 75,182,147,211, 5, 43,202,255,207,212,155, 53,201,122, 93,233,121,207, +218,195,151,153, 53,156,121, 6,206,193, 76,128,221, 36,123,180,212, 82, 72,161,112,132,110, 28,225, 8, 95,217,190,244, 95,225, + 79,241,207,176, 47,172,144, 67,178,218,205, 38,205, 86,179,187,217, 68, 55, 1, 18,103, 62,117,106,174,202,204,111, 15,107,249, + 98,237, 42,136, 55, 32,128, 64, 85,158,204, 47,247, 94,195,251, 62,175, 99, 91,233, 87,116, 52,247,211,250,120, 47,211,113,104, +131,195,105, 20, 98, 26,234,108, 79, 39,178,171,140,242,145,169,147,144, 17, 59, 90,145,166, 84,137,206, 90,142, 17,189,218,217, +210,233, 38, 68, 75, 52,245, 75, 58,116,167,234,180,238, 80, 27, 70, 7, 34,234,246,171,104,142,180,149, 32, 36, 3,141, 66, 38, + 97,177,123,149, 44,137, 28, 35, 18,194, 40, 2,134,138,169, 57, 13, 76, 22,145, 48,251,135,145,196, 19,150, 26,195, 87,169, 67, +213, 63,252,142, 41, 37,136,142,247, 76, 61,176,213, 74, 78, 3, 75,219,154,199,102,138,139, 7,187, 56,215,254,202,242, 39,209, +131, 85,188, 35,142,132,228,133,194,148, 19,177,127, 63,185,168,173,195,180, 68, 68,185,121,115, 98,119,111,151,135,146, 40,210, + 72,221, 56,191,188,224,247,191,127,201,229,166, 12,112,138,103,206, 51, 24,242, 93, 7, 64, 40,140, 9,126,204,255,141, 53, 81, +105,181,243,254,224, 27,206,207,223, 13,171,148, 87, 99, 49, 68,207,110,179, 72, 31, 30,124, 36,120,180, 37,129, 7,183,238,176, +183,191,195,225,197, 57,243, 92,199, 69, 63, 98, 94, 37,146, 82,162,151,141,175, 43, 84,201, 41, 32, 41,179,204,238,159,188,177, +218,229,236, 96,230,232,252, 18,137,198, 98,218,129, 24, 89,196, 93,190,248,195,175,192, 10,229,244,156,131,245, 9,231, 71, 39, + 36,140, 82,157,120,214,106, 71,109, 1, 73,168,173,185, 70, 66,226, 8,240, 48,182,151, 21, 73, 78,203, 18, 85, 46, 54, 91, 76, + 22, 60,126,244,165,139, 2,251,150,157, 4,107,155,152,146,142,215,183,160,182,206,210,115,152, 60,146,113, 14,164, 65, 47,180, + 88,208, 94, 89,134, 76, 51,255,242, 46,227,228, 54, 42,243,241,118, 65,124,196, 24, 3, 90,133, 24,141,237,236,182, 34,172,122, + 0,145, 4,158,255,254, 61,251, 55,118,136, 42,180,230, 43, 23, 51,144,228,170, 89, 17, 87,119,250, 63, 15,100, 17,230, 90,248, +249,223,252,150,227,147,115, 66, 8,108, 74,161,150,206,217,217,134, 55,239, 79, 88,175, 11,139,156,124,247, 54, 69, 90, 83,103, + 66, 72,164,135, 64,194, 92,237,190,200,124,249,197,151,172,183,151,180, 96,236, 89, 98,189, 57, 25, 22, 42,223, 25,107,245,223, +171,226,207,232,116, 99,143,157,105,159,197,180,131,168, 80, 46,103, 54,151,199, 92, 94,158, 19,136,236,173,238,178, 13, 5,206, + 55, 92, 52,245,131, 45, 70,214,179,208, 41,220, 92, 45, 57, 63,170,172, 55,151,220,154, 11,167,103,167,108, 90,229,232,248,132, +114,118,192, 7, 31, 60, 98, 63, 47,136,211,196,250,162, 96,115,129, 32,124,241,213,143, 0,229,239,254,246,111,120,245,242, 57, +180, 66, 78,153,180,179, 66,173,121, 50, 93, 9, 44, 22, 80,218, 76,210,132,100,144,217,105,133,235,179,203,193,218, 6,173,145, +139,139, 53,167, 71, 7, 16,150, 8, 74,158, 50,214, 59, 89,178,143,210, 91, 35,154, 51, 41,167,133,208, 76, 40,117, 67,208, 78, + 26,118,174,105, 17, 81, 2,159,126,246,132,127,245, 47,126,194,155,227,255,131,231,223,190, 65,122,231, 87,127,255, 59,172, 9, +237, 50,160, 58,243,245,183,175,248,248,179, 15,120,249,246,128,179,179, 11,126,252,131,199, 28, 29,190,230,239,190,237,208, 58, + 77,188, 64,232,165,186, 90, 59, 8,228, 56, 48,208,202, 98,103,129, 89,103,190, 84, 54, 52,178, 70,250,182,208, 36,251, 20, 41, +251,153, 89, 75,167,205, 29,105, 74, 23,165,182,153, 24, 38,167, 96,166,138, 88,114, 58, 94,110,132,222, 89,111, 27,102,157, 96, +153,102,149,190,105,244, 60, 97,210,113, 72,114,192, 82, 36, 69, 95,147, 74,191, 90,139,118,214,243,198, 15,146,232,222,234, 16, +151,152,110,125,149, 80, 35,162,234,235, 89, 2, 27, 3,173, 74,208,153, 38,197,215,136, 67,111,209,181, 15, 10,160,115, 33,154, + 10, 81, 27,164,132,182,237,136,177,158,200,178, 71, 91, 95,208,108, 70,163,209,122, 33,104,116,231,140, 25, 42,238,191, 15, 49, +163, 44,217,110, 47,145, 60, 66,138,234, 6,137,153,212, 3, 26, 42,189,205,212, 80,104,230, 78,157, 80,103, 66,102,232, 20, 24, + 43, 54, 87,166, 99, 23,116, 13,180,243, 54,114,208, 97,203,198,153, 28,179, 33, 20, 22,201,227, 98,123, 72, 62,253, 40,133, 89, +125,186, 18,213,221, 5, 18, 61,251,131, 1, 74,194,212,197,212,209, 27,181,232, 98, 7, 95,109, 15, 79,157, 89, 29, 73,168, 87, + 19,217, 64, 48,111, 42, 52, 56,176, 13, 85,122,109, 24, 13, 73,137, 30, 59, 27,141,252,159,191,252, 37,246,187,255,157,243,151, +175,208,254, 6,233,137,155, 59,137,223,124,125,151,120,255,254,189,159,218,136, 5, 85,115,203, 77,188,186,176,101,140,111,197, +253,144, 50,104,115, 81,130, 95, 6,209, 71,187,152,143, 9,174, 0, 48,189, 59,191, 93, 70,177, 64,240, 17,247,232,229,241, 48, +101, 23,128, 73, 12, 76,193, 83,148,252,146,241, 55,166, 99, 68,115, 91, 88,107,230,214, 51,235,244, 48,200,116, 3,145,233, 4, +159, 43, 20,180,143, 61,166,232,185,180, 33,186,239, 93,192,187,173, 16,174,147,227,172,143,237,180,140,200,214,177,171,207, 64, +109, 10, 83, 30, 69,138,143, 81,196,163,235,156,131,238,110, 56,180,187, 45, 15, 12, 75,190,162,112,196, 40,168, 54,170,249,238, + 69,204,237, 93,190, 58,240, 85,129, 95, 32, 1, 73, 66,202,113, 88,144,124, 20,221,240, 81, 51,166, 68, 19,114,138,172,215,151, + 28, 30,158,250,229, 63,168, 99, 18, 32,230, 64,148,116,181,244, 24,174,132,228, 23,175,245,129, 37, 13,136,132, 17,249, 89,221, + 71, 78, 66,146, 43,244, 61,226, 80, 71,130, 88,119,107,140, 25, 59,171, 29,238,221,187,141,245,198,197,229,150,210, 27,221,124, +171, 33, 33, 58,180,103,187,102, 59,207,244, 90,135,152,105,201,106,181,203,227, 7,247, 72, 89, 56, 60,185,100,179, 77,220,186, +125,199, 87, 35,113, 73, 70, 40,115,225,217,135,159,240, 23,255,242, 47,248,163, 63,255,239,248,234,179,175,248,232,217, 71,252, +240, 71,127,202,189,167, 31,115,255,238, 99,238, 63,184,203,173,187,194,241,225,154, 41,132,235,103,112,177, 74,168,141,100, 46, +237,208, 2, 33, 24,115,109,152, 41,247, 31, 62, 97,110,151,148,126, 65,235,129, 98, 62,229,136,113, 65, 67,169,117, 6, 21,102, +117, 1, 99,136,157, 58, 55,255, 12,167,133, 83,248,134, 39, 60, 14,110,114,136,144, 53, 80,130, 79, 42,230,210, 9, 67, 96,101, +234,226,176,164,238,173, 46, 6,235,205, 57,175, 95, 28,112,116,188,225,252,242,210, 47,243,232,164, 52, 29,147,144,174, 62, 29, + 50, 92, 3, 18, 66,164,214,202,197,102,235, 19,169,236, 28,254, 69, 78, 28,188, 61,163,110, 43, 31,127,120,143,245,166,248,164, + 65, 28,195,188,179, 92,146, 66, 70,187, 82,180,179, 90,172,248,131, 63,254, 19,158, 60,249,144,178,109,156,157,157,242,167,127, +240,144, 47,158,222,229,249,225, 9,166,141, 15, 30, 61,193, 44,243,254,253,123,210,148,216,223,217, 35,167, 68, 78, 43,170, 8, +103,103,199,156, 30, 31,179,185, 60,103,179,169,108, 75, 97,219,214,227,181,118,230,237,134,219,247,238,241,241, 39, 95, 18, 87, + 15, 57, 60,124,207,211, 15,239,243,239,254,248, 3,126,245,143,191, 65,251,146,180,186,201,201,197, 57,219,179,183, 60,184,181, +203,254,174,119, 76,155,147,153,211,147, 11, 46,107, 39,161,204,115,135, 94,137,203, 5,111,223,188,244, 96,139,188, 96, 90, 44, +249,252,243, 31, 48,175,103,206,206,207, 73,193, 45,169,181, 54, 54,219,194, 60,175, 41,101, 77, 83,255, 12,156, 92,169,172,215, +231,196,148, 88,166, 21,132, 76,157, 55,195, 6,231,197,186,168, 59, 62,210, 34,179,147,220, 61,210, 90, 27,147, 47, 35,196,140, +152, 79, 47,223, 28, 28,243,237, 55, 7, 28,190, 95,211,173,185, 62,168, 55,206,206,103, 2, 11, 74, 47,148,178,101,127,255, 46, + 15,110,239,242,229,151, 15,248,252,207,254, 45,247,239,236,115,112,124,194,209,225, 41, 49,116,230, 14,139,232, 89, 19,161,248, + 8, 90,162,178,200, 59,142,148,213,192,114,153, 61,245, 80,221, 98,139, 5, 44,118, 98, 80, 36, 7,122, 11,104,169, 14, 99, 18, +117,184,202, 24, 69,219,112,169, 76, 11,232,181, 19,101,194,130,251,240,107, 5,161, 58,116,107, 20,222, 53, 5, 98, 52,212,220, +118,103,197,169,227,165,118,132, 74,198,174,193, 49,214,189,233, 48, 26, 77,149, 62,244, 6,165,186, 35,167, 55,223,231,135, 88, + 40, 87,140,138,104, 48,251,235, 11, 49,121,241,168,101,196,171, 8, 41,186,152,121,138,222, 16, 17, 10, 58, 86, 14,161, 14,107, + 92, 76,136,118,199, 53,219, 85, 96, 21, 52, 42,216,140,228, 68,157, 55,126, 71, 20,165,137,120,162,100,221, 98,166,204, 38,136, + 20,180, 84,250,236,197,156, 10,104,237,180,109, 37,136,210,231, 45, 74, 99, 0, 26,199, 8,189,160,205,113,218, 81, 60,146, 27, + 21, 66,239, 36,201,110,181, 78,126,247, 52,156, 46,215, 69, 61,101,114,232,182, 60, 36, 73,124,141,129, 13,214,130,191, 62,139, + 32, 57, 33,209,207, 1,143, 58,183,145, 32, 60,148, 83, 33, 33,234,209,193, 14,132, 19,130, 36, 28,155, 22, 88,159,158,113,254, +246, 27, 74,121, 75,169, 27,234,124,198,217,197, 9,191,250,231, 87,196,123,183,239,253,212, 21,166,131, 62, 35,126, 49, 94, 9, +224, 84,140,132, 95, 10, 41,122,103,140,250, 98,218,189,207, 35, 98,117, 36, 37,101, 25, 42,120,211,113, 17,123, 65, 16, 66, 28, +136,198, 17,141, 24,131, 7,128,152, 16,195,132, 4,241, 61, 56,113, 68, 38,250,184,221,163, 77, 27, 54,138, 9, 6,156, 70,198, + 31, 84,112,177, 73, 74,190,143,143, 68, 39,152,141, 55, 85, 77, 6,184, 34,146,226,194, 83,198, 66, 31,168, 78, 79,168,107, 42, + 72,242, 75,242, 42, 15,158,232, 94,117, 47, 4, 2,210,227,136, 56,245,169, 69, 23, 63, 96, 34, 16,212, 1, 32, 62, 50,241, 0, + 13, 53,115, 0,143,132,209, 57, 7,175,218,154,177, 90, 77, 76,139,229, 80,176,123,133,214,219, 72,140,138,195, 47,169,145,144, +125, 68, 62,111,103,158,191,122,201,197,229, 60, 72, 88, 97,132,212, 24, 41,100,210, 20, 9, 49,146,114, 34,231, 52, 44, 49,105, + 0,119,220,154,119,181,139,159,242, 14,102, 30,118,146,196,223,155, 43,227,154,118, 31,237,153, 58, 58,115,119,119, 7,213,198, +250,114, 75, 41,238,171,118, 81, 93, 26, 22, 35,223,227,117,237,244, 58,196,127,139, 29,118,119,246,185,253,232, 22, 71,239,142, + 57,120,117,200, 98,239, 38, 79,159,125,194, 34, 45,185,119,251, 38, 55,110,222,231,248,236,144,127,248,251,191,230, 23,127,245, + 95,248,203,159,253, 23,254,241, 87,127,199,235, 23,135, 28, 95, 30,115,124,120,130,149,192,195,135,159,240,175,255,252, 75, 94, +190,122,205,217,182, 59, 57, 76,156, 26,168,131,147,236, 59, 59,255, 18, 53, 53,110, 44,119,185,121,235, 38, 61, 20,186,102, 31, + 21, 70,232,221, 87, 64, 42, 5,147, 60, 24, 6,174,146, 37, 7, 82,110,132,214,124,221, 20,124, 20,239, 60, 42,199, 19,183, 94, +189,184, 68,177,214,189, 43, 23, 67,104, 72, 52,186, 69, 23, 53,154, 81,186,242,226,245, 75, 54,231,151,110,189, 50, 39,152, 93, + 11, 84,204, 39, 84,221,220, 18, 24, 36,185, 93,204, 6,227, 57,199, 17,124,227,151,250,249,197,154,211,243, 53, 63,250,225,135, +252,207,255,211,191,229,230,205, 93,222,190, 59,246,195, 52, 68,242, 34, 19, 98,160,180,198,106,119,201, 87, 95,254, 1,143, 31, +127, 4, 91, 79, 71, 92,159, 31,242,249, 15,110,115,116,114,193,183,207,143, 89, 72,224,195,103,207, 0,229,224,240,136, 52, 77, +144, 18, 49,123, 42,163,169,139, 59,183,237,210, 3,127,212,127, 78,211, 74,223,118, 71,201,106,231,195, 15, 62, 98,181,218,227, +108,187,230,252,240, 45,127,240,244, 54,255,230,223,253, 11,254,175,255,248,151,188,124,245, 2, 82,198,202,150, 71, 55, 87,236, +172, 86,108, 16,206,203,218, 47,194,173,209,172, 82, 74,161,182, 78,107,141,105,127,201,217,201, 37,231,231,103, 44, 23, 75,232, +112, 99,127,143,123,119,239,243,246,221, 91,119, 11,152,176,222,108,104,243,236,147,156,222,125, 77, 40, 2,234, 89, 16,136, 79, +213, 98, 26, 51,195,145, 56, 88,123,119, 11,110, 47, 78,187,180, 78,169,234,221,173,118, 98, 10,196, 56, 93,229,193, 33, 65,152, +183,141,211,139,217, 17,201,161,211, 84, 7, 97,112,193,106,103, 34,165,137,245,102, 67,239, 51, 95,124,242,128,222, 55,124,242, +217,143,184,113,239, 75,110,223, 80,190,249,246, 45,151, 39, 51, 42, 17,201,206,233,216,214, 66, 19,101, 74, 11, 79,205, 51,101, + 17,118, 97, 74,244,237,214, 19, 11, 87,137, 28, 12,216,113,166, 55,234, 57,223, 90, 72,203, 9, 84, 9, 41, 51,169,119, 24,162, +226,185,237, 67,171,210,130,162,181, 35,166,180, 86, 73, 33, 83,197,252,188, 10, 66,235, 29,141,145, 86, 42, 13,111,128,162,217, + 8,146, 74,168,206,148, 81,224,211, 2, 61, 21,186, 54,239,238,213, 65, 43,221, 73, 94,196,212,137,214,144,144, 17, 38,230,178, + 65, 77,232,173, 34, 90,145,222,104,214,144,133, 63,235, 88,163, 23, 27,235, 84, 37,152, 66, 87, 54,219,181, 95,208,218,157, 17, + 98,174,241, 49, 51, 38, 64,115,192, 52, 18,251, 37,165,204,204,115,243, 73,169, 26, 98, 5,169, 21,109, 5,205,222,124, 89, 45, +160,230,182,176, 58,123, 46, 4,126,161,183, 90,145, 36,174, 27, 42,117,136,193, 27, 93,156, 58,169,230,186, 18, 19,168,163, 32, + 65,132,210,102, 39, 26,138, 3,110, 90, 27,218, 8,140, 24, 50,201, 60, 53,148, 46,116, 85,180, 67, 30, 26, 14, 83, 37, 68, 67, + 90,115, 72,207,208,120, 25, 50,214, 65,157, 16, 28,158,134,186, 87, 29, 3, 77,190, 6,215,230, 69, 64,156, 2,105,145, 60,118, +123,172,219, 72,234,147,226,185,144,160,249, 30, 96,196,123,106, 87,135,104, 72,164,141, 20,243,239, 59,204, 49,157, 69,125,108, +172,174,210, 14,195,139, 41,194,224,178, 13,232,254,228,135,103, 43, 58, 0,255,206, 99,135,128, 90, 24,129, 12,130,106,117, 33, + 28, 30, 30,146,163,179,170, 85, 70,198,115,246, 3,207, 6,101, 11, 95,143, 15,161,156,103,154,247,230,129, 35,233, 10,103,139, +195, 58,114,200, 20, 45, 96,110,209, 80, 19, 66,119,138,157,154, 82,131, 92,231, 10,247,209,233,196, 28,199,136,203,200, 34,152, + 58,151, 62, 96,136,100, 82,128, 98, 70, 51, 60,164, 33, 68,183,211,140, 34,166, 90, 96,138,145, 96,158, 10,215, 76, 61, 42,118, + 17,125,124,212,188,250, 19, 27,215,105, 85, 98, 48, 82, 72, 62,218, 85, 35,102, 31,163,246, 32, 92,156,156,114,114,186, 30, 73, + 83, 97, 28, 58, 9, 89, 46, 92,184,164, 87,152,223,241,239, 66, 32,231, 76,178, 37,170,149, 82,102, 76, 61,190, 81,109, 30,113, +186,209,119,200,130,119, 32, 54,156, 10,102, 76,211,196,205,189,253, 17,230,177,165,119, 63,204, 66,116,126,184,152,209,196, 47, +190,189,157, 5,171,157,125, 94, 62,127,227,186, 6,139, 44,150,129, 36,137,147,227, 11, 22,105,226,193,221, 7,156,159,157,145, + 23,198,124,190,230,248,226, 28, 21, 69, 91,227,108,179,134,139,115, 78,195, 33, 18, 94, 82,126,227,159,149, 5, 97,145, 23,220, +250, 95,254, 71,190,248,248, 9,239, 14, 79, 33, 6,114, 94, 82, 91, 3, 53, 23, 5,169,119, 84, 87,234,239, 16, 87,164, 41,162, +219, 51,164, 36, 90,108,148,154,124,138, 19,155, 83,231,100, 66,185,240, 17,180, 66,188, 72,244,197, 2,137,133,148,221,170, 40, + 34, 72,222,101, 18, 71,207, 74, 4,146, 49, 85,165,134, 70,170,160,105, 73,236, 66,239, 74,171,243, 96, 43, 76,204,235, 13,231, + 39,103,164, 41, 64, 45, 88,197,169, 93,193,195,143,220, 9,209, 9,226, 43, 18, 44, 12, 30,132, 63, 63,232,149,234,219,133, 99, +181,116, 30, 61,188,193,237,123,187,252,213, 47,190,230,237,187, 35, 54,155,153, 90, 27, 33, 6, 54, 23, 27,114, 14,236,223,220, +229,135, 63,248, 33,183,110,222, 98,123,185,161,206,133,229, 42,177,127, 99,159,191,252,217, 75,142, 14,143, 48, 51, 39,156,201, +224, 43,152, 98,205,197, 62,121,242,113,111, 18, 65,167, 9,182, 30, 76, 20, 37,184,179,160, 53,106, 43,180, 86,208, 86,176,234, +174,133,156, 61,227,225,213,249, 33,103, 23,141, 68,228,253,251,119,132,229,223,243,147, 63,252, 35,150,187,187,172,183,103,180, +144, 8,179,147,212,220, 7,222,177,238,197,174, 69, 35,214,196,227, 7, 31,114,242,230, 13,219,114,201, 34, 46,121,241,252, 5, + 63,248,225, 87,220,191,255,128,131,131,183,172,245,114,172,156,124,173, 38, 49,179,138,217, 19,242,166,140, 85, 72,169,177, 16, + 39,254,205,205,237,172, 55,238, 76,236,175,118,184,216,158,179, 59, 53, 74, 49,231,114,119,197, 26,172,215,194,101, 45,228,156, + 9, 49,209,122,189,222,177, 75, 47,116, 9,244, 0, 34,209,133, 86,173,209,107, 65,166, 9,201,137,215, 7, 71,188, 57, 41,132, + 90,120,241,143,191,224,217, 79,254, 7, 62,249,244, 75,190,252,252,159,248,217,209, 17,189,119,234,133, 34, 49, 50,229, 64, 47, + 74,233, 67,148,103,145,166,151,180, 6, 27, 26, 38,209,115,216,197,133,109, 54,132,171,150, 27,210, 18,213, 58, 89, 38, 36, 58, +231, 61, 52,165,217,160,225,213, 72,242,252,193,145, 47, 15, 49,103, 66, 10,228,224,153,242,165, 57, 34,155, 90,156, 43, 18, 60, + 17,112, 86, 23,109,134, 40,244, 90,129,197, 88,197,174,177, 57,194,184,144, 91,247,148, 78,137,193,225, 70, 10, 88,242, 78, 53, +140,192,164,226,214,195, 41, 68, 82, 88, 96, 50, 99,115,199,186, 49, 75, 32,137,210,173,122, 34,159, 69,122, 23,239,210,205, 39, +188,109,110,144, 3, 90,160,140,105,172,228,137, 82, 47, 89,182,113,115, 88,199,146,199,149,170,249,103,134, 68,104, 16,181,178, +237,133,168, 11,239,242,155,199, 42,199,166,222, 8,132,198,246,162, 16,146,239,235,107,159,209,226, 40, 86, 27,100,210,222, 26, +152,145,162,163,136,123,240,239,169,108, 12, 66,115,155, 31, 29, 53,215, 57,245,222,233,102,196,232,113, 65,214, 59, 65,157,227, + 79,243,220, 15,154,107,181,130, 4,159,112, 23,199,196, 6, 7,191, 95, 15,190, 25,231, 52, 4,172, 13, 24,220,112,186,212,210, +201,178,130, 20,174,215, 27,109,128,212,178,116, 18, 18,174,197,110,142,136,117,175,113,163,141, 40, 23, 25, 35, 5, 15,153, 8, +195,114,133, 57, 15, 56, 93, 81,217,204, 92,112,210,125, 4, 31, 66,244, 75,185,187, 8,165,245,238, 94,242, 36,136, 42,210,197, +133, 33,234,227, 7,237, 62,162,143,147,123, 69,187, 53, 80, 15,140, 49,241,136, 64,228,202,127,174,142, 55, 21,175,190, 83,114, +238,179, 53,101, 27,140, 41, 70,207, 14,111,230, 30, 72,198, 27, 98,174,206,239,173,251,248, 67,194,128,200,100,143, 60,197,131, + 61, 76, 93,236, 33, 67,244,231, 10,110,161, 91, 32, 7,163,139,184, 8,130, 33, 0, 9, 35,158, 84,125, 82, 48, 13,178, 94, 15, +137, 86,141,197, 34,140,206, 47, 33,238,160, 33,246, 62,176,138, 62, 13, 9, 33, 82, 90, 67, 82, 36, 76,110, 95,179, 22, 40,101, +205,203,163, 3,218,224, 94,123, 4,173,184, 16,109, 12,221, 25, 29,180,136,239,214,187,130,213,230,136,220, 33,120,235, 77,189, + 56,137, 62, 74,182, 62,144,155, 30, 35,143,210, 49, 9,228,156,184,123,251, 54,139, 41,112,126, 89, 93,149,219,250,136,218,245, +113,157,153, 87,250, 83, 78,124,252,201, 71,180,186,225,249,139,151, 78,209,147,198,205,219,183,233,109,203,201,225,123, 36, 71, +210, 55,255,192,179, 15,159,241,228,241, 71,228,251, 43,238,110,214,252,246,183,127,199,251, 55,207, 93,131,160, 94, 84, 50,138, +139, 22, 28, 79, 89,181,242,127,255,231,191,166, 16,145,188,226,222,157,219,236,221,184,141,196,200,173,229, 46, 55,238,236,178, +217, 28,240,250,187,231, 60,127,127,194,250,226,130,157,253, 61, 82, 54,239,110,114,229,252, 82, 9,210,136, 50, 81, 76,144,222, +105,237,210, 71,238,173,176, 76, 75, 36, 5,182, 52,172,248,115,143,184,162, 60,100, 99,174, 27,144,236, 73,133, 89,168,213, 72, + 61, 82,181,210, 75,133, 86,137, 65, 73, 41, 48,215,153, 82, 47,121,243,230,152, 90,189,131,152,107,243,207,165,185,242, 61,196, + 72, 18, 27, 68,102, 47,236,108,112, 27, 76, 70, 0, 82, 48,122,247, 9,153,137,127,182,119,238,220, 34,132,204, 47,255,246, 27, +222,190, 61, 33,164,236, 86, 76, 9,200,114,162,181,194,179,143, 63,230,198,157,187,212,121,118, 81, 94,130,185, 43,203,189, 91, + 14,165,233, 70, 57,122, 71,213,134,212, 64,177, 45,115,155, 93,123,146,132,208, 38,114,186, 42, 66,183, 4,139, 44,242, 2, 9, +145,178, 29,151, 59,198,165, 42,181,193,217,220,184,145,178,199, 32, 91,224,232,112,205,250,228,152, 24, 39,246,110, 61,230,131, + 15,191,224,206,237, 91,108,206, 55,212,160,132,160, 62,110,157,133,110, 27, 44, 9, 49,174, 60,157,172, 53, 74,173,220,190,127, +143,189, 59,247,185, 56, 61, 96,186, 49, 81,171,242,245,175,255,129,237,188,117,222, 67,237,132, 32,228,105,135, 27,251,119,185, +185,179,203,222,141,219,188,223,204, 64, 37, 95,107,126, 2,151,219, 51, 66, 50,230,237,204,237,253, 37,255,219,255,250,239,185, +247,232, 14,200,154,237, 37,104,204, 8, 51,229,114,205,193,219, 51,254,195,127,250, 25,191,250,251,223,211,227,146, 56,237,211, + 54,231, 62, 77,177,230, 8, 50, 13,142,211, 6, 31, 93, 75, 66, 91, 98,177,156,216, 94, 92,240,205,215, 47,121,248,199, 31,243, + 55,255,245,111,248,224, 7, 63, 36, 46,239,241,236,209, 77,254, 38, 53,102, 2, 22, 42,166, 43, 15,130,161,211,105,232, 60, 81, +204,161, 56, 77, 26, 44,196, 63,131,217, 25,227,102, 91,188, 76, 82,202,182, 35, 97,114,181,180,219, 65,220,141,147,128,160,104, +137, 62,162,215,226,185,242,147,187,115,168,126,158, 68, 26,102, 66, 14,147,103, 95,244,128, 42,174,123, 10, 70, 43,141,101, 84, +154, 40, 33,175,104,115, 69, 71, 33,170, 77,232,230,207, 85,156,252,251,111, 37,251,212,176,119, 54,125,118,239,252,194,215,162, +173,207, 30, 47,139, 50,215, 45, 77,148,168,221, 11,107, 4,139,184, 95,189, 55,166, 12,181,184,112,174,107,100,138, 78,130, 12, +178,112,103, 83,237,116, 77,176,222, 34, 52,160,208,173, 0, 0, 32, 0, 73, 68, 65, 84,189,177, 33, 17,227, 2,237,213,197,195, +221, 85,255, 65,204, 19, 42,251,104,138, 44,160,109, 30,180, 75, 69,139, 39,196,244, 80,145,238,204,149, 62,207,180, 48,185,195, + 43, 42,162, 25,180,162, 84,255,255,166, 62,253, 25, 5,176,168, 59, 3, 28,251,221, 6, 94, 91,157, 17,161,222,105,107,159,176, +222,253, 46, 25,197,186, 98,100,205, 14, 58, 50,195,164, 14,237,153, 39,188,133,144, 29, 64,148,243,224,120,130, 22,197,174, 20, +242,226,147, 91, 83, 65,170,175, 32,194, 52,185, 19, 42, 42,169, 39, 90,223,208, 53, 16,239,222,187,253, 83, 29,162,167, 16,198, +178, 31, 27,187,232, 17,247, 38, 54,176,167,114, 61,250,165,251, 47, 38,122, 71,172, 87, 64, 25,132,184, 24,246,160,198,117, 72, +140, 13,232,134,232,176,139,117,247, 6,142, 31,235,129,242,230, 23, 77, 20, 87,114,217,192,182, 74,136,144, 71,252,170,121,113, +193, 80,105,167,113,209,249,242,192,247, 18, 49, 6,191,192, 71, 28,158, 54,195, 66,186, 30, 31,131,141, 32, 8,143, 12,149, 56, + 42, 97,145,107,192, 11,221,113,172, 62,141,117, 6,188,147,168,148, 62,118,230,194,128,195,128,187, 2,192,253,207,209,176,224, +157, 80,199, 71,172,130, 91,140,220,214, 7,139,236, 93,154, 8, 84,147,193,203,240, 11, 5, 2,185, 9, 26, 2,239,223,191,227, +245,155, 67, 32,186, 90, 61,186,158, 33, 38,167,107, 73, 8,206, 13, 48, 87, 81,234,192,228,250,212,196,215, 5,165,235, 64,186, +250,239,187, 90,175, 16,100,192,108,134,223, 89,132,155,251, 55,216,221,217,103,189,217, 80,181,211,106,245,244, 51,185, 26,145, +200,245, 4,227,147,103,143,249,224,195, 39, 92,158,110,120,245,242, 53,221,140,221,253, 61, 62,253,228, 19,118,151,194,155,151, + 47,120,243,238, 29,135,239, 94,242,205,111,191,230, 87,127,247, 75,126,245,247,255, 31,223,189,248, 39, 78, 14,222,114,118,126, +230, 54, 49,145, 49,254, 82,215, 82,104,160, 85, 15, 30, 33,103,144,192,222,206, 62,139,229,142, 91, 86,122, 65,226,196,222,173, + 59,236,164,137, 59,251,183,249,183,127,252,231, 76, 35, 22,119, 90, 78, 88,104,148,217,168, 53, 58,251, 32, 78,164,210, 7,156, +165, 34,152,227, 79, 43,244,176,101,158,103,250,236,168,224,148,193,180,184,103, 95, 50,147, 45, 72, 40, 86,171,175,113, 66, 66, +181, 99,181,123, 82, 83,234, 92, 94,156,114,116,244,158,227,227, 51, 94,189,121,135, 69, 33,231,192,249,217,236, 59,244, 48, 82, + 3,199,142,237, 42, 56, 52,140,168, 80,223,245, 58, 6, 88,204,227, 89, 83, 76,238, 20, 73, 30, 93,121,122,118,201,235,183,231, + 94,229, 71,127, 54,123,247, 21, 78,181,202, 50,172,184,127,231, 33,155,185, 34,116, 86,139, 68, 75,194, 36,201,149,181,166, 84, + 81,234,122,230,201,163, 71,212, 90,120,243,250,141,143,147,167,232, 5, 42,254,153,151, 58,211, 91,103,153, 86,164, 60, 86, 11, + 24,219,186,101, 46, 27, 36, 4,166,213,138,221,221, 29,170,117,182,235, 53,185, 85, 62,252, 96,151,231,239, 59, 22,111,243,244, +201, 61,166,188,131,174, 22,164, 54,179, 92,237,163,193,104,115,241,206, 34,120,228, 39,181,140, 12, 2, 35,239, 8,155,245,154, +247,111,223,146, 23, 75,118, 22, 43, 74, 41,148, 90,104, 90, 88,228, 21,123,251,251, 60,184,251,152,189,213, 62,133, 17,155, 43, +209,245, 13,209,216,174, 43,231, 23, 27,218, 64,233,214,121,230,232,232,148,211,203, 19,158,126,112,151, 63,248,226,115, 62,248, +234, 83, 30, 61,251,148, 71, 79,159,241,193,167,159,242,197, 79,126,200,191,250,243, 63, 32, 90,229, 55,223,190, 28,216,223,128, + 13,171,175,153,145, 22, 19, 18,160,214, 66, 10,145,197, 98,135,214,102,159,250,169,114,121,126,201,114,119,193,201,250,130,163, +183, 7, 60,121,178,199,179, 79, 62,162,172,141,239,126,127, 64, 23,159, 4,230,228,254,100,209,128,118,183, 34, 77, 49, 80, 69, + 73,248,180,164, 37, 96, 46,104,236,126, 25,247, 48, 4,152,205,251,136,145, 84,105,230, 17,214, 54,249,190, 93,162,160,161,179, + 96,225,221,122, 83, 79,213,108,134,169,139,120,219,160,114, 26, 74, 26,103,162, 57, 88, 31,187,202,175,232, 62, 61,140, 67,103, +181, 92,142, 68, 76, 9, 76,201, 87,172, 70,165,153,207, 69,123,243,253,123,215,130,206,138,106, 70,172, 33,161, 81,181, 19,186, + 50,155, 99,138, 99, 72,180,222,232,226, 66, 62, 68, 92,243,212,221,182, 85, 7, 96, 43,152, 14,193,181,208,138, 43,213,189, 1, +168, 84,243, 49, 61,218, 92,188, 29,156,252,215, 90,115,107, 31,110, 51,213, 94,175, 89, 3,189, 52,106,109, 68, 21,199,144,107, +243,137, 51, 74,194, 39,181, 97,160,207, 37, 57,155, 64, 44,208,135, 59, 66,171,123,212, 45,250,243, 16,186, 79,214,122,116,145, + 86,112,175,223,208,203,116,183, 65,155, 13,250, 34,190, 62,100,172, 59, 37, 13,199,216,192,164,165, 68,176,142,144, 65,117,172, +244, 12,235,221,115, 81,240, 34,196,130,185, 88, 47, 69,204,234, 72, 31,132,208,219,149,199,156,248,232,254,221,159, 58, 1,246, +138,186,230, 67, 92, 25,227,109,134, 63,221,239,123,239,212, 7,153,214,109, 99,102,163, 18, 26, 99,248,224, 63,225,234,130,109, +234,121,200,105,172, 96, 71, 95,201, 32,133, 95,239,206, 49,241, 66, 98,140,145,147,184,104,197,134,199,219,149,124, 46,212,155, +146, 67,250,175,103,241,193,127,209, 88,183, 14,229,186, 95, 22,170,206,122,214,241,122,188,138,119,102,187, 71,229, 5, 23,189, + 85, 29, 32, 8,223,201, 51,128, 49,222, 24, 15,224,139,118,255,112,123, 31,162, 63,239,174, 68,220,146,151,146,147,239, 66, 84, +162, 56, 41, 40, 44,157, 72,101,193, 53, 9,158, 20,231, 73, 56, 97,116,220,174, 24,180,145,226, 21,136,248,239, 44,243,150,223, +127,247,154, 82, 10, 41, 37,183, 9,166, 64,136, 94,200,184, 78,193, 93, 7,140,104, 92,193,209,131, 14,180,105,204,243,204,182, +120, 69, 41, 33, 92, 39, 83,165, 48, 58,172,239, 99,247, 88,174,150,228, 24,233,165,178,157,231,113,161,123,145,149, 82,102,145, + 38,183,207, 76,145,207, 62,121,202,227,199,247, 73,217, 83,253, 14,222,190,101, 91, 11,159,125,254, 41,183,111,239,179,187,152, +184,123,231, 38,111,223,190,243,160,159,232,162,188,214,103, 54, 23, 23,108,214, 23,215,152, 60, 25,169, 90, 85,125, 52,213, 91, +195,198,232, 43, 72, 96,185,187,207,147,167, 31,240,244,147,143,121,184,119,143,148,132,105, 90,178, 12, 75, 94,189,251,150,179, +243,153,143,239,127,206,254,157,192,239, 94,255,158, 32,153,152, 61,179,220,153,239,158,119, 31,174, 51,146, 64,131, 3,133, 90, +109,244, 33,176, 84, 81,143,232,235,206, 86,136, 98,164,148,189, 3, 48, 99,125,177,113,123,214,225, 59,214,155, 13, 55,119,246, + 96,202,156, 95,156,113,122,118,200,171, 87,135,188,120,125, 76,140,194,122,189, 37,133,196,157,155, 43, 79, 91, 27, 54, 66, 51, +215,167,152,249,235, 33,248, 23, 63,242,125, 96, 82,140, 87, 69,142,235, 85,114, 74,204,115,227,244,108,141,186,234,147, 90, 11, +134,121,128, 77,239, 64, 98,189, 93,115,251,246, 29,166, 41,162, 89, 72,139, 68,180, 70,136,145,144, 50,151,167,103,132,166, 92, +108, 46,120,240,232, 49, 90,132, 23,175,158, 99,230, 83, 32, 69,136, 57,185,219,163,185,104, 51, 70,165,149, 78,111, 70,169,202, +102,187,165,183, 13, 65, 50, 41, 11,243,246,130, 90, 10,101,222, 50,133,196,131,251,247,121,117,112,192,106,113,155, 71, 15,111, +211,203,214,243, 16,172, 96, 59, 1, 43, 62,205,139, 57,248,228,173,251,168, 40,150, 70,143,174,168,127,245,187,111,153, 55, 27, +146, 68,106,239,180, 46,190,254, 9,145,157,197, 14, 55,118,118,145, 0,167,151, 23, 92,170,113,124,122, 64, 2,150, 59,183,209, +222,232,101, 75,211, 70, 22, 65, 53, 96,234,137,131,223,252,238, 45,127,253,139, 95,243,237,111,126, 15,151,103,196,190, 38,166, +192,180, 51, 1, 51,139,189, 91,252,241,159,255, 33, 59, 4,126,241,203, 95,211,212,136,139, 37,189, 13, 6,128,203,104,208,228, + 81,184, 65, 92,108, 86,172, 49, 45, 2,235,245,134,121,219, 89, 78, 59,252,245,207,255,134,182, 57,231,199,127,244, 19, 30, 63, +125,204,119,191,127,205,235,151,111, 8, 49,147, 72,227,108,243, 32,171, 22,161,184, 0, 7,219, 54, 74,203, 80, 10, 77, 29, 74, + 99,189,141,224, 15, 63,188,213,160,121, 42,144,227, 98,123,199,106,245,117, 68, 85, 98,138, 4,241, 51,170, 53, 35, 5,101, 21, + 34, 77, 29, 65,234,218, 37,191,120,166,201, 3,152,106, 83, 68,140,214, 61, 62,185,119, 37,141,231,180,138,141, 93,175, 79,143, +218,176, 55,135,193,199,143, 49, 19, 82, 38,101, 37,212,138,244,140,153, 95,174, 26,125,237, 23,174, 28, 76,128, 73, 27, 9,194, + 46, 28,235,109,140,173, 5,186,186, 31, 63,197,236,207,160, 53,239,214,147, 59,120, 90, 23,230, 90,233,181,163,181,186,115,170, +121, 96,149,104,167,197,238, 49,109,173, 57,193,180, 55, 68,148,214,219, 32,242, 49,220, 83, 70,235, 13,237,144,228, 42, 31,125, + 8, 33,233, 88,112,135,143,154, 23, 36, 88,247, 24,219,152,221, 37, 48,184, 40,102,140, 85, 98,245,168,103, 92, 63,224, 63,133, +241,158,113, 29, 25, 92,205, 95, 71, 14, 97,124,190,226, 23,187, 54,191,251,186, 67,208,180,123,238,189,137,135,115,185,160, 54, + 95,115, 90,176,238,140, 16,117, 77,136,217,247, 76,153,120,255,225,253,159, 74,136,215,255, 80,112,168,136,255,189, 92, 51,204, +196,194,181, 50,221,130, 31,122,218,221, 78, 37,226, 93, 69, 74,227, 50, 28,101,129,168,199, 77, 94,253, 50,198,161,229,254,245, +116,253, 6,219,168, 48,188,243,205,222,226,143,169,129, 12, 9,102, 83,223,214,167,228,172, 98,241,105, 38,166,141,222,188, 48, +112, 75,150,139,233, 90,241,206, 95,132,209, 17, 95,137,197, 92,157,216,154,139, 70, 76,148,222, 60, 89, 45,166, 64,183, 78,173, +238,169,190, 10,202, 75,226, 23,122, 55,168, 54, 34, 27,241,206, 38,134,232, 86, 59,140,144,133,136,249,123,149,134, 93, 47, 38, + 22,217, 31,232,156,124,162,145,166, 68,169,179, 71,242, 17, 8, 99, 20,147, 9,195,226,230, 8,209,131,247,111,121,251,254,132, +128,139,152, 44, 8, 49,102, 82, 78,163,232, 24,175, 80,252,247,199, 0, 49,123,150,188,246, 74, 41,149,185, 84,239,194, 9,215, + 48,159, 24,220,114,209,186,143, 82, 76, 96,185, 90,177, 90,100,106, 45,108,231, 74, 85,239,162, 66, 8,132,148,145, 16,169,101, + 75,142,194,135, 31, 63,227,193,163, 71,152, 68, 98,232,172,210,196,221,123,119,120,248,248, 9, 31, 60,122, 72,206,206,119,206, +203, 29, 98,242, 66,105,103, 49, 49,133,161, 23, 72,105,120, 63,253,121, 72,163, 34, 87,223, 3,248, 72,113,140, 16,230,178,229, +244,248,136,111,190,253, 45,223,254,250,107,126,251,187,111,120,251,246, 21,239,223,191,163,108,215,180,121,230,254,221,155,228, +101,226,197,251,175, 57, 63,219, 16, 87, 59,144,221,183,220,154,147,158,220,161,167,148, 14, 22,189, 91,238,165,210,186, 82,250, + 64, 2,119,144,236, 23,155, 52, 65,166, 72, 82, 97,187,157,121,119,124,192,249,246,144,180,232, 28,191, 63,226,229,219,119,156, +156,156,113,118,118,204,193,201, 17,239, 14, 46,120,127,120,198,114,145,120,252,112,159,103,207, 62,224,135, 95,126,204,167, 31, +220,226,197,171, 83,182,173,140, 80,161, 68,200,190, 56,177,232, 88,217, 24,174,160, 75, 54,166, 57, 92, 11,235, 66,246,244,193, + 50,123,134,130,160, 20, 85, 2, 94, 44,171,250, 69, 40, 4, 74,157,217,187,115,155, 27, 55,118,145,234,123, 81,235,193,139, 28, +129,105,103,201,246,244,152, 50,207,220,222,191,201,249,188,225,240,240, 0, 53, 72,203, 21, 41,174,200, 49, 16, 70, 76,113,178, +192, 86,157, 9,223,230, 45,115,171,148,245,134,109,217,144,243,202,215, 87,189,145, 17,154, 53, 22, 41,241,213, 15, 30,240,187, +151,223,178,119,227, 14, 33, 71, 90,219, 66,143, 52, 19,114, 27, 22, 36, 58, 73, 22,244,217,105,134, 94,108, 71,103,129,107,231, +240,240,144,179,139, 75,215, 19,212,142,106, 37, 5, 97,185, 88,144,147,219,254,206,183,151,215, 29,138,160,204,165,144, 87,123, + 8,201, 3,154, 48,106, 43,168,109,209, 54, 99,173, 58,102,179, 42,191,123,254,138,255,247, 23,191,230,215,255,240, 79,124,252, +240, 1,143, 63,186, 77, 59, 57,133, 54, 35,171,137,211, 55,103,252,199,255,231, 23,108,180, 49,133,132,116,241, 8,216,214, 9, +105, 66, 66,118, 36, 43,157,253,229, 46,155,217,169,142, 93, 59,102,202,106,247, 54,167,103,151,124,124,127,143, 31,254,228,135, +236,220,122, 72, 98,230, 31,254,233, 27,247,200,147,232, 85,145,101,242,172,185, 46,104, 53, 82,247,149,141, 31, 90,141,237,188, +185, 62, 10, 29,162,225,110,158, 58, 38,155, 6,132,230,226, 81, 29, 36,189,214, 27,162,234,122,168,118, 37, 72, 14,108, 91,161, +245,226,251,250,152,188, 8, 32,211, 77, 41,117,235, 35,226,174, 36,137, 88,136,132,156, 60,167, 35,102,180, 84, 98, 55,183, 89, +245, 97,217, 10,222, 16, 25, 14, 91, 50,233, 68,243,145,126, 71, 73,187,174,119,200, 18, 29,187, 13,228, 20,145,152,104,189,187, +168, 81,235,152,168,250, 36, 88,146, 11,167,193,134, 31,219,252,252,194,159,253, 54, 23,255,206,104,119,141,151, 26, 13,232, 58, +211,187,139,218, 84, 13,109, 74, 41, 67,224,233, 32,143, 81,216, 65,208,136, 49, 95,131,202, 80,247,236,135, 1, 3,194,174,198, +221, 74,178, 68, 41,141, 16, 59, 77,187,159, 37, 22,105,189,141,179,209,239, 21, 53, 71, 14,155,249,249,106, 97, 36,152,138,141, +251,205, 87,211, 93,205,159,155, 17,111,206,152,134,235, 16,231,114, 53,237, 29,159,173,119, 60,142, 65, 55,115,104,141,105,247, +215, 28,188,169,245, 84, 74,134,211,161, 59, 57,240,193,131,187, 63, 13,163, 67, 54,211,161,214,214, 33, 62, 50, 31,243,217, 8, + 66, 9, 78, 76, 19,240, 52, 43,243, 12,108,223,203, 15,161,221,136, 50,140, 35,228,197, 70,117,123,245,191, 32,120, 0,140,186, + 95, 48,100, 79,115, 51, 13,196, 56,198,237,216,176, 73,248,120,217,180,187, 96,109,144,223,100, 20, 26, 72, 28, 42,236,126,173, + 22, 86, 95, 51, 97,214,209, 40, 35,135, 79, 28, 85, 40,110,241,242, 7,211,197,101, 97,136,221, 66,240,135,175, 15,153,159, 43, +208,187,239,194,109,224, 39, 51, 78,171, 35,186,104, 42, 69, 79,126, 11,230,136,216,152, 71,161, 33,136,172,188,240, 8,174,210, +214,166,126,217, 34,172,114,114,157,129, 93,113,220,251,216,187,132,225, 62,128,245,229, 5,207, 95,188,161,206, 14,178, 49, 60, + 21, 46,135,124,109,203, 11,146, 80,148,185, 86, 36, 70,130,138,143,131,172, 83,183,101, 88,208,140,144,178,119, 21, 87, 59,118, +134,253,103, 84, 90,171,197,138,156, 38, 23,255,168,127,182,136,187, 7, 66,114,237, 65, 47, 51, 41, 9,159,254,224, 99, 30,221, +185, 51,118,248, 78,162,107, 77, 88,174, 86,220,218,223, 35,197,129,215,149,137,188, 16,238,223,191,195,211, 71,143,249,228,179, +167,124,252,241, 51,158, 61,249,144,135, 15, 30,113,255,225, 93,110,238,238,114,107,103,135,144,188, 20, 21, 73,195, 34,230,106, +104, 83, 87,131,247,238, 99,181,210,102,214,155, 51,206,207, 79, 57, 56,122,199,119,175,126,199,219, 55,111,120,119,112, 72,109, +133,180, 52,230, 57,179,218,221, 71, 91,245, 3, 52, 14,132, 99,247,196,175,210, 43,117,174, 88,117, 5,189,135,225,116, 66,132, +184,138, 44,210,146,165, 76, 88,156, 57, 63,191,228,226,244, 20,147, 53, 79,159,222,228, 95,253,235, 47,249,227, 63,249, 17,183, +247,118, 57, 61, 59,227,226,124,195,166,174,169,181,113,126,186, 97,154, 2,159,124,254,152, 39,143,239,113,251,214, 62,235,121, +195, 47,127,245, 29,239, 79,206, 60, 60, 7,119, 82,216, 40,151, 91,237, 62, 94, 31,154, 15,128,152,174,254,125,240, 16, 33,241, + 80,150,222,174, 44, 50,230,100,177,161,152,237,221, 45,153, 68,207, 91,120,250,228, 25,121,218,115, 77, 72, 82,178, 37,154,118, +186, 42,139,197, 13,142, 78, 79,152,231, 66,140, 75, 14,142,222,115,126,121,129,154, 49,165, 76, 78,153, 24,242, 72, 21, 27,249, + 6, 5,230,178,245,253,174,186,190,100,179, 89,179,179,191, 67, 94, 44,192,148,156, 38,164, 11, 33, 27,127,246,195,103, 20,221, +241,233, 76,104,212, 16, 89,165,228,182, 83,160,149,121,196, 45, 7,180, 27, 83,112, 65,106, 27,171,151, 32,254,188,190,123,243, + 6, 53, 31,139,202, 32, 39,106,112,234,222, 92, 11, 18,125, 2, 54,207, 30,106,212,123, 33, 38,183, 71,181, 90, 8,193,104,218, +169,243, 76,169,227,253, 11,145, 40,129, 73, 18,197,224,240,240,130,143, 30,223,226,214,222, 77,222,190,124,203,241,233, 41,155, +227, 99,254,195,127,254, 57, 63,255,229,183,110,229,237, 46,234,109,204,238,224, 69,145, 56, 17, 13,202,188,117,212, 44,194,118, +187,198,186, 51, 61,130, 4,214, 23,107,246,246, 18, 79,159,220,231,238,253, 61,110,222,186,205,193,187, 11, 94,189,120,139,100, +143,131, 13, 26, 40, 42,132,214, 92,104,137,249,104,183, 55, 36, 54,106, 83,130, 76, 76,171, 21, 18,179, 71,226,106, 64, 91,245, + 11,163,225, 17,209,210,136,109,184, 64, 26,222,192, 8,222, 49,154, 81,108,156, 97,113, 92, 54, 33,208,181, 32,221,155,129,166, +184, 67, 32, 12, 55, 17, 30,208, 67, 87, 84,103, 23,227, 38,255, 28, 50,222, 77, 55,115,161, 88, 83,195,250,140,116,163,139, 23, +151, 26,148,212,101, 8,103, 61, 52, 75,128, 20, 5,181,177, 6, 28,128,179,101,136, 72,158,152, 96, 36,241,141, 75, 61,169,175, + 78,171,249,110, 91, 32, 38, 40,173, 19,174, 96,161,226,214, 63, 9, 46,218,179, 90,177,226,246,178, 56,208,184,173, 59,142,156, + 46, 67, 43,213, 92,249,111,174, 35,106,234, 26,170, 74, 31, 76,148,192,108,190,170,160,122,199,174,162,158,144,168, 66, 12,213, + 11, 70,117,181,185,141, 9, 50,102,244, 16,168, 84, 7, 88,209, 6, 88,198, 6, 74,124, 52, 86, 68,108,196, 6,119,237,164,224, + 98,111, 85, 35,152,211,255,166,232, 12,148,110, 67,159, 96,234,119,131, 94,173, 80, 96, 74,131,212,103, 62,170,167, 42, 9, 25, +197,184, 23, 77,126,128,143, 88,200, 64, 64,194, 80,177,247, 43,180,169, 98, 36,223,211,104, 31,222, 58,239, 92,131, 25,166,133, +102,193,119, 36,248,110, 55,166, 97,145, 24, 69,131, 96,238,205, 30, 92,117,183,186,123,215, 24,178,139,241,100,164,178, 49, 48, +141,202, 8, 90, 48, 35, 6, 31, 11,169, 66, 78,217,197,121,230,201,104,158,163,110, 87,141,171,219,134,186,211,219,100, 68,217, +217,213,104, 94, 96, 74,129, 46, 62, 77, 88,165, 48,172, 12,227,193,138,254, 87,195,173, 93,174,118,175, 68,117,159,116,192,119, +236, 12,255,187,133,192, 52, 8,118,137, 72,136,138, 82,220, 30,163, 35, 70, 49, 12,127,166,193,102,158, 93,141,218,141, 28,161, +182, 64, 53, 35, 14,192, 77,180,206,241,209, 17,235,117, 37, 79, 11, 98,188, 54, 87,249, 24,200,146, 71, 99,134,136,182, 25,173, +142,147, 36, 70,223,161,209,105, 87, 97, 58,226, 95,124,144, 33, 70, 28, 56, 92,103,255,178,183,218, 97,239,134, 19,227, 74, 85, +191,208,237,170, 91,112,235, 90,157,103,246,119, 22,124,244,209, 51,110,222,185,197,146,177,147, 11,238,191,235, 81,104,193, 71, + 93, 89, 2, 57, 70,178, 24,181,204,104,116, 18, 24, 65,152,166,204,254,206, 29,238,106,163,196,193, 15,152, 27, 77, 27,141, 70, +189,172,204,155,153,109,221,114,121,122,198,182, 84, 78,207,206,217,206, 91,230,222,152,231, 58, 62,115, 7,112, 69,132, 94, 11, + 47, 94,125,199,187,163,119,252,248,203,175,184,255,228, 9, 89, 34,101,144, 15,117,246, 63,211, 34,100,182,205, 64, 43, 75,132, +173,121, 14,168,136,139, 5,187, 94,241,218, 61,236,102,110,199,176,154,248,163,175,158,242,249,167,143,217,191,245,136, 26,215, +156,189, 59,224,252,114,166, 53,175, 86,247,151, 43,182,173,112,247,214,210,163, 83,167, 5,235, 75,229,249,203,151, 60,127,121, +192,249,201,154,157,157, 60, 16,157,174, 37,185,174,198,205,177,186,173, 43, 41,184,157,138,222,135,110,194,217, 3,243,166, 58, + 0, 10,232, 50, 32, 80,214,221, 50,164, 29, 98,194,186,179,235,247,119,247,216,191,177,130,108,216, 28, 49, 38, 26,129, 30,183, +131, 88,165, 92, 94, 94, 96,166, 28, 95,158,177,217, 94,210, 90,245,236, 7,235,104, 47,148,226,182,202,218,189,227, 17,113,218, + 97,217,120,129,232,228, 66,248,147,175,158,177,183,183,207,127,250,249,175,216, 70,103,232, 55, 77,156, 85,229,206,205, 15,185, +220,188,195,172,186,179,166,206,196,100,204,179, 50, 13, 86, 64,239,149, 36,141,218,149, 90, 11, 49, 37, 52, 8, 77,133, 91, 55, +110,115,247,222,125, 46, 78, 14, 60, 19,222,160,213, 54, 26, 1,159,210,245,162, 88,114, 30,122, 31, 98,165,237,217, 25,203,157, +125,154,217, 88, 19,204, 78, 95,171,219,161, 1,138,180,224, 54, 32,130,210, 52,240,159,127,254,119, 92,110, 47, 29,218,179,204, +244,237,204,207,126,246, 91,154,249, 51,131, 86,234,128,146,168,184,122, 59,216, 26, 20,138, 86,206, 46,207,216,221,185, 73,235, +221,105,111,150,216,174,215,172,107,225, 55,223,188,231,151, 63,251,175, 44, 22, 11,158,125,242, 17, 79,159,236,241,237,173, 93, +222,157,215, 65, 95, 44, 35, 74,217, 92, 26,213, 59,166, 9, 74,163,180,230,235, 76, 18,165,108,137, 49, 16,186,239,226,147,224, +182,195,232,151,170,199,176,118,255,239, 99,118,212,174,245,235,213,131, 12, 14, 70,107,190, 94, 42,163,104,215,190,165,169,103, +104,164, 0,189, 39,170,205,196,184,160,215,153,185,117,166, 9,186, 85,164, 71, 90,139,232,213, 51,172,160,177,185, 8, 55,234, +112, 46, 57,209, 83,204,156, 98,215, 42,154,129, 58, 46, 93,243, 6,224,234,252,113, 54, 7,244, 86, 9, 18,201,146,232,166,206, + 19,240,217, 39,203,149, 50, 91,167, 87,104,181,147,122,248,190, 1, 85,163, 23,159, 56,134,152,125,197, 53,208,220, 69, 5,233, +213,155,172, 56,249, 72,187,117, 82,244, 81,120,243,202,216,185, 42, 99,202,137, 25,149, 62,190,167, 3,110,150, 19, 90,253,253, +157, 12,186,137, 79, 56,175, 86, 25,214, 7,198,103,140,194, 49,106,175,164,161, 27, 8,233, 10,157,142,127, 31,166, 5,210, 60, +212,154, 81,200, 16,156,230,231, 43, 0, 95, 87, 88, 20,186, 65, 30, 43, 96, 21, 29,105,122,130,201,194,139,102, 43, 88, 20, 82, +247, 66, 1, 11, 4,105,174,126,247,226,200,133,101, 54,114, 93,163, 93, 49,223,227,245,152,215,217,196, 46,154,210, 48,120, 37, +166,174,176, 20,103,165, 75, 24, 49,144,214, 93,225,126, 37, 60, 27, 23,174,142,238, 63,228,201,233, 91,221,133, 28,193, 92,192, + 17,130,124,127, 17,169,239,196, 98,242, 98, 40,146, 49,173,168,248,129,131, 92, 29, 60,226,169, 54, 67, 41,175,234,138,226,222, +253, 77, 78,214,125, 44, 79, 36, 68,127,160,186, 42, 77,125, 95, 95, 77,199,174,201,247,219,142,220,236, 52,243,202,191, 99, 78, +241, 82, 67,171,209, 68,201,113,225,157, 18, 56,230, 48, 36,194,228,106,126, 23, 55,249,100, 32, 52, 99,177, 19,105,150,145,162, +196, 36,168,102,232,138, 76,157,156, 19, 92,118, 82, 18,234,168,144,183,243,134,195,211, 11,223,163, 4,135, 13,136, 68, 31,245, + 39,255, 60, 34,217, 1, 26, 97,197,206,106,242, 14, 63,120, 53,218,155, 11, 87,124,231, 10,214,132, 24,199,164,162, 15,137, 86, + 72,220,220,219,227,230,222, 30,115, 45,116,173,174,131,107, 62,250,137,100,162, 36,182,219, 13,183,246,118,248,252, 7,159,178, +179, 88,161,189, 49,135,136,105,164,181,153, 60, 77,238,229, 15,209,225, 54,109,198, 66, 70, 84,153,166, 29, 66, 18, 47,106, 12, +250,220,217,234,165, 43,135, 27, 72,107,190,163, 34, 49, 77,145,221,213, 14, 11, 11, 84, 25, 85,117,247,170,122, 46,149,185, 94, + 50,111, 59,109, 46, 92,108, 46,216,172, 43, 23,103, 27,230,178,165,246,198,118, 91,120,253,238, 13,207, 62,249, 8,116,102, 25, + 97,182,128,133, 68,154, 12,102,239,254,187, 37, 23,206,153,143, 84,139, 22, 22,113,137, 6,227,232,253, 27,206, 15, 79, 80, 43, + 60,251,248, 30,127,250,163, 47,249,236,211,143,168,210, 57,219, 28,242,230,249, 17,207, 95,188,226,245,203, 99,222, 29,188,167, +206,202,249,153,175,107, 52, 68,246,196, 71,140,175, 78,103,222,189, 57, 68, 21,166, 69, 30,123, 34,187, 22,186,244,246,189,231, +127,208, 51,137, 83, 34,154, 81,139,142,156, 5,103,203,187,176,110, 20,169,234, 9,136, 14, 72, 1,186, 31,110, 72, 64,187, 50, +237, 46, 71, 23,220,153, 38,223,125, 54, 81,164, 5, 66,111, 88,223, 80,234,150,139,205, 37,251,201,199,221, 86, 59, 58, 69, 74, +131, 88, 60,129,171, 53,231, 38, 36, 34,183,246,118,185,245,232, 62,243, 60,115,112,124,196,209,187, 45,165, 54, 62,120,120,131, +251,143, 30,242,151,191,252, 53,171,213, 10, 9, 19,203, 4, 55, 86,187,180,176,164,190, 86, 31,187,214,202,108,129,108, 11, 76, +214,254,236,171,127,183, 26,213, 35,100,147, 67,116,130, 69,214,235,194,251, 55,175,217, 92,158, 95, 31,134, 18, 3,189, 20,162, + 5,100,225, 7,143, 26,180, 90,252, 2,145, 54,120,218, 51,155,141, 63,189, 69, 43,148, 74,183, 74,235,243, 72, 98,100, 76,179, + 6,227, 34, 24,223,190, 58,225,213,193,223, 18, 2,164, 69,162,215,206,155,131, 1,186, 25,147,175, 56,212,211,155,170, 36,203, +228,133, 7, 45,181, 6,155,205,204,237,125, 99, 38, 51,215,130,138,114,177,217,208,204, 56,186,156,249,199,111,222,115,243,238, + 63, 50,207,194,148,133, 56, 53,127,125,243,102, 20,107,145, 24,156,159,222, 76, 9,221, 3, 88,122,129,148,160,197,177, 54, 88, + 23, 31, 57, 7, 7, 28,245, 10, 65, 60,194, 53, 72, 34, 37,165,170,123,200, 67, 80,122, 15, 4,117,117,248, 50, 70,146, 84,108, +130,106,145,208, 11, 50, 67, 17,199,194,250,250, 58, 97,189,250, 5,210, 10, 21, 67, 19,108, 55,141,101, 88, 18,146,175, 58,139, + 25,105,146, 33,118,118,251, 44, 42, 3,190,210,253, 78, 8, 6,213,207, 85, 33, 58,148,174, 43,219, 50,123,110, 60,129,104,222, + 20, 20, 51,255,158, 7,176,224,118,190, 60,160, 43, 98,226, 72,228,209, 57, 71, 17,114,202, 52,107,152, 54, 23,111, 91,101, 10, +145,174,141, 41,249,247, 29,237,204,120,243,167, 6, 86,202,160,181, 57,190,150,216, 9, 54,210,198, 66, 35,132,136,149,193,137, + 8, 35,110,220, 60,223, 32, 52, 47, 30, 6,176, 16,105, 70,235,176, 8,114, 29,128, 22,131,255, 46, 27,211, 16, 27,107,198, 16, +109,104, 9,124,154,171,226,223,183, 78, 39,152, 11,233,132,129,125, 9, 50,130,185,100, 60,223,131, 30,163, 14,100, 51,115,184, + 78, 8,153, 64,165, 42,164, 52, 13,238,130,187,188,170,205,152,101,210,148,211, 53, 65, 76,162,145, 36,186,215,188,186, 21,202, + 35, 29,135,244,205,240, 39, 77, 28, 81, 42,193,223,168,124, 37, 38, 11,120,247, 27, 92, 8,208,171, 91,116,166,156, 60,180,195, +209,101, 88,136, 94, 65,170,251,221, 37,248,151,199,205,244,174, 42, 84, 4,137,145,116, 53,118,144,224,225, 6,201,109,110,125, + 28,118, 58,210,204,174,252,244, 78,236, 50,166, 36, 16,197,173, 77, 87,244, 58,241,241, 83, 10,238, 19,141,209, 83,136,252,146, + 31,190,120,186,115,134,211, 68,186, 50, 3,180,161,142,183,200, 98,202,222, 77,137,250, 67,150,253,181,182,222,145, 58,118,111, +163,194, 18,235, 52,137,216,172, 30, 7,155,147,191, 86,153, 60,213,203,130,143, 83, 71,240,202,148, 4, 26,156, 28, 29,177,221, +110, 73,121, 49,108,118, 78,226, 51,113,213,187,116,229,178,156,123, 76, 97,200,164,232, 22,149,170,149, 82,188, 67, 55, 11, 4, +190, 7,240,244,238,159, 35, 24, 33, 9,203,157, 37,211, 98,193,118,222,178,221,206,148,174, 94, 33,170, 33, 41, 16, 82,160,213, +153,189,157, 37, 31,125,250, 9, 55,119,110,248,197,143, 82,187,191,239,116,232,165,145, 87,201,133, 78,132, 17,222, 80,135,229, + 78,233, 51,144, 19, 49, 76,244,114,137, 36,136, 53, 80,164,248, 26, 41,249,225, 48,205, 66,223,129,139,214, 28, 18,163, 30, 95, +184,147, 50,139,165,176,220, 91, 16,250, 68,138,193, 81,148, 93, 41, 27, 69,181, 81, 74,101, 59, 55,106, 45, 14, 29, 34, 19,243, + 2,237, 51,211,232,112, 52, 85,122, 80,122,117,122, 97, 87,163, 39,255, 98, 93, 92,158,240,230,237,107,202,118,205,221, 7,187, +252,201,143,191,224,233, 7, 79,184,183,191,224,229,235,215, 28,157, 93,112,124,252,150,151,191, 59,230,253,201,134,139,205,154, +205,122, 38,196,204,122, 91,169,189, 33,221, 59,140,222, 59,111,223,156,250,184, 49, 45,156, 15, 80,219, 16,133,126,239, 83,151, + 1, 3, 82, 51, 82,136,104,113, 20,230,213, 84,170,142,188,234, 41, 39,239, 54,209,161, 52, 30, 41,133,221, 15, 12, 53,151,218, +160,234,191, 15,119,142,244,230,154,136, 94, 28,208, 19, 36,178,202, 11, 38,113,187,141,213, 70,195,147,190, 68, 33,139, 57, 7, + 91,113, 53,118, 74,220,190,181,207,141,219,183, 60,239,249,252,146,157,197,130, 47,255,236, 75,126,243,207,240,219, 23,239, 57, + 88,119, 22,121,197, 78, 90,113,190, 94,115,161,153, 60,173,120,124,119,159, 95,125,189, 37,247, 72,154, 18, 76, 66, 91, 55,176, +192, 86, 11,180,128, 36, 63,180,187, 5,178, 4,106, 54,222,191,125,195, 63,125,253, 27,108,158,137,217, 29, 29,115,117,186, 92, + 16,161,170,210,202,214, 69,158,113,216,137,112,116,116,143,238,244,176,205, 6,137,110,169,181, 40,244,210, 8, 33,249, 94,146, + 48, 38,117,238,116,137, 67,196,187,187,187, 67,179,206,209,217, 57, 71,167,107,223, 75, 6,215, 11,140, 22,206,215, 67,106,174, +248,174, 67,148,106, 74,221, 20, 46,215,231,164,229, 2, 93, 87,106,245, 17,100,110,129,237,220,248,221,251, 99, 30,127,247,134, +128,114,247,209,167,252,201, 31,253,152,119,255,233,215,204,165,147,178, 43,206,105,130,180,230, 90, 6, 81,102,221, 16,131, 16, +101, 98,219,252,210, 10,209, 40,173, 66,117,196,105, 90,152,123,211, 45, 17,233, 20,109,238,151,150,136, 21,131,169,210, 69,188, +176,178,206,166,155,235, 68, 48, 52,122, 96,151,153,121, 32, 81, 53,135, 53,153, 95, 78,168, 55, 87,193,154, 35,104,163,145,241, +187,161,217,150, 94, 51,193,250, 0,139, 13, 79,188, 69, 50,193, 65,114,173,248,239,202,209, 27, 54,109,100,240,232, 99, 11,228, +180,164, 7, 31,137, 47, 82,164, 79, 25, 9,153,214,103,135,182,196, 78,159,135, 86,196, 58, 83,152,124,165, 16,157,222,167,227, +245,105, 52, 66, 95, 64,223,140, 48,166,171,239, 87, 98, 10, 13, 22, 75, 58,141, 86, 7, 27, 37,249,189, 21, 67,192,130, 83,240, +250, 80,107,215,226,128,165,148,196,249, 4, 8, 21, 31,189,199,241,157, 37,121,130,105, 28,123,114,233,120,241,163,254, 44,132, +152,209,226,239,135,133,238,150,186,170,132, 60,194,202,204,245, 0,134,141,187,210, 41,165,140, 12, 17,223,233,123,147,234, 23, +117,244,212, 75,191,245,253, 46, 18, 87,243,135, 24,208, 90,208, 14, 51,190,122,179,110,180, 94,137, 31, 60,121,248,211, 16,130, +179,200, 7, 43,125,146, 72,140, 54, 50,214,125, 39,236, 73, 97,174,126,215,107,141,188,143,237, 85,100,192, 94,124,111,226, 34, +243, 56,140,241,190, 23, 39,142,102,121, 80,219, 2,190,219, 38,197,239,119,226, 35,192, 32, 12,118,176,143,186, 7,138,112, 84, + 56,170, 62,238,182,145, 4,110, 64,235,230, 20, 38,174, 30,198,224,135,155, 94, 13,173, 93,196, 54, 68,134,215,136, 85, 69, 71, +120,135, 31,184,138,177,154,226, 16,116, 76, 64, 96, 18,163, 53, 29,254,204,140,226, 9, 94, 59, 83,118,204,172,185, 13, 37,249, +164,206, 59,156,156,198, 84, 66, 9, 57,195,232,176, 99,134,168,201,171,213,144, 61,197,103,116,189, 33, 56, 46,247,228,226,148, +231, 47,222, 80,198,207,137, 33, 32,164,161, 50, 55,162, 36, 68, 34,203,189, 93, 62,251,244, 41,155,203, 11,230, 82, 80,243,204, +115,237, 46, 40,116, 18, 19,195,101,224,107,138,213, 98,201,238,106,193, 34, 77,228, 52,177,153,103, 15,231,168,109,136, 63,198, +151, 98,140,135,247,247,246,249,193,151, 95,112,235,214,174,115,171,195, 24,139, 13,109, 66, 72, 48, 77, 1,137, 19, 65,132, 69, + 22, 22,209,195, 85, 8, 94, 38,171,186, 13,144, 86, 92,200,178,173,148,160,196,180, 24,228, 47,231,248,231, 28,233, 10,117, 91, +124, 71,103,145, 90,175,104,108, 35,123,186, 42,235,186,101,189,153,209,218, 73, 4,114,154,200,147,176,179,187,100,218,217,197, +146,142, 73,142,161, 73, 64, 58,165,109,233, 10,189,141,169, 77,240,247,176,215,153,195,247,239,120,251,246, 53,214, 58, 31,124, +240,128, 31,125,246,132, 39,247,238, 97, 65, 57, 60, 58,229,155,231,111,248,237, 63, 63,231,235, 95,191,228,221,241, 57,151,151, + 27,234,218,197, 53,189, 22, 90,245, 4, 49,134,168,235,252,108, 30,157,160,199, 65,234,176,171, 13, 93, 11, 58, 68,158, 97,120, + 39, 83,156,188, 75,163, 12, 90, 30,180,238,225, 54, 62,253,234,126,152, 95, 89, 49,245,191, 85,157,186,156,215,204, 15,180, 15, + 63,120,202,195, 15, 31,208,170, 23, 70,214, 6,241, 49, 71, 52,185, 3,225,213,239,126,207, 92, 46,217,219,221, 39, 69, 72, 83, +230,246,157,219,236,223,184,193,238,206,130,148, 2, 41, 76, 60,120,240,144,189,253, 61,150,203, 37,155,237,153,135,117,244,198, +159,253,233,231,252,235,127,249, 99,126,253,143, 95,243,250,229, 1,111,222,189,101,110,107,132,202,235,215,175, 57, 61, 63, 33, + 10,108, 6,201,177, 26,208,157, 21,222,205,167, 63,102, 5, 13,133,160, 70, 32, 82,154, 79, 39,222,188,250,142,163,247,111,137, + 41, 59,224,232,106, 42,193, 8, 95, 25,223,103, 9, 54,132,142,205, 15, 56,145, 49, 97, 26,194, 36,171, 99,119, 89, 17, 83,210, +208,164, 4, 92,212,100,195,203,174,138,187, 57, 22, 75,126,240,233, 99,254,252, 39, 95,113,112,180,230,232,228,140, 56,214, 89, +170,221,167, 8, 81,198, 72,246,138, 94,232,150,203, 40,208,212,184,121,251, 22,189, 42,165,108, 89, 78, 25, 11,137,121,179, 33, + 50,177,179,152,216, 93,116,226, 98,129,234,146,111,191,123,193,220,221, 13,209, 90,103, 46, 74, 76,110, 57,108, 29, 66,118, 36, +104, 47, 46,105,106,214,105, 10, 42,126,192,196,225,138, 16, 38,186, 56, 69,207,146,147, 59,181, 86,178,186, 86,199, 5, 91,126, + 89, 89, 31,251,216,224, 54,219, 86,189,136,204,196, 49,229, 16, 90,173,174, 59, 0,212, 26,145, 4,137, 49, 78, 22,230,238,162, +211,148,134,206,195,198, 25, 51,156, 53, 17, 27,252,244,224,205,105, 28,206, 40, 53,202,240, 94, 7,247, 2,121, 48,214,240,105, + 95, 77,205,164,123, 62,195, 21, 7, 37,139,143,251,175,144,102, 82,125,245,192,176,174, 90,247, 3, 93, 71,123,103,131,186, 86, +205,191, 63, 50,146, 58,175,162, 99,137,248, 4, 49,164,161,100, 31,196,205, 16,137, 9, 66, 28,142,151,101,246,207,192,188,166, +115, 33,162, 91, 79,227,176, 5,171,185,139,160,117,255,243,197, 48,194,181, 2, 87,139,210, 97, 55, 27,106,252,232,211,239,126, + 69, 33, 21,103, 80,136,233, 88, 53,140, 29,122,184, 34,124,250,138, 88,213, 32,250,250, 54, 6, 29,172, 16,220, 74,173,230,147, + 39, 17, 44, 5,114,200,244,174,196, 71, 15,239,254, 52,132,116,189, 31, 13, 34, 99, 95,235,227,135,156, 93, 12,150,134, 36, 55, +135,232, 25,187, 38,228, 44,164, 33,252, 9,146, 33, 8, 57, 48, 50,199,251,247, 66,177, 96, 67, 72,231, 85,160, 68, 39,101, 37, +146,119,239,138, 63,189,209,198,126, 79,135, 7,211,199, 94, 87,231,151, 12,235, 91, 12, 35,215,124,140, 66,162,248,133, 23,174, +119, 20,134,225,182,183,104, 87, 98, 46,187, 86,235,135, 48,248,207, 10, 41, 37, 31, 7,171, 34, 41,123,215, 52, 86, 10,225, 90, +185, 31,134,125,220, 19,200, 2, 66,206, 17, 73, 78,251, 82,243,206, 32,192, 16, 7, 14,237, 64, 8, 36,113,192, 8, 18, 73, 41, +147, 70,151, 72,116,225, 91,104,145,144, 2, 41,123,140,233,203, 23, 47,120,127,188, 33, 7, 87,198, 42, 78, 52,242, 11,222,173, +108, 57, 46,185,255,225, 83,246, 86,153,131,131,247,180,238,221,106, 99,248, 44,199,123,165,227,240,239,173,177, 88,237,242,233, + 71, 79, 73,162,180,106,148,222,188,106, 52, 70,242, 83,191, 38,226,165, 36,220,127,112,159,143,159,125,196,254,254, 98,240,134, + 59, 70,119, 81,158, 8,139, 24,145,144, 8, 22, 89,166,204, 32,241,146,162, 34,221, 85,150, 17,195,121, 0, 0, 32, 0, 73, 68, + 65, 84, 81, 53, 14,101,107,107,244,106,212,222, 33, 39, 31, 55,141,209,102, 88, 64,102,120, 64,107, 39,238,184,182,195,196,181, + 27,105, 74,172,210,130,222, 58, 51, 91,130, 6,106, 51, 98,134,162,176,169,157,106,174, 2,183, 40,244,173, 39,239,165,168,244, +217, 19,204,226, 78,134,117, 35, 36,119, 66,104, 23, 46,214,151,188,120,241,156,227,195,119,164,148,120,252,248, 30,207, 62,188, + 77,154,150, 92, 94,108, 56, 59, 59,230,159,190, 61,226,229,139,119, 28,159, 92,114,185,105,148,109,119, 10, 97,239, 72, 8,212, +185,146,162,211,214, 74,113,139,228,200, 58, 28,202,213,177,186, 26,244,168, 97,226, 28,194,184, 43,185,156,103, 9,228,148,136, + 18,168,213,201, 87,134, 67, 55,180,251,116,203,139,231,241,124,143,113,190,224,251,197, 48, 70,118, 31,126,244,148,221,188,235, +192,163,156, 40, 24, 49, 47,252,155,160,149,180, 90,160, 58,243,201, 71,159,242,217, 23, 95,240,236,222, 67,238,223,127,194, 71, +159,125,193,141,253, 91,236,173,110, 34, 18, 88,237,237,176,123,107,207,211,173, 4,118,151, 59,220,188,125,159,203,205, 37, 39, +103,149,255,254,223,252, 5, 95,125,246, 33,255,252,205,119,252,230,235,127,230,243, 79, 62,227,243, 47,127,204,102, 19,249,235, +159,255, 21,173,117,110,223,121,132, 76,129,216,133, 82,182, 46,172,138, 99,189, 35,197,103,142,234, 34,185, 56,172,175,111,223, +188,229,236,236, 4,137,129,218,113,177,173, 65, 27,103,132,136, 79, 36,174, 10, 37, 29,151, 87,111, 3,113,109,206,144,240,226, +215,190, 63, 0,211,228, 7, 72, 47,174, 6,113,201,182,139,103, 85, 57, 59, 95,243,238,240,148,109,237,188, 59, 60, 99,189,217, +248,119,118, 16, 7,175,224, 85, 30,131, 49,118,252,189,141,243,201, 51,198,151, 97,201, 34, 79,172, 55, 23, 35, 74, 26, 54,181, +178,156,150,220,216,223,229,230,221,125, 98, 16,190,254,250, 27,222, 28, 28,210,106,244,104,229,170, 16,157,205, 16,136, 4, 51, + 84, 20,107,117,116,123, 74,235,149,208,187, 79, 15,134,208, 77,212,249, 32, 34,157,201,140, 74, 0,139, 46, 84, 85,255,238,244, +110,200, 20,189,166,174, 51,178,136,116,137, 80,189,251,116,104,138, 39,138,185,141,202, 65, 52,134, 39,198, 49, 10,169,201,160, + 89,164,106,247, 53, 94,115,125,129, 12, 17,107,183,113,166,171,167,190,105,215,161,255,240,130, 61,154, 79, 23, 66, 31, 73,154, + 58,146, 9,135,173, 59,117, 15, 48, 49,117,253,149, 74,245,115,184, 27, 57, 64,193,133,207,166, 66, 27,201,158,100, 25, 58, 41, +127,143,212, 6, 0, 12,189,126, 93,173,251,179, 50, 69, 95,121,169, 8, 22, 59, 29,165,107, 24, 12, 18,183,210,198,232,147,199, + 48,114, 53,162,184,208, 91,134,106, 61, 5,223,249,143,173,215, 40,166, 71,180,182,186,125, 45, 40,232,120, 46,186,186, 29, 55, + 17,220,245,131, 79, 86,204,220, 97, 0,110,125,182,232, 13,160,168, 12,138,157,235,166, 66, 12,184,214,239, 74, 31, 31,104,125, +252,204,225, 46, 98,196, 45,187, 39,219,241,197, 34, 66,188,113,107,239,167,243,118,166,110,103,230,178,101, 91, 42,219,185,186, + 98, 15,175, 52,100, 36,203,132, 32,126, 49, 77,233, 90,204, 48, 45, 18, 41, 77, 44,242,130,197, 40, 0,124,239,235,213, 68,140, + 30, 7,153,226,184, 34, 7,173,205,212, 71, 33,150,252, 66,116,101,188, 17, 76,137,230, 16, 16,141, 35,237, 39,184,103, 29, 13, + 99, 13,224, 15,146,118, 87,204, 94, 69,143,146,133,160, 94, 81,129,179,205,221,255,238, 73, 86,190,171,247,226, 68,213,223,139, + 62, 68,108, 46, 8,154,152,166,137,197,120, 64, 21, 27, 44,120, 23, 50,137,137,167, 37,198,232, 97,246,193,223,224,100,208,131, + 16, 82, 32,146,200,203,137,197,238,138,189,157, 29,143, 44, 12,145,180,200,254, 97,198, 65,239, 19, 37,165,232, 36, 49, 20,137, +194,229,229,154, 87, 47,222, 48,143, 47,157, 4,207,215,205, 57, 17, 83, 30,163,230,198, 20, 19,189, 52,222,191, 63,166,245, 70, +109,149, 86,170, 31, 96,100, 66, 8,131,252, 54, 56,194, 49,243,217, 39,159,241,201,135, 31,112,122,114,204,241,229,197, 8,167, +105,244, 62, 32, 12,230,222,208,219,119,110,241,209, 71, 31,240,225,179,167,228,156,177, 86,168,221, 71,167, 98,230,168, 73, 22, + 44, 86,113,248,215, 23,132,165, 14, 21,183,143,132, 91,183,107, 78,126, 25,100,187,176,240, 3,112,154, 38,168,141,190, 45,254, +190,103,163, 84, 88,152, 19, 6, 93,183,225,236,227, 62, 37, 22,198,112, 10, 8,181, 85,122,141,254,108,150,234,218,134, 20,152, +154,171,230, 67, 16,114, 78, 44,131, 31,120, 1, 87, 0,247, 25,164, 87, 90,168,108,186,242,254,253, 1, 47,190,251,142,245,229, + 41,251, 55,119,185,119,255, 22, 55,118, 92,124,178, 89, 55, 14, 15, 79,121,245,250,136,231,175,143, 56, 60, 60,101,189, 25,150, +159,218,152,107, 37, 70,231,235,107, 11,212, 1,177,104,117,118, 71, 64,112, 1, 91, 24, 30,252,136, 23,119,138,251,139, 51,110, +207,188, 74,112,186,218,187,153,186,194,223,221, 19, 12,111, 52, 67,244, 52,162,117,213,191, 31,225,218,238,226,211, 59, 51, 47, +196,159, 60,253, 8,201,137, 44,209, 99, 74,131,176,191,152,136, 57, 51,207, 91, 98,217,186,102,165, 41, 71,199,135,156,109,103, + 34, 66, 52, 79, 46,204,217,145,167, 0,139,180, 66,181,147, 45,178, 90,253,255, 84,189, 89,179,101,217,117,157,247,205,213,236, +125,154,123,111,246,153,149, 89,149,213,163, 0, 1, 32, 77, 5,101,218, 18,237, 8,203,150,195, 86, 4,195,244, 79,194,223, 81, +132, 95, 28,126,115,132, 27, 89,242, 3, 3,148, 68,152, 36, 72, 11, 64, 53, 89,168,204,170,236,111,115,206,217,123,175,102,250, + 97,206,115,147,126, 66, 1, 72, 36,238, 61,205, 94,107,142, 57,198, 55,214,204,125, 97, 60,219, 80, 84, 89,246,149,255,238,159, +255,103,252,250,203, 39, 60,249,246, 57,143, 31,190,199,221,251,239,241,241,195,219,220, 60, 91,113,227,206, 35,134,237,138, 48, + 9, 61, 68,163,139,149,163,139,221,253, 24,101, 66, 37,160, 13,115, 12, 15,208,150,153,231, 63,252, 64, 80, 33,134, 68,239,213, + 47,244,150,138,209,238,149,195, 88, 42,195,228,204, 2, 33, 26, 23,254,232,182,238,248,170,207, 38,236,186, 52,119, 92,119, 22, +231,237,219, 36, 27,124,106, 74, 28,166,153, 31, 94,188,226,176,219, 95,151,249,104,247,135,183,119,146,103,177,110,243, 20,227, +245,129,213, 20, 95,117, 52,198, 60,112,168,197,113,213,217, 92,248, 57, 17, 55,198,164, 80, 26,245,176,227,229,121,101, 58,242, +191, 59, 70,135,171, 66, 81,107, 39,236,158,139, 87, 53,133, 34,123,175, 69, 80,143, 17,143,206,182, 72, 22,129, 43,170, 72, 52, +216, 75,148, 78,139, 70, 86, 67, 18, 90,204,196,220,187, 51, 41, 90, 35,186,159, 33,198, 76, 20,175, 0,214,106, 10, 99,183,105, +182,249,128,148,174, 75,175, 26,181, 26, 82,183, 5,177, 52,129,151,145, 72,196, 58,205, 37,218,119, 87,132, 94,237, 66,170,162, +144, 44,193,100,222, 39,243, 79, 73,176, 42,100,237,198,140,192,169,163,201, 1, 53,213, 39,124,155,226,109, 45,216, 90, 49, 87, +122,192, 7,181, 98, 20,182, 32,134,151,237,141,230, 43, 36,106, 55, 40,144, 39,147, 8,199,250,112,219,165, 71,204, 96,232,133, +161,246, 28,244,169, 28, 95, 55,119,245,110,235, 96,151,203, 36,246,187,171,127, 23,155, 63,115,142,170, 18,106,150,185, 16,130, + 49, 0,143,118, 53, 81, 87, 65, 13,104,166, 14,218, 50,244,178,186, 2,101,190, 3,179,114,188,107, 46, 13, 30,107, 19, 87,119, + 37,152,220, 79,169,190,195,119,137, 28, 69,212, 86,175,241,206,237, 27,191, 8,189, 27, 55, 91, 58,218, 76, 86,234,117,166,181, + 98, 38,134,165, 82,107, 99,105,141, 82, 43,165,116, 74,183, 93,116,109,226,191,136,237, 0, 82,202,246,195,135,196,144, 71, 35, + 8,165, 68, 14, 22,227,176, 91,108, 36,199, 76,204, 6,166,183, 40,155,185,125, 91,179, 3, 78,213, 37, 84,123, 71,108,175, 30, +236, 96,104, 88, 9,130, 65,244,195,241,249,102, 83,190,120,218,190, 91,230,176,105,243,226, 20,251, 67, 71,248,138, 98, 42, 68, +120,215, 68,105,111, 70, 54,158,111, 45,213, 46, 12,110, 82, 16, 73,164,156, 9,254,207,155,205,138,152,173,122,116,149,182,172, + 86, 25,141,129,117, 62, 97, 56, 73, 16, 35,245, 48,115,113,113,224,114,223,174, 47, 18, 61,192,184, 90, 25,201,204, 60, 78, 44, +181,160, 13, 94,255,240,146,239, 95,190, 65,162,151,107,132, 64,204,129, 60,100,155, 42,106,103,119,216,147, 98,180,178, 1,237, +244, 50,115,152, 23,154,196,107,212,175,122, 59,219, 17, 95,123,247,189,247,248,252,211,143,129,200,184,222,178,223,159,115,121, +113,105,151, 43, 53,131,210,217,217, 41,239,127,244, 62,159, 60,254,128,245,106, 36, 54,101, 46,147,101,241, 91, 96, 16,187, 40, +228, 60, 48,108, 87,244, 90,189, 77, 74,144,106, 15,221, 30, 18, 26,173,221, 78,114, 34, 69,199, 10,167, 72,104,238,152,111,205, + 11, 42,132,213,152,136, 49, 27, 45, 43,218, 42, 38,164, 12,139, 80,154,237,239,123,181, 44,185,101, 80,124, 23,152, 35, 73, 50, + 42,145,208,141, 76,117, 92, 29,109, 82,164, 84,163, 82, 5, 1,230,198,178, 76, 44,190,122,249,225,233, 51,126,255,236,123, 74, + 91,216,110, 54,220, 60,221,176, 26, 7,154, 86,230,253,194,197,249,142,243,171, 75, 94, 94,236,216, 95,238,205,252,233,123,241, +165,218,229, 38,196,104, 70,203, 86,125, 10,234,118,184,240,142,200,136, 95, 98, 69,109, 93,149,130,137,141,197,241,148,105, 72, + 86,164,210,173,203,189,107,119,170,223,113,250,179, 67, 61,116, 51,155, 40,238,118, 23,241,138,228, 96,166, 28, 55,207,125,242, +233,103,220,121,240,128, 49, 14,196, 65,209, 48,216, 23,165,207, 92,190,121,201,139,167,223,115,216, 93, 82, 91, 97, 59,172,201, + 39, 43, 86, 97,100,125, 50,144,135, 53, 57, 25, 2, 57,133, 21, 33, 36,139,135,213, 74, 15,157,101,174,182, 75, 68, 89, 13,129, +239,190,123,201,131, 15,110,243,193,251,247,248,187,223, 62, 67,180,113,239,238, 35,238,110,224,193,123, 15,152,218,202,246,129, +173,209,162,241,213,135, 16,168, 75, 53, 38,133,211,228,162, 26,240, 74, 68,208,182,176,217,110,121,115,121,193,180,187,178,103, +136,218,165, 93,123,247, 85,153, 15, 6,106, 4,178,166,238, 70,247,164, 64, 16, 91, 7, 90, 94,216,113,213, 40,181,204, 6, 53, +233, 22,213, 21, 95, 37,198,144,188, 97,207,118,156, 57, 88,149,173,237, 73,109,205,102, 55, 4, 91, 9, 90, 74, 33,154,113, 81, +196,163,176, 70,171, 44, 75, 97,154,247, 14, 12,202,228,156, 41,109,177,130,165,144,208, 5,186, 70, 94,190, 61,103,119, 48,104, + 75,136,129,222, 26, 34,217,218, 33,219,132,198, 68,142,221, 94,171,166, 72, 22,250,226,113,191,152, 77, 74,246, 53, 76,104,150, +130,232, 1, 66, 41, 4,146, 81, 24, 99, 2,245,127, 86,123,182, 43,118,241, 35,184,242, 81, 27,205,135,156,227,250, 43,103, 75, + 17, 53,235,105,162, 22, 43, 49,169,221,158,201,173,129,132, 78, 19, 8,189, 89, 21,113,239, 4,245,195, 6, 39,141,170, 37,166, +162, 68,135,127, 90, 41,146,205, 52,102,222, 13, 57, 94,203,247, 41, 37, 42, 70,187, 11, 21,138, 67,167,212,191, 47,141, 78,243, +166, 69,179,111,217,103, 3,191,248,138,163,200,143,171,216,160,216,251,228,159,177,163, 26,166,106,123,240,224,127, 86, 85,140, + 82,167, 92, 27,174, 43,174, 4, 35,148,230, 75,155, 0, 89,176, 53, 81,116, 21, 96, 94,236,239,141,199,203,130,122,198,191, 57, +165,206,158,195,205,155, 51,113, 67,171,247,210,218,115,161, 70, 83, 3,180,217,170,214, 91, 59,205,220,109, 3,170,136, 85,188, +210,252,194,234,207,108,146,181,127,198, 28,174,137,148,131, 36,150,218, 72,203,212,140, 82,230,199,106, 78,106, 5, 42,189,123, + 14, 92,209,104,163,125, 95,204,249, 45, 78,114, 11,142, 84, 59, 36, 99,173, 7,201,132, 33,146,180, 81,154,144, 87,107, 70, 91, +198,219,131, 62,153,196,159,106, 32, 15,195,245,164,220,164, 24,166, 82, 27, 37, 68, 74,135,144,149, 49, 25, 92,192, 26,119, 76, +122,215, 96,114,251,177,196,195,140,114,157, 20, 65,107,179, 91,175, 88, 89,125,245, 72, 87, 20, 3,221, 52,154, 65,246,147,137, + 76, 71, 87,126,208, 78,143,230,224,108,161,250,244,108, 46,202, 30, 32,198,193, 32, 14,201, 88,219, 42, 66,105,176, 76,197,118, +151,253, 64,109, 11,243, 82,233,101,225,234,112,224,106, 42, 44,135, 3,181,204,246, 80,143, 35,195,106,197,106,179,225,228,116, +203,102,220,112,231,193,125, 54,163,146, 10,148,174,206,249,182,203, 75,112,174,190, 68, 43,159, 65,132,245,118, 77, 63,114,245, +181,210, 75,227, 48,205,148, 90,236, 65, 38,234,209,195,232,217,111, 32,193,126,127,224,245,249, 5,103,235, 21, 26,133,143, 63, +254, 20,209,223,240,242,205, 21,119,239, 62,224,236,228,132,155,103, 39,172, 78, 87,180,226,238,253,208,223,197,171,114,164,134, +192, 16,237, 0, 43,211,204,102, 12,206,142,183, 78,240,106,128, 2, 82, 22, 86, 67,224,224,114, 89,247,200,210, 24, 86, 4, 45, +214, 11,156,215,196,184,102, 46,123, 6,148,144, 71,148, 66,172, 21, 77,182,198,233,197, 34,134,173, 69, 99,111,163,132, 56, 88, +195,209,210, 33, 41, 81,186,253,108, 93,233,154, 48,204,245, 66,205,208, 14,205,162,118,173, 16, 99,228, 48, 85,158, 63,253,142, + 55, 23, 23, 68, 85,242,176, 98,189,201, 40,202,213,110,103, 6,165,171,153,214, 59, 75,129,105,182,126,229, 94,187,229,148,109, +183,130, 40,148,121, 54, 92,102,180,104, 76,237,139, 39, 39,108,202,241,238, 93,186,154,185,235,236,108,228,100, 51,242,242,249, + 57,218, 59, 99, 74,215,240,155, 35,220, 73,143,152,228,214,253,139,110, 12, 88, 21,147, 36, 77, 46,118, 47,137,243, 36,106,179, +248,225,143, 62,253,130,207, 62,253, 49,173, 43, 63, 60,123,202,131,199,239, 83,175,246,188,126,251, 3,203,114,129,104,228,228, +100,203,122, 60,229,244,244, 6,171,213, 17,244, 19, 24,214, 35, 45, 70, 78,243,138,185, 44,196,101, 38,164, 21, 75,155, 72,131, + 17,202,163, 10, 81,173,208,100,232,157,179,237, 41,255,250,223,254, 45,127,254, 47,254, 19,254,224, 39, 31,242,235,191,251, 61, +111,119,133, 54, 77,220,189,125,131,147,141,114,177, 88,189,173,204,142,157, 78,230,161, 9,173, 17,219, 98, 42, 79, 20,150,194, +117,255,130, 14,129,199,143, 62,224,111, 95,190,180, 75,142, 4,107,240, 82, 55, 96, 10,212,102,201,133, 64,180, 29,166, 4,180, + 47, 38, 79,122, 27,150, 25,138,178, 13, 29,101,246,149,156,213,245, 14,121, 96, 61, 38,166, 90,188,253,209, 36,207,168,182,206, +105,106, 10, 83,144,232, 96,146,119,151, 4,241, 24,169,170, 82,123, 49,195,149, 42, 90, 23,135, 65, 37, 75, 19,228,234, 14,245, + 78,157,139,121, 64, 90,103,183, 44,148,182, 99,149,239, 80,166, 78, 74,234,235,160,153,189, 87, 44, 47,165,112,104,141,117,202, + 44, 46,243, 75, 72,118,177,243, 34,158, 42, 98, 50,125, 79,206, 32,247,238, 12, 96, 72,194,210,141,155,168,173,162, 43,203, 87, +167,144,208,214, 72, 57,209,163, 80,131, 48,136, 41, 34,225, 24, 33,235,129, 40, 74,141,197,214,157,161, 91,190, 90,133, 62,153, +202,106,220,122,227,105,116,233,150,155,215,234,205, 98,205,170,156,197,160, 55,170, 66, 95,140,179, 33, 61,120, 89, 76, 48, 47, + 78, 19,230,106,180, 56,154, 88,225, 18,213, 6,179,166,244, 94,168,106,205,101,221,171,137, 99, 12, 4,127, 93,213,135,183,214, + 13, 26, 19, 75,132, 49,218,179, 65,148, 34,230,112,239,199,237, 87, 13,164,228, 43,186,210, 8, 67, 50,162,228,210, 72, 99, 32, + 13,163, 39, 7,196, 27,218, 32, 5,203,142,183, 46, 44,154,104,209, 58, 28,186, 19, 84, 45, 13,213,188,162, 89, 72,132,235, 66, +179,138,130, 38,130, 90,130, 39, 37,243, 4, 25,147,249,232,142, 47,102,110, 52, 61,132,118, 60,204,155, 80,163, 93, 78,162, 43, +185, 29,195,245,138, 68,106,179, 72, 99, 12, 62,188, 98,175,117,177,211,144,248,224,238,141, 95,136, 90,198, 88,125,191, 80,107, + 51,135,179, 79,226,173,218, 95,218,163,213,110,102,137,190,224,247,224,191, 21,117, 91,252,166, 22,187,217,181, 70, 91, 22,230, +102,109, 92,181,207,236,246, 51,211,178,152, 27,216,247, 32,165, 88,221,170, 6,163, 9,165, 28,145,176,178, 94,247,148,200, 67, +242, 3, 46,146,194,177,137,205, 92,224,209, 39, 21, 28, 90,208,220,240,102, 45,236, 38,133, 70,130,213, 37,138, 16,162,129, 25, + 68,109,146, 82, 58, 73,163,187,249, 29,104,163, 70,109, 3,203,214,167, 56, 48,140,153,213, 38,147,135,200,144, 2, 63,124,255, + 3,191,253,234,247,188,120,249,150,139,243,115,158,191,124,201,171,215,231,236,118, 7,174,118,151,156, 95, 94, 81, 14, 11,173, + 89,211,142,121, 20, 76,254,139,173,112,249,230, 53,207, 95,189,228,106,233,172, 54, 39,228,152, 32,219,225,113,117,190, 55,230, +189, 24, 6, 54,199,129,253, 97,199,220,149, 60,102,155,152, 91,161,148,153,195, 97, 98,174,139, 93,118,186, 37, 24, 66,200, 68, +204,120, 39,222,244,181,236, 39, 74, 19,238,220,188,101,231,124,202,220, 56,189,201,237,219,183,184,251,240, 1,219,205,198, 12, + 65,222,160,135, 99, 75,135,117, 70,116,160,183, 5,180,217,197,102,136,150,177,116,114, 95,202, 66, 30,173, 99, 56,118, 83, 88, +150,102, 92,230, 62,123,169, 65,181,106, 90, 29, 50, 12,145,158,236,178, 88,157,240,219,180, 81,171, 48,172, 70,131,204,180, 9, + 51,194,170,181,238,117,239,142, 22, 51,243,149,106,230,152,156, 7,186, 70,210, 24,145,212, 25,213,204, 83,211,174,210,155,103, +103, 67,102,154,246,124,251,251,175,121,245,250, 13, 34,194, 48, 68,198,149, 25, 67, 75,179,252,244, 82, 42,115,105, 76, 75,101, +169,166, 40,128, 53,192,117,237, 94,172,107,173, 72,173, 26, 56,162,183,238,189,247, 6,201,177, 41,178, 95,179,245,171,118, 90, +169, 24,253, 81, 88, 74,183, 38, 45,239, 73, 56, 62,136,155, 90,252, 82,176,216,139,113,158, 77,166,195, 15,147, 16,205,192, 36, +209,214, 30,173, 21,136,129,207,191,248, 49,159,125,246, 99, 68,149,231, 47,190,165,206, 51,135,233,138,221,229, 75, 86,121,224, +244,228,140,147,237, 9,183,239,220,229,244,236, 6,163, 8, 11,194,201,118,205,230,230, 13, 78,238,221, 97,236, 29,141,131, 87, +209, 22,139, 12,161, 12, 57, 19, 52, 17,194, 64, 12,129,185, 20, 22, 9,140, 41, 83, 74,227,230,221, 7,124,244,222, 77,126,249, +215, 95,241,250,237, 91, 62,124,239, 46,127,242,199, 63, 33,172,132,111,159,190, 69,147, 53, 47, 90,245,103,112,242, 93, 68,195, + 64,144, 64, 21, 69, 66, 38, 4,155,158,106,239,220, 56,185,193,213,229, 5,231,231,111, 13, 91, 45,129, 36, 98,242,104, 53,194, +161,118,155,222, 76,206,108,199,122, 65, 75,204, 56,210, 90,131, 69,165,212,110,212,164,144, 33, 25, 79, 98,189, 30,184,117,114, +202,122, 28,174,177,205,174, 96,210,177, 75, 32, 57,209,171,248,100,239, 94,158, 33, 33,201,146, 40, 41,101,143,249,218,238, 56, + 39,119,158, 11,228,156, 57, 59, 61,229,234,176, 51,243,237,122, 69,115,137, 95,187,178, 90,159,250,202, 68,169, 49, 81,251, 98, +235,196,218,161, 47,166,202, 89,216,140,156, 34, 73,188, 90, 53, 64,247, 70, 63,237,193,148,225,230, 81,212, 36,104,104,182,182, + 9, 56,169,206, 62,139,199,184,169,200,177,215,219,192, 76, 33, 37,139,129, 53,113,188,161, 56,226, 20,122,177,215, 58,250,202, +163,131,119,119, 88,242,232, 58, 30,150,193, 66,238,130, 54,239, 31,239, 54, 92,136, 26,157,240,200,149,144,227,174,190,119, 74, +179,157,180, 28,205,159,209, 10, 82,106,175,102,112, 86,165, 53, 65, 28,151,218,245,168, 94,249,247, 66,133, 65, 34,157, 70,164, +211,186,120,124,179, 90,227,184,239,236, 69,156,175,160,246,140,239, 62,168,136, 8,161,185, 17, 51,225, 23, 55, 3, 65,213,165, +251, 37,189, 83, 93,129, 39,218,180,222, 61,142,218,143,124,250,112, 92,147, 4,186,151,181, 4, 9,214,200, 22,154,179,219,142, + 21,192,118,105, 58, 54, 48,166, 96,234,135,186,225, 60, 74,176, 88,182,226,173,167,141,226, 24,109, 99,167,200,245,164,159, 13, + 51, 72,239,199,207, 70, 51, 31,131, 6,226,189, 59,183,127, 33,170, 84, 18,146, 50, 67,176,195, 50,250, 11,212,142,165, 39,110, +128,232,254,144,171, 62, 99,116, 63,252,205, 8,100,110,238, 16,146, 31,246, 71,244,172, 57, 49,135, 36,164,222,160, 54, 14,243, +194,180,204, 28, 14, 7,174, 14, 51,203,116, 96,127, 40,236,167,153,101, 54,154, 82, 13, 38,173,208, 20,201,129,152,147,247,253, + 90,255,121,148, 64,136,102, 36, 27,162, 51,114,187, 18,163,145,184,108, 33,233, 82, 87,176, 93,142, 73,215,239, 90,219,130, 87, +180,166, 60,152, 89, 34,216, 58, 65,130, 50,228,129,156, 77, 18, 73,113, 69,107,149, 87, 47, 95,240,244,187,239,173, 69, 43, 70, + 90, 45, 44,211, 66, 41,197, 84,135, 14, 33, 39,134, 97, 96,187,222, 48,140, 3,113, 72,156,158,110,249,224,206, 9, 39,235,196, +229,161, 48, 77,149,195,229, 57,175, 95, 95,146,214, 43,110,108, 54,188,122,250,130, 23,111, 46, 9,217,233,122,113, 96,189, 26, + 89,166,189, 91, 37, 76,130, 47,213, 14,244,226, 32, 19, 61, 22,242,136, 92,223,144, 81,163,249, 5,191,141,199,144, 56,187,117, +195,138, 2,150,206,144,147, 97, 92, 49, 96,144,210,141,117, 45,150,205,215,118, 52, 6, 89,205,162,237,145,229, 26, 97, 24,188, +110, 19, 79, 19,235, 98,104, 34,141,102,196,171,181, 17,197, 92,198,137, 64,233,141, 36, 16,226, 72,236, 64,175,100,212, 38,224, +214,200, 41,217, 52,177,152,105,135, 56,144, 93,242,157,139, 27, 73,146, 66, 78,172,176, 66, 25,235,130,111,132,208,160, 8, 75, +155,153, 14,149,185,152, 76, 22,135,200,238, 98,199, 87, 95,125,205,238,242,146,144,108, 37,176,202,150,157,157,166, 70,105, 11, +101,169, 44, 75, 99,158, 11,197,110,179, 38,201,250,151,158,107,252,100,117, 40,209, 49, 67,218,253,224,117, 24,198, 63,128,179, +244, 86,209,230, 12,135, 16, 41,222,213, 46, 94,240,160, 30, 67,107,189,154, 49,211,251, 6,244, 56, 5,136, 94,239,205, 77,189, +180,194,147, 20, 2,235,117,166,169,242,163, 79,127,196,103, 95,124, 70, 90, 39,158,191,120, 77,189,122,203,122, 28,105,109,225, +189,251,247, 57, 61, 61, 97,123,178,229,100,181, 37,110, 6,171, 86, 21, 24,242,150, 7,119,110,145,215,137,172,118,216,149,150, + 9,173,144, 66,181, 7, 89, 52, 3, 83,144,192, 24,130, 21,153, 40,228, 32, 28, 14,133,178, 40,111,119, 19,127,242, 71, 95,240, +228,233,151,252,245, 95,253, 61,127,254, 47,255,148,255,225,127,252,111,121,117,222,248,238,249, 43,166,203, 61,218,173, 78,211, +184,182,107,178, 55,229,229, 20, 77, 97,106, 46, 79,246,197,138, 99, 84, 56, 57,185,193,197,229, 57,187,253,206, 40,122,197, 34, +142,193,190,184,206, 96,183, 97, 34,250,103,188,138,189,182, 71, 95,131, 93,202,204, 36, 23, 37,122,121,145, 82,171,178, 44,133, +165, 26, 59,123, 53, 12,220, 60,221,208, 74, 97, 55, 77,244,110,135,157, 73,159,134,108,182,117,162, 93, 16, 66, 55,215,114,142, +131,247, 43, 44,212, 86, 60,215,108, 28,254, 60, 36,182,155, 19,166,195,236,187,100, 37, 15, 17, 93, 26, 33,143,164,156,169, 90, +168,125, 54,168, 14, 66,238,221, 14, 3,245,137, 54, 36,178,154, 1,178, 98, 7, 81, 67,137,213,214, 87, 68, 43, 3,145, 96,151, +194,238, 89,106, 9,208,171, 90, 43, 32,150,248, 17,245,122,107,119,135,247,102,138,152,224,145,169,100, 64,174, 46,214, 58, 40, + 68,122, 53,179,114,196,134, 38,162,153, 87, 59,102,212,236,165,160, 89,136, 49, 18,186,210,155, 81, 57, 69,149,166,213, 46, 16, +193, 19,129,189,217, 10, 69, 21,169,126, 7, 11,230,171,234, 98,147,184, 21,100,169, 53,187, 57,213, 82,212, 76,162, 67, 18, 47, +209, 50,243,116,119,249, 90,213, 42,161,235,162, 52, 49, 21,150,110,236,143,166,225,122, 87, 45,193, 94, 83, 28, 50, 35,193, 36, +108, 53,249,216, 59, 34,174, 87,211,230, 59,195,188, 25,173,155,242,219,151, 74, 84,115,237,215, 35, 66,219,245,222, 24,109,210, +238,210,108,144, 12,129, 94,171, 69, 32, 37, 57, 70,199,108,239,221, 29,253,210, 45,106, 28, 7, 87,178,163, 94,247,150, 52, 12, + 54, 19,163, 87,109,119,177,203,156,116,211, 2,252, 92,141,120,146, 38,218,122, 69, 92,246,143,167,167,155, 95,180,218,232,205, +160,254, 75,183,136,154, 89, 5,162,239,119,147, 85, 70,134,204,144,236,225,110,101, 39,209,205, 83, 86, 39, 34, 62, 45,214,222, +168, 75,165, 19, 9,106, 73, 70,155,159, 59,115,183, 61, 73, 45,133, 82,109, 79,217,123, 35,116,165, 46, 11,165, 53,122, 93,104, +173, 49, 47, 51,243,188,216, 65, 95, 27,243, 84,153,150,153,165,246,107,226, 79,147,227, 27,174, 72,138, 12, 49, 19, 83,102,200, + 86, 56,145, 7,147,168, 98, 20, 86,155,124, 68,236, 50, 12,201,234, 38,135,196,144,162,221,209,130,237,204, 36,192, 56,172, 65, +224,205,249, 5,175, 95,191,229,245,243, 23,252,240,244,123,158,191,186,160,107,180, 86,181,186, 48, 47,139, 53, 3, 5,187,252, +196, 49,179,221,110,216,108,206, 56,189,113,131,245,176, 97,115, 54,114,182, 93,145,164,243,230,114,225, 80,149,148, 51, 67,138, +148,121,226,234,106,207, 50, 53,222,188,125,115,205, 12,136,193,147, 5,218, 25,134,108,194, 74,107, 44,243,204, 92,138,187,114, +125,162,247,213,128,161, 86, 35, 99, 30,188,181,206,190,116, 49, 90,188,112,117,122,194,144,163, 89,118,196,110,193, 93, 22,170, +199,143, 98,108, 22, 93,115,132,110, 41,157,160,141, 85,206,182, 59,170,194, 60, 21,123, 88,198,232,230, 15,231,184,247, 72,163, +154, 19,182,219,205,191,247, 70,143,120,196,208,153,238, 78,189, 11, 40, 61,123,202,162, 65,149,198,220, 22,106, 21,234,210,209, +184, 80,196,202, 68,114,198,219,204,204,213,222, 17,134, 4,105, 5,181, 26, 14,178,165,102, 57, 85, 1, 36,145, 99,230,237,155, +215,124,253,229,239,216, 93,236,104, 10, 67, 78,140,233, 24,111, 18,235,132, 47,157, 86,139,237,197,107, 49,220,163,154, 90,213, +154,183,171, 85, 51,238,136,154, 4,142,231,160,123, 63,186,174,237, 51, 85,187,119,162,123,251, 83,142,153,228,171, 45,219,193, + 31,213, 20,155,248,123,213,107,163,102,192,168, 85,215, 37, 63,222,192,103,208, 33,115,196,133,100,255,159,173, 42, 31, 63,254, +152, 47,190,248, 17, 41, 7,246,251,137, 23,191,127, 98, 23,239,222,249,248,253, 15,121,244,248,125, 98, 94,113, 99,115,139, 49, +103,242,102, 52,147, 99, 26, 89,159,142,220, 58, 59,181, 98, 35,133,188,186, 5,251, 43, 66, 16,187,212,104, 99, 19, 78, 29,136, +100,242,102,237, 11,171, 49,209,177, 75,191,212,198,249,235, 75,222,238,103,254,201, 31, 60,228,175,126,245, 21,255,249,159,254, + 49,171,237,138,178, 95,248,217,231,159,242,246,242, 21,111,118, 87,164, 4,171,148,236,129,213,141, 79,160,241,136,157,109,168, + 86,186, 87, 30, 55, 13, 12,171,145, 59,119,239,179,236, 14,188,124,249,194, 98,143,201,158, 31,150, 26,176,200,172, 56,111, 91, +157,105, 97,185,119,219,157, 91,143, 68,240,142,138,102, 74,100,115,201, 82, 34,135,105, 98, 63, 45,222, 97,175,230,137,145,206, + 52, 23, 47, 92, 50, 99,168,155,162,157, 2, 88,137, 41, 89,175,131, 19,253,138, 75,200,218, 59, 49, 38,255,204,116,198,213,200, +180, 44, 44,147,193,122, 98, 16,134, 65, 25,226, 72, 72, 3,165, 89,161,144,173,154,108, 10,238, 94, 67,157,131, 16, 36, 27,221, + 17,203,175, 75, 11, 80,173,112, 4, 9,134,120, 61, 26, 7,163, 77,194,189, 27,219,160,149, 74,139, 74,202, 35, 34,205,250, 5, + 36,210,197,164,109, 51,178,194, 48,200,181,191,160,187, 81, 75, 34, 44,254, 60,166, 91, 39,123,148, 64, 76,131,149,202,168, 33, +151, 83,180,146,170,210, 5,157, 11, 33, 65, 17,243, 29, 28, 63,179,234, 4,182,235,236,117, 0,205, 70, 13, 77,158, 15, 23, 12, +156,132, 38, 90, 47, 4,154,169, 57,218,188,138, 56,250, 90,197,163,156,189, 25,111, 64,195,117,132,177, 97,191,187,157,150,166, +250,106,105,239,136,164, 98,166,209,238, 96, 53,179,191, 4,122,176, 60,184,122,118, 60,104,183,159, 37,121, 61,150,152,164,110, +131,164,241, 68,172,138,213, 46, 82,122,125, 17,115, 22,187,250,235,233,158,140,224, 61,233,199,195,250,200,118, 15, 4,186, 24, + 34, 54,184, 55, 68,130, 41, 11, 70, 78,181, 46, 10, 31,135,237, 50,155,189,132, 76,205,112, 23,197,214, 2, 98, 95, 38, 7,215, +216,170, 36,222,184,121,243, 23, 61, 6, 67,182,122,144, 30,109,104,175,212,230, 59,141, 86,169,165, 25, 58,210,161, 32, 34,129, + 72,183,219, 14, 30,217, 17, 65,226, 64,246,252,177,248,180,161, 57,146,101, 97,222, 79, 28,166, 98,152,217, 32,118,235,165,163, + 85, 41,199, 95,250, 24, 95,195,126, 14,113, 96, 71,111,149, 86, 23,179,242, 99, 15,206,105,178,202,204,233,112, 96, 55, 47,148, +106,248,201,165,153,187,180, 54,111,197, 10, 66,146,108,177,179, 97, 32,229,196, 42, 38,198, 97, 68,178,144,194,192,122,189,102, +179,202,108, 86, 35,235,237,150,216, 42,191,251,237,127,228,247, 79,159,211,230,198,126,183,103,127, 40, 86, 75,233,133, 39, 98, + 72, 61,182, 39, 43,110,158,109,185,123,123,205,157, 59,107, 78,214,107,242,176,229,198,201,134,245,217, 0, 61, 82, 22,229,226, +178,114,121,176,223, 95,189,182, 53,196,132,244,198,197,197, 37,115,245,233, 66, 60, 45,174, 30,219, 33, 26,108,165, 76,148, 90, +175, 89,245, 33,216, 94, 39, 88,141, 29,104, 55, 52,109, 76,164,193,235, 65,181,155,100, 24, 3,159, 60, 56,227,238,217, 9,189, + 69,222, 94,158,115,152, 15,244, 82,169,189, 91,185, 77,173,214,254, 20, 32,229,200, 42, 69, 66, 14, 84, 21, 67, 84,122,243, 93, +136,102, 49,237,197, 72,249,189,153, 67, 62,103, 51,127,148,178, 24, 36,166, 9, 25,177,150, 49,173,246,103,134,136,180, 72, 28, +161,213,104,239,109, 12,132,165,211, 67,162, 39, 65,103,123,143, 7, 13,150,215,143,130,144, 88,202,132, 86,200,106, 41, 2,218, +145, 26, 88,145, 60,146,186, 80,197,118,249,231,151,151,124,249,213,111,185,188,220,115,114,178,181, 27,122, 11,164,113,160,139, +178, 56,119,189, 22,219, 79,181, 96,114, 95,111,149, 82,171,125,245,146, 79, 61,221,157,196, 46, 67,226,196, 41, 31,211,129, 70, +169, 71, 83,166, 18, 99, 96,200,217, 43, 37,171, 61,232,187, 32,209, 46,151,218,222,201,182,193,149, 33,219, 17,246, 99, 15,177, + 73,159,106, 19,178,122, 73,227, 49, 90,245,225, 71, 31,242,179,159,255,156,148,132, 10, 60,123,250, 12,180, 81,181,114,227,236, + 22, 55,111,221,102,140,137,205,250, 38,103, 55, 78, 25,114, 98, 41,133, 30,225,246,233, 67,182,171, 21,123,148,170,153,243,171, +115, 94,190,122,193,102, 53,162, 81, 40, 77, 88,180, 18,157,139,176,234, 3, 75,177, 29,241,152, 86,208,133, 97,101, 15,232,213, + 58,242,253,243, 87, 60,122,239, 17,159,127,116,151,170,107,126,243,229, 87,252,242,175,254,146, 63,250,233, 79,249,248,211, 15, +121,246,244, 41, 83, 85,131,254,116,155, 50, 58, 66,104,133, 62, 36,147,104,165, 67,207, 72, 88, 17,134, 0,181,144, 72,220,189, +247, 62, 33,193,155,215,175, 41,165,216,193, 46,225, 24, 1,230,221, 63, 28,205,175,118, 32, 90,226, 38,121,205,129, 77,119,222, + 67,121,109, 88, 53, 75,148,186, 90,208,184,119,255, 30,103, 55,110, 51, 29, 10,117,153,141,213,175,226,244,178, 35,147, 92,144, + 40, 36, 73, 6,130,202,201, 48,215, 62,249, 25, 33, 80,145, 36,108, 86, 55, 40, 75, 99,183,187,160, 54,101,153, 23,134, 24, 57, + 57,187,109,166, 48,178,201,206,189,153, 23,168, 31, 65, 49,214,207, 80,123,167, 37, 65,212, 24,247, 82, 26, 37, 52, 24,252,130, + 92, 45,174,149,196, 38, 56, 1,164,117,219,171, 70,203,102, 27, 99,164,211, 99, 52,213,169,217,255, 62, 72, 64, 91,177,203,143, +100,130, 9,253, 70,201, 67,105,179, 93,110, 37, 10,164, 35,200,200,226,151,161,187,210,201,145, 67,225,109,152, 98,138,106, 24, + 3, 57, 24,219, 95,187,213, 6, 75,136,164, 56,152,161,175,154, 60,109,159,113,135,165,182, 74,243,152,113, 8,194, 82, 23,187, +120, 75, 48, 53,178,123, 71,130,103,226,123, 55, 4,109,243, 66, 42,136, 86, 42, 22, 2, 41,252,131,212,130,133,166,141,252, 25, +236,114, 29, 48,172,184, 38,156, 63,208,173, 21, 82,155,189,151,206, 29,160,138, 23,177,200,245,217, 70,239,215,121,114, 61,130, +108,131,184,236,110,177,212, 99, 3,104,116, 24, 69, 8,205,140,110,226,241,213,163,220, 78, 39,137, 73, 98, 33,138, 61,103,150, +102, 60, 19,191,176,168, 26, 4,204,124, 85, 71, 60, 94, 36, 13,225,186,207,196,115,212, 32,129,140,241, 29,226,118,187,253, 69, +239,225,186,183, 86, 9, 72, 72, 22,235,136, 1, 73,137,113,200,228,144,204,140, 38,234, 77,103,222, 18,213, 26,197,191,244,173, +155, 27, 82,189,249,170,248,164, 24,188,235, 60,134,129, 16,131, 73,224,118,169, 50, 85,206,155,168,130,247,214,182,218, 88,106, + 53,140,107,244, 47, 83, 56,198,234,188,162,240,104, 36, 59,246, 29, 55,181,219,122, 47,230,136,165,176, 76, 7, 46, 47,246, 92, +205,133, 82, 11,135,101,177, 56, 84,173, 20,119,207,171,218,151, 52,143,145,184, 30, 24,199, 21,155, 85,226,135,239,158,240,187, + 39,223, 19,226,200,144, 35, 75, 89, 40,221, 63,236, 1, 98,202,156,221,124,192,123, 15,238,115,243,108,224,246,141, 83,238,223, + 62,229,206,217,218,216,195, 75, 70,210, 8,179, 29,102,251,195,129,182,216,161,105,140,120,147,105, 84,108, 50,139,226,147,173, +250, 27,235, 49, 63,235,224,110, 76,117,161,151,238, 7,140,231,149,187,151, 37, 4,147,222, 37,218,155, 29, 82,230,244,244, 4, + 45, 11, 75, 41,212,218, 89, 13, 3,255,248,199,119,184,123,170,124,245,237, 83,190,125,242, 13,111,223,188,228,106,191,227,222, +141, 21, 67,220, 80,106, 39, 69,235,140,206, 49,178, 94,153,255,160,137, 77, 61,116,119,106,214,110, 29,201, 98, 81, 45,137, 24, +101,171,218,195, 69, 99,179,114,144, 33,209,232, 44, 98, 18, 85,136,201,157,174,194, 56, 68,234, 92, 76,226,235,176, 10,129, 18, + 20,157,155,237,252,180, 50, 74, 34,100,101,154, 59,211, 98, 78,252, 20, 50, 18, 12,124, 33,254,101,110,245, 88,103,106,153,213, + 23,207, 95,242,213, 87, 95, 50,207, 54, 89,173, 54, 43, 62,120,124,151, 56, 6,118,135,133,222, 11,173, 86,159,172,171, 93, 12, +154, 49,226, 75,171,140,121,100,179, 93, 91,245,108,109,102, 92, 52,195,133,197,170,174,165,118, 67, 39,155, 43, 30,251, 28,197, +228,145, 66,139,168, 93,175, 43,252, 61,147, 99,119,186,167,210,180,217, 69, 65,143,123, 63, 9, 30,213, 50,217,181,117, 43,140, + 56, 94, 24, 62,121,252,152, 63,252,217,207, 73, 67,162,246,192,114,152,249,230,171,223,161,189,112,235,244, 6,119,110,223, 49, +216,201,201,150,241,228,182, 81,207,106,160,118,225,253,247, 31,113,186, 61, 99,154, 39,174, 46,222,176,219,217,191,182,221, 37, +183,110,223,182,203,116,180,104, 99, 18,161,210,233, 89, 57, 44, 11,195,106,100,179, 89,161,193,212,187,221,225,138,231,207,127, + 96,218, 79,188,126,245,134, 63,255,179,255,154,175,190,126,198,223,252,250,183, 60,121,242,146,205,122,195,207,190,248, 49,207, +190,126,202, 55,223, 60, 37,159,108,108,162,113, 53, 41, 72,165,213,224, 19, 81,117,202,158, 16,142,181,201, 4,100, 16,238,223, +187,199,205,155,103,204,243,129,121,182,142,123,117,186,229, 17,250,147,146,239,108, 67,178, 74,215, 24, 60,190,165,174,142,244, +127,176, 54, 57, 18,168,212, 77,118,230, 82,174, 75, 97,187,217,114,178, 25,216,237, 15,102,252, 76,201, 17,216,226,123, 84,123, +207,179,151,159, 12,121, 32, 32,204,203,100,102,177, 38, 52, 21,134,152, 57, 57, 93,113,255,246, 77,174, 14, 19, 83, 57, 0,141, + 49,175,216,156,222,180,159, 95, 2,170,145, 24,212,232,102,217, 30,240, 29, 83, 71, 2, 46,103,183,192, 82,139,199,118,223,149, + 87, 69,181,120, 88,247,246, 72,232, 84, 9,132, 96,242, 49,193,248, 27,109, 17,143, 74, 25, 1,165,251,164, 23,114,176,162,146, +121,161,185, 57,204,106, 65,149, 88,204, 1,111, 70, 51,107, 99,235,189, 32,201,211, 67,193, 61, 8,230, 42,176,247,180, 85,146, + 64,194,228,207,212, 85, 0, 0, 32, 0, 73, 68, 65, 84,200,104,221, 77,134,228, 72, 84,187, 72,217,251, 36, 84,109, 6,136,242, +194,232, 35,229, 79,124,202,150,238,184,153,230,151, 47, 9, 84,143,232,250,182,158, 32, 6,165,178, 53,170,199, 30,181,217,186, +194, 39,124, 57,166,165,130,237,188,165,118,126,242, 96,203,103,159,124,192,171,157, 82,247, 7, 52,114,173,148,225,112, 24,187, +115,116, 90,232,164, 44,148,218,140,251, 95,171, 87,111,219,243, 64,220,199,225,179,249,187,194, 22,169,136,228, 35,198,203,212, + 82, 53,238,137,164,224,235,205,134,118,167, 21,138,208,163, 48,136,197,211,186,255, 89,195, 69,123,137,161, 95,106,136, 9,191, +214,217, 64,133,163,106, 53,160,193, 84,170,148, 98,188,150,180,142,131, 71,239,141, 5,159,154, 75,163,101,107, 64,247,113, 2, +196,218,166, 44, 98, 16,200,126,123, 52,170,144, 73,185, 43,127,203,180, 23,147,123, 8, 54,217, 30,225, 27,248,171, 23, 18,121, + 48, 51,140, 54, 51,146, 73,138,148, 98, 82, 3, 30, 73, 56,198,181,122, 41,204, 77, 73,238,224,180, 8, 73, 32, 37, 65, 75,225, +160,221, 50,144, 29, 82, 10, 12,221, 17,138,205,220,131, 90,103, 84,132,101,110,236, 93, 54, 78,195, 64,218,217,180, 36,154, 9, +114,224,187,223, 63, 39,143, 43,195,140, 6, 37,101,219, 9,222, 56, 27,233,181,176, 28, 26,171,213, 13, 30,126,248, 25,151,207, +255,142,195,220,200, 33,163,193, 92,172, 81,160, 44,133,178,219,113,185, 76,180,214, 88,161,164, 52,128, 8,193, 91,238,196, 75, +230,187,218,206,176,149, 78,209,133, 97,149,125, 31, 5, 75, 51, 35,200,177, 8,225,216, 85,175, 30,163, 72, 41,144, 99,194,250, + 26, 58,189, 28,216, 93, 98,151,162, 60, 18,129, 7,239,109,153,181,241,219,175, 95,242,252,135, 31, 72,162,164, 20,184,117, 58, +112,186,106,188,126,253,146,188, 57, 35,135,126,237, 65, 16,172, 98, 82,101, 97, 41,110,210, 74,208, 15, 70,202,147, 20,173, 81, +170,192, 32, 13, 37,219, 36,227,114,243, 50, 87,210,144,136, 77, 88,101,207,150, 78, 21,209,198, 20, 71,208,196, 82, 39, 98,142, + 28, 80,202, 98, 4,170,156,148, 82,149,121,217,195,224,151,159,110,107,159,113, 48,170, 88, 95,108,143, 90,117,177,216, 79,105, +104,237,124,247,226, 25,191,127,242,148,185,118,114, 54, 88,207,213,213,158, 87,111, 51,219,117,162,213,133,165, 52,178, 87,215, +106,183,242, 18,233,134,119,220,110, 79, 25,115,102,119,121,201, 82,139,197,187,130,101, 84,139,171,237,221, 47,179,134, 14,182, + 41, 60, 37, 75, 9,208, 77,130,108, 90,175,227, 87, 40, 84,127, 56,105,199, 47,193,253,186, 87, 93,189,220, 66, 67, 32,180,110, + 49,201,113, 96,181, 57, 97, 53, 14,108, 87,107, 86,219, 53,119,110,222,224,198,233, 45,210, 42,153,178,213, 59, 57, 8,203,188, +231,100,115,131,245,233,134, 33, 12,172, 87,103,172, 78,238,241,254,227,143,233,203,142,167,207,158, 80,231, 29,175,158, 25,109, +173, 1,211,126, 71,233,157,155,247,238, 65,181,120, 95, 37, 50, 79, 87,180,218, 56,180, 66,185,172,212,101, 97,179, 74, 12,227, + 64,239, 43, 78,198,206, 85, 57, 16,242,138, 59,103,119,120,246,253, 83,158, 61,189,226,242,170,241,225,135,247,248,119,255,254, + 63,240,195,239,127,224,127,254, 95,254, 55,238,221,191,199,189, 71,119,224,111,102,130, 54,102,245, 73,165, 43, 45,143,116,170, +113, 40, 52, 18, 82,162,149,137, 52, 4, 90, 53, 78, 67,153,109,157,115,255,222, 7,220,186,125,151, 87,111,223,240,246,135,231, +188,121,251,154,171,171, 43,230,186, 88, 84,114, 1,213, 68, 26,160, 30, 21, 13,237, 4, 13,174,123,180,227,253,216, 46,255, 33, +160, 85, 25,178,152, 91,187, 9, 47,223,158,211,165,243,233,135, 15,185,119,247, 22,223, 61,123, 99,135, 97,118,154, 88,235,150, +255,207,182, 70, 80, 26,211,178,103,157, 7, 86,195,154,171,125,101,174, 51,170,112,178,218,176,205, 3,127,252,179,143,216,108, + 50,191,254,205,215,172, 67,229,214,173, 51,131, 63,185, 73,110,169, 19,213,137,156,171, 16, 96,108, 76,123,207, 40,199,232, 15, +248, 25,137,230, 48,111,173,147,177,180,135, 87,193,184,252, 42,212,217, 18, 33,244, 78, 13,129, 32,141, 58, 53,191,200,128,178, +166,117,163,209,133, 96,189, 13, 38, 59, 99,205,102,221, 14, 5,210, 17,141,106, 7,101,107,199,136,151,253,255,244,208,105,243, +108,254,130,232,121,116, 85,195,119, 19, 1, 27, 34,204,219, 16,160,204, 84, 53, 9,123,105,190, 19,111,174, 62,117,107, 43,235, + 26,136, 97,160,206,147,169,118, 93, 8, 14, 25,210,108,125,227, 33, 98,174,119, 55,188, 53,197,234, 90, 93,225,106,158, 4, 73, + 41, 27, 11,194,115,121, 34, 66,168, 22,132, 22, 81,238,220, 94,243,232,243, 79,249,143,111,159,113,245,246,156, 80,172,106,181, + 59,183, 61,104,178,193,101,101,107,130,190,188, 75,167, 48, 36,106, 53,195,179,246,102,238,116,167,198, 5, 73, 14, 74, 91,140, +155, 16, 33, 30, 29,118, 93,104,126, 49, 55, 96,158,123,102,164,251,138,219,134,234,170, 66, 74, 92,211, 85, 21,107, 97, 84, 53, +116, 55, 13,132, 66,105, 28, 93, 61, 22,131,211,238, 91,123,165,147, 72,130,231, 37,181,155,140,115, 68, 10,250,228,220, 29,104, +127,180,241,139,239, 66, 76,194, 18,223, 17,218, 77,199, 24,229, 29,130,201,133,225, 90, 34, 59,118,160,219, 62, 40,138,120, 20, +195,238, 57,109,174, 72, 74, 30,180,143,150, 13, 28, 34, 57, 56, 80, 64,205,185,217,213,235,250,146,185, 1,231,185,248,238,223, +195,167,189,219, 45, 42,218, 11,177,244,104, 46,122,181, 47,142, 54,107,216, 89,220,104, 21,189, 54,181, 76,123, 46,206,103,230, + 98, 95,202,152, 34,105,216,112,115, 29,157, 78,133, 53, 61,133,136, 72, 96, 89,148,152, 35,243,238, 21, 63,188,216,144,154, 33, + 93,175,166,137,133,145, 94, 22,222, 94, 30, 12, 9, 90,173, 9, 73, 17,230,238,178,149,187, 39, 67,176,157,211,245, 30,198,119, +219, 90, 11,135,229,192, 42, 15,215,125,245, 57, 7,150,163,132,230,102, 32, 83, 46, 2, 49,173, 24, 87, 35,120,231,117, 91, 26, +157,133,113, 28, 16, 34,155,117,226,253,135,167, 60,125,250,156,223,126,243,138, 20,133, 97,140,172, 55, 35, 49, 37,254,254,155, + 11,110,158, 13,220, 59,205, 44, 58,154,108,223,132,165, 86, 74,175, 30, 29,244, 93,104,203,196,236,152,221, 94,201,209,107, 68, +155, 85,239,206,251, 3,195, 48,218,100,235, 28,126, 65,153,154,115,166,131,157,142,165, 78,180, 22,104, 75,101, 14,157,218, 35, + 67,112, 10, 20, 74, 81, 65, 75, 37,201,154, 30,148,245,198,178,158, 13,119,136,246, 14,213, 10, 83, 76, 52,236, 60,249,246, 91, +190,249,250, 41,138,245,217,219,174,206, 62,155,175, 95, 93,114,158,130, 49,213,251, 59, 78,107,183, 80, 56,173, 11,219,147, 19, + 98, 10,236,118,123,150,102, 78,109,187,145, 91,228,112,169, 6,233,209,250,238,247, 18,167, 46,134,144, 29,142,241,142,128,168, +250,110,183, 75, 15,166, 14,104, 39,167,200,141, 91,103,108,198, 21, 57, 15,108, 86,107,203, 9,175, 7,134,148, 57,221,222, 96, + 76, 3,228,129, 30,149,172,153, 60, 36,242, 0,189, 8,109,241,169, 32, 69,222,188,125, 73,211,206,217,233, 77,110, 13, 39,220, + 58, 59, 65,214, 27, 98,134,171,229, 37, 47,159, 62,167,206,123,150,203, 43, 90,104,200, 16, 88, 71,152,123, 97,220,222,230,209, +131,143,168,151, 47, 25, 86, 43, 78, 78,215, 92,188, 86,230,195,142,114,190,183,198,189, 97, 75, 80,171, 91, 21, 13, 28,106, 69, +165,114,231,244,148,245,253,123, 76,203,158, 90, 34,247,238, 62,228,223,254,197, 47,105,218, 25,182, 3, 47,223, 60,225,219,111, +127,195,221, 59,143,108, 85,149,172, 38, 50, 39,208, 98,157,231,189, 87,107,218, 11,214, 5, 63, 14,214, 69, 29, 67, 32,137, 82, +138,192, 42,209,180, 16, 36,112,251,244, 62,247,110, 61,162,177,112,254,234, 5,151, 87,151, 44,135, 3, 87,187, 43,166,121, 97, + 41, 11,243, 60, 95,239, 54,131,187,156,197,129, 85,118,136, 53, 82,136,220,190,119,143,135,247, 31,243,252,229,247, 60,127,241, + 61, 49, 4, 94,191,185, 96,153, 23,110,223,186,201,184,138,182,154,105,198,216,142, 18, 24, 66, 50, 40, 86,109, 8,133, 74,228, +144,148, 60,140,108, 55, 91,118,251, 75, 68, 50, 45,116,166,101,199, 7, 31,158,112,247,225, 31,178,187,170,188,190,120,129,196, +145, 82, 13, 83,220,231, 74, 82,161, 19, 73, 88,244, 81,131,184, 2, 58, 82,169, 68, 42, 41, 56,136,197,229,236, 41,184, 65,203, +105,144,189, 43, 50, 36,194,102,180,103,101,155,233, 75,123, 7, 59, 9, 66,202, 1, 74, 69,130, 45,179, 53,118, 40,193,148,163, +108, 53,216, 96, 53,173,210,124,119,220,205,148,233,248,148,235, 18, 45,165,112,108,229,238,238,228, 78,201,128, 41,181, 26,119, +210, 48,191,209, 20, 23, 47,115, 33, 68, 83, 26,143, 13,144,173, 59, 65, 77,205,249, 78, 51,108,171, 87,197, 74, 55,111, 2, 45, +155,235,157, 74,175,254,115, 58,191,161,137, 24, 78, 92, 29, 36,147, 26,165, 44,132,144,232,170,100,231,143,136,255,251,210,224, + 87, 95, 95,240,235,215,191,226,205,219, 43,130, 22,219,193,183, 64, 20, 83, 15, 66,119, 53, 85,173,218, 54,166, 0,120,137, 88, +241,102, 53, 28,250,226,207,107, 91, 33,169, 51, 7,130, 55,105, 26,213, 84,130,119,169,104,177, 75, 88, 55,133, 81,147,201,250, +164, 64,175,134,180, 85, 47, 38, 27,130, 61,123, 53,184,111,173, 86,154,202,181,235, 62,113,164, 38, 70,183,230,171,149,135,121, +121, 78,234,248,206,192,119, 19,142,193,242,135, 89, 39,164,227,222,208, 76, 72, 33,184, 59, 87,237, 0, 63,238,127,187, 40,210, +202,117,206,214,114,155,114,236,104, 3, 17, 98,244, 41, 95, 77,126,138, 41,145, 82,179,182, 41, 95,141, 37,177,130,135,170,134, +191,172,150, 24, 39, 36,203,245,150,224,198, 1,196,214, 2, 41, 16, 99,164,246, 66,113, 9,116, 92, 39,234, 50, 51,207, 51, 85, + 44, 22,151,180, 50, 77, 54,253,199, 16, 41,105, 32,171,177,154,167,253,129, 42,194,106, 28,173, 64,195, 10,135, 80, 39, 60, 17, +186,237, 91, 83, 71,151,133,222, 58,227, 56, 16, 67,161, 94,189,177, 66,152, 80,233, 49,112,245,226,146,125, 89,204,217, 24,178, +117,221,250,100,189,120, 82, 32,132,102, 70,147,102, 55,200,222,236, 0,171,205, 71, 65,177, 3, 96, 70, 33,102,134,152,144,174, +108,214, 35,178, 30,108,210, 81, 65, 93, 58,174,243,204,164,199,238, 98,115,251, 11,126,211, 85, 37, 37,248,254,201,115, 94,190, +186, 66, 21,198, 49,179, 89,143,148, 89,185,184, 60, 48,207, 74,138,157, 87, 87, 59,182,219,100,181,137, 75, 35,169,201,116,165, + 45,150, 66,168, 21,177, 22, 12, 59,181,170,210,135,104,166, 69, 73, 68,109, 48, 70,170,152,212,166, 85,220,101,218, 65, 6,106, + 12,208,140, 36,183,214,200, 44,202,144,147,205, 18,163, 48, 47,149, 90,187, 85,202,170,213,216,138, 90,182,185,102,195,137,246, +165,144,176, 28,231, 82,102, 74, 13,164, 28, 40, 75,227,249, 15,175, 57, 44,149,113, 48, 6,114,136,110,112,105, 98,148,170,169, + 80,151,106, 30, 3,113, 35, 77,179, 53,204,176, 30,137, 57,177,223,237, 88, 22,143,162, 4,177, 30, 99,109,180,186, 88,187,154, +127,164, 3,182, 70,138,241,184,167,109,215, 82,189,250, 83, 47,250, 14, 86,233,212,165, 16,134,200,227,123,119,249,252,163,207, +184,115,239, 30,102, 45,140,164, 77, 36,231,209,164,208, 90, 81, 77,204,165,177,148,153,200,104,211,147, 86,154, 70,200,118,216, + 36,127,120, 60,251,230, 9, 39,219, 45, 39, 39,183,121,252,197,143,204,165,127,152, 56, 28, 18,207,255,214,228,113, 13, 74, 14, +137, 86,103,164,251,133,184, 84, 62,255,226, 67,138, 78,228,245,192,106,157,216,159, 95, 25,107,190, 8, 93, 19,235, 85,167,199, + 68, 95, 58,196, 72,110, 5, 77, 48,110,173,220,167,134,133,199, 31,125,204,195, 71,159,114,126,245,130,255,245,255,252,223, 9, +154,248,199, 63,249,132,213,250, 67,238,222, 61,225,135,151,175,184,117,243, 46,159, 62,188,195,111,190,126, 67, 15,149,158, 38, + 43,217, 8, 66,207, 66, 47,209,162,143,165,122, 47, 66, 96, 42,149,180,138,244,217, 26,183, 66,176,146,166,185,205, 68,137,220, + 58,187,205,173,219, 15,200,161, 25, 19,162, 44,212,178, 48,237,206,121,251,246, 45,251,221,129,105,191,103, 94, 38,255, 78, 69, +134, 49,114,118,118,147, 7, 15, 30,178, 61,187, 67,208,145,143, 63, 57, 97,187, 89,243,237,183, 79,160,119, 46,119, 19,251,249, +149, 69, 63,131, 80,103, 8,110,160,141,195,241,144,240,181,143, 59,189,181,136,113, 15, 70,101,154,246,212,105,226,106, 31, 89, + 14,157, 15, 62,190,195, 31,254,209, 99,158,124,147,120,245,182,178,168, 96,133,143,157, 78, 70,106, 67, 67,177,105,176, 70,235, + 43, 32, 34, 75,161, 71, 37, 53, 33, 71,235,139, 87,143,223, 85,108, 47, 29,114, 67,154, 77,244,170,179,151,124,152, 43, 62,166, + 96,106, 81, 87, 88,212, 28,244, 33,121,201, 79,165,117,123,166, 80,109,122, 44,158,123,166,219, 10,179,213, 64,141,141,152, 2, +145,129,134,173,226, 74,181,193, 42,199, 72,175, 92,163,151,105,206,253,192, 25,253, 65,236, 96, 22,107, 12, 58,242, 66,164, 44, +198,177,143, 1,209, 98,185,119,143,193,209, 3, 85, 43,177, 97, 9,145,102, 17, 45, 51,193, 59, 97, 78,212,144,230,209,152, 9, + 21,117,143, 86,114,234,229,145,193,208, 41,209,122,229, 67, 82, 35, 26,210, 57,223, 79, 48, 61, 71,123, 33,134, 72,167, 64,200, +116,141,180,210,173,160, 38, 7,139,209, 73,181,245,226,177, 37, 81,187,173,127,125,181,150, 66,176, 53, 5, 88, 67,137, 31,194, + 33, 90, 10, 74,232,244,122,188, 84, 54, 7, 25, 89, 65, 87,244,213, 17, 94, 70,102, 3,132,197,127, 75,180, 85, 79,108,226,107, + 85, 75,192,207,126,182,166,104, 96,156,238,195,114,119,131,109,169, 21, 45,141,212,125,214, 13,130, 79,228,174,178, 59,113,169, +219,167,216, 91,165,172,152,158,238,144,148,227, 98, 5,131,248, 6, 49,105, 71,157, 19,127, 52, 20, 57,201,154, 86, 3,234, 55, + 45, 81, 99,101,207,190,111,116, 20,182,199,212, 18, 49, 89,252,172, 91,170,131,168,137,113, 21, 89,121,198,143,230, 48,125,137, +144,132, 84, 21, 89, 37,147, 73,188,249,138, 85, 34,166,129, 85,118,201, 40,118,130,154, 1, 98,158,118, 92, 58,171,123,149, 71, +134,100, 69, 3,117,113, 89, 92,173, 32,161, 53,203, 35, 55,231,209,207,197,220,176,211,162,172, 71, 97, 46, 51, 82, 27,200,154, + 60,140,148, 82,172, 63,120,240, 55,172,120,111,175,216,135,162,186,241,207,216,246,141, 86,142, 78,126,187, 5, 18,130,197,181, + 56, 18,254,237,203, 54,140,137,113, 24, 24,134, 13,105,173,212,195,194, 60, 21, 46,174,246,148,182, 48, 29,150,107, 7,118, 10, +201, 92,167, 75,129,160,156,156,110,232,243, 68,200,129,187,235, 76, 36,179,223,119,174,166,234, 45, 4,133, 23,207,103, 68,206, +184,181,185, 97,166,170, 65,153,107, 71,170,221, 6, 67, 72,222,199,100,178,250, 42,175, 45,103, 91, 22,104,153, 24,187,129,122, +122, 48,117,161, 86,123,227,176, 29,209,170, 24, 39,223,154,193, 76, 25, 90, 90, 37,170,144, 5,234, 98,109,100,105,104,148,201, + 81,150, 58, 51, 6, 67, 15,151,174, 44,173,179, 74,226, 80, 26, 75, 93,212, 94, 17, 25, 88,150,153,182,120,111, 60,182,151,147, + 35,101,207, 25, 1,213,233, 84,177,191,155, 44,104, 88,212, 11,229,234, 98,111,135, 42,134,201, 12, 94, 10,212,106, 53, 88,137, + 90,108, 79, 36, 18,179, 77,224,234, 95,240,107,174,123,195,229,116,187,248,204,197,166,173, 7,247,238,240,209,199, 31,242,225, + 7, 15,201,195, 13, 74,153, 73,204,172, 17,166, 22,168,186, 64, 85,180, 2, 49, 19, 67,103,181, 78,164,148, 25,131,161, 56, 67, + 8, 44,138, 69,196,134, 64,185,218, 49, 77, 19, 15, 31,222,231,131, 15, 63,224,198,221,123, 60,251,246,107,174, 46, 95, 33, 87, +111,152,166,110,252,117, 18,164,200, 92, 39,202,161,114, 85, 43,195,102,100,189,221, 80, 47,207,105, 53,241,230,205, 5,245, 80, + 8, 55, 70,182,235, 13,165,236,204,232,212, 38,160,114,146,215,172, 79, 78, 89, 40,212,189, 33, 78,167,125,101, 24,183,124,120, +255,125,254,167,127,245,175,248,205,223,127,205,184, 30,248,232,131,123,252,249,127,245,223,243,224,189, 71,124,253,187,255, 11, + 33,240,248,253,123,188,125,189,227,201,203, 11,242, 58, 19, 6, 27, 33,202,220,233,186, 16, 71,143,199,206,129, 88, 21,233,145, +188,177, 10,213, 48, 87, 36, 70,138, 22,171,185, 44,153,210,170,241,185,155, 85, 81,110,134,145, 18, 19, 55,111,110,184,247,232, + 17,245,208, 56,236,246,236,118, 23,236,118, 23,164,113,197,237, 59,247,216,142,131,213,151,150, 74, 9,157, 90,149,187,183, 31, + 50,110,215,124,243,187,175,184, 60, 92,209,102, 43, 54, 33, 70, 98, 72,150, 65, 15,145,122, 68, 79, 58,111,123, 76, 43, 68,212, +165,226, 66, 30, 7, 78,182,107,106,181, 36,198,213,213,196,201,102,197, 31,253,228, 1, 55, 79, 35,127,241, 31,190,229,226,194, + 65, 36,170,136, 44, 78,201, 52,250,156,169, 19, 21,105,141, 24,204, 89, 80, 82, 34,116,163,227, 36,132, 69, 60,255,221, 13,141, + 74, 14,132, 34, 44,210,188,214,179, 16, 36,211,155, 83, 87, 60, 17, 17, 99,116, 62,186,181,205,133,166,126,216,200,255, 47,158, + 44,161, 89,250, 66, 58,131,184,243, 59, 8,173, 23,164,217, 48, 82,139, 82,180,152,123, 95,178, 73,221, 29, 55, 13, 26,197,141, +107,218,159, 64,240,242,146,110,223,205, 16,142, 53,194,217,170,176,123,187, 46,255,234,173, 17,232, 16, 50,173, 41,244,226, 89, +149,104,223,145,102,145,200,238, 28, 18, 69,141, 70, 41,221, 14, 74,154,167, 31,236, 76,146,208,142, 7,154, 25, 85, 67,198,111, + 9, 52, 49, 35,117,210, 70,151,104, 20,196,234, 38,195, 99, 25, 86, 79,142, 55,183,105,186,117,165, 52, 95, 69,168,103,239,195, + 49,137,100, 13,166, 77,195,181,209,249, 8, 57,179,225,160,191,147,222,187, 93,180,130, 68,114,202,126,161,176, 60,157, 86,181, +203, 84, 23,138, 86, 2,137, 66, 55, 73, 95,140,103, 34,136,141, 4,221,206,219,138,169,136, 34, 66, 58, 50,165,193, 28,126, 54, + 5,187,195,220, 27,105,204,128, 36,214,110,229,203,247,118, 36,152,137, 25, 81,208,100, 14,200,224,149,169, 98,112,130,235,191, +207,108,188,118, 11, 13, 98,125,237, 88, 30, 88,157,150,211,213, 8, 96,180, 66,168,145, 9,185,222,123, 30,251,196,211,104,216, + 62,186, 83,204, 80, 74,177,200, 83, 76,246,192, 21, 4, 73,137,216, 93,150, 17, 33,141,107,206,182,137,101,222,243,246, 98,207, +126,182,108,244,102,189,242, 66, 49,235,117,239,199,140,178,168, 69, 68,212, 58,130,211,176, 33,165,132,200,200,192,204,178, 28, + 56,175,133,113, 89,216,228, 8,161, 81,235,129,174,197,242,221,154, 60, 98, 2, 89,109, 21,161,209, 11, 9, 28,135,219,106,181, +146, 19,204, 81, 30,131, 1, 37,240, 10,193, 97,200,228, 28, 88,165, 1, 69,216, 29, 42, 18,103,100,206, 44, 7,131,164,196,148, +144,232,187,170,227, 36,105,129, 84,186, 81, 21,120,249,114,207,217, 58,115,255,206, 9,243, 2,231,151,141,210, 26,109,105,104, +176,222,242,113,189,225,238,205,141,237, 35,131, 23,182,168, 85, 39,106,180, 60,118,232, 71,198,116,225, 80,103,178,120, 44, 36, + 52,164,186,236,150, 34,189, 5, 58,222,239, 62, 55,134,149,101,146, 43, 1, 29,163, 93,146,138,203, 33, 41,218,151, 87, 23,114, + 20,234,164, 12, 6,243, 3,141, 52, 93,136, 50,248, 23,173, 81,251,232, 0, 7, 95,231, 4,187,248,212, 86,232,193,111,242,102, +127,189, 46,228,200,209,246,138,181, 85, 99, 18,184,130,148, 16,134,237,134, 24, 35, 23, 87, 59,207, 20, 31, 93,230, 86, 28,209, +181,209,138, 77, 3,183,206,182,252,228,195, 15,249,250,251, 23, 92,238, 39,163,143,185,196,223,187, 99,139,137,215, 69, 33,181, + 54,214,171,145,159,253,232, 71, 60,124,252,136,245,118, 64, 84,184,218, 95, 48,108, 34,212,196,110, 41,104,143,104,170,244,170, + 44,181,131,238, 8, 73, 24,113,215, 50, 22,205,210,154,160, 44,164, 60, 32, 33,243,221,247, 79,233, 40, 15,238,127,204,159,252, +167,255, 37, 79, 95,255,158, 84, 58,181, 69,118,203,204,152, 2,189, 22,210, 40, 84, 61,144,134,200,235,243, 55,188,125,241,154, +127,250,207,254, 25, 49, 6,166, 90,152,166,201, 38,146,193, 24, 2,170, 5,137,217, 0, 56,101, 98, 53,140, 12,195, 72, 15,129, +211, 37, 51,109,149, 90, 2,151,251,204,237, 91, 31,114,126,241,130, 95,254,234,111,208,222,169,211,194,191,254, 55,127,201,197, +213,194,230,228,148, 62, 85,238, 63,124, 68, 57, 52,206,110,159,209,158, 62, 35,170, 80,105,212,144, 17, 81, 6, 50, 90,237,153, + 18, 86,209,119,153, 7,118,135,198,106, 8,196, 54, 82,165,217,100,152,131,145,206, 66,164, 37,181,105,175, 10, 85, 42, 77, 58, +251,197, 42, 85, 21, 97,117,178,102,187, 61, 37, 12, 15, 89, 20,243, 97,168,165, 79,114, 12,118,225,142, 80,164,113,182,189,199, + 79,126,118,147, 47,191,250, 91,206, 95,189, 2,113,244,108, 50,138, 37,213, 20,181,104, 69,146,180,210,200,177,177, 30,214,180, +102,181,168,173, 20, 90,142,172,183, 27, 14, 23, 19, 87,135,115,210,250,148,205,237,202,248,122,231, 80,168, 2,161, 56,181,210, + 20, 41,233, 80,123,164,177, 56, 51, 34,184,172,108,131,145,162,104,182, 3, 56,164, 72,116,153,187, 54,159,134,212,146, 5,189, +119,162, 26,130,183,250,144,144, 98,162,139, 85,162, 6, 45, 44,213,124, 21, 81,178,245,203,135, 96,184, 85,181,184, 87,212, 96, +106,152, 95, 2,234,210, 8,169,179,116, 67, 34,219, 14,206,232,145, 61, 69,164, 85, 23,232, 13, 9, 27,113, 15, 66,175, 14, 4, +130,164, 66,107,118,144, 55, 34, 57,152, 31,165,245,104, 61,247, 75,177,132,130,203,238, 11,221,211, 54,166, 62,246,232,157,234, +199, 68,149,218, 57, 83, 36, 92,127, 38, 56,230,202,155, 29,222, 6,133,177, 20,139,150,163,104,142,247, 7, 88, 7,189,181,120, +250,185,229, 25,239, 78,161, 87,177,159,153,110,207,245, 46,116, 10,129,193,207,191,201, 98,106,168,199, 10,227,245,107,115,157, +220,242,214, 54,149,234,173,141,198,121, 49,211, 95,119,168, 79,164, 5,177,103,231,160, 14,151, 49,117,207,144,216,199,162,151, +118,125, 70,135,209,218, 43,237, 3, 36, 44, 85,137,249, 8,189,177,216,103, 18, 13, 94,247,230,229,238,218,174,101,248, 36,193, +100,117,240, 62, 98,147, 72,172,247,221,176,128, 26, 70, 18,221, 36,100,255,179, 6,233, 55, 50,155,127, 46, 45,187,171,106,210, +149,187,131, 45,123,235, 86,127, 49,211,129,244,108,183, 56,223, 9, 5, 55,195,169,115,155,151,185, 80,124,191,223,155, 77,125, +193,115,195, 20,191, 32,136,155,246,196, 72, 59, 41, 9,181,117,150,221, 21, 23,187, 61,162,194,118,181,178,206,240,218, 92,121, + 48, 50,210, 56, 68, 6,148,165,168, 67, 10,160,232,138, 24, 7, 52, 14,228, 60,178,236, 94, 51,149, 5, 20,182,235, 19, 78, 86, +153,183,151,151,136, 20,107, 32, 18, 33,235,114, 45,147,191, 43,113,177,123, 77, 43, 11,189,118,170, 42,171,245, 72,107,106,166, +160, 86,200, 57, 49,174, 51, 41,103, 86,121, 64, 90,103, 41,141,234,113,149,185, 68,202, 60,179,155, 22,242, 96,140,233, 94, 77, + 77, 9,217, 42, 33,173, 42,214, 80,139, 41, 25, 58,177, 36,229,234, 10,118,115,163,116,251, 34, 29,243,216,235, 97,228,241, 7, +239,177, 89,103,166,101, 33,174,140,111,157, 5,170,170,239,175, 58,154, 70,154, 24, 91, 90, 92,158, 14,106,114,124, 79,246, 70, + 7,236,161,194,108,147,187, 10, 70, 39,236,157, 74, 37,237, 35, 75,111,228, 85, 96, 29, 50,147, 75,213, 42,102, 10, 73, 67, 38, +132, 68,101,102,204,209, 10, 46, 74, 97,212,200,201, 24, 88, 90,133, 16, 88,229,108,243,116, 13,204, 5,134,113,197,103,159,189, +207,151, 95, 63,227,234, 98, 34, 38,203,128,119, 85,218,190, 17, 99, 69,213,140, 53,226,185,253,245, 56,144,114, 96,183, 59,160, + 90,201, 65,220,156,226, 75, 67,212,229,249,206,227, 71,247,248,249, 79, 62,231,193,237,251,144, 7,126,245,235,255,215,254, 59, +237,142,241, 52,114, 23, 85, 89,218,130, 2, 15,238,221,225,103, 63,249, 9,247,238,220,167,117,101, 42, 11,210,173, 16,166, 75, + 98,223,172, 11, 64,151, 25,157,221,213, 59, 68, 66,111, 12, 98, 89,216,193,107,106,151,165, 1, 7, 66, 24, 9, 81,153,202,158, +183, 47,158,243,224,238, 93, 62,255,228, 67,238,222,187,109, 78,229, 59, 59, 14,135,198, 84,206, 25,215, 17,105,131, 57,142, 75, +225,201,179,167,124,248,240, 17,159,191,255, 62, 63,255, 71,127,192, 15, 47, 95,177,236, 38,214,235, 45,123, 85,230,249,156, 80, +179,145,219, 48,199,252, 92, 59,227, 58, 50,156,110, 56,212,128,234,142, 65, 3, 97,189,102,211, 58,183,239,220,228, 87,255,238, +255,224,183,223,124, 73, 28, 3,210, 77,241,250,139, 95,254, 18, 9,194,127,241, 79,254, 41,103,219,192,201, 73, 96,184,178, 26, + 98,131,138, 64,107,139, 71,252, 60,110,214, 19,161, 55,203,198, 15, 86, 70, 82, 15,118,224, 84,169,214, 57, 93,154,245,123, 55, +243,207, 20, 26, 61, 4,227, 7, 56, 15,252, 88,237,217, 28,229,169, 52,150,218, 8,126, 34,107,129, 42,202,152, 6, 75,110, 72, +131, 58,179, 74,153,143, 62,250,130,191, 57,255,247,180,186,160, 33,208, 12,216, 72, 12,214, 9, 97,109, 89, 29, 90,101,158,173, +190, 53,196, 64,169, 54, 41,150,105, 38,137,181, 46,126,249,187,167,252, 89, 18,110, 62,248,140,151,223, 30,232,253,119,166, 36, + 53,163, 13,198,216, 8, 53, 80,233, 72, 42,126, 94,218,165, 88,233,126, 0,181,235, 98,160, 38, 29,102,207,119,231,132,246,106, + 81,192, 94,237,162, 34,118, 57, 64,178,253,172,193, 39,215,166, 20,137, 6, 20, 19,168,221,246,243, 10,180,101, 33, 98, 10,103, + 8,193,168,100, 1, 90,114,198, 72, 83,218, 92,125,143, 28,173, 40, 70,109,157, 99,216,226,110,173,109,170,228,220,233,154, 60, +178,105,127,191,116, 97,174,166,124, 4, 35,220,216,207,216, 26,218, 23, 74,115,152, 24,130,182,226,201, 42, 43,140,209,238, 5, +223,122, 4,225, 56,187, 33, 96,223, 81,181,215, 92,221, 75,229,159, 34, 47,100,193, 25,245, 71, 46,188,157, 17,173, 21, 66,138, + 84, 21,104, 74, 58, 22,190, 52, 87, 4,212,128, 51,199, 1,183,209,208,144,172,193, 45,218, 69, 36, 17,252, 0,110,132,108, 74, +166,244,102,141,131,214, 26,198,187, 13,184,209, 86,113, 43,155,248,103, 18, 73, 22,229,244,210,153,168, 22, 17,175, 98,116, 78, +169, 13, 73,217,134, 17, 47,246, 73, 77,233,234, 84, 69,111, 59, 57, 58,225,193,200,114, 18, 34,169, 97,197,245, 81,196,203, 83, +124, 58,214,198,130, 27, 37, 60, 11,109, 53,143,126,208,135, 64,136,153, 32,118,195, 74, 1,203, 26,122,150,221,118, 99,174,148, +123,230, 49,226, 61,184,213,121,190, 71,119,176,203,205, 57,184, 19,208,220, 72, 22, 89,114,146,142, 85,166, 10,253,218,101,232, + 47,210,181,212, 99,230,189,230,237,105, 49, 4, 52, 67,236, 74,153, 11,243,126,199,249,229, 76, 90,173,216,172, 6,147,149,156, +200, 22,147,239,117,188,203,125,125,182,226, 78,206,108,134, 64, 45,133,239, 94, 52, 14,213,106,103,235,116,206,229,229, 91, 74, +239,172,198,129, 48, 36,230,218,188, 22,143,235,138,188, 46,253,154,199, 14, 94, 35,171,157, 64,164, 54, 3,145,172,214, 43,198, + 16,121,179,191,162,245,206,102,181,226,198,233, 41, 39, 39, 35,251,195,204, 97, 50,226, 84,239,206,183, 31, 3, 90, 27,135,105, + 50, 24, 12,246,123, 39,223, 91,169, 8, 33,100, 66,176, 78,239,211,237,200,118,187,102,154, 11,135,253,194, 68,112,218, 81,113, +180, 97,103, 51,142,124,254,217, 39,156,108,215,104,179, 6,184,117, 12, 76, 42, 28,220,217, 45, 42,140,155, 12, 97, 96, 57, 40, +213,127,159, 94, 58, 99, 78,164, 16, 41,189, 51, 45,141,144,128,100,217, 88, 37,208,164, 82,150,153, 32,158, 25,165,209,251, 66, +157,133,131, 6,150, 80,137,171,204, 74, 19,186,120, 23,186, 24,166, 86, 23,165, 47, 1, 66,101, 66, 57, 44,198,124,110,181, 83, +250, 66,169, 22, 3,219,156,110, 88,165,200,157, 91, 15,216,140,183,249,234,171,175,120,249,230, 21,101,246,174,109,209,235,155, +180,160,148,121, 38, 13, 3, 42,137,203,203, 29,189, 85, 55,225,217, 14, 30,117,103,124, 16, 62,250,232,125,110,222,216,240,224, +225, 67,198,180, 98,175,133,247,223,127,192,247,207,158,241,228,135, 23,118,244,151,226,248,221, 68,239,157, 28, 3,159,124,252, + 1, 63,251,233, 79, 25,157, 44,150,186,146, 7,101,100, 64,123, 96, 90, 2, 34,197,112,144, 73,236,146,104,114,142,181,250,169, +201,172,227,118, 77, 20,152,151,217, 14,164, 24,145, 97,195,213,203, 75,106,239, 60,126,244, 49,143,222,123,204, 50,237,185,184, + 56, 80,198,204,171,233,130,203,139,215,204,243,200,102,125, 66,236,194, 2, 28, 46,206, 57,253,252,199, 60,124,240, 35, 46,119, +149,195,190,113,114,178, 37,116,171, 81, 30,194, 41, 61, 10,122,181,135,105, 34,246,206,233,217, 29,230,114,201,244,226, 53,104, +224,236,254, 9,107,201,188,124,115,193,237,211,219,172,211, 57,255,230,151,255, 55,173, 85, 54,227,198, 34,171, 33,162,179, 81, + 14, 31,222,187,205,144,133,205,217, 29,222,252,221,115,226,106, 64,107, 39,123, 93,103, 40,238,211, 56, 22, 56, 37,241, 54,187, +145, 22, 43,138,145, 7,123,183,203,112,210, 76,212, 70,149, 70,170,145, 82,221,163, 18, 70, 98,180,140,189,246,206, 16,172,175, +224, 48, 79,132,138, 69, 42,131, 66,139, 32,150,200,145, 20, 24, 67,166,207, 80,165,160, 93, 72, 49, 17,197,106, 70,219, 49,194, +137, 32,217,240,179,145, 8, 25, 52, 38, 98,176,168, 85,104,130,186,113, 78,171, 50, 76,151,252,244,139,247,121,125, 62,243,155, +191,251,146,127,249,103,255,130,243,183, 31,112,247,175,182, 92, 30, 38,148,129,132,201,236, 61, 86, 82, 53,247,126,169,246,196, + 77, 9,171, 6,117, 24, 18, 14, 59, 9, 67, 66,171, 32,193,166,123,186, 79,240, 5,187, 24,120,149,169, 61,103, 12,166,210,164, + 59,175, 94,188,170, 53, 34,152,175,197,234,172, 35,146,133,170, 16, 66, 35,106, 48,102,185, 15, 86, 41,153,234, 86,181, 81,122, + 39,117,115,186,135, 0, 75,169,228, 40,158, 49,239,200, 34, 44,125, 62, 58,128, 25, 83, 50,126, 67,235, 70,196, 19,175, 60,245, +204,117,107,199,110,114, 83,124, 85,142,254, 35, 59,158,173,227, 98, 49, 62,123,136,215,127,182, 21,147,194,147, 68, 98,118,117, +221,213, 49, 67,236,198,235,244,139,122,249,139,168,173, 80,113, 28,111, 72, 1,117, 74,163,248,127,174, 14, 26, 10,222,170,166, + 98,248, 91,212,155,247,162,216,247, 80,149,238, 36, 78, 99,222, 27,108, 42, 29, 11, 91,194, 81, 17, 16, 95, 33, 24, 83,222,106, +177,133,168,102,108,115,228,167,197, 78, 11, 88,217,182, 41,189, 68,152,251,236,138,141, 35,126,197,112,217, 26,186,249,181,154, + 69,226, 74, 53,207,137, 85,190, 6,146,241, 46,222, 1,242,173,209,220, 14,183,230, 13, 81, 4, 71,137, 86,147,165, 45, 55, 23, +105,161,123, 27,141, 29,184,193, 1,251, 33,102,151,230, 13, 83,152,146,130,172, 64, 27, 57,121,199, 49,110,254,169,213, 77, 35, +234, 37, 23,246,179,132,224, 45, 62, 29, 98,142,142,168, 85,231, 26, 59,222, 48,102, 87,246,223, 85,208, 73, 83,235, 72, 79,114, +109, 86,144, 52, 48,158, 68,238,111,236, 67,179,168,237, 92,114,181, 15,107,175,118,211,237, 4,154,199,141,234,186,243,182, 44, + 92,236, 11,115, 53,134,184, 72, 99, 62, 92, 58,120,198,238, 73,243,254,202,189, 3, 71,186, 85, 53,186,145, 27, 28,162, 55,149, + 85,133, 94, 29,110,210, 42, 57,101, 86, 67,226,106,183,163,214,206,102,179,230,198,217,150, 33, 71, 88, 26,243,110,102, 95, 27, +195,224,210,218,210,217,228, 13,183,111,156,112,152, 34,111,246, 19, 73, 35,195,104, 95,186,212, 19,115, 89,108,186,139, 3, 61, +219,244,178,148,194,180,204, 8,137, 28,224, 48, 79, 20,151,204,134,213,138, 15, 63,250,192, 12,120, 73, 57,205,107, 84,148,180, +202,124,241,249, 39,232, 60,241,244,201,119, 28,218, 64, 31,132, 16, 51, 41,102,234,126,166,205, 19, 61, 42,125,180,198, 34, 82, +102, 16,107,185,194, 77, 68, 1,123, 63, 90, 47,212, 50, 83,131,185,210, 99, 12,164,117,162, 30, 22,164, 43,177,218, 36, 84,178, + 18, 19,132, 86,153,231,153,175,191,251,129,195, 92, 24, 82, 48,197, 67, 42,171,100,190,139,222, 43, 75,233,104, 19,110,223,187, +131,222, 60, 35,166, 21,195, 74,248,224,227, 71,220,190,119,131,105,154,248,253,147,103, 76,229,104,164,177, 9, 60,199,196,122, + 28, 56, 28,230,107,207, 68,111,222,137, 28,173,142,179,122,158,252,236,246, 77, 62,121,252,216, 46,155,197, 12,111, 34,194, 31, +252,252, 15, 56, 59,251,138,171,157, 93,176,114,206,215, 45, 97,119,238,220,225,189,135, 15,216,134,196, 65, 42,121,155,145,131, + 73,104, 37, 9,173, 66,109, 7, 36,225,192, 27,147,206,196,203,124,178, 3, 66,134, 96, 19, 68, 91, 39,198,147, 1,102,171,120, + 44,147,242,250,229,107, 30,220,189,203,103, 31,127,196,141,179, 59, 40,145,215, 47,159,241,245,147, 47,217, 77, 59,238,223,127, +100, 93,211,205,190, 83, 57, 6, 62,251,241,103,124,251,236, 91,126,244,249, 79,185,184,120,203,106,104,196,205, 9,243,116, 73, + 10, 25, 29, 51,181, 47,148,165, 16, 36, 50,174, 86, 44,193, 38,152, 33, 5, 54, 97, 96, 55, 57,174, 84, 19,119, 30,220,231,175, +255,159,191,228,171,175,190,226,108,187,101, 53, 12,132, 0, 83,177,236,114, 30,236,243,114,235,222, 45, 36, 8, 23,111,175, 8, +173, 90,109,192, 34,215, 69, 69,181, 84,180,137,169, 97,139,131,128, 88, 72, 52, 90,234, 76, 13, 86,216,144,218,250, 76,212, 68, +151, 21,113,128, 85,140,148,165,210, 41, 84, 53, 70,124,200,118,209,110,117, 50, 83,101,243, 85,141,118,250, 16,200, 26,169, 98, +126,150,165, 55,130,248,228,235, 7, 67, 26,146,197, 54,171, 53,100, 5,167,145,105,140, 52,188, 63,194,193, 68,221, 85,206,160, +193, 14,149, 20,169,181, 50,166,204, 31,255,163,247,248,245,175,255,158,127,254,223,252, 41, 63,254,241, 99,126,250,243,207,248, +250,217, 43, 66, 47,102,226,244,129, 35, 6,195,221,198,152,189,226,183,209, 42, 52,175, 22,142, 26, 45, 94,233, 84, 54,123, 46, + 87, 51,244,206,147,153,167, 66,162,118,219, 99,167,104,197, 37, 69,186, 53,183, 53, 69,117,242,157,175,225,139,155,185,158,205, +136,222,124, 42, 22, 87, 60, 56, 54, 71,118,198, 49,209, 60, 38, 24,181,218,122, 13, 59, 36,163,239,138, 83, 50, 42,222,210,139, + 13, 27,173,218, 0, 84,188,220, 37, 68,122,241, 26,221,110,144,151, 46,118,169,107,189, 59,138,197,118,241,157, 99, 55,120,163, +105,245,231,125, 66,186, 41,128,205, 39,183, 60,248,122, 32,136, 7,182,173,173,179,105,187, 78, 22,165, 96,141,111, 72,160, 55, +129,190, 56, 1, 46,162,165, 32, 67,164,119, 55,135,171, 33,155,143, 5, 41,209,211, 49,226,236, 20, 91,243, 10, 93,108,218,215, + 96, 48,161,238,201,176,128,145,246, 68, 42,161, 71,107, 99, 20, 53, 34, 93,244,149, 46,225,154,176, 26,142,205,121,106,187,252, + 46,234,117,183, 86,195,107,174, 96,131,230, 91,164,209, 46, 83, 66,244,179,170,218,231, 48, 58, 85,180, 91, 22,223, 21,118,203, + 84,219, 1, 92,220, 80, 16, 29, 81,103, 59,128,148,131,229, 17, 93,126,231,184,103,175, 70,180, 9,110, 56,104,149,107,178, 18, +177, 81,171,197, 9, 66, 3,164, 94, 71,136,196,111, 93,200, 64, 24,162,239,190, 13,115,199, 98, 11,255,218,253, 67,171,149,174, +201,162,114,106,237,113,221,155,147, 2, 71,143, 66,164,247,128, 28,113,123,252,127, 76,189,219,175,109,219,117,167,245,245,214, +123, 31, 99,204,185,214,222,123,237,203,217,103,159,155,207, 57,246,177, 29,199,177, 83, 9,185, 57, 9, 85, 20, 16, 82,170,155, +138,146,160, 36, 36,144, 0, 81, 8, 30,224, 15, 64, 66,145,120, 67, 66, 20, 15,136, 7, 30,144, 10, 21, 82, 69,133, 2, 2, 68, + 42, 74,225,220,202, 46,151,147,216,142,237,216,177,125,236,115,191,236,251,186,205, 57,198,232,151,198, 67,107,115, 29, 63,248, +193,183,179,247,154,107,206, 57,122,111,237,247,251,190, 64, 36,146,252, 7, 86, 9,228, 60,218,173,185,249,139,230,246, 57,209, +134,166, 78,144, 70,234, 86, 45,105, 13,158,158,173,180,223,248, 92,147, 0, 0, 32, 0, 73, 68, 65, 84,117, 53, 87, 49,160,125, + 97,223,140, 40,135,155,227,106, 43,134, 52, 69,188, 81, 87, 29,237, 41,222,251,247,224,139,122, 73,246,176,215,237, 48,110,204, +183,188,174,157, 33,101,142,183, 19, 73,225,114, 89,152, 59, 20,109,140, 57,113,116,180, 65,235,194,165, 54,142,134,108,218,215, +163,155, 44,237, 1,180,195,159,101,111,154, 16, 35,185, 91,146,180,174,171, 37, 67,103, 59,108,140,131,237,253,148,110,130,135, + 16,184,121,231, 54,173, 41,143,159,156, 35, 41,112, 62,100, 34, 74,222, 31,243, 75, 47,127,130,151,158,185,198, 63,123,248,127, +243,224,225, 37, 71,227,134, 49, 8, 45,118, 90, 6, 73, 91, 54,201,247, 57,185,177, 44,141, 54, 69, 66, 15,180, 82,188, 86,100, + 24, 70,103,196,122,194,181, 89,245,112, 85,242,104,230,168,221,110,230,178,239,168,173,176,150,202,186,175,156,157, 61,225,195, + 71, 79,200, 18, 25,134,200,241,209,192,179,119,111,240,177,103, 79, 56,222, 12,164, 96,196,173,203,179, 61, 79,206,102, 62,126, + 7,194, 52,240,221, 31,157,129, 8, 39, 55,239,112,250,248, 17, 75, 91,217, 47, 43,181, 53, 68, 18, 41, 89,230,226,236,233,217, + 85, 38, 3,159,238,228, 96, 85,168,165,154, 89,233,214,205,107,220,188,117,211, 84,139,187, 29,105, 76,132, 96, 35,215,241,250, +200,107, 63,241, 73,198,124,196, 92, 11, 49, 41, 49, 36,114, 20,186, 36,218, 92, 40,189, 90,152, 51, 5,114,135,160,131, 85,119, + 68, 9,154,168, 75,161, 22,131,104,140,227,136,100, 99,173,107, 72,244,100,159,107, 24,208, 53, 26,101,175, 53, 36, 11,107,221, +115,254,244, 1, 63,253,249, 79,115,227,246,117, 74, 92,120,244,100,161,235, 57, 79, 30,189,199,181,107,183,184,113,251, 54,187, +203,115,202,229,158,180,221,144,211,196,229,217, 19,238,221,123,134, 87, 62,249,113,190,245,141,111, 48,140, 35,115,153, 9, 12, +196,188,101,185,188,164, 45, 51, 49, 10,151,235,138,236,149,202,204, 81, 22,174,143, 35,103,187, 74,185,124,202, 18, 58,211,176, +165,158, 63,228,255,250,127,127,155, 77, 78,196,148, 40,218,201,205, 70,167,157,206,115,247,110,210, 66, 97,147, 55,212,102,117, +163, 54, 23,152, 6,235,138,235, 10,205, 94,183, 30, 43, 53, 88,224,172, 55,147, 92,175,161, 19,230,206,144, 18,139, 64,148, 78, +144, 17,154, 16, 83,177, 92, 72, 80,122,180, 47,218,220,125, 58,212, 42,213, 97, 99, 41, 5, 82, 43,246,122,107, 36, 53,231,102, + 15, 6,248,208, 96, 55,178,222,149, 82, 87,131,184, 52,179, 47, 50,101, 18,209, 86, 44,221,136,132, 97,176,124, 70,107,157, 82, + 22,219,195,138,243,193, 91,231, 83,247, 78,248,252,167,158, 35, 72,224,179, 63,245, 19, 60,220, 95,242,198,155,239,242,211,191, +250,243,124,254, 39, 63,207, 87,191,250, 58,143, 30, 63,245,224,151,203,172, 58,148,110, 40,215, 32,137,185, 55,122, 42,136,250, +200, 88,171,123, 31,108, 52, 30, 53,162, 84, 74, 89,141,224, 25,157,208, 22, 44,117,236, 74,121,151, 43,205, 6, 38,233,157, 33, +195, 94,149,156, 6,180, 85, 90, 15,104, 86, 66, 55, 3,163,101, 29,186,113,239,187,173,207,214,197, 46, 95, 99, 12,228,148,217, +215, 66, 23, 51,133,197, 14, 89, 58,189, 8,213,235, 94,177, 91,200,186,134, 64,211, 21, 82, 96,168, 54, 9, 80,237,228,104,235, +183,174, 21,233, 38, 67, 65, 33, 54, 75,245, 91, 23, 91, 73, 81, 40,181, 34,205,220,245, 42,157,126,133, 79,117,210,156, 8, 97, +237, 54,182,246,236, 18,193,234,101, 81,236,125, 96,162, 46, 91,251,150,106,249,136, 32,102, 32,109,213,130,143, 70,133,115, 13, +108, 16, 84, 44, 72, 43,154,160, 27, 6, 56,133, 64,245, 42,158,115,184,204, 93, 78,240,223, 27, 40,245,170,185,116, 72,194, 91, +205,218, 66,125, 7,159,187,184,150, 24,137,246,250,151,195,119, 80, 53,218,157,246, 43, 21,184,197,212,148,205, 96,251,252, 46, + 29,105,163, 61,107,253,182, 47, 1,195,200,170, 32,107, 37, 37, 49,184, 64,143, 54,162,178,211, 70,184,210,208,169, 90,151,208, + 14, 84,110, 64,234,135,164,186, 5,168,154,167, 66,237,228,237, 6, 41,181,240, 4,197,228,243, 7,146,173, 96,163,132,210, 12, +177, 42,118, 48,179,189,191, 8, 34, 3, 18, 32,183,102,191,228,238,156,112,151,148,116,133, 24,204,201,107, 50, 0,163, 25,217, + 15, 96, 29,192,152,212, 82,251, 61,160, 33,217, 11, 91, 26,113,204,126,160,176, 95,106, 76,163,215,173,108,111,108,183,111,117, +144,191,194,182, 49,100,251, 37,149, 82,168, 42,104, 75,180,181, 80,221, 11,108, 60, 94, 11, 15,170,107, 92,109, 76,116,168,116, + 28, 14, 61,234,144,128,142,196, 12,170,204,107, 49,171,211, 24,141, 19,109, 6, 21,242,118,226,198, 96, 39,239,117, 94,160, 43, +227,144, 8, 83,160,148,217,107, 19,209,236, 82, 13, 98, 26,208, 84, 8,181, 49,215,143,200, 81, 74, 53,253,163,155,232,172, 50, +209,145, 24,185,125,231, 14, 83,178, 7, 75, 76, 66, 40,157,179,253, 76, 30, 39,226,124,202,239,252,246, 23, 25,179,240,254,187, + 31, 16, 66, 99,183, 44, 76, 1,171, 81,116,227, 24,132, 49, 33, 37, 64, 14, 72, 74,104, 19,242, 80,233,209,117,168,181,211,197, + 60,191, 53,194,102, 18,180, 26,227,120,202,182,255,123,252,244,140, 55,223,122,151, 16,237,195, 57, 36, 59, 88,244,106, 65, 47, + 92, 63,155, 98,166,105, 98,110, 74, 92, 45,216,168, 49, 48,151,200,163,211,133,207,188,146,121,249,185,219,252,240,157, 5,136, +236,207,247,188,254,163,119,152,231,234, 55,232,200,102, 24,105,170, 92,238, 47,237,195,153,178,237,167,130, 50, 13,147,141,185, + 75, 33,244,206,152, 3,159,122,237, 21,174,167,193, 89,229,129,181, 84,134, 33,147,198,224,156,249, 4, 17,198,104,155,173,178, +159, 13,139, 57,118,136, 66,209, 13,194,130,148, 70,141,118, 98,207, 17,234,140, 57, 15, 74,179,155, 88, 24,145, 97, 36,230, 72, +216,175, 72,180,101,251, 10,132,170, 72,183, 41,130,166, 68, 47,129,211,243, 83,242, 24, 57,121,230, 54,219,219,119,185,125,251, + 14,127,254,173,111,178, 59, 61,227,214,141,187,196,205, 17,143,159, 60, 38,213,202,144, 70,186,116,122, 61, 99,119, 49,243,210, +189,231,185,255,240, 17,105,216,162, 41, 50,181,153,186, 40,243,254, 28,213, 29,183, 55,199, 44,219,213,224, 54, 85,137,121,195, +178, 22,206,215,194, 26, 43, 12, 9,221,237,185,118,107,203, 63,255,202,215,248,240,193,251,108,199,145,101, 53,190,185,138, 92, +237, 92, 63,251,218,167,121,249,149,123,188,240,226, 51,156,157,239, 41,203, 66,158, 70,211, 74, 14, 22,214,154, 47,149, 20, 44, +208,104,208, 21,101, 84,161,171,213,172,114,136,172,116, 90,237,164, 60, 88, 0, 43, 71,187, 92,116, 19, 94, 68,215,107,244,222, +104, 45,120,170, 56, 17,195, 96,128,160,102, 33,168, 44,182,183,109,201, 40,103,181, 99,148, 76, 34,189,172,100,177,110,178, 86, + 35,209, 73,109,254,157, 98,127, 31, 85,179,156, 33,198,215,200, 49,217, 45,208, 84,112,180,218, 88,214,153, 59,119,174, 65,142, +148,186,227,229,151, 95,228,209, 7,247,161,118,158,121,225, 54, 47, 60,127,155,135, 15, 30, 59,142, 89,200, 89, 89,215,234, 41, +243, 78, 43,123,243,198,123,139,162,225,135, 15,223, 27, 15,195, 8,177, 82, 84,136,105,180,118,105,237, 31,133,180,204, 49, 77, + 91, 59,201,235,150, 68, 33,183,100, 25,134, 96,212,187,106,192,121,114,177,146, 77, 22,161,209, 89,202, 74, 10, 31, 29, 38,140, +181, 0, 90, 97,141,246,239,197,241,197, 41, 64,109, 2,217, 19,222,118,201, 37, 6,101, 41, 51, 45, 38, 82, 41, 84,205,148,110, + 1,197, 36, 74, 45,133, 16, 29,215, 27, 18,134,210,177,181,218, 21, 15, 62,224,151, 72, 91,144, 23, 85,164, 26,133, 45,248,216, + 58, 10, 22,246,235,166, 73, 85,109,214, 59, 87,231,171, 68, 99, 30, 72,176,160,107, 28,109, 90,167,158,255, 18,172, 14, 86, 91, + 35, 99, 30,147,171, 80,152,211,221,170, 54,119, 55, 4,151,217,248,119,122,116,242, 99, 83,151, 52,217,180, 26, 21,127, 55, 26, + 7, 64, 15,147, 2,237, 68, 15, 70,166,168,246,119,112, 87,132,184, 5,146, 30,173,240,228, 20, 56,237,118,209, 24,228,240, 12, +244, 66, 17, 54, 25, 48,132,110, 33, 73,186,162, 13,170, 6,210,225,102,218,235, 1, 31, 31,220, 9,237, 53,182,195,141,220,111, +163,118, 28,179, 61,235, 1,179, 26,176,138, 79, 60, 32, 48,125,127,222, 91,161, 81,233, 45, 58,121,199,247, 22,213, 59,141,206, +174, 53, 43,154,255,101,131,207, 78, 8,100, 20,178, 61,184,210,161,244,175,174,174, 12, 29,173,149,166,221,246,250, 4,219,191, +119,171,156, 72,180,135,119,180,134,166,133,100,186, 82,122,167, 20,151, 36,116, 32, 88,128,198,127,100, 59,224, 96,234,188, 24, +178,229, 6, 82, 99, 24, 13,118,144,212,198, 56, 85, 97, 93, 13,118, 17,170,241,155,235,225, 97,167,129,218,235, 21,102, 49, 68, +177,219, 49, 6, 65,208, 96,224,156,165,184,254,112,200,244, 2,105, 28,216, 78, 91, 34,141, 82, 23,235,160, 23, 39, 15,181,202, +233,105,224,104, 59, 48,104,133, 10,146, 7, 75,173,214, 70,163,177,150,195, 58,195,252,222,221, 45, 70,248, 58, 35, 74, 34, 76, +112,114,243, 4, 17,168,107,181, 64,202,162,164, 44,158, 86,175, 12, 67,224,254, 59,111,211, 74,163, 15, 98,233, 92, 13,172, 49, + 18,233,244, 18, 24,162,178,236,109,236,214, 4,242, 32,132,214,145, 20,152, 91,131, 26, 24,242, 72,204, 29,213,140, 68,241, 55, +190,123,159,243,200,205,113,226,195,119,222,225,236,226,146,187,119,142,217,142, 19,105,176,247, 74,220, 69, 46,246,197,220,208, +165,243,248,108,207,227,243, 29,111,189, 43,150,202,119, 57,202,141, 27, 55,216,110,183,252,193,215,127,196,167,159, 54,106, 24, +169,203,202,155,239,188,205,217,197, 41, 33, 64, 78,131, 1,113, 98,162,172,179, 51,188,147,213, 76,174,212,184,198, 58,168,205, +250,253,175,125,236,101,158,127,230, 25,235, 5,199,234,211,167,100,187,176,170,244, 34,150,132,238, 43, 90,212,165, 58,153,201, +193, 41,171, 88,168,102,174,198,162, 15, 3,104,107, 92,236, 22,147,178, 4,119, 58, 70, 35, 34, 70,129, 52, 4, 74, 55, 48,139, + 65, 61, 58, 18, 27, 75, 11, 48,129,236, 4, 25, 50, 79, 31,223,231,198,241, 77,142,211,109,234,238,146,251,239, 61,225,209,211, + 29,187,146,152,182, 27,230,249, 18, 26,196,235, 25, 82, 36,246,206,254,204,148,148,199,183,159,229,135,223,255, 1, 55,174,111, + 88,245,136, 28, 39,234,102,101,140,137,121,159, 56,159, 47, 44,232,153,132,139,186, 48, 52, 75, 11,135,152,236, 51,169,202,209, +141,231,185,104,231,252,206, 31,254,174,121,156,171,175,206, 90,179, 26, 44,202,107, 47,125,140,103,111,221,229,229, 59,119,121, +254,238, 11,252,159,255,236, 75,172,113, 70,210, 53,100,153,145,162,172,186,210, 53, 82, 66, 33, 20,163,172, 5,201,104,131,124, +104, 59, 72, 67,234, 64, 14, 6, 0,210,186, 18,134,145,186, 22,242,224, 55,202,170,196,208, 41,161, 89, 27,163, 39,180, 85, 58, +201,190,241,115,180,112,164, 67, 89, 80, 40,173,153,128, 5,165,175,179,179, 0,156,191,230,249,157, 40, 7,243,153,239, 79, 67, + 37,196,193,113,177,201,191, 99,204,121,221,123, 32,165,204,155, 15,158,242,206, 7,143,248,229, 95,249, 44, 66,224,100, 51,113, + 94,224,244,254, 3,114, 12, 44,187, 39, 76, 89,216,151,234, 59,214,236,204,132, 78,169,166,190, 18,175,234,138, 52,180,205,134, +124,245,192,112,109,197, 87,143,214, 41, 47,173,216,119, 86, 17,154,250,228, 44,234,149, 95, 59, 70,131,179,244,216,104, 54,200, +246, 11, 91,242,118, 94, 32,134,230, 57,159,122, 32,146, 80,181, 17,154,221,224,123,200,172, 90,160,117,198,104,135,161, 24,160, +168,173,102,165,117, 11,233, 73,176,224, 97, 53,122, 91,210,142,180, 72, 79, 92, 5,197,122, 55, 87,249,161,195, 94,235,226,200, +222,224,117, 84,227,153, 84,181,137,222, 21,193,180, 71, 91,239,210, 9,206, 78, 9, 65, 24, 52, 28,134,199, 24,215,170,250,101, +174, 35,221,242, 87, 11,254, 48,148, 67, 81, 85, 28,226,117, 8,243, 43, 45, 59,127, 66,109,213,167,173, 89, 16, 87, 15,114, 22, + 75, 59,247, 98,191, 43,193,214,101,253,192,106,241,105,183,150, 6, 17,247, 13, 88,194, 93,130,146, 83,112,115,158, 25, 48, 85, + 6,187,137,215,238, 54, 64,107,159, 29,206, 21,221,167,225, 74,114,229,179,101, 28,114, 50,131,158,229,111, 76, 7,156,248,168, +249,212, 85, 72, 86, 65,176, 15,133,120,145,255, 80, 63, 15,110,167,193, 65, 52,218,237,148,103,189, 76, 83,124, 6,215,158,181, + 98, 21, 51, 17,235,209, 86,119, 16, 35,131,191,145,154, 99,251,112,198,185,237,239, 53,120,152, 44, 56, 7,250, 48,102,119, 91, + 85, 10,209,110, 46,222, 57, 86,199, 1,118,204, 28, 36,218, 73, 41,154, 14,207, 79,209,253,128,227, 67,209,140,167,147, 45,165, + 89,203, 1,215,105, 95,202,226,238, 96,171, 36, 43,186,136, 33, 61,163, 80,129, 42,254, 80,142, 92,221,192,115,204, 68, 53, 34, +221,184,201,140,181,184, 49,206, 56,188, 90,172,131, 72, 16,227, 5, 59,197,191, 53, 69, 82, 68,123,103, 45, 54,157, 32, 42,203, + 92,216, 12, 27,142,143, 6, 36, 40,243, 92, 88,139,105, 4,171,194,152, 35,203,190,176,239, 43,171,141, 87, 72,209, 67,111,206, + 43,239,173, 80,234, 33,101,233,171,140, 30, 24, 83,182, 78,230, 90,209,216,185,251,204, 61,110, 94,223,176,174,139, 5, 48,114, +224,114, 85,118, 75,117,221,234,202, 80,162, 43,120,189,207,170,145, 50,175,204,221, 96, 49, 81, 35,227,209, 64, 40, 21,130,141, + 75,119,103,254,187, 31, 6,214,186, 16,106,103,191, 95, 41,125,101,119, 57,211,155, 57,181, 67,140,104, 43, 92, 63,185,206, 43, +207,222,227,252,252,156,105,176,209,124, 45,166, 47,164, 7,206, 47, 87,219,163, 55,179,254,153,114,209,216,235, 81, 2,146,236, + 97,188,223, 45,140,195,196,251, 15,159,178,219, 85,134,105, 98, 89, 42, 79,158, 60,162,180,206,144, 12,237, 57,109, 55, 44,243, +106,161, 25, 57,124,117, 53,180, 25,213,111,183, 59,183,239,144,222,184,125,231, 38,159,124,245,227,128,176,150,149,216, 18,109, + 84, 36, 52,250,206,124, 4,195, 54,146,100, 68,107,161, 73, 52, 33, 82,239,236,171,249,189, 45, 45, 92, 25,232,116, 17,230,106, + 97,152, 90, 76,144, 49, 69, 33,110,146,173, 4, 98, 36,199, 74, 93,172,195, 60,201, 64,165, 82, 90,100, 28,187,245,144,207, 3, +161, 87,130, 90,120,115, 58, 58,161,212,153,151, 94,121,133,243, 71,103,108, 71,227,235,223,127,116, 97, 95, 66, 34, 70,102, 28, + 3,235,185,237,192, 95,249,216,203,156, 28, 95,227,244,209, 19, 72, 39,196, 80, 73,155,145,105, 58,102,185, 88,200,195,132, 14, +130,214,206,197,211, 74, 30, 38,210, 16,152,106, 35, 78, 91,230,221, 3,214, 53, 82,134, 61, 95,250,163,223, 99,183, 59,227,218, +116,100,187,205,214,173,173,160,202,141,227,235,188,246,202, 43, 92,191, 61,241, 51,191,240, 89,222,126,184,242,246, 91, 31, 18, +100,176, 67, 80, 48,126, 69,171, 29,201, 43,109,113, 14,120,233, 6,101,138,209,250,185,105,195, 32,205,216, 2, 13,122, 89, 65, +163, 93,150,162,250,103,220,190,160,213, 83,211, 18,212, 32, 43, 90,208,176, 26,111,163, 71,155,200, 37, 33, 13, 25, 74,165, 72, + 66, 82,163, 22,155,208, 5,241,247, 31,106, 89, 30,127,135,216, 13,168, 59, 65, 81,157,163,126, 96,122, 91, 85,203, 90, 64, 10, +162, 44,251,198,119,127,244, 1, 95,248,194, 79,178, 61,185, 78,210,202, 75, 47,190,196,151,191,250, 13,110,159,220,225,231,255, +149,207,242,224,209, 87, 56,127,208, 73, 40,117,221,219,207, 34,209, 96, 77,126, 8,175, 98,170,226, 20, 5,165,153, 84, 73,149, +170,133,168,150,223,168,169, 35,205,130, 97, 77, 14, 13, 18, 87, 46,119,251,172,116, 96,208,200,190, 54,178, 40,154,226,213,207, + 21, 83,183,137, 21,202,218,108,109, 23, 35, 52, 45,176, 26,238,186,246,110,193,178,161, 19,178, 88, 7,187, 27, 50,185,118, 37, +209, 41,218, 73,254,200, 13,226, 54,198,110,249, 4, 11,182,205, 36,196,184,143, 78, 36,181, 91,173,255,121,221, 16,176,161,117, + 36,155, 94,218, 70,228,201,219, 83,118,131,175,168,173,168,220,194,167,171,101, 80, 66,254,136, 30, 73, 55,177, 74, 79, 6, 98, + 49, 61,134,169,172,107, 53,197,177,198,106,207, 10, 55,174,225,147,230,238,232,229, 32,166, 60, 86, 9,132,118,168,251, 85,247, + 45,153, 99, 35, 71,203, 95, 5,241,252,121,199,201,118,234,188, 14, 92, 74, 99,239, 37,123, 14,219, 97,203,198,246,122,197, 37, +129, 78,179, 27,244, 85,101, 60,146, 77, 78,165,133,174, 25, 13, 54,149,106,221,134, 84,205,157, 5, 16, 89, 15, 90,214,110,207, +217, 68, 12,164, 16,157, 65,174,214,107,108, 62,126,240,158,122,208,230,227, 39,220,153,235,150, 26, 71, 48,210,236, 47,101, 24, +209, 78,145, 67,149,196,212,145,110,138,135, 96,200,191,238, 65,173, 32,205, 61,196, 22, 86,146, 48,248, 88,197, 30, 76, 77, 43, +245, 48, 37, 16,155, 2,196, 96, 15,134,216, 43,122,160,240,248,232,195,234,201,217,190,172,171,186, 26,208, 2, 19,210,149,165, + 44,180, 46, 76, 41, 80, 90,101,237,182,247, 72, 41, 56, 84,193,170, 52,163,218,190, 78, 98, 50,251,213, 90,104,193, 69, 52, 46, +139,104,173, 91,253, 95, 93,106, 47,145,237,144,104,106,149,156, 41,102, 79, 79, 30,144,141,254, 24,105,246,165,223,122, 99, 93, +102,186, 54,114,206, 28, 31,143,164,152, 89,246,123, 74, 49, 5,173,168,112,180, 61, 98, 24,182,108,143, 34,109,189,224,244,236, + 41, 41,142, 76,195,192,126, 94,216, 45, 59, 11, 30,250,120, 80,146,241,247,107,235, 12,209,198,244,231,187,217, 30,112, 99, 98, + 95, 86,110,132,137,205,148,145, 96, 24,218, 60,175, 44, 40,218,138,219,137, 34,121, 18,250,178, 34, 26,145, 60,144,147,157,202, +251, 82,216,215,202, 48,108,152,219,202,190, 88,216,173,117, 40, 8,236,247,208, 27,165,194,126,217, 49,239,119, 22, 66,211,230, +104, 80,123, 51,175,165, 80,215,194, 7, 79, 78, 25, 6, 59,125,158,183,133,122, 81,105,197, 44,106, 65, 59, 83,142,214, 38, 80, + 24, 69,252,205,108,159,135, 49, 11, 55,142,224, 51, 47, 14, 60,255,151, 62,205, 48,101,182,227, 72, 41,149, 63,254,118,226,171, +223,122,135,162,118, 43,159,119,179, 7, 28,133, 24,226,149,124,232,176, 63,106,221,146,244,215,182, 19,159,120,229, 19, 72, 76, +204,117,161,197,142,200,196, 96, 79,127, 52, 38,100, 80, 66,129,158,253,125,145, 77, 97, 42,173, 18,242,100,212,180,181, 94, 73, + 70, 74, 83,179,208,181, 78,111, 43, 61, 36, 66, 30,136, 34, 76, 83, 36,135,228,182,186,206, 13, 25, 88,131,237, 39,135,148,209, +162,198, 27,143,221, 72,107, 23, 51, 77, 43,155,173,112,237,250, 17,105, 28,168,161,208,119,149,122,217,145, 38, 72, 28,220, 82, +149,169, 23, 54,186, 95,180,240,236,189, 59,172,203, 76, 30, 97,115, 52,176,153, 34, 83,218, 32, 49,114,150, 26,189, 4, 36, 77, +188,241,193, 59,124,255, 47,254, 37,239, 61,188,228, 95,253, 55,127,141, 23,110,159,112,255,233, 99, 54, 57,113,255,188,114,255, +205,111,241,250,159,127,139,164,201,104, 94,193,236, 88, 65,132,220,224, 11, 63,251, 89, 94,126,245,121,126,245, 23, 63,207,245, + 27, 39,252,241,239,254, 30,125,169,200,112, 4,177, 18, 82, 96,221,173,212,166,164, 24, 73,161,179, 4, 87,125,214, 74,234,149, +150, 19,251,176,103,179,102,210,144,216,247, 10, 41, 19,168,158,194, 54, 11, 97,145, 10,210,172,119,221,103,164, 11, 34, 11, 61, + 25, 12,164, 6,131,183,196,195, 84,115, 53,218,151,118, 79, 98,247,106,171,145,106, 18,149,214,176,176, 45,209,222, 19,161, 89, + 48, 83, 18,181, 86, 98,239,144, 51,193, 27, 59, 26, 26, 42,153,128,201, 63,114,219,240,238,251, 79,121,251,141, 15,249,153, 95, +121,142,210,148,187,183, 70,222,251, 96,228,242,195, 55,248,149, 47,124,129,111,191,245,128,119,238,255, 9, 25,131,175, 84,231, + 74, 36,123, 44,218,119,145,163, 64, 27,208,171,184,145,172,145, 9,180,161, 33, 29, 66,143,172, 93,136, 93,201,217,162, 66,173, +117, 18,198,200,168, 2,161, 52,246, 84,136,209, 15,201,254, 90,132,108, 45,165,160,164, 46, 36,237,214, 60,104, 54,249, 12, 67, +242, 80, 86,165, 39, 33,117, 59, 68,175,218, 12,132,164,166,123,238,221, 58,230, 85,108,154, 90, 90,163, 20,131,170, 92,161,108, +237, 25,233,220, 52,123, 88,151, 67,253,181,118, 11, 76, 7, 75,174,171,119,205,163, 21,220,189,202,102,147,225, 38,226,121, 1, +211, 71, 87,181, 62,123, 10, 92, 29,194,162, 24,114,182,205,102, 69, 36, 10,201, 9,248, 49, 56,159, 94,149,168,246,190, 45,162, +142, 97, 63, 72, 82, 20,113,238,132,221,122,195, 21, 61,191,169,173, 47, 67,178,223, 75, 9,120,178,221,228, 91,165,217, 13,218, +112,252,141,216,131,133,231, 13,254,225, 25, 53,107, 40,129, 5,103,123,112,104, 77, 15,144,220,223,174,234, 77, 13,207,106,116, +151,221,120,239,191,122,131,236,144,141, 10, 13,107,173, 56, 52, 46, 73, 72, 38, 97,145,238, 15,112,239, 25,251, 13,221, 78, 39, +214, 61, 69, 12,242, 18,100, 32,118,189, 26,165,212, 90,125, 28,143,141, 27,176,177,182, 5,161, 13, 26,161,190, 75,183, 7,180, +191, 80,193,126,201, 7, 49, 34, 90,209, 46,238, 47,118,231,119, 48,236, 97, 47, 46,136, 73,209, 3,122, 7,227,146,189,216, 17, + 19, 12,180, 3,130, 86,172, 94,166, 21,138, 6,211,233,245,193,156,209,221,189,182,193, 60,242,149, 72, 45,102,114, 34, 22,203, + 5, 96,163,123,251,240,171,133, 35,186, 33,110, 27,141,144, 44, 4, 33, 93,136,121, 68,164,123,182, 32,144,114,186, 26,247, 27, +119,224,144,128,180, 27, 92,202,217,210,158, 94, 43, 25,183, 19, 65, 2,203,126, 54,108,237, 58,219,158, 44,140,244,181,179, 72, +229,198,245, 13,167,231,123,214, 82, 56, 57,217,178,174, 51, 23,151,123,148, 67,208,195,214, 24, 70,111,181,244,253, 56, 68,118, +203,138,106,119,163,158,141,234,147, 36, 36,139,141,138, 52,178,221,142, 86, 49,146,137, 44,246,128, 13, 65,217, 71, 76, 9, 41, +216,151,205, 97,198, 85, 27, 15, 31,159,185, 97,201, 12, 66,218,109, 10,178,219,207, 87, 13,130,174,134,125,173,158,174,109,116, + 68,237,176, 87, 74,229,242,114, 79,171,141,185, 99,107,131, 86, 89, 75,181,233,141,218,232,115,140,145,107, 83,224,232, 40,115, + 60,141,228, 8, 23,115,225,253,135, 23,132, 40,156, 92, 59,230,153,187,183,248,236,231,238,113,237,232,136,208,133,126, 13,250, +144,248,209,123,143,249,224,137,241,216,151,121, 37, 70, 83, 43,134,195, 41, 55,132, 43, 54,117, 8,129,227,141,240,242,171, 47, +113,124,235,152,185,237,109,199,218,149, 16,173, 27,223, 53,131,116, 50,202, 58, 40,173, 42, 67, 26, 96, 46, 54,158, 29,133,210, + 87,250,162, 36, 79,219,159,158,159, 83,195,200, 52, 5, 82,142,212,139,204, 38, 7,242, 16,144,176, 97,136, 66,169,123, 82, 26, +144,150, 57, 95, 42,140,208, 16, 6, 12,101,185,246, 25,109,157, 33, 29,243,240,244, 9,219,188,225,222, 11, 47,241,210, 43,175, +176,191,216,241,254,251,239,115,185, 91, 56,171,123,242,104, 43,170, 90, 43,210, 77,248, 48,164,204, 16,148, 60, 30,241,224,236, + 67,110,156, 28,147, 99,102, 36,115,121,121,193,176,189,206,245, 27, 55, 41, 97,143,180,153,227, 33,242,111,253,234,207,242,143, +127,235,255,227,135,223,252, 51, 94,249,171,127, 13, 41,143,184, 44,149,203,167,231,124,253,235,127,202,249,197,142,113,202,126, +152, 86,146, 4,150,165,242,217,215, 62,198,223,254,219,127,149,155,215,239,240,211,127,233, 39,249,227,111,191,206,215,190,249, + 93,114,204,166,115, 46, 70,236,139,193,214, 71, 75, 41,132, 16, 25,137,212,212, 8,177, 80, 27, 30,160, 11, 84, 10,178, 20, 36, + 43,162, 6,242,208,214, 88,113, 59, 89, 59, 48,252, 45, 65,175,162, 70, 52,108,145, 82, 59,227,212, 89,181, 17, 99,182,112,108, +107,254,127,233,214, 7,239,213, 56,229,106,198,189,142, 53, 43, 74,175,100,207,240, 32,129, 80,234, 85,143, 91,187, 9,168,122, +240,148, 80,176, 42, 98, 18,203, 94,156, 95,118,190,254,231,111,240,185, 95,250, 5,198,227, 35,230,101,229,103,127,246, 83,188, +253,198, 19,198,113, 34,135,201, 30,132,254,224,150,226,171, 73,177,160, 86, 12,206,202,168,133, 76,186,170, 87,245,222,233, 61, + 32,139,113,226, 27, 21,169, 70,207, 92, 75,247, 84,186,218, 77, 59, 8,210,213, 24, 29, 62, 25,109,158, 1,146,152,109,229, 68, + 96,233,133, 93,171,100, 15,136,169, 6, 98, 74,116,141, 22,226, 83, 11,125,117,167, 37,246,213,172,122, 81,146,161, 94,155,135, +242, 74, 53,107,156, 54, 15, 18, 30,180,168,182,143, 47,116,127,168,217, 51,196, 24, 16,118,144,235, 7, 98,155,155, 56, 83,114, + 67, 91,179, 86, 83,239,157,144,178, 61, 87,106,197,190,144, 12, 66,102,207, 28,155, 38,118, 7,207,224,245,226,126,245, 8,179, + 74,112, 56, 64,113, 16,130, 10, 33, 53,215,234, 30, 24, 34,166, 13,173,109, 37,165,228,171,102, 27,125, 75,179,207,164,134, 0, +213,122,248, 68,185,162,165, 70,239,155, 27, 67, 71, 88,187,117,224, 15,109, 2, 61, 24, 53,241, 94,186, 39,204, 74, 3,201,149, +208,141,211,112, 48, 8,246,110,220,130, 26, 2,117,245, 92, 80,244, 32,164,115, 30,232,129,222,162, 77,124, 61, 0,221, 67, 32, + 17, 14,198,151,232, 59,101, 91, 67,137, 58,192, 36,224,255, 52, 39,187, 97,137,107, 27, 81, 20,132, 4,177, 16,163,239, 54, 60, + 28, 96,189,250,131, 30,211,217,189,158, 2,183,241,143, 87, 67,104, 87,134,183, 32, 1,180, 82,171,213, 71, 98,192,195, 86,246, +130, 36,156,235,235,152,189,230, 55,100, 9, 30,224, 11, 88,250,184, 98, 50, 21, 44,181, 26, 49, 90,156,117,237, 3, 18, 50,205, +229,243, 65,140,246, 22, 90,167, 5, 27,193,116, 49, 76, 96, 45, 13, 17,200,201, 60,181,218, 10, 53, 24, 58, 54,146,157,246,101, +125,102,105,248,129, 37,153,250,176, 11, 26, 33,135,104,111,202, 44, 76, 10,211,100,191,152,182,174,200,112,228,183, 78,241,160, + 29, 68,201,140, 25, 90, 84,144, 72, 9, 43,177,118, 46, 46, 27, 23,151,231, 4,160,172, 51,101, 89,232,205, 70,128, 6,146, 56, +120,169,109,183, 57,109,182, 86,153, 41,157, 97, 72, 30, 72, 52, 74,154,170,249,130,163, 8,195, 96,183,173, 24,204, 45, 94,189, + 66, 88,138,237, 71,131, 40,217, 73, 69, 74, 39, 12,153,107, 17, 46,231,149,214,187,157, 50, 99,100,183,236, 41,243, 74, 41,197, +122,173,181,153, 94, 16, 12,231,170, 54,121,104,193,198,130,251,181,176, 91, 10, 77, 3,177, 41, 75, 95,108,175, 28,229,106, 63, +219, 85, 56,187,216,115,243,214, 17, 47,220,189,201,118, 26, 8, 1,166,203, 29, 79, 78,247, 92,206,133,247, 31,158, 49,127,179, +243,253,247, 30,147, 37,178, 44, 11, 50,100, 46, 47, 42,251, 98,163,211, 86, 26,173, 22, 35,198,137, 31, 60, 85,220,107,175,132, +152, 56, 30,133, 87, 94,122,142,151, 94,122,158,108,154, 35,180, 71, 82, 50, 92,235,229,126, 53,216, 69,194, 38, 60, 8, 27, 87, +207,150, 12, 90, 96,109, 98,159,137,158, 88, 91,101, 85,101,233,145,180, 53,200, 81,212,196,148, 64, 54,137,156,196, 2, 48, 61, + 81,155,133,107, 98, 80, 36,217, 94, 81,171,210,227, 64,105,139, 33,117,215,142,234,142, 71,167, 15,185,182,221,146,114, 36,111, +142,104, 33,178,238, 47,104,177,208,150,106, 7,148,100, 56,231,107, 99,164, 4,225,242,242,146,123,183,110,178,157,174,113,122, +121,206,230,198, 77,226,118, 67, 84,229,230,120,194,121,233, 92,238,247, 44,243, 5, 79, 30,207,164,124,194, 51,175,190,202,223, +252,187,207, 51, 78, 71,156, 94, 60, 33,167,196,124, 17,121,253,251,223,226,253,119,223, 50, 67,151, 66,202, 3,181, 22,150,181, +114,231,218, 9,127,231,239,252, 27, 60,243,194, 61, 94,123,238, 99,252,232,221,199,252,230,111,254, 54,215, 82,102, 31, 96, 94, + 86, 87,102, 6, 42,145,208, 23, 70, 73, 20, 85,175,232, 84, 40,150,124, 22,237, 70, 12,139,141,208, 64,122,116,166,183, 65, 61, +162, 70,198, 33,217,195,172,119, 72, 3, 33,172, 76, 49,176, 56,234, 25, 9,148,101,177, 3, 61,137,160,102,107,236, 10, 3,135, + 68,182, 16,123,163,214,224, 15, 89,219, 77,214, 90,140,214,136,133,106,161,177,182, 70, 36,145, 67,183,201,137,102, 11,240,178, + 56,216,198,190,199,100,200,124,239, 71, 31,112,254,225,135, 60,115,235, 46, 31, 60, 62,231, 99,227,134, 62,192,255,246,155,255, +132,215,223,120,199,107, 74,141,192, 96,187,211,216,208, 28,232,171, 35,194, 61,248,101, 40,236,195, 77, 83, 8,158,176, 86, 21, +219,173, 11,204,205,196, 86, 72, 71,101,180,254,123,183,149,101,105, 46,205, 1, 50,166, 81,238, 10, 73,171, 81,231, 14,163,112, + 23, 36, 73, 48, 99, 94, 90, 44,159,163,193, 70,201, 7, 76,111, 11,182, 30, 77, 77,161, 46, 38,104, 81, 11, 19,174,118,194, 55, +175,184, 90,189,236, 80,243,108, 46, 73, 9,106, 83,202, 72,178,176, 94,244,134, 12, 30,112, 68,200, 4, 22,237,118,224, 10,242, + 81,128,185,121,170,221, 5,172, 92,221,220, 33, 58, 65,207, 86,104,135, 84, 63, 87,127,110,196,171,105,106, 15, 63,237,130,253, +241, 62, 13,241, 27,118,215, 78,204,201, 46,134, 14, 27,178, 29,125, 53,138,101, 14,134, 1,143,241,202, 56, 26,156,173,110, 59, +241,118, 72,166, 89,126,204,106, 8,244,104, 35,254,160,145, 16, 44,249,110, 84,216, 6, 45, 56,152,218, 2,112,246,171, 51,126, +133, 98,147,165,222,140,185, 18, 98,247, 93,126, 50,130,159,135, 3,175, 2,118,189,144,130, 90, 7,179,119, 51, 78,137, 26,241, +205, 64, 11, 7, 75,141,221,200,164, 5, 35, 53,181,110, 86,161, 32, 62, 78, 72,158, 92,183,113,150,136,141, 60,241,211, 17,213, + 8, 79, 33,124,100, 36, 67, 13, 36, 96,141, 52,179,179,105, 87, 36,100,242, 16,252,102, 15, 67, 74, 14,217,143,150, 80, 87, 75, +166, 30,182,162,170,205, 18,204,189,163, 93,168,181, 26, 28,165, 7,179,244,196,140,180,238,135,134,136,100, 33, 5,136, 61,218, + 45, 52,170,211,131,140,240, 35, 18,172,146, 16,236,127,223,123, 5, 18, 67,238,148,165,179, 84,123, 16,104,171, 70,217,171,205, +119,112,130,106, 1, 49, 37,108, 80, 53, 44,101, 50, 84,107,168, 54,182,243,207,222, 85,199, 48, 96,187, 43,130,178,149,100,142, +238,218,124, 39,110, 15,192,218,109,218,112,237,228,132, 86,109,135, 29,195,196, 52,116,170,227, 24,113,178, 89,138, 66, 47, 51, +213,157,200,165,117,146, 7,229,134, 40, 52, 45, 60,189,188, 32,146, 72, 17,166,154, 32,250,161,168,137, 65, 25,180,208,170,157, +246, 85,188,179,218,237,182, 58, 76, 66,138, 3,219,156, 80,133, 41,192,233,249, 5,235,188, 51,235,158,133,109,201, 18, 41, 69, +217, 78,137,227,227,145, 33, 26,144, 98,209,149, 7, 79,102,206, 46, 58,107, 93, 25, 36,144,167, 76,148, 64,204,206,184,109,176, +155, 59,203, 98, 15,225, 90, 10,247, 31,158,145,115, 38, 38,147,125,172,171, 82,151,206,195,229,130, 7,143, 47,208, 31, 28,122, +157, 86,241, 24,182, 91,162, 88,167,179,121,151,180, 53,131,107,132,232,252,110,135, 58, 36, 81,142,143, 54,220,188,123, 15, 66, +100, 93,155, 33,126,155,245,131,199,203,202,118, 51, 49, 12,248,225,117, 36,212, 74,149, 78,152,205,123,189, 34, 94, 65, 51,198, +122,171,149, 46, 66, 74, 27, 98,109, 68, 15,152,230, 40,164, 41, 51,165, 72, 91, 58, 75, 95,201,219, 13,169, 64,237, 43, 61, 7, + 66,232, 72,176,132, 60,205,216,219, 83, 78,244,165,176,172, 59,238,220,185,197, 56, 29,115, 52,110,120,251,221,119,157,200,167, +136,195,111,142, 54, 91, 36, 30,209,150,153,181,236, 41,109,207,115,207,127, 30,137, 35,183,142,174,113,253,248,196,229, 28,157, + 16, 35,203,110, 79, 93,206,121,250,248, 41, 31, 60,248, 11,100, 21,138, 44, 28,111,175,243,228,236, 17, 2,156, 94, 92,242,238, +123,111,241,250,155,223, 51,217, 68, 72, 22, 48,170,230, 96, 8, 10,127,235,215,127,133,159,251,185, 95,226,249,123,183,169, 40, +191,249,191,255, 54,231,187, 29,219,163,103,200,251, 25,149, 21,141,153,190,218,225, 57,137, 85, 52, 67,239,164, 80, 44,144, 25, + 19,189, 45,110,159,138, 72, 76,212,208, 25,186,117,162, 75,183,207,123, 8,145,218,172,254, 26, 99, 48,137, 70,243, 21, 26,157, + 36,141,158,162,161, 93, 99,182,239,135,234,208, 36, 85, 10,193,157,230,126, 11, 61,180, 98,192, 45, 95,230, 4,151,152,233,189, +218,247,131, 65,174,205,180, 21,189,178, 41, 7,126, 67, 50,166, 6,141, 17,225,241,147, 75,190,243,237,239,241,153,207,253, 20, + 75,203, 60,121,116,193,171, 47,156,240,197, 40,252,232,135,111,179, 73, 27,187,225,246, 78,151, 74, 78,241,202, 3,177,132,132, +184, 69, 82,131,101, 15,160, 16,100,164,187, 89, 50,134, 78, 88, 18,107, 48,149,241, 1,105,174,181, 81,180,216, 4, 64,141,207, +208,187, 53, 75, 52, 88,195, 40, 17, 88,151,197, 30, 56,201, 46, 48, 93, 2, 34,110, 78,155,103,203, 23,137, 73,153,114, 78,244, +214,232,165,216,224, 59,226,162, 43, 31,249, 54,161,246,118,101, 45,236,181,217,136,185, 91,112,109, 12,216,235,233, 21,105,237, + 54,237,236,218,161,122, 88, 9, 37,117, 69, 7,171,200, 17, 44, 7, 97,245, 61,159,104, 4,187, 20,212,106, 42, 86,106, 37,144, +168,158,121, 32, 66, 47,106,159,239,234,172, 19, 55, 69,166,100,248, 90,227,230, 67, 17,181, 85, 10,130,136, 61, 88,137,253,176, + 12,183,223,177, 4,106,107, 68, 53,214,255, 90,237,233, 26,162,253,158, 98,140, 32,134, 67,239, 98,183,229,160,226,211,101,245, +219,127,191, 34,233, 29, 4,117, 65, 15,127, 23,191, 93,247,112,197, 30, 0, 65,181, 19,181, 91, 5, 15, 91,143,107, 52,158,139, +144, 12, 14, 20,236,168, 38, 10,107, 48, 38, 31,254,121, 72,138,171, 40,187,177,103,171, 19,184, 98,180,196,104, 88,171,119,161, + 29,107,231, 33,163,120,216, 99,168,153,109,122,181,157,136, 4, 3,103,168, 68, 82,138,136, 66, 72,197,194,113,221,110,165,189, + 55, 3,239,184,153, 39, 28,198, 49,189, 95, 9,101, 98, 16, 99,165,251, 41, 80, 87,179,210,136,116, 11,155, 5, 83,120, 74,116, +165,156, 20,219,216,244, 78,110,205, 79,215, 21,218, 74, 11, 25,165,152,148,160, 4,122, 28,140, 31, 31,220,178,213,237,118, 20, + 92, 36, 35, 98,111,164, 33, 4,106,179, 15, 86,148, 12,155,200,160,135,137, 67,247,157,136, 5, 70,114,202,148,110, 1, 12,181, + 99,153,253, 12, 46, 59, 40,172,126, 88,112, 28,110, 12, 72, 55,172,230, 50, 23,154, 86, 82, 26, 24,178,133, 67,182, 41, 51, 76, + 25, 6, 57,128,208, 9, 58, 82, 75,161, 55,168,171,209,228, 74, 45, 52, 58,165,118,127,182,135,171,201, 74,175,202, 52,142,116, +237,228,113, 36, 7, 11, 3,238,206, 47,109,183, 44,145,121,159,201,201,216, 1,196,200,133,238,201, 49, 16,253, 48, 17,147, 85, + 45,186,118,162, 24,124,133,216, 81,215, 80,174,193, 12, 65,183,175,223, 96,165, 19,122,103, 89, 77,131,153,177,196,189,134, 68, + 28,237, 65,118,146,182,156, 94, 60,162,212, 75,114,132, 33, 91,170,181,183, 64, 41,237, 96, 18,116,220,174,173, 51, 74, 81, 46, +215, 64, 88,103,118,187, 98,135, 28, 71, 47,198,136,189, 7, 60,112, 25, 60,100,169,189, 49,215, 66,173,118, 91,136, 34,158,115, +177,204, 1, 98,163,218,222,141, 76,181,219,207,124,237,235,127,102,117,154,174,164,136,221,166,163,221, 92, 62,253,201, 87,248, +252,167, 62,205, 78, 45,104,212,235, 66,206,214,123,157,207, 43, 90,171, 77,148,138, 88, 74,190, 43,244, 68,148,110, 35,225,156, + 24, 80,138, 38, 98,183,230,129,113,160, 23, 82,177, 20,118,163,160,251,128, 12,137,148, 7, 68, 26,101,223,136, 33, 33, 49,243, +248,201, 3,234,218, 24,227,200,115,207,220,227,230,241, 17,223,127,250,128,211,139, 66, 41,141,233,200, 42,111,173, 23,110, 78, +215,120,178,238,169, 42,164, 52,113,237,198,109,222,123,247,148,124,156,168,122, 73, 42,129,186, 68,150,181,128, 10,155,156, 89, + 7,248,133, 95,248, 9,110,110, 38,222,249, 96,199,233,121, 67,163,178,159, 19, 15,239, 63,230,143,190,252,135, 92,156, 93, 16, + 83,178, 3, 94, 10,212,190, 48,164,204,191,251,183,126,157, 79,126,242, 85,238,222, 58,226,230,141, 99,126,247,203,127,198,219, +111,189,201,209,241,115,236,202,130,246,213,210,185, 75,179, 67,100,116, 0, 85,155, 81, 42, 26, 70, 59,182,213, 56,197, 0, 0, + 32, 0, 73, 68, 65, 84,100,180,153, 56, 69, 90,202, 80,204,161,160,189,176,107,157,174,139, 53, 74,106, 32, 36, 71, 35, 99,156, +243, 84, 76, 0,181, 95,103,243,218,251,195, 91, 43,208,170,175, 90,108,101, 40,161, 83, 61, 77, 30,186,173,244, 8, 43,234, 50, +143,187,119,239, 49, 95, 60,177,135,164,186,196,138, 78,142,217,255, 25,246,192,164,137,213,128, 17, 91,251, 52, 15,122,210,233, + 57,243,135,127,250, 29,126,233,175,188,203,107,175,124,150, 39,167,103,212,165,241, 55,127,253,215,249,214,159,191,199, 15,127, +240, 22, 67,154, 28,159,237, 43,167,214,136, 41, 18,212,218, 52, 57, 97,117, 62,223,134,198,102,172,122,237,141,238, 46,114,245, +198,144, 52,236,245,195,106,120,130, 77, 35,138, 54, 55, 93, 38,131,195,168,178, 63,152,193, 36, 64,179,221,172, 6, 23,131,120, +208, 51,248,120, 88, 69, 89, 90,113, 28,169, 92,137, 87, 52,224, 55,123,243,132,219,105,200, 24, 5,214,169,175, 87,245,186, 53, +170,177, 23,214,217, 38,117,218, 73, 34, 86,127,236, 7,213, 72, 71, 37,219,218,209, 33, 81,218,173, 89, 35,221, 70,223,221,171, +204,146, 60,131,141,201,158,232,129,208, 92, 71, 27, 32,144,136,209,190,103, 85,141, 94,216, 14,136, 27,111, 97,101,247, 75, 88, +163, 43,250,132, 25,211,153, 98, 74,218,238, 78,170, 20, 3,165, 99,202,221,102, 2,153, 16,204, 85, 98,102, 81, 37,138, 29, 20, + 57,200,216, 14,187,245,102,174,212,208,213, 66,223,126,176, 82,167, 4, 38,213, 43,200, 77, 23, 8,205, 94,119,107, 41,218,141, +191,139, 77, 91, 8,163,233, 93,163,241,251,165, 41, 61,139,255, 30,172,161, 17, 67, 32, 94, 59,185,241, 27, 33, 8, 98, 86, 71, + 82, 18,115, 55, 39,177,192,154,186,117,167,117,106, 91,253,139, 86,232,158,150, 52,119,116,248, 72,164,113, 64,236, 57, 29,168, + 30,144,127, 33, 80,154,237,118, 66, 20, 55,236, 68, 82, 74,164, 56, 64, 23, 39,193, 69, 75, 43,138, 24, 39, 90, 12,200, 97,134, + 88,123,226,167,104, 20, 33,107,191, 89,125, 44,244,238, 9,125,187, 57, 73,140,132, 56,144,114,250,232,131,119, 80,227,165, 43, +101,141, 39, 19, 15,194,146,238,225, 24,175, 35, 8, 36, 25, 72,131, 48, 78, 70,128, 11, 98, 15,186,113,200, 12, 57, 49, 77, 91, +166,205,214,170, 88,218,201,146, 73, 41, 92,125, 17,224,117,133,224,127,254,225, 32, 96, 99, 68, 27,177,181,106,225,146,186,206, + 44,173,210,122,101,119,185,178, 47,157,121,221, 51,239, 86,202,210,153,231,197,160, 26, 34, 72, 78,228,156,217, 76,137,105, 51, + 48,108, 50,155, 97,195, 48,216,127,150,243,200,112, 52, 48,102, 11,213,109,142, 54,140,211, 64, 78, 3,180,102,235, 4,137,246, +197,224,146, 4, 9,205, 94,107,117, 77, 93,176,125, 92,105,205, 87, 35,134,169,109,221,131, 36,173, 49, 47,149,178,118,115,189, + 99,181, 47, 9, 66,202,102, 24,147, 20,153,151,194,197,126,101,183, 52,206, 78, 23,158, 60,221, 17,162, 50,229,140, 42,172,189, + 83,106,165,148,202,186, 86, 90,179,247,225,176, 73, 22, 42,172, 22,236,217,207,133,203,157,161,115, 77, 11,101,239,149, 36,246, +128, 48, 20,102,101, 93,138,161, 27,187,237,246,245,112,137,231,224, 78,183, 44, 69,247,176, 92,107,149,101, 93, 41, 75,177, 38, + 65, 55,134,126,171,246, 62, 94, 74,161,148, 75, 94,121, 97,226,241,217, 5, 15, 31,159,163,107,161,104,101,183,168, 81,241,146, +221, 42,204,117,223, 25,210, 72, 19, 11,131, 78, 41,179,221, 36,155,130, 13,145,109, 76, 72, 79, 20,154,215, 94, 13,185,156,124, +254,148,143, 50, 33, 68,202,170,244,197, 2,131, 45,193,253, 15,239, 83,215, 61,119,239, 61,203,167, 63,254, 83, 4, 85,222,126, +247, 13, 46,250, 37,195,152,217,132, 45,189, 54,198, 41,115, 52,100,206,231,153,139,178,112,247,198, 61,226,112,196,147,243,251, +220,126,246, 14,125,182,181,210,152, 70,134, 65,232, 82,104,155, 35,174,221,126,150,178,143,156,238, 50,183, 94,120,141, 40, 3, +177, 11,173, 52,190,244,165, 47,242,206,219,111, 48, 14,131, 37,253,197,170, 77, 55,142, 39,254,131,191,247,215,249,183,255,157, +191,203,201,201, 49,159,252,236,171,124,239,141, 71,252,119,255,195,255,200,107, 31,255, 20, 31, 60,188, 36,197,149, 32, 74,155, + 27,205,173, 89, 65,213,178, 31,106,123,179, 22, 2,169,155, 99,188,248,154, 47,197,100,252,254, 62, 35,170,200, 24, 16, 18,189, + 21,147, 21,133,108, 95,110,209, 76,121,237,144, 64, 46,182, 71,181,181,167,208, 66,161, 55,155, 82, 37,197, 53,161, 94,224,237, + 54,210, 21,181, 47,246,170,157,235, 55,182,236,119, 51, 23,231,167, 70, 10, 68,188, 51,238, 15,149,104,125,252,232,227,222,144, + 45,204,107,227,101,187, 81,142,211,200,195,199, 59, 78,142, 50,159,251,169,159, 96, 26, 50,203, 90,121,225,249,107,180, 2,127, +242,141,111,186,160, 37, 16,178,237,229,205, 87,174, 78,227,148,131,103,197,158, 44, 62,198,213, 80,125, 72, 27, 33, 84,162, 90, +200,179,117,219,241, 54,212,214, 24, 88,133,170, 31,246,218,190, 99,239,221, 42, 89, 65,140, 95, 30,196, 17,166,218,140, 60,215, +205,136, 22,195, 0,189,185, 16,211,234,163,162,234,146,146, 31,251,123,121, 68,205,170,141,205,166, 3, 52,191,236,116, 91, 9, + 4,171, 29, 26,146,251, 48,213,140,182,118,208,234, 94,119,223,141,247,238,110, 22,251, 41, 85,187, 77, 19,252,187,178,187, 81, + 60,137,181, 80,130,157,173, 12, 85,158,156,174, 30, 35, 93, 44,237, 46, 87, 59,252,224,218,235,195, 65, 77,124, 77,124,168,199, + 29,246,243, 54,238, 15,213,130,173, 26,241,245,144, 58, 95,222, 46, 64, 42,118, 11, 63, 28, 72,240, 0, 91,112,137,142, 98, 0, + 27,155,152,216, 45, 93,124,100,255,209,179,172,163, 26, 61,144, 46, 87, 74,103,107,206, 56,165, 46, 28, 56,239,205, 95,244, 70, + 52,154,155, 61,240,187,143,245,197,107,227,189, 18,159,187,253,204,111, 68, 63,105, 85, 21, 79,104,219,104,221, 92,180,217,133, + 41, 54,154, 21, 9,164,104,149, 41, 3,215,116,211,164,138,125,160,130, 4,174,202,105,205,198,182,173,154, 43, 60, 96, 55,109, +220,182,211, 93, 42,208,213, 45, 52, 46,219, 8, 41,255,216, 3,209, 70,210,146, 50, 49, 37, 11,230, 72, 66,194,225,129,157, 17, +137,164, 97, 36,229,129, 60, 38,114,140, 36,177, 96, 87, 76,150,237,138,158,144,143, 49, 57,170, 52,147,134,137, 28, 44,108, 19, +252,228,222,138,221,182, 75,117, 87,121,239,172,235,225,148,218, 13, 59,168, 86,237, 11,209,160, 22, 67,136, 52,109,228, 33,179, +217,100,162, 36,134, 33,177, 29, 38,114, 74, 70,171,139,193, 58,163, 8,217,223,100,104,180,218, 90,245, 53,197,161,167,216, 29, +225,232,193, 24,220,235,222,106,167, 84, 88,150,133,253, 90,152,151,197,121,206, 66,142,131,237,206, 83, 32,165, 72,206,118, 8, + 25,198,129,205,118,228,218,141, 45,155,109,102, 24, 71,198, 60,144,115, 36, 39,203, 35,152,166,212, 78,190, 81,130, 77, 27, 56, +140, 23,237, 38, 29,179, 5, 0, 45, 64,168,164, 28,157,174,214,137, 98,163,124, 28, 50, 44, 33, 58,160, 33,145, 98,186,146,238, + 4,141,236,231,133,148,236,203,182, 52,211,202, 62,115,115,195,189,219, 27,182, 83, 98, 59,154, 79, 64,226, 96,237,133,181, 49, +142, 38,118, 41,173,218,184, 60, 37, 15,168,224,156, 3,203, 11, 44,139,189, 70,211, 48, 92, 17,181, 98,140,108, 54, 27,174, 95, + 63,230,217, 59, 39, 68, 26, 23,151, 23,118, 99,195, 30,224, 34,145,113, 24,201,195, 96, 31, 52,103, 52,183,214, 93, 11, 25, 56, +189,152,121,227,157, 71,124,247,187,111,144,250,194,175,253,235, 47,179,137, 35,223,250,206,251,236,246, 59,246,187,133,203,203, +133,203,101,161, 84,181,137, 87,239,164,112,196,144, 2,199,155, 13, 61, 10,219, 65, 24,243,192,144, 51,105, 51, 16, 11,228, 49, + 51, 78, 38,106,105,173,217,200,115,112, 63,130, 2, 41,162, 77,121,255,253,119,200,227,196,203, 47,189,202, 52, 28,115,255,254, +135,204,243, 25,121,237,228,184, 97,217, 45, 72,236,164,148,121,122,177,178, 46, 11, 89, 58,159,122,237,115, 60, 93, 78,185,118, + 77,184, 57, 93,163,117,229,104,179, 37,228,129, 46,240,250,119,127,192, 63,250, 71,255, 43,251,243,251, 60,247,236, 11,156,220, +125,142, 24,149,109,158,120,116, 49,243,149, 47,253, 33,223,248,198,151, 33, 88, 7,116,147,172,134, 39,146,248,236, 79,254, 52, +159,255,185,159,225, 51,175,189,200,167, 63,255, 25, 30, 62, 85,126,227,191,249, 7,236,158, 60,225,198,245, 59,124,255, 7,223, +227,214,205, 91,172,197,252,246,146, 6, 11, 72, 81,188,119,189, 18, 83,134,218,209, 30,145, 56,184, 49,180,163,107, 35,132,217, +170, 69, 98,224,151, 90,149, 97,204, 76, 98, 15,133, 22,130, 25, 17, 75,181, 44,129,217,235,233, 88,211,162,187,108,170, 7,188, + 86,107, 15,124, 73, 70,218, 54, 8,138,117,187,155, 54,203, 93,168,141, 90, 79, 79,159, 56,156,200,146,238,129, 96, 92,251,131, + 1, 59,102, 91, 85,106, 32,165,132,228,100,240,161, 0,210, 3, 75,133,167,143,238,243,153,215,158,229,206,221, 23,120,116, 62, +243,225, 7, 15,120,245, 99, 47,242,238,251,143,121,243,237,247,201, 67, 54, 56,144,123,195,179,216, 94,183,118,159, 86,225,246, + 73,191, 43, 71, 85, 75,220, 87,191, 32,248,173, 58,133,108,227,115, 95, 79,212,102,214, 68,235, 80, 91, 93,181,170, 50, 8,196, +156, 44, 12,139, 49, 20, 98,200, 14,104,233,190,187,183,236, 77,117, 27, 27, 93, 63, 58,176,184, 88, 70,122, 39,133, 64, 9,234, +160,169, 70, 10, 7,223,121, 50, 2,105, 53, 96, 78,247,174, 55,218,174,210,229,226, 19, 47,187,236,218, 69, 76,125,133,125,184, +108, 73,240, 78,121, 56,172, 87, 61, 4,121,160,150, 58, 28,198,214,235,209,141,162,206,120,144, 67,248,206,194,110,250,227, 66, + 21, 14,198, 80, 7, 7,137,248,234, 23,151,141,245,171,144,243,193,222,214,186, 56, 99,196, 30,168, 90, 61, 68, 43,225,106,237, +152, 83, 64,179,175,164,253,191, 11,206,193,176, 56, 63, 62,178, 55,249, 10, 87,223, 98,110,117,107, 7,121,145, 67,149, 2,172, +173,217, 84, 88,108, 98, 29,197, 14, 35, 34,110,216,235,230,169,144, 32, 54, 25,209, 64,186,115,235, 24,109,149,181, 26,210,178, + 87, 11,170,173,181,208,131,208,187,197,250,163,255, 67,237,152,102, 95,132,150, 64, 55, 81,130,246, 78,202, 25, 9,214,107,108, +206, 87,111,221, 74,122,221,249,190, 7, 72, 16,221,110,220,218,236,131,167,206,137, 55,196, 94,178, 23, 68, 45, 85,172, 98, 41, +249, 3,145,142,208,108,236,175, 22, 36,232, 18,220,142,147, 9,201,247, 25,234,129, 27,183,162,201, 96, 8, 65,141, 98,163,151, + 26, 32, 70,130, 12, 76, 77, 92,112, 96, 15,114,173,141,218, 42, 7, 37,113,107,157,178,204, 70, 53, 74,129, 44,214,141,157,253, +231,203, 18,209,168,246, 69,157,124,112,149, 51,169,175,180,181, 33,105,240,176,158,218, 88, 53, 84,234,186, 90,111,221,223, 52, + 6, 37, 80,170, 6, 74, 45,132,208, 12, 75, 24,237,144, 34, 64, 72,201,130,105, 26, 44, 68,120,112,123,123, 87,114,213,106,111, + 91,181,196,122, 16, 51, 45, 5, 7,200, 72, 74,132,212,153, 75, 67,162, 65, 17,164, 31, 68, 15,126,235, 64,169,210,137, 85,232, +150,229, 48, 59, 82,115,168,207,144,144,214,145,100,154, 70,213, 68, 43,149,148, 2,210,162,217,220,176, 21,132, 12,134,129, 13, +109, 36,134,138, 74, 99,187,221,128,108,237,198,208, 12, 27,121,114,107,224,232,104, 34,107, 36, 75,231,254,227, 83,126,248,246, +142,243,179, 83,186, 42,147,102,122, 91, 61,191,225,191,115,199, 78,198, 96,127,201,121, 89, 89,215,194,241,181,235,108,143,142, +120,242,244,145,213,250,242, 96,230,165,214,217, 28,109,217,157,159, 90,235,128, 64,140,145,107,211,214,250,182,142,104, 77, 81, +104,213,132, 31, 49,167,171, 41, 19,170, 60,125, 50, 51,151,194,241,241,200,231, 63,245,113,190,247,250,135,220,188,153,121,114, + 89, 8,181, 19,115,160,247,200, 50, 47,180,139, 11, 19,178,196, 75,246, 99,102,222,239, 45,216,217, 96, 24, 19,113, 18, 84, 50, + 89, 18,153, 70, 91, 23, 36,193,120,124, 68, 42,145,194,194,118,136,172,161,162, 18, 41,187,133,182, 22,182,195,214,164, 62, 23, +143,184, 88,206,208,121,225,250,241, 9,143,247, 59,208,194, 52,108,153,107,161,176, 39, 13, 35, 83,218,160,203,204,254,236,156, +231,159,127, 1,237,145,113, 27,205, 28, 72,161, 46,149,219, 55,111,144,214,133, 27,195,204, 51,183, 54,188,245,222, 3, 54,199, +137,249,113,225,139,191,255, 59,252,225, 31,252, 83,114,138, 87, 13,138, 60, 77, 92,236,247, 60,115,231, 38, 39,121,195,242,112, +225,197,159,248, 56,223,254,206, 27,252,215,255,213,127,203, 15,190,241,103,252,218, 95,255, 27,252,224,141, 31, 17,116,239,235, + 8,243, 18,164,218, 24,164, 83,187,173,160, 84, 51,171,174, 72, 82,106,141,116,113, 25,203, 82,168,165, 18,153,208, 94, 60,213, +126, 72, 76, 79,212,193, 28,220,177, 69,251,114,245, 41,157, 51,172,237, 38,216,172, 11, 78, 24, 89,203,130,150,134, 38, 67,111, +150,186, 90,218, 90,131,145,214,154,237, 91, 9,137, 90,149,205,246,216, 90, 42,221, 70,197,126, 87,116,168, 8, 46, 32,241, 93, +123,180, 29,188, 54, 59,248,106, 54,202,219, 52, 13,188,245,254, 25,255,226,203,127,202,209,157, 23,249, 39,255,244,247,249,238, + 31,127,157,255,228,223,255,123,124,225, 47,255, 44,223,121,243, 45,118,103,123, 3,153,116,187,217,149,106, 2,150,134, 77,104, +114, 18,234,106,205,145,174, 22,136,235,171,225,179, 37, 98,123,106, 34, 61, 84, 66,109, 46,169, 18, 2, 6, 49, 10,210,201, 98, +104,214,224,220, 11, 61, 44,119, 85,253,112,189,216,119,138,189, 41,232,180, 43,132,114, 15,205, 31, 60,225,163,116,187, 26,147, +163,117,215, 43, 87, 39,120,162,166, 84, 22, 23,179, 4,211, 31, 75,197, 32, 63, 46, 86,234, 26,208,190, 16, 98,178,125, 51, 70, +213,139, 62,153,181,218,184, 81, 62,137,238, 33,209,128,228,128,150,110, 1, 50, 95, 37,106,131, 40, 6, 29,194,109,127,218,244, + 42, 16,169,142,118,165,117,107,154, 96,239,147,160, 6,125, 82,196, 14, 19, 33,217,107, 89,173, 1, 17, 66,184,154, 20, 4, 2, + 18,197,246, 13, 29, 84, 26, 17, 87,201,214,213,173,105, 38, 60, 11,221,118,232, 42,253,234,246,109, 56, 87, 67,235,232, 97,191, +168,246,103,116,177, 3,137,118, 11, 9, 30, 14, 61,182, 62,242, 90,121, 59,136,120, 44,117, 31,124, 90,110, 85, 58, 27,205,247, +110,217,174,160,145,248,194, 43, 31,255,141,148, 38,146,100,226,118, 96,179,177,189,238,118, 19,125,167,168,100,245,108, 94,211, +195,103,230,199,198, 8,209, 84,131,146,200,142,221,148, 40, 76,155, 13,155, 49, 50, 13, 98,163,193,209,176,178, 73, 32,121,141, + 45,137,144,197, 78,100, 33, 68, 11,167, 89, 93,207,186,146, 65, 93, 28, 96,196,174,224,144,252, 31,179,227, 26,129, 46, 88,144, +175,174, 43,189, 22, 90,239,118,179,109,118,184,104, 65, 61,153,104,181,143,238,163,151,214,171,227,255, 4, 82, 70, 37, 34,105, + 96,220,108, 25, 55, 71, 12,227,134,163,209,198,215,227,144,152,134,204, 56, 77,164,152,217, 76, 91,134,144,174,106, 4,218,172, +226, 84,150, 66,213,198,110,183, 99,222, 91,223,189,119,101, 89, 87,127,147, 57, 61,239,160, 23, 12,126,250, 34,144,163,173, 61, +198,108, 7,131,148,128,117,161,213,149, 86, 87,202,186, 58, 67,192,161, 24,193,254,236, 40,201,195,131,217, 71,104, 16,135, 12, +152,109,170, 87,245, 83,240, 97, 26,208, 76,167,234,167,226,232,188,250, 48,136,113,159,233,134,126, 69,124, 92,109,219,187, 94, + 61,213,143, 77, 3, 66,176,215, 36, 13,145,237, 48,146,198,200,102, 72, 54,173,136,198, 31, 24, 36, 56, 40,196,209,140,193, 14, + 87, 49,218,237, 2, 17,246, 43, 92, 92, 42,167,151, 38,208, 41,205, 79,184,209, 80,151,225, 64,187,116,189, 96,215,143, 56, 10, + 10,142,231, 92,153, 54, 19, 41, 10,231,231,231,148, 82, 44, 52,216, 11,165,216, 33,170,107, 99, 89,246,150,204,119,125, 98,206, +217, 12, 94, 41, 26, 71, 57, 70, 19,206,164,241, 42, 48, 42,193,194, 80, 4,187,217,157,237,102,214,167,167,252,228,107,183,185, +126, 99,226,253,247, 47, 40, 2,251,101,161,173,110,159,146,102,175,219,193, 97, 64,167,175,133,178,206,180, 94,185,208,198,178, + 44,212,165, 49,207, 51,231,187, 29, 23,251, 74,111, 43, 23,187, 75, 86, 79,100,247,181,146, 98, 98,183,158,241,225,123,247,217, + 30, 31,115,235,230,117, 68,132,179,203,115,180, 4,246, 33,178,212, 61, 18,221, 5, 17, 35,227,198,118,108,119,239,221,227,246, +221,123,236, 47, 87,142,175,141, 12,106, 83, 23, 81, 16,217,240,193,163, 83,174, 61,115,155, 95,254,229, 95,166,230,235,140, 39, +247, 56,127,240,144, 15,222,249,128, 47,254,193,239,243,181, 63,249, 35, 90, 41,196,108, 21,205,105, 72,172,205,110,221, 71,227, + 6,213,153,218, 2,239, 63,216,241, 15,254,251,255,137, 31,124,243,107,252,103,255,249,127,200, 59,247,103,190,250,245,175,242, +226,203,175, 48, 12, 27,171, 5,165,136,134,106,114, 13, 43,139, 91,210,124, 87,140, 86, 23, 44,180, 91,181,208, 43,196, 56,209, + 84, 41,218,220, 68,104, 77,149,210, 86,107, 98, 52,187,213, 74,176,207,112,169,213, 61, 8,216,216,190, 22, 63,148, 55,171,196, +138, 9, 88, 68,172,237,163,221,140,133, 30, 5, 54,208,145,167,170,115,180,236,201,188,187,180,203, 74,116,177,103,176, 96,157, +248,103, 80, 57,228, 99,240,157,172,209,223, 66, 52, 65,204, 82, 10,143,159, 92,114,190, 15,124,249,143,254,132,235,229,130,219, + 39, 3, 15,206,207,120,243,157,199,212,181,147,131,143,201, 69,109, 28,110,114, 79,167,198, 41,197,191, 91,212, 67,177, 77,149, + 68,240,253,172,179,233,253,150, 73, 15,222,105,110, 87,233,250,165,216,244, 65,162,121, 11,174,252, 28,222,120,178,189,190,151, +201,163, 5,223,172,168, 20,175,246,212,118,179, 7,135,179, 91,163, 64, 18,173, 25,228, 69,253,182,221, 14, 54, 74,223, 21,119, + 15,170, 30,164, 41,158,214, 51, 98, 29, 7, 43,156, 29,212, 53,216, 61,218, 8, 94, 78,183,139,198,205, 8,120,126, 42,134, 43, +225,104,240, 85, 95,243,139,159, 93,143,108,237,123, 56,134,117,111, 92, 93, 97,206,131,175, 17,187, 29, 18, 99,178, 41,109, 14, +225,144,169,247,218,118,248,104,122, 44,150, 95,104,197,198,237,162,118,225,233,222,194,138, 73,174,192,100, 66, 68, 91,160, 57, +204, 44,224, 83,162, 3,247, 61, 90,229, 77,131,175,170, 29,151, 30,154,229,209, 16,117, 56,155, 79,131,174,170,224,126, 70,194, + 14, 42, 33,122, 38, 64,140,246,168,158, 87, 75, 40, 73, 91,115, 82,173,133, 45, 90, 72,118, 27, 11,145, 52, 89,228,191, 87,131, +135,116,239,244,169, 90, 34,185,246, 70,237,149,165,122,192, 64, 43,146,109, 28,222, 83, 38,202, 64,198,246, 70,162,141,177, 29, + 0, 50,246,197, 44, 18,160,154,121,167, 25,219,195,100, 10,218, 89,107,183,174,100,182, 61, 67,148,136,102, 11, 58, 36, 95,128, + 28, 12, 74, 34,202, 64, 36,142,214,137,110, 14,132, 17,177, 36,177,193, 75,250, 1, 76, 76,244,125, 6,221, 32,130, 41, 85, 3, +175, 52,219,247,205, 33,121,213, 67, 40,190, 67,145, 52,144, 36,209, 83, 96, 84,103, 0,231,196, 32,141,218, 18,173, 86, 66, 18, +122, 93,141, 34, 55,100,123,104,183,238, 42, 81,161,174,133, 50, 95, 50, 19, 13,200,210,154, 87,184, 64,242, 72, 11, 17,161, 58, +230, 54, 16, 36,177,221, 70,214,214,141,179, 79,163,214, 25, 84, 40, 85, 72, 26, 89,103,165,230,193,214, 25,205, 79,200, 34,196, + 93,164,209, 25,220, 20, 23,115, 96,196,199, 84,146, 8,201, 70, 68, 80, 17, 77, 38,142,108, 70,175, 34, 8, 65, 19, 33, 43,172, + 92,125,248,123,235,244, 82,232, 10,235,170,150,187,136,118,176, 40,232, 85, 71,120,200, 3,155,113, 36, 68,200, 89,104,205,216, +253,117,153, 45, 85,170,129,162,133,117, 54,231,115,161, 99,240,175,236,157,213,149, 60, 38,238, 28,221, 50, 48,140,195,122,138, +118,122, 81, 55, 6, 86,214, 90,172, 7,239,163,179,218,236,139,172,180,149, 97, 24,156,192,228,208, 8,173,156,159,158, 51,215, +149, 90, 42, 18, 19,170,202,110, 93,152,198,129,160,233, 42, 44, 10, 78,213,114,237,240,218, 42,219,237,150,222,149,214, 10,247, + 31, 46,252,246,191,124,157,147, 23,110,176,174,249,234,134,101,233,229, 25, 29, 34,210, 2,210, 58,227, 48, 49,175, 6, 19,218, +140, 16, 71, 97, 95,149,113,177, 94,239,254, 96,173,138,193, 48,203,123,159,224,236, 50, 49, 86, 82,140,196, 38, 60,122,248,136, + 30, 34,215,175,221, 32, 13, 91,154,154,180, 39, 75,160,148, 83, 11,106, 46,157,216,149,179,253,125,114,156,200,219,137, 79,124, +226, 51,204, 5,174, 95,223, 26, 12, 99, 92,217,132, 35,100,200,124,231, 47, 94,231,127,254,135,255, 11,165,238,249,143,254,227, +191,207,221,187,207,240,230,183,191,195,229,126,199,131, 15,223,225,219,127,246, 21,230,101,111,185,149, 82, 24,134, 13, 26, 51, +109, 93,184,118,124, 68,105,202, 91, 31, 62,226,131,211, 63,229,247,190,244, 7,104,223,241,139, 95,248, 85,230, 53,243,181,175, +255, 11,110,223, 56,225,218,201, 93,160, 90, 27,100,113,175,117, 86,122, 18,106, 89,161,194,241, 56,178,246,149, 90,171,125,177, +138,171, 36,123,115, 14, 67,179, 16, 80, 27, 93,163,169,164,230, 25,138,222, 13, 69,141, 29,238, 91,251,232, 38, 26, 67,160,174, + 54, 50,149,209,177, 94, 53,163, 67,160,246,110, 46,241, 81,104,205,254, 21,116, 53,250, 92,133,152, 97,123,237,152,199, 79, 30, + 48, 56,134,154,222, 81,137, 38,231,104,234, 20,176,206, 50, 23, 86, 86,130, 4,246,101, 33,199,192, 52,108,137, 81,216, 76, 27, +222,250,240,156,231,191,247, 45,254,139,127,239, 95,227,238,115,183,249,222,251, 79,248, 63,126,235,159,243,230,143,222,230,227, + 47,222,229,115, 63,253, 42,127,241,131,167,156,158,239, 44, 68, 27,130,103, 2,212, 14, 64, 34, 72, 93, 80, 73,246,220, 21,203, +148,212,110,151,162,230, 94,140,160, 9,201,246,157, 99,123,121,168,117,143,134,238, 50,146,240, 81,104, 52, 24, 14, 89,253,159, +111, 29, 52, 99,138,160,209,250,252, 62, 32,214, 67,227,168, 27,213,206, 2,167,209, 62,111, 24,197, 83, 27, 22, 68,246, 48,155, +207,211,174, 70,233, 7,240,138, 65, 27, 77,217,170,192,210,171,181, 10,162,129,201, 90, 53,180,140,197,218, 32, 84,123,160, 18, +108,157, 27,101,240, 74, 53, 31,193,115,196,179, 44,174,169,197,181,201,168,113,223, 9,129, 33,186, 95, 36, 88, 91,162,249, 65, +176,118, 72,217, 97, 68,213,242,213,150,181,112,138,160,103, 45, 44,204,157, 76,122,150, 45,144,108,153, 4,161, 59,163,160,225, +211,131,222,175, 96, 59, 68,191,128,169, 87, 37, 91,191, 26,186,247,230,213,239,106,244, 79, 21,203, 46,133,116,144, 8,153,214, + 86,187, 18, 15, 98, 33, 17,243, 96,248, 1, 54, 7, 88,123,181,112,187,218,228, 56,197,132,209,147,218, 65, 74,226,106, 69,199, +248,181,110,238, 96,122,100, 72,135,206,121, 39,231,129,214, 87,214,101,182,125,135, 22,123, 33,131,217,133,116, 87,153, 67, 36, +166, 68,210,232, 53, 46,161,210, 40, 33,146,163,221,132,242, 8, 73,236,151,217, 91,101, 89,133, 46,157,105, 85,138,218, 91, 66, +186,193, 96,106,183,219, 90,116, 9,135, 25,173,108,223, 22,213,236, 86, 49,155, 79, 86, 60, 97, 89, 90,101, 72, 70,149,171, 77, +127,140,110,151,136, 57, 59, 84,167, 19,200,244,104,187, 1, 75, 38,154, 66, 16, 17, 36, 84,122,233,236,214, 83,106, 83, 46,162, + 89,109,210, 48,145,228,163, 42,149,250, 78, 36, 68, 71, 30,180, 78, 26,162,117,226,117, 96, 24, 26, 89,142,169, 10,173,154, 56, +164,251,234, 67,219,130, 58, 74,177,234,161, 98,214,136, 41, 49, 14, 35, 34, 86,173, 11, 30, 52, 17, 63,249,133,222, 25, 6,104, +165, 80, 68, 77, 10, 80, 10,161,175,104,107,204, 1, 87,242,217, 77,103, 28, 45, 96,151,242,200, 40, 1,146,239,155, 66,190,178, +205, 73, 80,164,118,250,106,137, 98,165, 17,186,216,116, 33,224,189, 82,123, 61, 91, 43, 70, 69,242, 67, 89,163, 17,206, 22,219, +107,141,137, 33,103,198,236,191,151,105,195,148,173, 86,148,202,192,118, 18, 72,202, 90, 23,202,188, 90,215,117,109,172, 68, 54, + 57,162,209,118,246,169, 87,104,137, 34,193,130, 60,189,160, 7, 27, 82,181, 67, 83, 41, 22,142, 91,107,165,247, 13, 90, 45, 15, + 33, 13,134,110,164,166,165, 54, 74,169,118,152,114,233, 77, 95, 87,114, 74,140,163,221,208, 47,119,123,154, 86,203, 56,168, 82, + 74,115,164,166, 29,134,134, 28, 57,218,108,217,110,183,124,229,107,143, 25, 54, 71,196, 20, 73, 34, 12,211,132, 12, 70,248, 10, + 4,246,125,165,119, 27,243, 73,175,180, 54,216,195,131,206,130, 9,101,232,149,165, 20,215,123, 54,138,216,222, 50,132, 66,237, + 6, 96,138, 77,185,120,188,243,123,136,176, 61,222, 80,231, 29, 37, 88,202,248, 56,111,169,107,167,247,202,233,147,135,180, 90, +184,125, 50,112,188,217,112,237,218, 45,222,248,214, 55, 88, 47,159,114,116,239, 99, 76,155, 72, 28, 71,246,203,158,156, 42, 47, +222, 25,121,252,193, 3,158,190,243, 22,247,238, 62, 67,173,157,215, 95,255, 62, 95,249,227, 47, 49,175, 59, 35, 32,250, 45,168, +248,123,245,230,241, 13,238,220,122,134,135, 15, 62,160,246,194,122, 57,179,206, 11,175,190,116,143,235,119, 95,226,183,254,159, +223, 97,190, 56,229,167,126,254, 47, 19,105, 84,111,151, 24,133, 59, 2, 3,185,175,104,136,180, 1,230,213,136,146,141,192, 24, + 19,181,153,220, 36, 73, 99, 76, 80,212, 2,147,115, 89, 73,105, 32,116,152,203, 74,140, 91,171, 28, 29, 26, 60, 7,113, 70, 56, +172,248,140, 78, 22, 98,167,214,104, 32,144, 8,172, 21, 9,149,148, 35,133,110, 30,243,110,245, 71, 66, 71,226, 64,107,202,245, + 27, 55, 25,134,247,204,216,150,140,113, 97,129,165, 72, 69, 41,101, 79, 40,182, 20, 60,218,100,142,166, 27, 12,219, 27, 92,156, + 63,102,183, 59, 37,229,137,152, 50,121, 16, 30,158,159,242,202,167, 62,201,245,123, 47,242,143,191,248, 15,121,235,237,119, 89, +230, 83,206,206, 50, 39,249,211,220,190,117,147,211,211, 11, 36, 14,254,192,245,208,154, 20, 3,185, 4, 51,246, 73,104,190,127, + 55,167,184, 95,208, 12,190,115,136,235, 7, 76, 16, 83,237,161, 39,110,183, 68,108,141,103,172, 15,171, 84,169,138,165,196,219, + 33, 7,229, 96,160, 96,120,230, 36,118, 61,140,174,138,181,155,178,162,165,218, 35, 91,205,113,161,216,231,154, 24,205, 25, 17, +236,150,220,181, 95, 41,118, 91, 56,236,152,253,144, 4, 12,142,137,181,138,176,208,197, 89, 36, 81, 8, 61, 16,180,122,190,200, + 87,129,161, 57,142,220, 98,165,173,169, 93, 80,154, 79, 59,162, 99,131,125, 58, 96, 63,170,210,162,137,203, 56, 4,255, 14,114, + 49, 76,174,210, 48, 6, 62, 26,253,126,172,168,216, 74,195,134, 14, 9,161,160,193,114, 47, 1, 99, 96,200, 16, 29,234,117,213, + 87,179,215,199, 1,107,138,161,102,163,231,165,172,217,234,127, 30,157,226, 97,205, 68, 50,145,173, 31,228,122,112,134,127,117, + 97,138,131,133,104, 80,117, 37, 4,171,120, 95, 37,238,125,196,161, 40,169, 20,165,137,221,142, 7,181, 90, 64,199, 30,168, 21, +144, 48,216,141, 78, 43,165, 21,114, 16,154,116,119,200, 70, 98, 28,237,193, 28, 5,137,142, 1,109,118, 58, 94,218,194,186,174, +172,107,114, 78,109,240,209,151,176,186, 91, 59, 73,118,101,157,125,145,135, 81,200, 1,242,198, 32, 18,170,150,102, 20,109,110, +136,243,234, 29, 74, 12,209,130,119,216,201,217,244,142,246,112, 12,217, 2, 55,162,234,230,156, 72,204, 32, 41, 24,212,192,251, +225,150, 82,172, 68,237,104,140,182,147,160,179, 16,220,127,110, 95,164, 67,234,136,102,151,221,219, 38, 75, 84,105,107, 49,168, +127,204,214,225, 84, 35, 78, 73,176,180,168,214, 98, 48, 21,233,104, 21, 66,182, 84,104,151,200, 24, 45,252,167,201,126, 97, 1, +251,121,107, 55, 70,113, 95, 26, 75,171,212,102, 59, 55,241, 81,243,188, 46,128,250, 13,179,113,186, 24, 37, 46, 37,177, 48, 18, +145, 32, 13,212, 66,134,118, 2, 94, 81, 85,246, 43,236,163,144, 66,178,118, 65,182,157,116,206,137, 32,209,242, 1,162,100, 17, +198, 41,217, 13, 18,171, 97,137, 40, 77, 3,235,186, 90,239,218,123,190,130, 18,166,104, 19,148, 98,111,114, 51,131, 21, 11,244, +133, 67,215, 18, 82, 22, 98, 10, 12,155,209, 14,137, 93,153,226, 68,220, 38,162, 6,142,183, 48, 47,213,129, 13,118,234, 93,246, + 1, 77, 48, 58, 49, 16, 54,244,181, 83, 5,116, 99, 39,242,169, 55,178, 88, 13,178, 21,123,157, 36, 89,157,169, 84, 59, 52,238, +231,217, 68, 59, 93,168,173, 80, 90,161, 84,245, 96, 95,134,104,129,196, 82, 43,227,176,181,208, 96, 90, 56,222,110, 56, 26, 34, +215,143,111,113,253,250, 9,121,216, 16,162,189,231,247,203,158,181,217,216, 53, 21,104, 37,208, 82, 38, 71,187, 65, 4,233, 76, +211,200,148,237,247,160, 29, 7,143, 8,161, 41,125, 76,180, 93,101, 35,134, 46,174, 29, 22, 10,171,192, 20,132,161,102,118,235, +142,203,121,207,181,163, 13,147, 88,197,242,244,201, 57, 15, 30, 63,228,198,201, 49,131, 14,148, 82, 24, 68,121,239,205,119,184, +115,247, 5,142,111,220,227, 11,191,248, 11,188,247,222,155, 60,124,250,136, 65, 7,214,245,156,163,126,211,171, 65,145,107,215, + 78,248, 79,255,254,127,201,230,248,136, 55,223,125,200,143,254,226,117, 62,252,224,109, 62,241,226,200, 27, 63, 56,246,224,226, +192, 7, 31, 62,102, 55, 47,108,162,175,202, 34,156, 93,156, 82,235,250,255, 51,245,102, 77,150, 93,231,153,222,179,166, 61,156, +147,115,214, 60, 0, 69, 76, 44, 12, 28, 10,224, 0, 18, 32, 4, 18, 18, 73, 81,162,220, 33, 65,164,228,110,187,237,112,203, 86, +132, 35,252, 27,116,103, 95,116, 71,216,173,107,119, 72,106,169, 29,150, 40,117, 91, 82,107,104,113, 4, 8,176, 69, 2, 36, 5, + 98, 44, 20,128, 26, 80,168, 41, 51, 43,167,115,206,222,123, 77,190,248,214,201,226, 5,131, 17, 12,146, 85,200, 60,103,239,181, +190,239,125,159,167, 16, 28,101, 18,240,233, 79,126,130,159,188,245, 6,155, 55,175,112,246,225,143,162, 92, 67, 8, 81,110, 68, + 97, 38, 99,101, 99,200,105, 74,239,229, 32, 62,148,228,176, 83, 74, 14, 56, 33,161, 26, 11,193, 8,253,208,213, 84, 42, 51,120, +217, 33,203,139, 35, 99,147, 34,134, 94,146,237, 41,202,237, 48, 43, 76, 40,224, 18, 6, 57,184,149, 70,168,166, 92,191, 85, 32, +101,143,197, 10,107,163, 15,104, 91,201,222, 30, 69, 54, 86, 52,159, 49,224, 70, 21,163,197, 37,246,182,110,161,172,145,177,111, + 89,127, 69, 50, 49,120,106,231,104, 27,121,121, 7, 31, 96,232, 24, 47,174,147,194,148,189,157,125,252,208,161,173,227,237,203, +187,252,225,127,248, 91, 78,158, 61,195,115, 47,252,132,173,141, 45,156,213,220,184,221,241,206,165, 27, 44, 44, 31,193, 85,154, +140, 36,245,115,136,146,239,209,101, 52, 30, 51,232, 65,166, 90,101, 76, 61, 31, 61,171, 82,210,182, 90,158, 29, 57,121, 33,207, + 41,209,187,166,210,199,182, 74,198,194, 68,161, 40,102, 43,232,235, 52,103,111,204,215, 89,101,186,104,115,150, 10, 85,249,204, + 73,102, 78,152, 27, 58,151, 23, 16,136, 77,179, 28, 38, 84, 20,247,134,190,211,196, 21,188,152,146,172, 79, 32,224, 52, 2,238, + 73, 89, 4, 45, 90,160, 93, 30, 73,243,163, 10, 69,143,112,224, 26,145,127, 98, 85, 80,172,134,228, 59,225, 37, 96,100,231,108, +101, 71,173, 82,198, 72,160, 72,160, 95,197,122,173, 35,229,121,194,129,233, 19,149,101,173,226,229,217, 54, 15,248,102,162,236, +226, 85,121,167,193,193, 65, 5, 35,214,210, 74, 9,226, 53,251, 44,237,233,121,130, 94, 33, 13, 32, 74,144, 45, 75,150, 74, 27, + 93,100,230,154, 33,203,103, 95,147,202,164, 5, 17, 60, 41, 85,188, 8, 89,106,124, 41,149, 49,123,201,179,105, 35,211,129, 36, +125,250,164,132,152,170, 16,105, 15,200,148,218,206, 98,194,101,139,211,138, 62, 9,141, 74,176,179,178,171,210,185, 39,151,142, +175,195, 16,203,130,211,216,140, 78, 6,135,193,186,146,148, 87,169,220,228,196, 42,230,178,140, 12, 66, 2,223, 69,124, 14, 4, + 15,222,203, 73,198,104,139,169, 42,193,233,105,133, 31, 76,129,206, 40,140,115,212,165,254, 34,198, 52, 73, 91,107, 19,161,178, + 16, 75,253, 65, 73,184,194, 88,129,183, 4,239,138,132, 70, 78,165, 85,170, 9, 40, 66,204,212, 70,146,170,209, 10, 49, 40,135, + 80,240,122,153,161, 72, 34,170, 74, 70,217,118,214, 19, 74,128, 33, 6,232, 84,249, 16,231, 2,156,176, 53, 86, 41,140, 74, 36, + 37,192,253, 20, 66, 1,254, 43, 44, 21,198,229,131,132, 42, 66, 54, 44,192,150,204, 48,247,247, 90, 71,107,231,235, 38, 85,250, +241,194, 18,183, 77,164, 14,189,236,165,124, 46, 83, 9,133,181, 37, 57,169, 20, 41, 11,111, 62, 38, 17,214,232, 92,128, 54,186, +162, 42, 99,203,160, 29,163,197, 17,163,113,131, 10,210,193, 54, 57,225, 99, 70, 69,177,187,129,103,214, 79, 8, 81,234, 32, 3, + 48,157,150,209,146,173, 48, 42,209, 54, 21,170, 46, 52, 62,196, 42,150,131,112, 2,138, 88, 15, 42, 73,210,166, 20, 5, 57, 75, + 2, 29,165, 71, 58,239, 14,251, 76, 55,244, 76,165,133, 75,229, 28, 90,105,156,211, 84,149,194,213, 13,174, 18, 83,148, 73,153, +214,198, 3,146,159, 83,153,104, 44, 97, 8,164, 65, 51,228,249, 77, 56, 17,145, 92, 64, 93, 37,114, 0,109,101,135, 24, 82, 66, +103,195,200,247,164, 36,189,236,156,115, 89,211,248,162, 23,150,135,101, 99,150,241, 37,112, 20,162,103,177, 26, 83, 85, 53, 85, +109,137, 9,118,103, 51, 84,223, 51,114, 22, 74,242, 55, 67, 1,251, 40,178, 49,216, 28, 72,161, 0,111,140,198, 79, 39, 56,101, +168,235, 10,173, 13,227,166,161, 50, 14, 87, 67,212,137,145, 19, 98, 79, 21,149,144,205, 36,217,135, 82, 10,107, 28,187,187, 59, + 68, 50,163,209,136,182, 54,108, 93,251,128, 43,239, 95,102,117,109, 65, 36, 42,126,134,211, 21,201, 26, 78,157, 62,131,182,150, +221,205, 27,188,117,233, 38, 59,183,174, 19,125, 67,178,137, 81,213,178,191, 51, 99,103,127,155,172,106,250, 97, 96,230, 59,210, +254, 14, 55,175,109,241,234,207,126,198,219, 23, 94,227,127,253,159,127,139, 71, 30,220,226,149,243,151, 88, 95, 61,204,210,226, + 42, 23, 46,190, 75,136,208,180, 11, 4,239,241,179, 41, 40,169, 49, 37, 63,240,149, 95,250,101,246,252,136,119,222,190,192,153, + 51,247,112,228,240, 73,186, 56,224, 92, 3,253, 64,101,148,132, 79,135,136,170, 13, 89, 71,166,222,147, 83,166,209, 21, 26, 67, + 80, 50,126, 87, 67,148,135,173,133,174,235, 75,234,218,144,140, 40,121, 83,180, 16, 34, 73, 15,100, 79,209, 12,203,141, 48,147, +176, 9,250, 24, 24,140,224, 97,133,193,175,136, 67,143,169, 32,103, 67, 63, 4,156, 86, 5,124,149, 74,133, 78,110,119,177,132, +188,234,164, 89, 93, 93,101,127,123, 75,110,176, 37,123, 18,178,140,174,157,214, 56,235, 14,166,154,125, 14,204,118,183,105,204, + 62,218, 74, 94,100,152, 69, 24,228,182,249,237, 23, 94,101,250,220,203,236,109,109, 21, 14,129,140,111,187,157, 61,150,215,214, +137, 94,126, 70, 90,207, 15,128, 94, 38,136,229,165,166,178,240,225,125,136,104,171, 17, 46, 27,101,143,156,136, 73, 21,120,149, +228,149,162,146,195, 14, 37,147,148,146,176,213,117, 5,217,107, 8,145,160, 37,104, 76, 40, 4, 54,100,228,166,140, 97, 40,180, + 74, 19, 5, 13, 45, 50, 36, 89,119,198, 40,249,135,156, 15, 18,182,114,153,211,186,220,126,239,132,189, 84,206,104, 11, 33,148, +138,155, 22,229, 51, 74,161, 92,217, 25,151,218, 94, 42,183, 82,202,247, 74, 21, 94,123, 34, 30,224, 81, 29,243,177,183,100, 3, + 82,121, 15,228, 36,217, 38,101, 53,248, 50,129, 45, 47,119,156,157,151,101, 74,157,215,146, 99,209, 99, 23, 33,203,252,165,175, +203,242, 64, 57, 45,220,127,149,136,165,190, 22, 83, 18,164,110,169,241,233,194,163,157,135, 46,165, 62, 23, 15, 98,221,202, 88, +212, 28, 24,166, 11,163, 68,131, 15, 94, 2,222, 89,214, 31, 89,139, 55,133, 40, 1, 56,157, 36, 48,158,146, 63,104, 28, 8,157, + 85,198,249,115, 96, 18,165,180,168,231, 40, 90,192,206,102,145, 92,205, 37,238,243, 84,160,149,211, 83,214,228,212,147, 18, 68, + 93,164, 42,194, 82,148, 38,234, 17, 71, 0, 0, 32, 0, 73, 68, 65, 84,222,105, 10, 56,109,105,138,153, 39, 41,153,247, 99,164, +144,175, 82,148,148,105, 20,155,140, 43,227,161, 92, 66, 30, 41, 75,161, 63,196,140, 15,133,116,104,196,108, 19, 58,208,206, 82, + 85, 50, 30, 18, 68,162,252,239,135,174,103,230, 75, 21,201, 24, 17, 2, 16,233, 82, 36,107, 67, 85, 21,248, 68, 82,210,103,204, + 26,173, 51,170,106,104,172, 17,235, 87,234,241,101,204,174, 11, 64, 69,231,136, 33,177, 52, 90,164, 90,144, 19,217,144, 61,201, + 7, 98,148, 83, 91, 84,153, 28,228,165, 26, 98, 34, 24, 71,229,156, 88,210, 84,102,200,170,104, 53, 69,106, 18,173,124,241, 98, +206,100,163,168,157,195, 25, 77,157, 61, 54,107, 6,239,165, 90, 84, 96, 43, 42, 41,170,186,150, 21, 67,242, 76,186, 76, 82, 14, +167, 34,117,213, 98, 17,242, 88,176,134, 48,235,165,215,157,198, 64, 36,204, 2, 73,103, 66, 10,248,217,192, 20,121,177,145,193, +247,145,201,254, 62,104, 25,169,143, 70, 82,171,170,106,203,130, 86, 56, 99, 56,172, 5, 77, 88, 89, 67, 55, 27, 8, 36,186,105, +199,108, 38,249,137,236, 51,193,207,196, 52,164, 65, 5,105, 28,204,199,217,198, 89, 32, 8,218, 19, 39,187,167,152,208, 86,163, +162,194,212,146,110,143,115, 57, 80,202,114,176, 83, 82, 77,201,222, 51,244,242,247,173,113,146, 38,245, 10,219,212, 18,156,244, + 14,227, 12,217, 70,124, 81, 61,154, 40,112,144,218, 72,183,123,150, 18,218,100,108,173,209, 57,211,135,132, 77, 50, 61,176, 77, + 77, 74,134,169,151,196,106,165, 45, 49, 88,114,233, 62,135,228,113,174, 46, 85,171,128, 70, 38, 22, 51,223,211,167, 64,239, 3, +170,239,112,198,209, 25,241, 92,155,162,236,236,180,150,181, 70,237, 48, 73, 82,214, 1, 33, 89,169, 32,245,160,212, 75,224,116, +179,235, 48, 86,254,124, 93,105, 42,107, 4,142,169, 43,178, 9, 50,180,139,146,148, 77,202,211, 79,247,228, 64, 90, 85,232,186, +226,202,251,151,185,118,253, 58,199, 79, 63, 70,211, 44,176,123,123,143,202,120, 76,237, 48,227, 5, 90,179,128,182,134,183, 94, +251, 25, 41, 6, 22, 23, 22,120,224,161, 15,179,184,188, 66, 99, 50,123,211, 61,246,124,194,172,142,152,236,237,113,249,157, 15, +120,229,149, 31,243,214, 27, 63, 99,152, 13, 92,120,239,125, 62,242,216, 71,121,241,229, 55, 8,195, 22,207, 60,245, 17,158,250, +212,135,249,119,127,250, 45,218,186,102, 58,204, 27, 50, 3, 74,101,238,185,251, 52, 33, 91, 94,124,225,187, 28, 59,116,152,187, +239,121, 64,124, 9,198,146,213, 64,204, 30, 93, 41, 42, 47, 55,149, 62, 72,112,201,101,217,139,245, 97, 86,106,156,141,172, 30, +178,151,106,149,105, 8,106,134,141,229, 69, 26,122, 1, 43, 5, 1,217,248, 33,201,243,170,236, 87, 35,153,108, 68,191, 44,173, + 16,241,106,231, 36, 64, 30,173,101, 69,150,138,169, 81,114, 24, 65,160, 34, 74,198,174, 41, 10, 93,204, 40, 69,242,145,118,180, +128,107,218, 50,129,147,113,114,140, 17,171, 13,174,178,165,238, 84,158, 31, 74,234,110,125, 24, 32, 12, 98,214,117, 2, 34,234, +102,251,236, 13,189,160,102, 11,125, 76,151,253,252,214,100,198,194,100, 31,172,166,113, 53, 67, 47,129, 88,103, 44,129, 3, 52, + 8, 57,107, 84,249,179, 84,128,172,101, 90,165,138, 60, 43, 35,181, 51,225,141,103, 84,214,178,187, 46,116, 76, 95,198,248,185, +224,154,201, 25,147,140,172, 18,181,102, 72, 65,212,202, 90,145,163, 48,241,149, 22,151,132, 46,194,174,148, 50,131, 14, 7,149, +172,148,138,172, 42, 73,200,111, 30,212,149, 91,107,121,105,106,197, 48, 8,179, 93,101, 69,240,146,153, 80, 5,137,106,140, 92, +235, 83,200, 5,227, 45,183,107, 14, 68, 48, 97, 94,186, 66,155,249, 36, 83,203,193,165,136,200, 72,114,187,206, 7,196, 78,196, + 88,151,131, 48, 75, 10,206, 54, 43,141,214,197, 41,167,231,212, 66, 69,246,197, 43, 80,116,217,206,200,164,200,163,165,169,161, +178,144, 77,209, 37,240,108,202, 42,180,176, 90, 40,218,238,210, 46, 80, 73,194,108,150, 68,151, 18,149,147,164,127,204,241, 14, +162,156, 44,136,215,232, 81,161,116,225,115, 89, 71, 43, 57, 88,104, 85, 8,168,101,117, 45, 12,123,141,213, 6,147, 35, 62,114, +135, 92,167,228,240, 99,125,223,163,114, 44, 32,156, 40, 55, 48, 93,201,126,220, 8,194, 81, 41, 57,137, 68, 82, 49,239, 20,170, +154,118,120,147,233, 20, 34, 49,201, 10, 93, 60,193,209,104,185, 13,163, 36,140,161,148,236,237,109,141,113, 70, 94,250, 5,184, +175, 24, 24, 6,185, 57, 65, 38,100, 33,225,232, 74,118,193, 10, 35,100,161, 40,117, 20,227, 52,181,129, 48,100,188, 15,162, 61, + 12,130,200, 11, 4, 72,150,136,224, 15, 13, 1,149, 29, 89, 69,166,179,142, 61,235,168, 91,141, 65,164, 47, 46,103, 73, 60,107, + 57,249,170,172,152, 13, 1,111,107,156,203, 40, 42,218, 70,118,169, 81,201, 38,196, 26,176,214,144,166, 61,183,247,118, 64, 25, +156,210, 12,169,194, 25, 75,101, 53,169,239,152, 70,193, 33,206,166, 72,119, 57, 6,250,126,134,199, 48,100, 9,145,229, 24, 8, +123, 19, 66, 86, 24,107, 48, 70,246,124,139,109, 77,213, 84, 56,171, 14,254,126, 58, 57,178,201,164,228,208,206, 98, 22,199,228, +152,177,206,226, 44, 7,118, 36,171, 52, 67, 55,197,251,129, 62, 36,246, 59, 79, 55,243,101,244,169,240, 67,199,246,230, 30, 49, +120,105, 7,164,132,182,182, 96, 88,101,239,229,140, 19,189,171, 53,168, 88,224, 63,165,179,174,180,212, 64,106, 37,201,246, 46, +200, 7, 62, 13,101,167,103,133,251,188,183, 43, 4, 44,107, 29, 10,131, 30, 12,149, 21, 44,112,214, 10,227,180, 4, 36, 83, 66, + 59, 67, 78, 96,173,184,176,251,217,128,214,208,251,140, 11,226,187,175,219, 90,254,251,131,132,121,116,101,168,202,216,139, 82, +151,169,131, 28,212,230,225,185,218, 54, 50, 34, 76,153,156, 60, 58, 5,198,166,150, 17,156, 81, 40,151, 24,188,156,132,137,208, +117, 3,179,105,143,247, 34,195,152,139,105, 80, 37,148,153, 18, 51,100, 31,107,116,241, 32,151, 22,134,177, 61,182,115, 12, 86, + 86, 33,202, 73, 26,185,210, 22,141, 56,166,157, 53, 36, 21,169, 76, 81,201, 70,216,153,193,108, 95, 86, 3, 67, 24,232,166, 83, +134,224, 25,215, 13,139,109,205,246,116, 66,109, 23,216,219,159,176,188,190,206,120,188,200, 93,199, 45, 97,128,237,110, 87, 60, + 4,170, 34,231, 26,147, 18,219,211, 45, 6, 15, 33,121,114, 14,140,155,154,241,234, 58,110,121,141, 35,199, 79,112,216, 39,174, +223,188,142, 73, 29,111, 95,127,133, 31,189,252, 67,222,122,227, 39,132, 24, 56,121,236, 52, 57,181,140, 71,135,168, 43, 67,223, +237,241,242,171, 23,120,248,236,125, 44, 47, 54, 44,182,153,163,203, 75,224, 3,221, 16,232,178, 97,117,101,157,127,252,193,143, +168,109,230,222,143,125,148, 33,104, 82,246,100, 15,202,120,129,117,100, 77,202, 3,170, 77,152,153, 28,242,117,209, 84,106,171, +136,157,199,106, 75,118,146, 8, 78,125,128, 90,223, 49, 66, 26,228, 57, 82, 58,193,115,127, 4,133, 35,145,148,112, 45, 84,202, +101, 90, 85, 52,151,193,139, 73, 78,219, 66, 16,211,228, 28,228,176, 20, 13, 38, 43,178, 81,133, 17,144, 15, 62, 71, 90, 27,169, +105,229,204,120,188,200,222,206,150, 28, 60, 99,144, 16,171,149, 21,202, 92,187,153,116, 66,103, 93, 46,125,138, 20, 6, 98,138, + 56, 39,207,210, 46,244,248,190, 63, 72,112, 11, 44, 75,118,183, 27,187, 19,150,119, 59,106,140,152, 4,179,244,171,125, 12, 40, + 39,163,213, 92, 52,161,181, 50,248,249, 68, 66, 33,150,200,130, 97,197,231,131, 86, 76, 72, 17,165,101, 26, 71, 1,201,200, 20, +209, 73, 86, 39,201,152, 56, 70,153, 50,200, 74, 38, 74,214,200, 64, 82, 81,194,113, 65,110,209,185,200,199,115,154,251,222,231, +144, 42,185,165,235,164,203,116, 42,150,186, 45, 63,167, 49, 53,100, 60, 54,149, 26,174,214,197,161, 62, 55,230, 69, 97,102, 88, + 57, 52,196,178, 51, 55,133, 18, 25, 75,248, 87, 75, 20, 92, 86, 4, 41,161,181,147,188,143, 49, 66,247, 83,194,135, 32, 75,104, +151, 60, 39,229,204,155, 9, 90,170,213, 57,201,237,183,212,240, 76,116,133,133, 96, 14,110,217, 49, 69, 97, 24, 32, 18, 22, 98, + 62,104, 79,145, 51, 22, 33,109,162, 51, 41,150,122, 97, 73,215, 43, 10,213, 83,101,161,108,234, 50, 37, 17, 50, 70,185,152,201, + 74, 36,104,185, 93, 23,235,107, 89, 49, 73,190,193, 18,101, 69,233, 52, 41,202,133, 43,246, 30,147,100, 82,148,202,219, 51,229, + 80,234,152,178,144, 80,167,238,249,112, 54, 90, 78, 80,226,184, 77, 7,200,185, 92,250,122, 74,105, 41,214,151, 19, 32,197,206, + 38,136,198, 59, 21, 15,173, 12,218, 89,225,198,103,197,250,250, 58, 31,125,244,163, 60,244,192, 89,142, 28, 62, 84, 66, 87, 20, + 67, 80,102, 50,157,114,233,226, 21, 94,127,253,103,188,245,206,121,116,148, 93,204, 16, 11,242, 83,137,140, 67,200,197,130,157, +149,138,148, 35,167,142, 97, 54, 72, 53, 66, 25, 98, 12,101, 20,147,231, 87,126,140, 21, 25,137,213,242, 80, 79, 7,169,120, 97, +175,203,254, 89, 17,181,193,150, 9,130,176,194, 7,148,169,168,140,128,100, 76, 86, 24,155, 24,114,194,152, 26, 83, 25,170,218, +146,125,192, 26, 73,161,103,157, 8, 24,156,177,180,149, 33,244, 61, 3, 18, 0,145, 52,106, 58, 56,121,186,148,233,147,244,224, +173, 49,164,126,160,239,123, 33,178,145, 25,124,162, 15, 9, 99, 52,181,171,203,111, 58, 10,248, 6,133,171, 29, 99,215,148,118, +128,162, 29, 9, 91, 61, 19,169,170, 22,165, 51, 67, 63,224,208,104, 35, 34,139,105, 63, 16,122,143, 31, 60,218, 58,122, 63,197, +119,145,206, 7,102,179, 25,147,253,125,209, 42,102, 43,137, 80,171,203,110, 76,203,184, 41, 38,140,213,165,198, 17,240, 65, 81, + 85,182, 36, 90, 51,181,181, 56,163,101,231,229, 12,181,214, 36, 95,220,194,218, 20,130, 82, 65, 8,147, 11,204, 72, 10, 7,206, +218,114, 29, 17,153, 66,109,229,159,119, 8,178,206,177,133, 34,152,172, 34,118, 2,148, 73, 70,246,122, 37, 54, 88,152,236, 50, +209,169, 52,130, 20,206,114, 83, 10, 49, 8, 86,179,232,114, 99, 49,180,149,245, 23,120, 45,147,162, 66,236,154, 77,103,116, 19, +143,143,153,193,123, 98,105, 84,196, 32,137,226,172,101,119,167,149, 34, 27,169,103,234, 36,233,219,108, 68,197,106,140,162,209, + 26,109, 13,206, 84, 18, 14,210,138,202, 57,154,186, 33,196,158,217,172,103,103,127,198,100, 50,195,144,168,202, 21,195, 20,192, +201,225,229,241, 1,125, 42,250,196, 80, 84,188, 90, 41,108,211,112,232,240, 9,148,111,233, 98,192, 15,189, 96, 38, 81, 12, 97, +202,224, 21, 62,244,204,166,123,132,105,143, 87, 50, 73,168,154, 49, 77, 61, 34,171, 76,173, 45,157,223,230,234,213,107,104,173, +233,246,119,120,248,227,143,177,176,176, 66,220,189, 69, 55,219, 98, 50,237, 24, 66, 64,145,104,156, 84, 94,109, 85,113, 98,109, +140,211,138,189,125,185,197, 93,186,181,201,209, 67,135,136,213,152, 65,141,104,236,136, 16, 61,202, 89, 65, 27,167, 40,160, 12, +227,201,185, 38, 40, 80,193,203,109, 62, 75, 24,201, 84, 18,190,212, 5,243,156,229,217, 79,236, 61, 73,151,151,110, 8, 68, 45, + 1, 40, 91, 18,218, 33, 4,162, 10, 56,167,165,171,156, 33,101, 77,204, 65,218, 28,242, 67, 20, 29,174,149, 81,242,188,194,104, +100,172,136, 85,154, 16,134, 82,195, 50, 37,116, 20,176, 90,113,123,111,194,181,247,223, 41,191, 23,249,110,160,140, 40,171, 53, + 88,227, 14,118,186, 26, 25,161,135,144, 80, 57, 50, 90,104,153,204,122,182, 54,183, 74,160, 86, 62,191,149,115,160, 52, 85, 61, +194,217,192,177, 99, 71,169,236, 10, 62, 37, 66, 30, 14, 30,252,115,215, 10,115,169, 73,169, 94,205, 79, 19,166, 36,193, 67,148, +239, 66,138, 82,221, 21,135, 3, 69, 48, 34,104,100,165, 50,217,184, 34, 54,146,207,115,244,169,104,115,101,255,174,178,176,199, + 67, 44,224, 35,209, 51, 21, 52,172, 76,104, 85, 78,229,239, 36,135, 94,241,182, 43,230,229,240,172,228,103,175, 74,221,139, 40, +149, 65,135,172, 61, 83, 97,158,228,226, 56, 80, 37, 50, 96,230,117,179, 44, 50,169, 68, 98,174,146,154,175, 39,141,150, 44, 79, + 98,110,191, 44,225,179,108, 11,190, 90, 66,127, 42, 7, 57, 12,228,140, 53,142,156,230,141, 34,133, 41,211, 12, 95,198,251,146, +155, 18,219,165,209, 5,108,149,181,100,110,178,164,241,253, 32, 8, 96, 37,243,121,169, 5,102, 11, 58,150,138,224, 29,168,135, +153, 35, 75,165, 1, 92,158,234,101, 13, 81, 66,241, 62,201, 74, 40, 5,233,207,199, 82,169,212, 90,214,120, 42,103, 42,147, 10, + 92,205,130, 21,183,135, 31, 4,227,155,202,164, 67,154,136, 34, 88, 55,218, 18, 82, 70,157,188,235,129,172,202, 62, 92, 30,184, + 82, 87, 72,209, 31,148,238,181,154, 83,126,228,131, 75, 9, 56, 25, 93, 48,121, 90, 42,113, 41, 68, 76, 45,251,224,143,127,236, +227,124,249, 75,191,200,161, 67,135,121,253,141,243, 92,186,124,137,141, 91, 55,217,221,157, 82, 85, 21,135,143, 30,226,204,233, +211, 60,244,208,131,180, 77,205,143,126,252, 18,207, 63,255, 34,123,187,251,114, 19,214,170,240,201, 35, 67, 63,224,189, 40, 19, + 5,207,104, 48, 6,252,180, 35,168,140,210, 66, 82,211,161, 36, 58,181,220,168,141, 81, 40,211,128,145, 52,178,206, 65,170, 26, +165,223,167, 11,112,102, 8,101,210, 16,197,126, 35, 82,178, 40,112, 26,101, 80, 73, 30, 6,186, 16,130, 20, 86,198, 67, 38, 83, + 25, 49,184,161, 83, 57,169, 90,218,166,130, 20,232,252, 64, 42,190, 93, 97,245, 88, 49, 63, 41, 65,205,186, 81, 77, 21,133,127, +172,221,220, 42, 23,153, 13, 1,147, 29,117, 45,159,134, 33, 39, 20, 3, 49, 43,186,169, 39, 27,249, 38,132, 32,187,118,171, 10, + 39,222, 21, 76, 97,202, 4, 20, 78,215, 7,245, 14,107, 53,214, 36,134,137,208,182, 34,153, 62, 38, 92,150,147,113,232,123,118, + 39, 61,211,153,168, 47,109,211,144,162,167,155,204, 8, 49,201, 3, 50,202, 67, 88, 35,253, 78, 31,188,104, 40,173,208,143,180, +134, 33, 8,155,223, 22, 32,142, 66,128, 34, 86, 43, 76, 18, 10,151,177,229,103,140, 84,213, 84, 86,132,129, 98, 23,211, 84,149, +147,244,106,169,170,152,242, 1, 54,186,149, 73, 66, 78, 12,190,199, 24, 35, 99,167, 36, 95,240, 65, 71,156, 21, 97,133,182,138, +186,106,193,102, 44,208, 58, 71, 46,220,130,206,223, 1, 27, 73, 71,182,220,144, 74, 30, 34,165,128,137, 48, 16,136, 62, 18,134, +129,105,231,241, 83, 47,161, 25,114,169,166, 72,130, 53,204,111, 4,148,250, 98,121, 40, 10,111, 62,203,193, 74,101,153,230,100, + 69, 55,155,146,135,158,170,178,184,202,208,214,142,165,165, 17, 75,227,154,145, 19,170,223,168,182,124,232,244, 73, 94,121,239, + 22,227,202, 72, 16,174, 18,233,199,254, 48, 33, 37,203, 82, 51,130,148,209,166, 97,175,243, 92,219,218,197, 71, 47, 43,173,126, +198,180,155, 48, 12,129, 97, 24,132, 37,173, 10,133, 12,161,242,229,172,104,234,138, 67, 71,214, 89, 94, 24, 99,117,162,169,107, +198,173,102, 58,141,212, 77, 77,223,117,244, 67, 79,229, 12, 93, 31, 88, 28,213, 50, 61,114,150,165,229, 6, 19, 51,157, 79,132, + 33,176,223, 71, 90,171, 88,104, 90,250,106,137,168, 23,240, 64, 55,120,178, 87, 24,203,129,144, 72, 35, 21, 69,163,156,224,126, +149, 70,231, 72,152, 91, 4, 17,132,105, 74, 74,116,155,128, 79,153,232,131, 4, 60,139,211,115,136, 2,109,202, 58, 80,169,242, + 50,143, 81,254,140, 18,238,138,177,112,200,131,172,228, 84,249, 46,162,147,216,248, 10, 56, 4, 21,201,126, 78,160, 19,232, 74, +109, 97,115,107,143, 43,239,191, 71, 91, 85,160,165, 50, 84, 54,199,133,185, 96,133, 52, 39, 87, 58,124, 20,180,118,219,140,232, +188,231,246,246, 22,209,135,131, 3,176, 49, 90,160, 72, 10,140,169, 73, 49,112,248,240, 42, 75,171, 71, 81,200,120, 63,165,132, +113,146, 7, 24,202,196, 64, 37,129, 70,101, 93,216,234,166,132,247, 68, 66, 46,122,224, 84,224, 96, 6,114, 18,165,172,182, 98, +168,204,243,155,181, 96,245,200,161, 28,121,138,241, 50,147, 80,214, 22,217, 87, 16, 5,119, 44, 90,219, 52,223,111,103, 14, 98, +220,229,223, 66,246,196, 36,107, 78,149, 98,161,172,201, 63,131, 51,134,140,200,119,180, 41,191,183,249,174,188,220,228,173, 17, +113,146,211, 2,255, 81,102,126,187, 46, 41,115, 69, 49,202, 21,186, 94, 81,129,103, 85,100,237, 86, 36, 45, 34,248, 74,194,225, + 64,250,237,218,164,242, 62, 83, 5,196, 35,221,246, 84,246,230,243,231, 50, 81,126,102, 33,153, 66,102, 51,165, 94, 29, 73, 74, + 17,186, 68,206, 3, 90, 9, 94,155, 57, 37, 87,240,129,114, 72, 41,173, 2, 61,151,120,205,139,109, 86,201, 51, 53, 9,139, 32, +102,201, 62, 97, 51,209, 75, 93,206, 40,153, 80,162, 82, 33,212, 41, 26, 43, 23, 88, 77, 81,107,207,233,135, 8, 32,141, 98, 54, + 85,165,245,164, 83,194, 39,241,203, 75, 9,223,232,162, 18, 45,225, 8,165, 15, 82,137, 20, 82,153,153,135,161,226,124,230, 89, + 70, 67, 81, 18,177,214,201, 56,235,241,207,126,154, 95,249,213, 95, 97,115,115,147, 63,255,139,191, 32,122, 56,121,234, 56,107, +203,203, 92,185,122,141, 55,222,124,147,119,223, 57,207,139, 25, 14, 29, 94,229,115,159,253, 12, 79,124,230, 73,214, 86,143,240, +141,191,248,255,216,223,217,198, 88,176,166,132, 73,172,197,202, 16, 94,106, 62, 67, 95,146,220,131,124,136,245, 64,202,154,202, + 84, 24,103, 49,202,224,180,212,241, 72, 51, 82, 7, 89, 89,172,158,187,219, 11, 72,167,132,153, 20,138,232,229, 38,236,140,189, +131,116,213, 8,160, 6, 73,139,146, 10, 34, 81,107,218,170,198,167,129, 62,123,108,146, 73,135, 16,220, 50, 81,121, 65, 31, 26, +112,214,200, 8, 76, 91,154, 74,161,130,103,210, 5, 9,207,117,157,236,164, 34, 5,156, 34,230, 49, 87, 59, 82,147,233,186,112, +128,237,117,198,202,237,160,146, 17,188, 49, 14,211,119, 66,112,211,224,149,199, 69, 67, 8,224,115,162,178,114,219, 51, 70,110, +213, 74,183,120, 99,160, 50, 44, 54,224,103, 51,226, 60,249,237,160,173,199, 44, 46,180,248,126,160, 31, 98, 57, 52, 88,186,198, +225,131,199,135, 72,223,121,200,138, 33, 12, 36,148,116,193,231, 35,176, 44,107, 26,135,104, 31,149,146,154, 93, 78, 50, 66,236, +162,220,250,181,202, 40, 91, 38, 28,133,216,104,172,193,186,132,117,181,124,201,172,194, 79, 7,145,202,168,140, 79, 2,126, 80, + 54, 98, 93, 57,169,199,132, 45,211, 1,231, 28, 57,103, 90, 93,161,237, 29,239,192,108, 38,193, 28,149, 34, 83,229, 49, 90, 30, +144, 49,105, 90, 43,216,218,172,101,236, 88,238, 26,232,108, 32,104,162, 17,129, 71,165, 28,102, 92, 51,238, 21,106, 61, 19,189, +103,240,129, 62,118,194,188,239, 99, 9, 17,229,242,178,146, 53,133, 81, 98, 76,182, 72,120, 72,231, 72,240,112,247,241,150,183, + 47,111,163,107,203,225,245, 21,106, 39, 7,190,195,171, 43,220,115,247, 49, 78,174, 45,176,208,182,184,102,129,151,127,250, 6, + 23, 46, 94, 99,177,109, 24,141, 26,249,140, 40,208,118,129,233,206, 14,181, 50, 44,141, 26, 86, 23, 42, 78, 31, 25, 97,252, 77, +222,184,240, 62, 33,128,118,230,192, 43,237,172, 41,196, 69, 65, 2,163, 85,193,106,106,142,172,173,202,195, 44,244,140,151, 87, +176,214,224,127, 78, 59,186, 48,110,164, 14, 56, 4,201,101,168,192,125,247,172,176,113,123,194,168, 90, 98, 92, 85,188,252,179, + 75, 44, 46,215,228,168,240, 68,246,125,132,176, 67, 59, 18,162,159,169, 44, 62,105,166,161,147, 73, 96, 50,101, 18, 54, 20,185, + 83, 42, 72,102,249, 94,154,172, 65,107, 98,232, 25, 84, 38,249,132,201, 18, 10,205, 81, 17, 98,135, 83,134,202, 90,124,236, 37, +223,145, 21,125,169,177,165, 20,202, 78, 85, 40,109, 66, 12,205,104,157, 49,182, 46,253,230,132, 73,154,172,163,220, 80,131,212, + 57,197,205,208,151, 73,142, 33, 68,197,164,155,145,130, 39,219,106,222, 90, 58,168, 47,153,194,153, 8,201,227,172,147,236, 77, +142, 44,180, 99,250,108,217,218,221, 32, 12,125,161,127,113,160, 34, 37, 69, 76,237,228,230,167,146, 76, 49, 75,218, 92,106,182, + 78,216,226, 70, 97,147,198, 15, 67, 65, 34, 91, 44,137,161, 68,173,229,210,144,101, 76, 31, 44,170,188, 96,148, 86,248,156,177, + 42,151,233, 65, 46, 16, 40, 89, 79,164, 88,186,252, 6,162, 47, 92,123, 20,106,144,169,162,209, 5,196,163,132, 28,153,148, 28, + 88,137,165,163, 93,214,167,145, 84, 14, 12,146,178,215, 7, 13,115,193, 78, 11,184, 38,150,116,182,172, 9, 84,177,165,165, 98, + 53,155,203,175, 40, 92,145, 88, 82,243,166,164,238, 77,193,243, 38,188,188,111, 8,133, 23, 96, 73, 41, 98, 98, 40, 42,218, 18, + 88,211,229,246,122,231,105, 47,142,241,178, 66,240, 73, 86, 97,104,205,224, 51,141,146,208, 94, 78,136, 88, 43,139, 75, 89,229, +178,167,142,233, 96, 53, 93,208,163,197,162, 46, 41,122, 29, 53,186,214,210, 90, 72,114,179, 79, 74,203,106, 41,102, 84,144,198, +148, 50,148,204,129,164,220,109, 9,241,166, 36,147,224, 92,246, 22, 57, 27,105,131, 28,216, 83,133,149,146,180,252,204,138, 48, +179, 76, 11,203, 36, 36, 75, 58, 63, 43, 48, 11, 75, 43,191,151, 83, 20,180, 94,150,147,155,184, 97, 57,248,129,100,197,193,252, + 94, 86, 22, 69, 87, 88, 94,252, 90,205,201, 63,154, 71, 31,125,148, 95,255,245,127,198,219,239,188,205,159,254,233, 55,248,240, +125,247,243,204, 51, 79,115,239,125,247,114,250,228, 41, 30,126,232, 44,143,158,251, 24,227,209,152,235,215,111,178,189,181,197, +123, 23,222,225,230,198, 6,159,124,244, 28,199,143,202,205,190,235, 3,174, 88,180, 66,233,203,235,100, 14, 24,189,243,148,106, + 22, 58,137,132, 26, 98,225,181,199,132,159,159, 68,179,220,188, 82, 12,114,179, 45, 95,156, 3,173,105,206,196, 16,136,126, 14, +168, 81,104, 99, 49,117, 35, 53,175, 44, 15,166,202, 57,234, 74,106, 14,198, 25,177, 27, 37,168,173, 43, 61, 73,192, 24,176, 22, +173,107, 9, 59, 25,139,209,149,252, 45,149,198,154, 26,172, 17,126,190, 22,127,185,116,252, 35, 42,101,169,255, 37, 69, 93, 91, +134, 97, 38,148,161,212, 17, 82, 47, 29,251, 16, 36,148, 99, 12,149, 22,147, 87, 93, 89, 28, 2,126,112, 73,166, 15,209,168,146, + 47,240,164,144,152,120, 79, 55, 36,134,190, 39, 36, 67, 72, 26,159,197,193,155,148,197,105, 67,221,180,152,106,204,210,202, 33, + 70,227, 49,245,184, 97,101,237, 16,227,145,101,105,117,204,241, 67,171, 28, 95, 93,228,196,145,117,214,215,151, 89,108, 43, 86, + 86, 71,172, 46,181,162, 48,212, 10,109, 29, 75,109,131,179, 26,103, 28,174,109,104, 70, 53,181,171,229,239,105, 13, 57,120,148, +150,186, 95,240, 18, 70, 11,243,105,129,143,178,247,202, 10, 83,183,152,166, 18,205,235, 98,203,184,169,104, 90,199,210, 72,108, +115,109,101,209, 41, 22, 24, 70, 38,198,129, 48, 4,122, 95,234, 52,115,191, 60,185,124, 49, 51, 93,239,165, 46,151, 50, 41, 27, +134, 40, 55,128,232, 33, 69, 69,215, 69, 6, 47, 55,173,148, 33, 68,232,123, 17, 72,100,101,208, 86,164, 67, 85, 93, 81,143, 90, +198,227, 49,139,227,154,133, 81,197, 66, 85, 51, 26, 53, 88,107, 74, 74, 90, 29,176,173, 18, 20, 18, 94,230,238, 83, 71,216,184, +189, 67, 70,177,178,188,128,173, 29, 22, 69,219,200,255, 95,213, 52, 12,192,222,254,192,203,175, 95,224,198,230,109, 98,206,116, + 67,199,108, 50,101,119,119, 66, 63, 4, 78,173,183, 44,181, 21,171,203, 35, 48,137, 58,121,158,253,103, 79,114,108,161,229,253, + 43, 87,153,206,194,193,193, 84,169, 59, 42,227,249,120,127,238, 50,104,154, 10,133, 98,119, 50,197,135, 64,101, 32, 13, 1, 83, + 60, 12,174,110, 25,213, 22,165, 52,171,227, 26, 93, 89,110, 79, 19,179,153, 98, 99,107,143,143,127,228, 44, 23, 46,127,192,198, +230,109,148, 85, 12,222,176,187, 59,195,152,204,153, 19,107,220,184,117,155,181,133, 17,173, 22, 56, 80, 95, 50, 48,170,146, 49, +119,138, 66,134, 83, 81, 73, 31, 59, 38,140,118,132, 48,208,199, 65,210,230, 49, 65, 33,154, 89, 7,163, 74,163,157,194, 85, 6, +173, 34,161,247,178,166, 11,129, 16,101,151, 29,131, 4,230,196, 57,165, 15,164, 27, 25,249,140,205, 57, 15,177, 76,239,180, 50, +228, 44,105,221,164,196,252,101,140, 1,101,184,181,181,193,116,111, 87,198,183, 70,166, 47,174,244,144, 83, 33,208,201, 86, 82, +122,225,198,138,153,112,107,247, 54,195,116,239,128,136,152,231,205, 25, 35, 55,210,156,139,191, 92, 69,150,150,214,202,127,166, + 14,188, 11, 82,111, 66,110,145, 63,183,167, 37, 75,117, 88,194,133, 37, 37, 62,175, 86, 41, 65, 0,231, 12, 26,135,113,133,155, +159,230, 91,136,242,226, 40,161, 63,144, 81,111,201,211, 30, 88, 11, 77, 33, 79,230, 82,227, 19,152,203, 29,191,135, 66,224, 59, +114, 65,138, 16,231,100,208,132, 47,189, 49,101,138,247,157, 32,170, 80,165,202,129,104,206,132,147,201,162, 0,172,132, 37, 47, + 53, 26, 93,222, 60,130, 2, 86, 7,125,177,124,112,153, 60,192,168,166,132,202,194, 95,151,247,182, 57, 32,142,170,172, 80,201, +148,149,133, 47,124,244, 2,147, 65,163,147, 16, 51,147,146, 12, 67, 60, 16,190, 68, 34, 2,235, 81,101,250,150, 74, 82, 47,151, +213, 46,133,106,169,138,219, 62,151,199,191, 81,166,116,131, 36, 4, 72,177,158,166, 40, 47,123,165, 75,184,182, 48, 1,114,201, + 13,164, 92,248,238, 73,160, 96, 81, 2, 97, 2,109, 2, 1,210,168, 68, 30,130, 60, 87,116, 1,240,100,176, 37,116, 23,230,217, +129,241,226,194,239,145,162,160, 2, 83,193,251,165, 64,140,254, 64,112, 64, 20, 74, 81, 76, 30,162, 23,106, 91,144,219,166,214, +153,224, 61, 49,101,142, 30, 61,204,111,125,253, 89,182,182,182,248,163, 63,248, 15,220,218,216, 98,214,247,244,222,163,178,162, + 27, 6,246,167, 83, 20,176,182,190,134, 70,177,185,117,155,166,105,217,217,217, 99, 58,157,242,232,185,115,164,228,121,239,226, +213, 98, 82,155,255, 50,106,217,191, 25, 25,105, 12, 65,164,245,198, 57, 22,199, 11,140, 70, 13,149, 86,248,190, 47,185, 0, 67, +211, 44,210, 54,181,156, 58,189,103, 54,244,248,168, 14,126, 33,115,174,119, 44, 39, 48,231,172,220, 90,162,236,239,134,206, 51, +164, 92,194, 21,162,147, 37,139,100, 64, 27, 69,211,180,140, 23, 91,249,128,197,140, 54,242, 33,148,106, 66,100,232,197, 18, 22, + 11, 9, 67, 69,129,246,184,186, 18,162,153,151, 81,119, 54,154,186, 54, 84, 70,132, 48,182, 50,152,100, 73,198, 50, 94, 94, 16, +118,115, 24,202,190,106, 94, 95,137,136, 69, 69, 30, 42,210,217,151, 79,150, 66,146,153,206, 56,108,214,130, 56,240,129, 20,122, +250,193,227,103, 61, 42,123, 73,204,247, 3,179,161,151, 19,100,136, 76,186, 14,159, 6,124,223,227,125,160,243, 61, 33, 43,250, + 62, 51,132, 68, 80,146, 45, 8, 70,225,218, 5, 22, 23,199,180,117, 75,211,150, 17,115, 93, 97,180,193, 71,208,141,147, 1,188, + 54, 24, 91,161,181,165,109, 90, 92, 59,166,109, 90,150, 22, 23,169,235,154,202,136, 47,188,178, 78, 30,220, 42, 75,245, 76,152, +150,178,251,139,242,229,239,135, 72, 54, 14,235, 90,154,166, 97,180, 48,194,141, 44,117,221,210,214,142,218, 8, 82,210,100,138, + 81, 78,152,220,253, 32, 94, 1,109, 52, 49, 23,134, 8, 98,188,154,247,101, 93, 86,130, 40, 46,246, 39, 65,142, 6, 98,144,207, + 73,142, 17, 31, 12, 67,242,196,160, 36,173,158, 69,181,106,170,154,166, 25, 83, 53,142,229, 81,203,104, 84,211,182, 35,154,170, +146,234,147,209,184,214,240,246,133,247,217,222,217,165,174, 29, 75,227, 17,163,186, 98, 8,137,219,187, 51,182,119,247,120,251, +221, 75,124,112,229, 58,141,137,188,121,233, 58, 41, 6,234, 74, 58,200,146,154, 72,184,198,112,246,236,221,172,212, 45, 89,105, +172,242,124,234,147, 31,230,233,223,254,117, 62,114,255,105, 78,173, 85, 92,189,116,149,173,221, 41,214,136, 34, 55,151,102, 75, + 76, 25, 93, 57, 82,130,181,213, 37, 14,175, 47,179,189,179, 79, 12,129,126, 54,165,110, 44,109,221,176,188, 56, 66, 27, 77, 61, +178,172, 47, 45,178,184,188, 70,213,214, 76,102, 19,124,159,113,214,178,189,189,203, 75,175, 93,161,247, 3,147,201,148, 48, 4, +102, 67,207,108, 54, 97,117,113,153,207, 60,254, 24,221,208,113,107,107,143,147, 39, 86, 56,125,236, 8,154,196,126,223, 73, 40, + 40, 36,116,146,234, 98, 46, 53, 72,180, 34, 32, 15,184,156, 34, 38, 40,113, 49,100, 79, 38,210,182,142,202,214,133, 53, 94,196, + 59, 65, 38, 9,170, 4,109, 7,239,201, 49,224,163, 84,145, 66, 8, 7, 82, 17, 93, 0, 40, 42, 11,220, 67,105, 77, 72,153,253, +174, 99,107,103,151,219, 91,219,108,111,111,179,177,113,139,221,157, 93,246,103,251,236,237,238, 16,135,161,220, 26, 13, 42,137, + 75,251, 14, 33, 12, 12, 66, 86,140, 57,209,245,129,221,221, 45,102,221,190, 4, 75, 85,233,215,151,216,149, 4,228, 18,141, 51, +172,142, 45, 39, 15,173,176,184,180, 34, 47,217, 44,211,200, 48, 79,170, 23, 41,137, 82,114, 24,144,247, 88,148,219,157, 46, 30, +239, 80, 66, 97,141, 8,163, 68,123, 42,223,199, 92, 60,234,170, 8, 99,180,201,197, 79, 46,231, 3,159,228, 22,153,181,220, 34, +229,138,172, 10,133,217,200,229,205, 26,161,195,202, 89,167, 28, 6, 82,177, 54,102, 14,232, 39, 37,204,167,203,116, 68, 91,203, +124,209,172,180, 60,187,230,194, 47, 89,217,106,156,214, 68,163,127,142, 34,103,138,153, 44,138,132,171, 76,186,230, 23, 72,201, +204,229,178, 11,207,168, 18,182,148, 49,178,158, 15,247, 75, 16, 79,254,188, 57, 2, 87,149,176, 47, 74, 96, 74,178,225,187,195, +245,215,165, 6,157,147, 60,239, 83, 10,165, 46, 89,242, 50,115,179,103,188,163, 17,151, 63, 77, 38,214,194, 63,146, 73, 1,166, +232,204,179, 70,151,245,111, 40, 60,123, 85,216, 41, 81,221,233,175, 23,205,144, 76, 44,202, 75,159, 34, 36,138,130,102, 16, 15, +125, 81,184,170, 34,194, 49, 89, 11,155,160,100, 12, 82, 46,226,217,131,209, 68,241,164,167,178,195,202, 37,172, 38,249,140, 40, +189, 10,109,112, 7, 2,120, 57,165, 73, 5, 39,240,248, 99,143,178,180, 48,230,143,255,253, 31,177,113,235, 26, 89, 41, 46,156, +127,131,119,206,159,199, 57,199,250,145,195,220,125,230, 46,214, 87, 86, 9, 49,178,182,186,198,147, 79, 62,193,251, 87, 63,224, +236,217, 7, 88, 93, 89, 97, 99,107,139, 19,167, 78, 51, 94,248, 41, 27, 27,155, 40, 39,164, 31,225,244,106, 81, 62, 70, 88, 92, + 90,230,248,177, 19, 28, 59,126,148, 35,135,143, 48,110, 91,134,190,227,242,229,139,236,239,239,115,242,212, 41,214, 86,143, 96, +172, 98,119,119,151,119,223,125,151,243,111,190,201,224, 59, 66,180,104,163, 9, 62,224, 42,203,195,247,223,207,241, 19,199, 88, + 90, 94, 33,248,192,173, 91, 27,188,251,238, 5,110,108,108,162,181,102, 80,114, 83,214, 70,209,182, 45,167, 78,156,226,232,137, + 99, 28, 63,114,148,241,194,136,156, 18, 91,155,183,120,235,252,121, 54,182,110, 51,110,101, 68,230, 76,192,186,138,224, 35,203, +107,235, 60,112,223, 3, 28, 62,114, 24, 83, 89,246,118,119,121,255,202, 21,222,126,247, 2,209, 75,247, 17, 45,225, 52,149, 18, +103,206,156,225,248,201,147, 44, 46, 45,225,135,129, 91,215,175,243,238,197,119,216,157, 78,169,181,165,178, 48,219,159, 48, 11, + 50,106,143, 25,116,109,177,100,234,218,138,229, 39,107,102, 38,178, 96, 22,208, 33, 49,116,158,140,166,113,142, 88,198,206,174, +181,204,162, 39, 87, 14, 61, 36,200, 61, 41, 57, 81,108, 38, 79, 91,181, 12, 65, 30,168,169,114,168,228,133,243,222, 67,238, 60, + 67,142, 24, 87,209,154,113,201, 31,100, 58, 99,176, 78, 48,146, 62, 14, 96, 44,179,201, 62,221,224, 49, 86, 75,106, 85, 65,213, +212, 84,202,208,123, 57, 84, 10,215, 67,242, 17,217, 39,170,202, 80, 57, 33,191, 25,157,139, 56, 71, 2, 77, 93,138,194, 99,239, +164, 86, 73,225,134,215,218,129, 21, 0, 82,107, 28,182, 29,177,210,214, 76,251, 41, 57,212,116, 65,110,139, 41, 8,230, 55, 6, + 67, 82,114, 66, 55,149,124,158,147, 81,168,104,201,126,192, 26, 75, 8,137,126,232,229, 6,110,122,156,202,101, 84, 40,201,110, +165,172, 16, 13, 77,164, 81,150, 74,107,140,106,233,139,180,200,234, 76,223,121,246,187,142,174,235, 25,143, 28,187,147, 25, 49, + 37,182,118,167,108,110,237,176,216, 58,198,213, 18, 57,100,158,252,236,189, 92,187,182,135, 77,138,251,143,175, 99, 43, 77,240, +153,157,253, 9,125,212,196,110,224,141,215, 46,114,246,244,113,140,129,193,123,118,102, 10,170, 49,237, 3,103,249,226, 93,199, +120,236,211, 31,227,247,254,143,127,199,119, 94,122, 15,165,157, 60, 4,147,140, 98, 27, 91,163, 42, 67, 68,179,179,215,227,195, + 64,219,212,164,160,184,181,181, 75, 61,106,105,157,163,110, 27,236,168, 38,165,140,159, 37,154, 81,195,241,181, 53,110,238, 77, + 73, 81,177,188,182,140,219,155,145,179,103, 63, 4,250, 44, 29,244, 97, 54, 99,121,105,204,108,111,224,147, 31, 57,199,123, 31, +108,240,194, 75, 63,229,137,115, 15,241,185,143, 63, 64,110, 70,252,213,223,255,128,237,217, 4, 91, 91,114, 23, 74,138,152,242, + 66,145,158,186, 82, 26,159, 35,217, 70, 98,148,149, 1, 81,209,231,128,193, 21,234, 90,198, 57,131, 13,133, 24,233, 37,116, 23, + 99, 73, 97, 71,121, 56, 83, 91, 84, 80,116, 33, 96,156, 28, 22,187, 73, 98,123,123,147,161,159,210, 77,246, 73,193,203,132, 86, +151,181,162,171,137, 3, 84,128,109, 27,185,224,200,208, 85, 12,131, 86,220, 15, 26,205, 16, 51, 62, 13, 36, 63, 16,252, 64,140, +161, 0,154, 10,185,185, 48, 38,156,209,212, 86,242, 5, 11,141,226,158, 19,135,248,240,189,119, 97, 70, 11, 76,102,137,208,239, + 11, 9,114,150,120,247,230, 46,187, 94, 2,179,206,148,135,250, 16, 36,243,225,132, 84,153, 99,193,178, 24, 75,152, 37,172,147, +181, 95, 10, 94,228, 86, 90, 92,228,130,220,149,221,172, 48, 29, 74, 98, 62, 67,204, 6, 21,179,120, 22, 48,196, 44,223,197, 20, +229,123, 17, 82, 44, 10, 81,153, 44,196,162, 71, 85,185,164,115,162, 48,198, 19,194, 47, 55, 86, 88, 36,186,184, 45,116,158,239, +191, 13, 73, 27,140,137, 88,171,201, 67,241, 33,207,211,245,169, 36,185,117, 65, 53,151,234,154,200, 50, 10,184,169,240, 57,152, +215,230,146, 8, 83,180, 54,119,214, 34, 82, 71, 32, 41, 89,101,164, 20,208,229,162,161, 84, 16,126, 70,206,114,168, 51, 6, 10, +181,109, 46,235, 9, 73,114,234, 86,187, 82,151,158,235,226, 11,156,135,121,223,188,188,124,203, 1, 71,103,153,202,233,156,133, +124,106,141,144, 82, 67, 18,163,167, 17,160, 89, 20,128,188,172,184,203,159,155,181,194,198, 34,211,153,239,235, 65,200,115, 70, + 17, 10,131,206, 22,192,153, 74,134,164, 32, 34,235,205,236,229,221, 13, 26,171,149,147, 17,101,150,211, 74,204,210,157,211,115, +147, 21,243, 29,220,252, 60,113, 39, 39,129,130,144, 85,225,248, 38, 62,249,169, 79,240,250,235,175,113,229,242,123, 88,155,133, +214,133, 66,233,200, 93,119,223,205, 39, 62,241, 41, 62,116,230, 12,171,171,171,194,173,173, 68,250,254, 7,127,252, 39,188,244, +163, 31,242,181,103,159,101,125,125,157,195,235,235,252,250,127,243, 21,190,253,237,239,114,254,173,243,229, 38, 45,128,142,156, + 37,117,253,139,191,246, 21, 62,254,145,143,210,180,117, 65,160,202, 9,240,220,163,143, 18,163, 48,179,153,167,245, 51,156,123, +244, 49,158,123,254,121,190,243,205,191,103, 8,241,128,158,116,215,233, 51,252,119,255,227,191,164,114,245, 1, 21, 9, 50, 23, +223,125,151,191,254,235,255,204,123,239, 93, 38,149, 47,186,179,134,207, 60,254,105, 62,253,201, 79,177,190,190, 62,255, 77, 31, +140,149,238,185,239,126,254,238,155,223,230,246,141,107,120, 35,196,182,201,116,224,200,225,195,124,233,151,191,194, 93,167, 79, +203, 7, 71,203,127,255, 99,231,206,241,220,247,191,195, 75,255,245,167,120, 35, 63, 99,167,107, 62,242,216, 57, 30,255,228,103, + 25,213,141,236, 99,149,140,233,223,123,239, 2,223,121,254,121,246,119,118,137, 64,213, 2,211, 40,200, 74, 66,233,236, 91, 25, + 43,169,114,218,207,137, 33, 56, 22,170,138,197, 67, 99,124,242,116, 67,164, 54, 6,167, 27,186, 32,180,173,232, 7,140,177,212, +180, 96,165,114,150,113,224,101, 39,155,140, 42,192,137,138,136,161, 93, 90,198, 12,248, 0, 0, 32, 0, 73, 68, 65, 84, 26, 99, +180,116, 56,109,156,159,160, 69,201, 57, 66, 56,248,173,150,212,105,200,158,222,247,164, 73, 36,231,129,157,189, 93,246,186,129, +228, 59,250, 33, 18,181, 18, 5,229, 48,224,227, 68, 2, 49,218, 49, 13, 3,157, 1,223,251,226, 78, 55, 52,182, 38,155,242,224, +165, 35,197,136,113, 53,227,118, 76,206,145,125,100, 31,170,251,204, 52,121, 24, 60,126, 24, 17, 21, 84, 78,179, 56,110, 88, 41, +217, 16, 89, 3, 56,217,139,170, 76, 7,168,148,152, 78,134,114,234, 29, 17,148, 39, 15, 73,168, 91, 74,129,145, 93,172, 15, 3, +179,217, 64,210, 25,167,107,146,201, 84, 73, 9,119, 89, 87,180, 78, 97, 19,152,202, 98,173,204, 4,186, 91,219,244,253, 64, 93, +181,196, 52, 97,243,246, 62,221,208,147, 99,100,241,208, 58, 43,171,135,240, 33,114,117,207,243,214,197, 15,200, 41,114,236,248, + 58, 11,173,161,159,246,156, 92, 89,230,234,237, 25, 27,219,183,240,211, 29, 86,199, 71, 57,186, 54,226,232,209,163,108, 93,251, +128,189,235,183, 88, 60,118, 6, 26,203,250,163, 79,113,234,174,239,160,126,116, 1,137, 14,202,119,116,105,105,137,163, 39,238, + 99,119,186,195,198,181,139, 4, 87,201,238,114, 8, 84,181, 35,231,200,181, 43,183,104, 85,205,201,122, 5,141,197, 39, 79, 85, +203, 33,224,246, 36,114,229,250, 13,134,153,192, 91,150, 87,198, 28, 93, 21,196,233,252,137,151,148,162,109, 27, 54, 55, 54, 49, +205, 50,203,135,143,115,227,214,247,248,243,191,251,175,156, 62,121,156,175,124,241, 41,126,237,151, 31,231,175,254,246,187,220, +218,153,202,231, 43,134,210, 32, 72, 36, 99,240, 19, 65,144,102, 44, 49,250, 50,166,150,155,176, 38, 99,113,132, 44, 1,205,152, + 37,236,166,117,194, 84,142,228,141,176, 18,178, 18,139,149,113,228, 98,240, 82, 6,226, 16,112,206,177,189,189,197,173,171,151, + 24,141, 42,172,210,180,227, 70,214, 99, 2,154, 70,107,131, 51,148,125,120, 34,132,200,116, 54,147,204,193, 1, 25, 93,232,133, +222,123, 98, 26,228,198, 89,110, 85, 90, 41, 42, 43, 87, 68, 65, 90,151,219,169, 51, 44, 47,181,160, 13,135,214, 70,220,117,114, +149,151,222,217, 68, 43,203,104,180,196,218, 66,195,189,199,199, 60,153, 19, 63,125,237, 42, 63, 57,127,157, 73, 40,185,130, 36, + 28,131,148,202,136, 91, 25,156, 43,211,198, 44, 13,146, 56,239, 63,163, 14,130,134,166,248,211,251,161,216,188,144,145,175,116, +224, 11,137,110, 16,168,141,154,103,136,148, 34,135,178, 79, 86,166,208, 28, 35,169,120, 40, 84,241,143, 39, 37,236,119,103, 85, + 9,181,221, 89, 31,228, 84, 58,212,214, 9,224,134, 36, 76,123, 31,133,246,167,212, 1, 48, 43,229,132, 50,249,206,125, 91, 94, + 62, 28, 63,126,140,135, 31,121,132,111,127,243,191,200,182, 62,235, 3,209,204, 99,159,252, 4, 58,195,203, 47,255,168,116,217, +197,206, 25, 85,148,119,154, 18,184,141,232, 74,229,192, 40,213,200, 34,108,201, 82, 55,182,149, 16,222,142, 28, 61,198, 3, 31, +126,144,231,191,243,109,146, 10, 5,127, 43,217, 42,157, 75, 56,173,180, 30,148, 50, 34, 28,251, 57,188, 56, 74, 0,103,201,203, +173, 62,166, 40, 43,146,162,174,149,232,128, 33,196, 50,117, 85,153,172,197, 90, 26,148,172, 85,178,132, 68, 36,229, 83, 66,144, +105, 94,209, 46, 93,252,121,181, 78, 21,169,140, 50,114,168,209, 57, 96, 22,151, 86,126, 79, 23, 34,147, 36, 7, 11, 23,216,200, +109,118,158,246,198, 20,144,126,161, 19,105,123,199, 96,149,139,145,231,215,190,250, 85,190,253,221,239,114,233,242, 21, 25, 1, +103, 57, 85, 61,248,240, 35,252,139,127,241,207,249,240, 3,247,179,180,184,136,117, 78, 66, 86, 70, 48,133,206, 58,158,127,238, + 57, 94,123,237,117, 70,227, 49, 43,203,203,156, 56,113,130,135, 30,124,144,253,201,148,107,215,175,201,106, 64,201, 15,175,174, + 43,126,229,151,191,204,234,202, 10, 10,184,117,235, 38, 23, 47, 94,162,174, 43, 65,167,162,216,159,236,115,225,237, 11,204,166, + 51, 22, 22,198, 84,206,114,236,232, 81, 46,188,243, 54,183,111,111, 22,152, 3, 28, 63,126,148, 71, 30,126,152,247,175, 94,227, +198,141, 91,242,226,104, 91, 86, 86,215, 88, 89, 89,225,252, 91,239,136,213, 75,101, 22,198,139,124,254,233,207,115,226,196, 9, +148,130,141,205, 77,174, 92,185,140, 86,134,182,109, 88, 89, 89,101,161, 29,241,214,249,243,236,207, 38,116,251, 29, 73,193,231, +159,250, 5,206,158,125,144, 12,108,108,220,226,242,165,247, 89, 91, 91,197, 89,203,250,242, 26,111,190,245, 6,211,217,148, 70, +193, 3, 15,220,199, 23,158,254, 37,234,170,162,235, 59, 46, 94,122,143,156, 51, 77,221,176,188,182,198,242,226,152, 55, 94,127, + 85,234,163, 57,210, 69,185, 69,215,198, 34,219,145,129, 72,164,239, 3,251,131,152,221,134,222, 51,243,162, 38,213,218,208,165, +194,117,175, 26,201, 8, 36, 37, 47,246, 12,209, 88,106,237, 80,198, 72, 37, 45,165,130,219,148, 10, 74,246, 66, 16,139, 49,210, +245, 29, 97,240, 2,140,168, 20,237,162,220, 82, 43,227,168,170,154,152,161,173, 27, 84,206, 52,245, 2,163,213, 21,150, 86, 22, + 24, 47, 46, 50,110, 42, 70,139, 35,150,154,150,197,197, 69,172,209,180,163,134, 81, 91,163,181,220,244,157, 73, 96, 13,227,182, + 41, 99,117, 79, 68,210,232,164,140,201, 2, 99,232,125, 79, 55,219,101, 50,157,209,123, 9, 99,249,156, 48, 86, 73, 42,123, 58, +101,178,191,199,100,218,177,215, 5, 38,157,103,103,210, 49,243, 50,133,242, 40,204,168, 46,208, 34,193,105,214,181, 97, 97,161, + 98, 84, 59,198, 11, 21,171,139, 99,198,139, 45,117,221, 80,143, 90, 22,155,154,118,161,166,182, 21, 85,150, 32,143, 26, 50,221, +116, 70,215,117,236,118, 83,118,247,166,226, 88,159, 78, 25,186,129, 99, 43, 21,215,111,220, 98, 99,107, 91, 38, 11, 33, 98,148, +226,232,225,195, 44,175,174,210,117, 29, 91, 59, 91, 92,184,112, 25, 29, 50,235, 43, 11,197, 13,144,233,122, 1,132,108,238,108, + 16, 73,156,185,235, 4,247,222,125,148, 15,159, 57,194,147,191,253, 63,113,232,216, 2,147,173,171, 44,159, 60, 5, 56,174,252, +211,203, 92,121,227,117, 94,121,227, 50, 62, 41, 66,150, 12,201,120,229, 48,213,104,145, 20, 35,161,155,226, 12,212,141, 21,142, +120, 74, 44,140,199,140,154,138,155,155,219,100,235, 24, 57, 71,227, 26,124,206, 92,190,124,149,237,173, 91,248,190, 39,133, 65, +180,160,193,211, 44,140,168,109, 77,215,117, 82, 71, 50,134,213,213,117,246,247,167,172,158, 94,103, 54,153,112,243,250, 13, 76, + 74,220,218,220,229,251, 63,250, 9,247,127,232, 56, 79, 62,241, 25, 46, 93,120,135,105,223, 11,234, 19,105,174,132, 97, 64,107, +193,148,134, 36, 43, 44,163,193, 33,191, 83,227,100,175,109,149, 36,172,125,136, 4,239, 15, 82,236, 98,131,147,135,167, 51,146, + 25,177, 86,170,146, 74,137,100, 3,101,216,188,121, 29, 63,204,176,214, 73,216, 82, 21, 7,134, 42, 43,153,152,100, 45, 73,129, +170,100, 9, 45,185,170, 2,101,232,135,142,217,108, 70, 63,244,164,232, 15,226,224,115, 61,166,115, 22,235, 12,149,149,132,188, + 86, 70,216, 20,104,134, 32,213,221,253,174,199, 84,142,215, 46,221,228,181,215, 47,112,253,250, 22, 23,175,220,228,221,155, 59, + 28, 59,190,194,231, 30,191,159, 15, 63,112,152,237, 91,183,185,122,115, 27,109,164, 6,171,238,224,211,133,183, 62, 23,133,100, + 97, 39,160,229,230,168,203,243,124,136,114,200,207, 72, 3, 36, 69,177,173,205,235,170, 50,250, 79,119,228, 35,165,158, 37,234, + 81,125, 96, 70,148,234, 26,152, 36, 32, 46, 93,254, 60,109, 4,226, 98,178, 34,132,132,179, 86,244,203,243,219,112, 44, 21, 60, +173,177, 74, 75, 54,168,146,137,136,160,183,193,206,241,176,133,238,168,181, 2, 13, 71, 15, 31,229,193, 71, 30,225,159, 94,249, +167,185,166, 12,107, 44, 57,101,238,185,247, 94,172,181, 92,125,255,125,121,111,233, 44,226,149, 34,145,209,229,194,167,116, 62, +112, 39,168,194,170, 55, 72,149,204,148,137,121,206,138,181,245, 35, 60,244,240, 89, 94,125,245, 85,193, 93,167, 84, 88, 21, 98, +104,204, 5,214, 83,128,246,101,213,167, 81,149, 48, 64, 52,194, 64, 17, 50,190,188,120,231,184,216,164,228,179, 97,210,157,144, +176,100,247,228, 0, 24,146,100,171, 14,138,245,200,122, 72, 23,235,220,252, 23,174,180, 24, 51, 83,150,181, 75,154,107, 93, 11, +127,223, 44, 45, 47,255,158,162,252, 82, 85,249, 77,170, 2, 17,201,243,186,157, 36,226,117,169,153,229, 66,205, 73, 37, 41, 33, +213, 65,205, 83, 79,125,142,231,190,247, 2, 59,123, 59, 7,167,211,147, 39,143,241,245,223,250, 58, 71,142, 28, 97,158,214, 81, + 90,253, 92, 46, 17,142, 29, 61,202,245,235,215,121,243,173,243,188,249,198,155,128, 98,188, 48, 38,196,196,217,179,247,115,123, +107,139,155,183, 54,228, 47,173,197,232,115,238,227, 31,101,101,117,149, 16, 34,127,251,119,127,203,183,190,249, 61, 50,138,251, +238,187, 23,173, 20,239, 93,188,196,159,125,227, 27,188,242,234, 27,220,117,215, 41, 86, 87, 87,176,214,113,243,214, 45, 46, 95, +250, 64,190,160, 40,134,233,140, 55,223,124,131,231,191,255, 2, 63,122,233, 37,250,161,227,254,123,239, 21, 84,173,173,120,231, +226, 69,182,183,119, 72, 81,234, 63, 15, 60,112, 63,135, 15, 29, 34,165,204,183,191,245,109,254,238,239,255,158, 27,215,111,114, +223,125,247, 96,173,195, 40,205,107,111,156,103,227,246,109, 82,204, 44, 46,173,242,185,167,158,100, 52, 26, 17, 66,224, 47,255, +243,223,240,147,159,188,202,217,135, 31,164,174, 27, 82,202,188,245,214, 59,236,110,239,163,141,229,220,163,143,113,252,196, 41, + 50,112,254,237, 55,249,246,183,254,129,173,173,109,238,189,239, 62,156,115,172, 44,173,242,218, 79,255, 9, 99, 18, 77, 91,211, + 86, 53,117, 85,225,170,154,166,118,212, 78, 9,130,212, 41, 90, 87,209, 44, 54,180, 54, 51,170, 43, 57,221, 38,143, 77,137,170, + 54,132, 48,160,116,192,182,142, 58,149, 79,152, 41,222,116,157,208,202,210, 52, 34,205, 25,217,134,197,102, 76,219, 90,217,131, +187,150,241, 66,205,120,228,104,156, 43,167,249,154,202,180,101,119, 89,145,117, 36,230,128,177,141,132, 18,125,199, 16,133, 54, + 87, 45,142,105,171, 5, 22, 23,151, 89, 88,108, 88, 61,188,198,202,226,152,163, 43,107, 44, 47, 45, 80, 87, 53,139,163, 5, 52, + 2,193,208,202, 98,141, 67, 59,199,168,109,105, 91,233,196,219,170, 98,220, 86,184,218,225,180,145,132,125, 1, 20,197, 32, 39, + 95,107, 44,166,146, 13,157,239, 6,186,201, 62,125, 55,195,119,158,219,187,123,236,236,236,179,125,123,151,205,219,219,108,109, +239, 49,120, 79,232, 51,189, 31,200, 88,178,114,152, 74,118,163, 90,103, 22, 70, 21,163,229,154,229,209,136,229,133, 49,213, 98, +195,209, 35,139,140,234,150,165,133,138,229,197,134,218, 88, 42, 35, 35, 74, 82,164,109, 42, 30,249,208, 25,222,185,116,149, 62, +244, 7, 22,193,227, 71,215, 89, 94, 93,161,247, 19,240, 30, 87, 57, 42,167,169, 44, 60,250,208, 9, 72, 3, 59,219, 19,118, 39, + 61,179, 24,139,255, 26,198,227,195,236,109,239,241,177, 79, 62,202,201,143,252, 26,227, 67,103,136,187,151, 24, 29, 57,204, 79, +254,246,191,240,214,171, 63,227,173, 43, 59,236, 77, 3, 67,188, 19,214,153,205,122, 70,166,163,110, 50,195,208, 11, 35, 95,160, + 19,140, 22, 86,113,182, 98, 24,122,140,181, 36, 31, 57,121,242, 40,251,222,179,113,243, 6,155, 91,155, 34, 76,177, 6,107, 36, +248,216,245,129,233,100,198,241, 19,107, 52,104, 54,111,239,179,188,186,192, 16, 2,179, 89,143,109, 91,174,223,220,226,246,230, + 53, 14, 45, 57, 30,186,255, 20,107,149, 69, 15, 59,156,251,212,199,168,150,143,241,195,127,252,199,178,159,246, 34,208,136,178, +110,209, 38, 10, 41, 44,101, 76, 22, 37,235, 48, 4,114, 20, 12,175,247,129,236, 7, 98, 26,200, 57, 98,203,174, 53, 71, 49,127, +105,163,239, 0,148,180, 60, 69,117, 1, 40, 5,159,216,218,220, 32,250, 65,122,255,198, 16,163,136,129,162, 36, 39,209, 36,154, +186, 18, 70, 66, 78,162, 25,205, 25,109,106,170,166,149,172, 79,150,131, 69,144, 84, 84,185,189,202, 96,209, 25, 93,218, 43,148, + 78,186,147,137, 67,153, 34,134,156,152, 77, 2,211,221, 41,123,123, 19,182,119, 39,120,223,179, 55,153,112,227,230, 6,175,190, +246, 46,149,201, 60,249,153,143,240,139,191,240, 81,142,172,213,188,249,238, 13,102,179, 32, 14, 5,109,100,135,139,144,202, 12, + 37, 60, 85,178,231,214,138,212, 40, 6, 33,239,197,178, 11, 87, 73,106,150,100,177,166, 45, 47,175,240,208, 67, 15,115,252,228, +113,158,249,252,231, 57,124,232, 48, 31, 92,187,202,151,190,248, 37, 62,245,233,199, 25, 6,207,141,107,215, 48, 70,115,252,232, +113,158,126,250,105, 62,253,217,207,242,224,217,179,108,108,108,176,183,179,199,189,247,220,203,202,202, 42,103, 31,121,132,103, +158,121,134,211,119,221,197,149,203,151,201, 41, 49,106,199,124,229,171,191,194, 19, 79, 60,193,194,226, 50, 71,142, 28, 97,218, +117,244, 93,199,250,234, 97,126,241, 23,127,137, 79, 62,254, 56,227,165, 69,110,221,188, 65,240, 17, 74,216, 23,165, 89, 63,116, +152,211,167, 78,177,180,176,204,211, 79, 63,205,177,163, 71,184,122,237, 42, 49,123, 78,223,117, 6,148,226,202,229, 43,140,219, + 17,143, 63,254, 4, 79, 61,253, 11,220,125,250,110,110,109,220,162,235, 58, 86, 86,151,121,232,225,143,178,178,178,194, 23,191, +248,101,238,127,224,126,110,239,108,179,189,187,139,210,153,135, 30,126,144,167,158,122,138, 7,207, 62,136, 34,179,178,178,204, +171,175,190, 66, 86,240,137, 71, 63,193,231,191,240, 5, 30,120,224, 1,186,190,103,235,246, 22, 43,171, 43,220,123,207,125,124, +250,211,159,226,227,231, 62,198,141, 15,174, 51,157, 13,210,115, 87, 10,175, 19,231,206,157,227,153,103,158,225,254,251,239,167, +235, 58,110,239,220,102,117,121,133,123, 63,244, 33, 62,245,248,227, 60,252,209, 71,248,224,131, 15, 88, 89, 90,225, 75, 95,254, + 50,231, 30,123,148, 24, 61,103,207,158,229,253,203, 87, 11,250,119,206,206,144, 9,162,178,170, 84,252,242, 65, 46, 68,149,204, +134, 41,117,213, 16, 51, 54, 99, 64,221,137,235,231,185,192, 93,186, 33, 82, 87, 40,220,217, 36,101,215, 3,112, 71, 89,182, 31, +252,107, 24, 6,186, 97,192,168,138,172, 51,117,227,248,204,103,159,224,196,241,227, 63, 55,218, 62,152,220,223,233, 58, 42, 88, + 89, 93, 69,107, 77,223, 11, 89, 11, 50,127,241,231,255,145,133,241,136, 50,179,128,108,229,164, 87,108,185,148,157, 90,215, 5, +246,246,119,249,224,234,251, 2,161,177,178, 19, 30,252,192,238,214, 22,183,183, 54,201,103,206,160, 20,226,118,142,169,156,244, + 21,147,233,148,163,238, 8, 79, 63,253, 57,214, 86,215, 88, 89, 94, 62,128,240, 40, 4,125,216, 13, 83,116,118, 69,225, 90,228, + 4, 5,152,224,123,207,214,214, 6,221,172, 99, 97,188, 40,181, 25, 34,169,235, 73,104, 26,103, 10, 70, 86,188,217,239,190,253, + 30, 49, 36,134,174,199,143, 60,147, 89,199,238,100,198,230,246, 54,237,104, 12,217, 49, 12, 3, 25,120,235,252,123,188,123,241, + 26, 91,187, 3,159,250,204, 54,135,214,215,137, 33,114,117, 99, 71, 66, 21,213, 32, 61, 85,165,193,106, 81,171, 26, 71,229, 74, +138, 86, 9, 17, 74,219, 49,182, 25,177, 98, 21, 53,153, 48, 68, 82,233,221,103,157,113,109, 45,166, 55, 27, 49,100, 98, 82,244, + 29,162, 86,213,154,168,123,252, 44, 10,220, 1, 77,109, 42,162,210, 5,120,147,208, 41, 97,131, 43, 56, 94,133,170, 4,192, 97, +146,161, 50, 25, 83, 89,130,213,204,102, 30, 87,218, 21, 58, 12,116, 94,240,176,212,154, 42, 59, 26, 91, 81,181,142,177, 89, 99, +221,101,154,228,240,211, 61,246,167,251,236,238,236,177,223, 79, 24,178, 69,107, 67,200, 30,232,208,104, 70,163,150,217,172, 39, + 55, 74,234, 39, 42, 75,101,164, 42,186, 68, 4, 78,100,170, 10,167, 2,185,105,165,210,132, 17,104,137,174,136, 81, 56,249,125, + 31,217,153,238,179,171, 38, 2, 22,113,181,132,186,170, 76, 83,143,104,149,194,182, 14, 87, 87, 88,103,169,180,165,106, 29,125, +212,168, 70,201, 33,200, 39,218,145,112,231,125,236,104,155,138,144, 35, 91, 67,150,238, 49,178,103, 60,180,186, 74,211, 86,228, + 48, 99,232,122,134, 33,177,186,180,140, 83,129,157,157, 93,110,236,122, 14, 31,185,139, 35,135, 50,215,110,110,243,254,230, 38, +169,244,221,187,201, 54, 31,108,237,240, 15,207,189,192,199,191,252,219,152,234, 40,235, 15,156,227,226, 15,191,207,183,255,234, + 63,241,242,155,215,185,178,217, 99,154,117, 76,165,209, 81,225,108, 18, 93,109,138,172,214,154, 91,131,104,124, 99,204,180,149, +101,127,214,209,119,129,198, 6,150, 22, 23,216,157,238,113,233,250, 45, 66,223, 99,109,164,109,107,210, 48,208,199, 76, 99, 12, +174, 86, 52,203,171, 76,247,122, 54, 54, 59,180,174,209, 90, 49,182, 13,202,123,246,211,192,197, 11, 31,176, 55,217, 99,182,179, +197,116, 71, 51,139,150,223,248,226, 23,104,234,158, 11,175,252,144, 99, 39,239,103,117,113,196,222,116,134, 6,130,182, 56,133, +212, 74,157, 58, 24,127, 90,237, 80,102, 96, 8,129,193, 71, 28,125,121,249, 27, 98,242,248, 88,204, 93, 73,128, 49, 81,149, 67, +171,145, 23, 57,201, 16,226, 64, 70, 51,155,205,184,250,254,101,250, 97,114, 32, 41,145,246, 76,162,174, 44, 75,163, 5,124,134, +161,239, 5,242,161, 53, 42, 40,185,173,147,136,195, 84, 24, 13, 40, 92, 37, 19,204, 52,155,202,131, 56,231,131,110,245,124,149, + 23, 98, 62, 96,151, 26, 99, 72, 40, 58, 31, 32, 12,140, 70, 53, 71, 15,143,120,100,109,141,231, 94,126,155,201,172, 3, 37,120, +225,201,100,198,159,253,245, 75, 92,188,120,131,103,190,240, 9,126,227, 75, 95,226,254,211,247,242,175,255,239,255,200,173,219, + 29,141, 51, 12, 49,146,148,198,149,108, 84,200, 82,115, 74, 94, 26, 64, 81,122,189,100, 12, 78, 89, 57,156, 40, 67, 76,210,137, +214,201,178,118,232, 16,159,127,230,243,188,248,194, 11,188,248,226, 11,124,229, 87,126,149, 51,247,124,136, 31,191,244, 99, 46, + 92,120,135,175,126,245,215,248,224,253,247,233,186, 25,255,253,255,240, 47,121,254,185,231,249,217,171, 63,227,212,241,147,252, +246,127,251,207,249, 55,255,230, 95,115,226,212, 73, 62,249,169, 79,243,195,151,126,200,243,223,251, 30, 95,252,242,151,249,210, +151,190,200, 95,254,167,191,228,107, 95,255, 58,219, 59,183,121,225,185,239,115,238, 19,143,241,200, 35,143,240,135,127,240,135, +244, 93,199,239,252,238,239,242,194,247,159,231,103,175,191,206, 39, 30,123,140,103,191,246,117,254,253, 31,253,145, 92, 86, 11, +154, 54,164,192, 61,247,222, 67,223,205,248,193, 11, 47,240,224, 35,143,240,236,111,254, 38,127,242, 39,127, 84,194,128,242, 26, +249,210,175,252, 42, 74,193,139,223,255, 62,199,142,159,224, 95,253, 47,191,203,191,253,183,255, 39,203,107,107, 60,243,204, 23, +248,241,143, 95,230, 7, 47,190,192,131, 15, 62,196,111, 60,251, 44,191,255,251,191,207,253, 31,186,135,175,252,242, 87,249,187, +191,249, 27,218,113,195, 47, 60,253, 5,174, 95,187, 70,214,150, 39, 30,255, 52,103,207,158,229,123,223,127, 1,149,224, 55,159, +253, 77,254,244,255,253,127, 80, 74,243,181,175,127,141,111,253,195,183,184,185,113,147,205,157,109, 89,231, 58,139, 15,153,207, + 62,241, 4, 15,159,125,144,239,191,248, 2,117, 93,243,236,111, 60,203, 55,190,241,103,164, 12,191,249,181,175,243,205,239,124, +139,217, 7, 51, 38,211, 9,255,234,119,126,135, 31,188,248, 3, 54, 55,183,120,242,201,207,113,252,196, 9,158,127,225, 69,121, + 45,134,242, 89, 18,181,155,196,244, 50, 18,146,116,160,188, 44,128,180, 42,157,247,161, 96,102,133,240, 86, 75,160, 34,249,162, +244,147,126,122, 44,123, 0, 40,168, 88,163, 15,160, 14, 2, 1, 40,138, 82, 93,106, 50, 89,198, 52, 73,203,184,224,200,225, 35, +156,123,244,220, 29, 78, 65, 89,202,231,210,215,156,159,108, 81,200,237, 0,136, 74, 49, 26,183, 34, 82,152,236,241,230,249, 55, + 75, 64, 73, 9,123, 56, 6,178,181, 7, 96, 96, 85,122,184, 41, 6, 97,214,151, 63, 77,105,141,115, 21,149,173,176,206, 29,168, + 52, 85, 10,100, 6,121,233,105,205, 51, 95,122,134,207, 63,245, 11, 84, 85,197,165,139,151,216,218,186,205,233,211,167,208,218, +149, 94,101, 42,105,119,233, 32,230, 50, 14,148,127, 6,139, 15, 6, 87,143, 75,221, 68, 94,176,182,174,168,219, 86,118, 89,138, +131, 42, 3, 74,106, 77,115, 20,107,209,178,136,190, 52,201, 13, 68, 68, 1, 98,234, 73, 62,224,251,158,190,159, 72,195, 32, 4, +250, 97, 96,111,103,155,172,164,183, 98,172, 17,217,142,173,217,179, 34,221,153, 51,128,229, 33, 35, 45, 1, 91,239,163,180,161, +177, 22,159, 2, 42,205, 57, 0,208, 52, 51,185, 81, 86, 6, 21, 13,117,169,242, 77,251, 40, 56, 69,157,240, 67, 64, 41, 75, 85, + 27, 22, 26, 69, 50,137, 24,132,107,157, 76, 64, 59,135, 69,112,181,189,151, 17, 93,180,208,186, 26, 93, 87, 76,189,167,113,178, +106,209,217,200,195,167, 86, 84, 24,233,221,151,163,158, 82,145, 16,133,247,239,156,130,122,204,120,212,176,122,248, 24,181, 26, +216,219,159, 48, 75,137,105,223,139, 33,175, 31,216,153, 14,212, 86, 51, 4,161, 61, 25, 35, 39, 90, 93,183, 50, 22, 47, 93, 80, + 31,130,220, 86,138, 65, 42,230, 32,184,199, 44, 35,184,136,193, 56, 49,152,169,156,208, 22,148, 46, 13,134, 33,179,191, 63, 48, + 53, 14,179, 39,176,162, 62,120,180,179, 52,166, 66, 27, 73, 64,187, 90,126, 38, 86, 27, 70,163, 49, 33,201, 46,119,186, 55,225, +246,222, 77,102,222, 75,141,203, 56,112, 6, 31, 20,166, 24,129,117,134,253,233, 4, 63, 12,204,186,204,214,214,148,189,157,203, +172, 44,142,248,248, 67, 39,152,254,108,155,119,223,219,226,232,177, 35,244, 65, 32, 44,231,127,250, 10, 63,252,251, 63,230, 51, + 95,253,223,192,173,241,227,239,191,196,115, 63, 56, 79,175, 42,252,224,217,155, 94,167,235, 67,105, 96,136,229,238,214,230, 62, +231, 30,248, 16,211,219,123,236,238,205, 24,114,148, 61,222,176, 79, 99,165,101, 32,135,102,205,133,183,223,230,240,250, 10, 74, +107,169,111, 26, 73,163, 55,203,203,220,117,239, 71,120,247,226, 21,250,201, 69, 54,110,190,143,143,153,181,229, 5,188,247,180, +173,168, 95, 39,211,125,182,183,110, 49,155,116, 56, 11, 27, 23,206,115,254,220,199,121,242,137, 39,184,253,250,139,156, 30,117, +220,115,230, 56,223,125,241, 21, 92, 37, 14,121,149, 21,202, 7, 49,175,233, 92,238, 17,129, 58,151,230, 66,206,168, 90,190,235, + 54,102,114,182,100, 21, 15,112,190, 89,105, 8,162,255, 53, 5, 8,163, 82,194,228,132,198,177, 51,155, 66,234, 75,130,184, 16, +251, 82,192, 89, 35,141, 12, 91,161,163,103, 24, 96, 54, 29,176,149,129, 4,253,224, 89,104,107,214, 86, 86,216,220,155,208,245, + 51,178,113,132,148, 57,180, 60, 38, 87, 99,118,111,111, 82,215, 53,211, 94,120, 6,115, 34,103, 78,137, 20, 2,222, 42,188,239, +197, 58,151, 51,125, 52, 92,221,152,114,252,216, 81, 78,158, 58,204, 91,239,188, 47, 45,135, 98,105, 91,168, 35, 75, 85,228,198, + 91,175,243,205, 56,227,217,175,125,157, 84, 25,254,247,255,235, 27,236,237,246, 24,167,255,127,166,222, 52,216,178,235, 60,207, +123,190,181,214,222,251,156,123,251, 78,221,104, 52, 26, 35, 1,130, 19, 32,138, 4, 64, 82, 17, 73, 81,164, 56, 72, 10, 45, 74, +178,108,201, 42,197,150,172,216, 41, 37,229,196,170, 56,131, 83,138,203,145, 83,149,164,146, 42, 87,156, 74, 92, 21,199, 81, 36, + 69,214, 96, 81, 49, 53,154,179,197, 73,148, 8,128, 32, 49, 17, 32,129,198,220,243,157,239, 57,103,239,189,134, 47, 63,190,117, + 78,235, 23,170, 64,176,251,222,115,246, 94,235, 27,222,247,121, 17, 95, 35,179,213,138,100, 23,172,115, 39,218,196, 67,189,237, +253, 77, 9,111, 76, 14, 19,155,155, 2,187,148, 76, 63, 95,240,229, 47,127, 25,213,194,195, 15,127,141,181,233, 26, 95,123,248, + 17, 68, 51, 15, 62,248, 16,155,219,155,156,188,118,204,239,255,155, 79,240,248,227, 79,160, 10,123,215,246,248,224, 15,126,216, + 92, 55,120,158,123,238, 57,190,242,133, 47, 26,123,224,211,159,226,251,223,247,126,206,220,116,154,157,211, 59,252,250,175,255, + 26, 94,225,249, 11, 23,184,245,214, 91, 1,229,190,183,126, 23, 79, 60,241, 56, 95,249,234,151,209, 12, 23,158,253, 54,191,248, + 95,252, 3, 78,111,159,102,239,112,175,142, 60,236,242,216,219, 63,224, 19, 31,255, 56, 73,149,231, 46, 60,207,127,250,159,253, +125,182, 79,109, 87, 85,190, 99,103,231, 52,183,221,118, 43,255,219, 63,251, 95, 17,224,194,243,223, 97,123,103,155,251,223,114, + 31,135,135,251, 44, 22, 11,190,244,249,207, 83, 92,224,197, 23, 95,228,151,254,209, 63,194,139,231,205,247,223,207, 23,190,240, +121,190,245,237,167,201,201, 92, 76,247,221,119, 31, 57, 37, 30,120,251,131,252,230,191,250, 13, 91, 69,229,194,100, 58,225,190, +251,223,202,211, 79, 63,205,165,139, 23,249,202,151,191,132, 11,246,174, 24,197, 48,131, 56, 30,122,224, 65,126,243, 55,254, 95, +174, 31, 92,131,228,113,234,185,239,254,251,121,234,201, 39,185,120,241, 34, 95,254,210, 87, 64, 51, 15, 61,248, 16, 79, 61,245, + 20, 95,250,210, 23, 81,133,139, 23, 95,225,239,255,226, 47, 26,177,213,122,235,250,251,155,118,130, 98,218, 7,105, 28, 37, 89, + 74, 40, 75, 30,203, 0, 75, 29,127,208,146,137, 85,172, 96, 10, 64,111,212,164,186, 47,200,117,167, 98,192,132, 82,237, 8,144, +147, 33,254,168,151, 75,142, 35,109,215, 48,157,182,104,236, 81,231,185,231,245,175,227,212,169,117,170,147,178,238,164,100, 57, +164,170, 74, 69,152,205, 23, 92,189,114, 29, 9, 83, 26, 41,108,109,110, 25, 54, 85,108, 68,105,250,140,154, 38,180,196, 6, 46, +113, 70,152, 49,223, 59, 87, 19,114,204,118, 97,200, 68,139, 99, 21,220,106, 77, 81,234, 63, 53,101,206,158,187,153,119,127,207, +247,208,181, 45,179,197,156,223,253, 55,159,224,228,232,152, 55,223,247,102,227,149,139,224,212,155,104,170, 84, 27,153,234,106, +119, 86,242,200, 24,231,228,146,150,142,254, 10,132, 48, 80,134,235, 28,139,113,164,143, 3,155, 34,180, 77,224,182,243, 55,241, +210,203,175,145, 83,172,107, 12,106,218,143, 85,207,243,249,204,252,172, 34,108,110,109,129, 56, 54, 55,182,152,174, 77, 76,140, +134,169, 39, 87, 54,153, 88, 72,149, 53, 47, 67, 38, 5,111,138, 88,245, 72,163, 52, 8,139,146,152, 42,148, 28,153,155, 80,147, +105,219, 50,148, 25,130, 99, 54,247, 70,113, 59,194, 58,247, 96,227,200,226,177,253, 79, 35,196,197, 72,112, 29, 99, 76,204,230, +115,124,177,189,183,184, 64, 74, 61, 90,253,251,173, 52, 72, 73, 56, 23,144, 86, 25,128, 60,159,145,163,128,180,204,226, 96, 23, +169,120, 82, 73, 38,244,201, 19, 6,159, 8,190, 16,180, 48,142, 61,125,239, 24,214, 39,164,133,229, 97, 75,227, 40,210, 48, 61, +181,197, 68, 11, 55,109,121,124,235, 88,159,116,204,102, 11,250,225,136,249,241,192,225,124,134, 43, 16,211,192, 60, 1, 57, 18, + 51, 76,186,134, 92, 2,174,245,196, 88,200,163,173,147, 20,191,114,120,204, 98,162, 41,158, 70, 45, 40, 34,229,108,142, 65,239, +153, 52, 19, 74, 19,153,167, 17, 47, 30,146, 80,226, 72,236, 23,196,165,128,211, 53,168,135, 20, 19, 93,215,113,112, 50, 35, 13, + 54,150, 91,151,200,238,238, 62,154, 11, 15,222,127, 7,175, 94, 57, 38,247,115,174,238, 31, 27, 11, 62,180,196,148,107,208,136, +114,122,171,227,149,203,215,185,231,246, 51,188,233,222, 29, 62,246,227, 31,225,179, 95,253, 22,170, 48,164,194, 56,159, 51,117, + 74,154,174,241,201,223,255, 12, 15,125,240,163,140,243, 93,254,221, 87,191,201, 81,182,124,237,181,233,212,132,110,249,132,212, +219,251,148,178,146, 74, 79,241, 19,110, 58,119, 51,131, 94,195, 13,137,152,146,141,213, 91, 33, 70, 75, 71,115,206, 83,134,129, +126, 88,208,122, 19,164, 22,133, 51,103, 78,179,118,250,118,158,122,242, 41, 78,246, 46, 49, 13,193, 4, 98, 46,115,254, 84,192, + 77, 3, 87, 14,102,108, 1,187, 71, 3,187,251,251,180, 14,134,177,112,106, 99,157,135,191,246, 23,236, 31,244,124,239, 59,223, +206,133,151, 95,225,153, 87,175, 17, 53,227,138,171,197,135,163,196,190,226, 69, 45,221, 74,193,220, 15,134,225, 38,132,186,106, + 41, 53,187,161, 13,168, 54, 56,108,226, 50,233,108,244,141, 40,190, 8,185,115,132, 98,103,194,152,122,214,167,235,136, 12,244, +101, 94,225, 41, 98,250, 15,129,249,176,176, 96,170,106,101,114, 4,155,254, 84,235, 83, 82,165,105, 45,238, 54,142,137,156, 70, + 38,235,183,112,253,100,160,228, 68,206,222,132,100,213, 62,183,236,224,231,195, 72, 72,201,220, 87,197, 98,136,219,201,132,253, +147,145,175,126,243,121,138,192,198,116, 66, 28, 35,139,177, 71, 69, 57, 56, 25, 57, 92, 12,252,196,207,252, 36, 67,241, 92,184, +248, 24, 15,222,247, 22,238,126,195,157, 60,242,200,179,172, 99, 83,136,172, 6,209, 81,148, 50, 70,115, 84,145,200, 56,124,242, + 72,181,247,225,151,140,112, 40, 53, 88, 69, 75, 97,111,127, 31, 77,181,227, 18,199, 98,222,155, 27, 64,165, 90,216,148,217, 98, +206,230,246, 54,127,251,231,127,150,215,223,251, 6,246,247,247,172,137, 42, 22, 49,188,191,183, 91,201,115,181, 40, 20, 56,189, +189,195,254,254,158,101, 67, 84,129,219,254,222, 30, 14, 88, 95,155,114,112,184, 79, 74,245, 59,246,142,189,189,125,118,118,118, +184,190,127,221,166,195,106, 94,246,253,253,253, 21,245, 78, 11, 28, 30, 28,176,115,211,233, 37,124,129,173,157, 29, 78,159,222, +225,191,251,229,127,178, 98, 50,168,194,231, 62,251,105, 14, 14,224,240,240,208,162,181,151, 89,242, 98,105,115,155,219, 91, 60, +249,228, 83,245,215, 22, 14,246,247, 87,179,228,173,157,109,254,227,191,247,247,234,221, 97, 75,141, 11, 23, 94,192, 57,232, 23, + 11,187, 80,107, 49, 46, 42,104,177,198,109,123,123,139,171,215,119,107,220,108,230, 96,239, 42,247,221,255, 38, 0, 22,139,222, +138, 45, 17,214, 38,211,250, 25, 26,205,117,255,240,160, 78,175,171, 78,173,162,129, 69, 13, 64,102,214,110,203,102,151, 98, 1, +106, 2,164,100, 33, 42, 78,140,114, 25,172,147, 44, 43, 31,171,171,108, 97,169,220, 93,241, 21, 69,103,131,222,213,101,146, 43, +143,215, 55, 75, 59, 2, 76, 39, 29,231,207,223,194,115,207, 93, 96, 18, 26,238,184,227,246, 21, 74, 80,111, 0,112,107, 55, 74, +181, 58, 8,223,248,230,227,188,248,226, 75,148,146, 89, 95,159,112,231, 29,119,114,237,218, 46,135,123,135,136,179, 81,178, 69, +102,130,175, 23,116,169, 18,124,131, 12,228, 26,129,169, 21,223,103,128, 6,205,149,100, 84, 31, 74, 86,138, 79, 99,133,119, 93, + 71,215, 78, 64,132, 54,180,188,239,189,239,166, 13, 45,147,182, 93,233, 6,134,126,176, 23, 69, 35, 69,219,106, 97, 88,254,205, +102,115,147, 26,197,104,151,122, 38,143, 35,195,176, 64, 70,184, 30,175,113,225,194, 11,220,124,246,102,124,211,242,253, 31,248, + 1,190,243,204,179, 76, 38,147,213,207, 21,176,252,230,158,196, 43,175,188,200, 3,111,127, 27,226, 28,111,126,203, 27, 57, 62, + 57,226,117,119,221,197,218,100, 13, 69,185,124,245,178, 21, 59,197,142,152, 88,168, 98, 24, 75,145,138,201,128, 5,129, 12, 17, +162, 51, 5,232,108, 54, 95,229,175,151,152, 25, 92,193, 23,227, 36,107, 84,198,216,161, 69,240, 94, 73, 62,144, 37,210, 56,243, +206,151, 28, 40,234,232, 99,161,173, 93,116,193, 49,230,140, 11, 5, 70,165, 72,198, 47, 50,210, 22,146,102, 74,233,105,131,103, +108,243, 82,158, 65, 91,249,210,234, 50,195,112, 66,142, 48,115, 74, 84, 11, 43,112,226, 9, 26,235,200,201,163,243, 57,206, 6, +246,140,110, 32, 52,150, 52,229, 27,207,164,181,140,224,125,233,193,123, 54,167,167, 57,211, 5, 54,157,137,172, 38,206, 83,162, +144,211, 17, 39, 7, 11, 22,140,164,146,153,207, 51,139, 18,201, 19,195,230,246, 99, 98, 99, 99,194,108, 62, 50,241,158, 73, 59, +197,209, 26,224, 65, 50, 50, 22,102,125, 66,241,228, 86,153,166,204,252,164, 71,139, 37,219,133,154,157,172, 21,228,161, 41,209, +122,155, 28, 9, 9,135,103,236, 7,240, 3, 39,139, 57, 41, 38,246,199,142,211, 59,107,136, 43, 92,187,118,149,211,103,111,101, +107,218,112,114,120,196,124, 62,103,214, 71, 78, 78, 50,109, 3, 15,221,127, 23,239,126,255, 59,120,248,241, 87,120,229,165, 75, +184,233, 58,123,187, 39, 56,137, 52,211,134, 44, 29, 79, 63,251, 18,159,250,248, 39,184,245,220, 6,143, 63,241, 60, 81, 27, 38, +147, 53,206,108,111,242,234,222, 49,195, 56,212,247,207,222,135, 84,224,248,164, 39,208, 49, 38,165,237,188,225,131, 21,242, 34, +147, 20,114, 92,224,167, 22,116,113,120,176,224,244, 78, 67,210, 58, 13, 11,235,188,250,226,139,204,246, 46,130,115, 36,129,233, + 90,199,209, 73,102,109, 13,142,162, 50, 31, 10,221, 52, 67, 25, 89,204, 23, 72,215,226, 61, 52,190, 97, 56, 60,224,243,159,250, +255,120,230, 91,223,225,254,183,190,158, 23, 47,188, 12,177,208, 87, 2, 94, 46,166,209,241, 24,244,163, 4, 83,254, 22,212,254, + 71, 47,148,161, 22,210,106, 69,191,177,206, 21, 95, 49,163,131,179,134, 32, 52, 38, 80,115,206,194, 55,146, 22, 82, 30, 43, 55, +189, 30,160, 73,153, 76, 26, 16,161,239, 45, 0,102, 32,174, 32, 31,139,190,199,187,128,115, 98,184,220,190, 71, 40,116,109,203, + 48, 30, 83, 74,102,247,112,198,108, 62,163, 81, 88,159,182,184,209, 19,135,113, 21,214, 33,197,206, 35,138, 1,170,186,224,217, +218,220,164,109,215,137,195,156,221,253, 35,110, 94,119,156,187,249, 44,179, 94,185,126,120,192,222,193, 9, 57, 23, 30,125,242, + 53,126,255,143, 31,229,223,255,177, 31, 70,153,115,117,247, 34, 49,205, 9,222, 38, 47,146, 18, 46, 88,116,182,171, 23,139, 5, + 53, 25,231,222, 68, 79,118, 49,132,154, 94,169,146,241,206,254, 93, 74,169,230,126,231,218, 56,104,197,122, 85,184, 87,221,237, +190,227,157,239,228,187,222,122, 63,159,255,204,167,248,215,191,245, 27,168,115,252,210,127,251,203,134, 71,174,177,159,133, 92, +119,189,118,214, 31, 47,230, 76, 39, 19, 91, 13, 8, 56, 28,211,233,212, 68,119,138,189,111, 90,106,246,136, 99,251,244, 14,243, +197,188,226,111,117,101,111,155, 78, 38,166,183, 47, 86,168,117,147, 9,243,217,192,210,248,213, 47,230, 92,186,120,153,127,249, + 47,254, 79, 82,205, 47, 57,125,102,155,253,107,251,220,115,239,189, 43,226,227,106,146, 93,193,236,253,188,103, 50,157, 88,241, +142,208, 77, 38, 54,133,117,142,190,239,249, 63,254,249,255,206,241,225,140,148, 34, 27, 27,107, 32,194,173,231,206,215, 65,113, + 77,253, 19,123,182, 52, 89, 2, 95,191,232,153,118, 83,250,197, 12, 16,182,207,156,102,177, 88,212,233,180, 82, 72,160, 30, 42, +116,202,176,229,133,105,219,173,156, 19, 22, 9,172,213, 15,159,168, 29,150,233,209, 42,180, 38,167, 82, 17,179, 86,144,160,222, +242,212,181,233,108,236,141,237,167, 92,229,185,107,181, 14, 52,206, 60,144,212, 47, 92,212, 30, 18,215, 52, 85,198,111,200, 82, +245,133,163,227, 99,222,254,214,239,230,235,143, 61, 70,142,118, 0,172, 88, 0,220,216,169,203, 13,108, 48, 79, 63,253, 45, 62, +247,217,207, 49,244, 11, 0,238,184,253, 94,206,159, 63,207, 99,143,125,157,197,124,142,107,172, 10, 85, 17,154,106,147, 16, 47, +108,158, 58,133,170,208, 52, 45, 93,215, 85,181,169, 65, 93, 16, 88, 91, 91,195,183, 70,247, 89, 91,219, 88, 77, 5,214,166,107, + 86,153, 3, 87,175, 92,231,169,167,159,228,161, 7, 31,164,105, 26,190,231, 93,239,188,177, 18, 80,229,217,103,159,229,210,229, +215, 86, 84, 50,239, 29,211,233,250,114, 80, 76, 55,105, 45, 90, 80,149, 73,215,161, 57,211, 52, 85,193,153,199,138,169, 21,190, +248,133, 63,229,236,153, 29,238,126,253,189,188,238,206,215,113,247,157,119, 91, 88, 69,125,120, 36,212, 62, 63, 41,223,124,226, +113,238,186,235, 78, 30,120,224, 65,110,190,233, 44, 31,253,161, 31,102, 89,190,236, 94,191,206,231, 63,247,185, 21, 87, 36, 85, + 42,185, 0, 0, 32, 0, 73, 68, 65, 84, 56,103, 83,155,106, 42, 20,103, 7, 92,168,214,165,168,201,226,249, 90, 33,212,128,139, + 88,140, 3, 45,163, 67,163,101,121,139,183, 23, 74,147, 85,242,226, 3,195, 88,234, 32,103, 32,201,136, 74,139,138,141, 18,135, + 21,176, 71,241, 94,104,106,151,147,139,199,251,150,121, 30,235,132, 67, 72, 73,209,184,168,160, 14,101,196, 81,198,108, 9,109, + 94, 44,236, 64,139, 65, 97,178,128, 75,228,138,226,197,103,130,122,188,100,178, 75, 44,134, 64, 19,172,115, 26,143, 35, 39, 50, + 82, 68,105, 53,160, 90,216,239,214, 16,175,120, 39,132,110,194, 70, 59,165, 11, 5,165, 69,167, 19, 38,226, 16,159,105,221, 17, + 93, 59, 50, 12, 35, 39, 39, 71,228, 49,115,180,159, 25,213,114,214,231,169,224, 92, 98,218, 56,114,104,105,214, 2,161,174,160, + 38, 77,131,134,134, 70, 96, 24,212,226, 42,199,194, 24, 19,217, 69, 74, 30,193,121,166, 77,135,150,196, 16, 35, 41, 13, 12,195, +192, 66,199,154,101, 32,188,242,194, 43,188,238, 14,227,124,199,210,112,215, 29,111,198,135,194,198,153,145,245,105,224,242,197, +139, 60,255,157,111,115,102,251, 38,110, 62,115,134,173, 83,103,249,157, 47,253, 62,187,179,158,105, 76,140, 53, 40, 99, 62, 52, +204, 19,180,120,126,243, 87, 63,206,250,198,148, 69, 9, 70,191, 42, 1, 92,199,108,118,141,188,228,160,171, 88, 20,111,202, 92, + 59, 60,100,226, 61,179,197, 72,108, 45,155,154, 98,226, 46, 98, 33, 2,218,143, 43,109,202,201,236,152,174,221,198,187, 9, 47, + 95,120, 30,193,236, 61,113, 76, 40,176, 62,157,208,239,101,190,125,113,143,243,119,220,201,214, 90, 7,149,142,184,179, 53,178, +119,176,199,100, 98,239,230,113, 63,208,118, 83, 94,120,254, 49, 46,188,248,109,114, 28, 56,123,102,199,108, 99,165,208,143, 38, + 46, 84,204, 27, 61,206, 45,129,141, 38, 17, 8, 53, 2, 20,150, 91, 56,139, 44,182,255, 36, 75,134,177,142,149,115,180, 60,245, + 96, 93,187,247, 66, 63, 36,134,249,136,147, 42,110,115,182,110, 92, 91, 55,113, 95,138, 70, 63, 27, 83, 68,181, 88, 98, 89,201, + 21,170, 20, 88, 12, 25,215,220, 80,182,123, 31, 32, 23,242,120,130,230,209, 64, 82,237, 4,113,202,113, 76,117,167, 93,105,101, + 40, 57, 91,172,231,100, 58, 33, 23, 56, 62, 57, 50,148,111,211, 82,180, 16,211, 2,245, 27,108,108,156,161, 31, 18,251,251,187, + 36,214,249,213,223,251, 42, 95,254,250,243,252,212, 15,189,139,205,187,119,120,249,210, 30, 67, 31,201,109, 85,143, 71, 91,131, +150,162, 4, 41,181, 40,213,154,122,153,172,171,202,133, 88, 59, 88,106,178,161,174, 56,238, 90,227,170,235,116, 83,171, 54,168, + 78, 88,181, 40,211,201,132,189,235,187, 92,248,206,183,217,186,233, 12, 31,248,192,135, 77, 60, 90, 69,109,203,115,211,126, 95, +179,220, 93,185,244, 26,221,100,194, 3, 15,189,131, 71, 31,249, 58, 15,189,243, 33,206,223,118, 43,197, 9, 79, 60,241, 36,191, +240, 11,191,192,139, 47, 94,224,194,243,207,241,125,223,247, 94, 4,184,120,241,181,202,135,175,154,111, 39,156,191,245, 86, 30, +120,240,237,124,253,145, 71,120,239,247,189, 15, 69,120,229,213, 87,120,221,221,119,225,189,227,242,165,139,116,147,142,239,125, +207,187,249,202, 87,190,204,206,233,109,254,131,191,245,115,252,241, 31,252,145, 85, 15,214,146,214,181,228, 82, 68, 47, 60,251, +236, 51,188,231, 61,239,230,202,213, 43,140,139, 5,223,251,158,247, 48,246, 61, 72,225, 91, 79, 63,205, 7,222,255, 3,124,234, +147,159,165,107, 3, 31,253,232,143,112,233,242, 21, 46,189,246,234,138,135,103,184,219, 92, 31, 67,155, 34, 60,245,244,183,248, +240, 71, 62,196,103, 63,247,105, 38,109,199,131, 15, 62,196,163,143, 61, 86,237,226, 54, 89, 86,129, 39,191,245, 52,255,209,223, +253,187, 60,241,244, 19, 92,190,116,145, 15,125,248, 35,149,250,103, 22, 65,155,244, 84, 18, 31, 25, 79,176,117,158, 22, 52,171, +133, 18, 81, 44,166, 68,160,120,143, 58, 71,112, 98,203,117,173, 99, 89,205,213,129, 88, 76, 93, 89,106,120,189,136,199,137,137, + 48,124,107,248, 68,239, 44,252,192,212,239,153,111,124,227, 27,124,224,251,223,207,125,111,186,159,111, 60,254, 56, 15,127,237, + 81,110,185,229, 28,183,156, 59, 87, 31, 36, 89,141,169,143,103, 39,124,227,177,111,242,133, 47,126,145,189,131, 3,156,111,105, + 59,207, 15,252,192,251, 57, 56, 56,228,137,167,158, 33,180,193, 44, 85,110, 82,247,101,105,165, 98,125,230,153,111,115,243,222, + 1,185,100,174, 95,223,197,169,178,183,187,203, 83, 79, 61, 73,211,182, 92,187,118,165, 30, 56,153,239, 60,255, 29, 82, 21, 66, + 93,189,118, 13, 23, 2,154, 97, 76,202, 31,253,201, 39,217,219, 61,228,182,219,110, 99,109,173, 35,101,136,105,228,213, 87, 94, +227,171,127,254, 53,250,209,114,152, 29, 66,142,133, 11, 23, 46,216, 40, 62, 39,174, 92,190, 82, 71, 85, 51,158,122,250, 41,182, +183,182, 56,153,157,208,207,143,241,212,128,144, 2, 87, 46, 95,226,183,127,231,183,248,238,239,122, 27, 55,157, 61,203,198,230, + 38,247,190,225,141,180, 77,107,150,156,168,228,226,209,146, 57, 56,232,249,195, 63,249, 12,151,175,238,113,247, 93,119, 50,153, + 76, 40,165,112,125,247, 58,143, 61,242, 40, 47,190,252,146, 81,209, 74, 21,132, 21,115, 44,148, 8,193,219, 88, 27,103, 73, 71, +185,250, 37,221, 50, 42, 80,149,210, 71,227, 16,120, 43,149,131,111, 72, 49, 35,100,130, 55,240, 80, 78, 74, 23, 26, 74, 13, 30, + 42,244,132, 98, 92,230,162, 16, 75,169, 80, 9,207, 80,172, 43, 16, 45,228,208,153, 6, 65,116, 85, 92, 45, 55, 52,190,142, 8, +157,122,164, 21, 36,218,248,107, 25,115,153,180, 16,196, 17, 38, 30, 25, 12, 23, 58, 82, 17,142,201, 82,210, 92, 12,102, 51,169, +233, 76,173,179,191, 35,247,137,156,102,102,137, 41, 45,101,152,115,181,233, 9,174, 69,226,136,107, 10,158,214,146,244,138,167, +235,214,153,156,218,226,230,155,206,226, 53,115,180,152,147,115,100,118, 50,103,136, 35,125,138, 68,109, 9,100, 74,130,182,107, + 77,135,160,224, 75, 96,107, 99,147,241,148,209, 23,211, 80, 42, 75,220, 56,239,243, 56,210,199, 76, 28, 70, 75,126, 18,251, 94, + 36,183, 76,214, 3, 18, 61, 46, 24,107,122, 57, 93, 58,238,231, 28, 31,238, 18, 83, 97, 58, 93,227,228,224,152,118,218,177,177, + 57,225,212, 70, 96,125,210,114,253,210,101,206,157, 59,203,155,239, 62,207,241,188,231,100, 62,227,240,224,152,235,215,119, 89, +235, 90, 14,143, 14,233, 95,182,113,171, 77,162, 58,134,177, 48,237, 90, 14, 79,230,150, 48, 86,108,127,170,197, 52, 44,210,182, +148,162, 44, 22, 3,211, 54, 48,196, 76,209, 96,135,186, 56,211, 61,120,181,231, 52,142,104,152,112,125,247,128,137, 47, 36,245, +104, 74,148, 26,128, 19, 99,164,168,242,226,165, 99,166, 27,137,227,147, 5,107,109, 98,136,133,141,245,117,218, 70, 56,153, 29, + 18,112,196,156,137,125,100,218,174, 49, 12, 61,107,235, 27,156,218, 58,101, 48, 14, 50,139,126, 36,231,194,164,245,164,100,150, +181,156, 11, 82, 18,153, 76,204,142, 76, 54, 11, 39,150,127,157, 8,171,117,157,171,132,178,226, 76,232, 89,212, 16,180,154, 61, +227,162, 39,167, 8,193,145,114,166, 20,165,105,150,184,102,161,235,166,136,239,208,161, 39,165,145,156,122, 20,216,108, 3,125, + 52, 11,154,171, 88,106, 87,247, 2,147,174, 1,223,208, 71,203, 25, 80, 85,124,227,140,171, 81,173,102, 94,164, 6, 98,153,160, +200,148,205,217,236,151, 69,241, 56, 94, 61,158,115, 60, 36,182,182, 44, 4,234,129, 55,222,198,241,201, 6, 47, 94,222, 39,162, + 60,252,228, 75,244, 39, 7,188,237,161, 55, 51, 63,152,161,197,208,207,134, 46, 5,145,130,198, 66, 12, 38, 14,109,156, 53, 64, +185, 88,200, 80,112,158,236,148,148, 13, 78,163, 75,108,108, 69,145,230,234,199, 86,189,145,145, 94,170,250, 58,229,204,159,127, +229,207,249,153,191,245, 55,249,229,255,225,127, 98, 24, 6,190,241,200,215, 89, 44, 22,108,109,239,172,210,199, 88,170,178,197, +172, 86,168,240,187,191,253,219,124,244, 99, 63,202,143,124,236, 99, 60,247,220,115, 92,124,237, 34,154, 11,123,187,123,252,225, + 39, 62,193, 71,255,202,143,176,115,122,135, 23,158,191,192,239,253,238,239, 34, 78,120,221, 61,247,240,125,239,125, 31,191,246, +107,191,142, 20,229,226,107,175,113,223, 91,238,231, 99, 63,242, 49,158,127,225, 2,127,252,135,127, 88, 87, 27,134,136, 45, 42, +124,252,119,127,135, 15,126,232,195,124,240, 67, 31,166,239,123,190,242,103,127,198,133, 11,207,113,207,189,111,184, 17,207,172, +206, 82,212,234, 52,250, 91,207, 62,205,246,214, 38, 63,255,243, 63, 15, 10,207, 60,253, 12,219,167,183, 17, 45,124,254,243,159, +225, 3, 31,252, 16,255,240,191,249, 47, 65,225,177, 71, 31,225,209,135, 31,230,214, 91,207, 87, 53, 84,237, 82, 11,252,227, 95, +254,199,252,147, 95,254,239, 81, 41,124,246, 51,159,225, 35, 31,250, 32,255,245,127,245, 15, 89, 44,122,190,242,229, 47,241,200, +195, 95,227,158,215,223, 3, 42,213,227, 14,251,215,175,243,153, 79,127,154,159,250,235, 63,197,233,157, 29,190,244,165, 47,175, +216, 48, 69,132,162,182, 26,172,128,118,242,114,191,238,107, 84,150, 24, 97, 14, 95,179, 13,234, 32, 75,238,184,235, 77,234,234, +222,199,215,228, 44,139,223,171,163,248,186, 75, 50,142,185, 3, 47,182, 47,173,121,212,154, 13,220,129,100, 78,159,222,228, 63, +252,217,159,197,225,248,149, 95,249, 21,174, 92,189,198,109,183,221,198, 91,222,252, 38,206,157,191,149,233,116,194,108,126,194, +149,203, 87,120,254,197,151,120,229,197, 87, 25,135,222, 88,203, 18,248,193,143,124,128,143,254,240, 15,241,111, 63,249,105, 62, +251,217, 63,181, 42, 68, 11,162, 1,117, 38,166,210,154,175,179,182,190, 78, 8,230, 43,141, 99,102,140, 54,238,157, 78,215, 16, +111, 97, 16,179,249, 12,205,194,100,109, 74, 55,233,172,211,236, 7,134,161,167, 20,135,247, 53, 92, 65, 60,167, 78,173,153, 74, + 57, 42,195, 56, 48,159,207,205,115,219,184, 21,201,168,196, 68, 55,153,208, 77, 38, 80, 10,139,177,103,236, 35,136,209,182, 90, +223, 80, 92, 97,113, 60,179,232, 69,111, 95,253,250,250, 6,222, 11,195,252, 4,212,241,206,119,189,131, 31,251,171,127, 13, 39, +176,191,187,203,255,253, 47,255, 47,174, 92,189, 94, 87, 27,134,155, 36, 11,235,155,155, 52,221, 4,124, 97,152,207, 73,139,158, +236,148, 46,152, 47,149,224,106,193,149,209,100, 2, 39,156,141,177,141,113,109, 99,114, 85, 59, 36,100,153,113, 28, 26, 19, 15, + 57,235,180,137,133,210, 86, 55,100, 78,181,219,240,228,108,194, 72,245, 74, 43, 70,154, 42,165,224, 52, 24,178, 87, 50, 37,103, +180, 9,184, 2, 37, 26,186,214, 7, 99,169, 91, 30, 57, 52,117,204,153,171,247,212,139,183, 40, 92, 2,173,168,237,253,154,218, + 17,213,135, 58,169,249, 91, 67, 48,226,155, 20, 79,240, 38,116, 28,139,210, 76, 27, 90,113,198,110,207, 9,159,132,166,235,200, + 53,103, 58,170,101,174,163, 25,113,208,117, 30, 15,196,228,209, 50,210,132,150,102, 18, 40, 98,120,201,141,105, 75, 25,141,253, +157,198, 19,134,148, 72,227, 64, 63,140, 20, 21,198, 20, 13, 37, 28, 90,139, 23, 22,193,105, 70,125,160,113,130, 11, 45,211,181, +150,161, 95, 48,159, 69, 82,137, 38,136, 90,140, 36,171, 81, 88,140,115, 58,239, 57, 58,182, 61,250,124,182,160,184, 9,107, 27, +155,204,246, 15, 8, 77, 99,135,113,200,232,216,115,255, 27,111,229,239,252,141,247,115,239, 91,222,204, 47,252, 39,255, 35,169, +221,230,174,215,223,197, 56, 87,156, 36, 36, 14,124,235,194,119, 56, 53,233, 76,193, 61, 20,102,139, 61,230, 67, 98, 99,243, 12, + 27, 93, 71,123,250, 22,158,124,252, 97,130, 15, 12,195,104,144, 17,133,123,238,186,141,105,215,112,233,234, 62, 57,143, 76,186, +182, 66,153,172,227,240,206,145,179, 16, 2,132,208,177,232,123, 99,147,231,194,230,169, 73, 21,158, 10,169, 24,110, 56,248,192, +149,253, 19, 54,218,192,250,214,105,246, 15,118, 57,187,181,206,180,107,112, 93,131,111,214,152,182,129,131,189, 3,174,236,159, +160, 49,210,181, 13,206, 57, 22,197, 51, 89, 95,195, 59,161,107,221,138, 59,239, 48,125, 1,174, 70, 1,151, 66,227, 44,145,107, + 40,209,232,103, 49, 83, 52,130, 19,250,185,197,234,150, 58,186, 45,128,100,103,143, 65,221,167, 31, 45,122,142,247,236, 93, 27, +115, 34,167,196,122,215,176,182,190,193,144, 18,109,232, 72, 69, 76, 29,142,146,134, 5, 57,103,126,252, 61,247,224,215, 55,249, +212, 95,188,140, 15,222,130, 59,202, 64,204, 75,110,184,176,127,120,128, 47,202,217,155,118,144,166,225,248,232,152, 20,237,157, + 65, 12,195,122,170,107,152, 76, 39, 12,169, 88,126,183,178,234,150, 75, 30,153, 78, 38, 76, 27,135,111,133,155, 78,159,230,129, +215,223,198, 11, 23,119,121,228,153, 87, 16, 10,211, 46,240,166,219,111,230,122,159,185,126, 48, 86,127,114,189, 64,139, 34,161, +114,222,235,106,211, 57,243,220,139,247,132, 90, 88, 56,151,113,101,153, 21,190, 12,103, 49,154, 27, 53, 27, 67,116, 41, 32,212, + 21,102, 21, 45,198,243, 18, 71, 91,207,236, 84, 65,242,174, 42,254,197,213,120,216,234, 75,119,210,242,174,127,239, 29, 60,252, +231,127,110,172,120,239,248,207,127,241, 31,240,171,191,246,255,112,184,191,111, 65, 80,206,161,234, 13, 22, 83,189,241,150,228, +106, 9,107, 86,152, 45,245, 92,182,146,233, 16,198, 82,234,111,111,221,252, 50,101, 52,103,165,243,230,223,215,108,153,190,134, +150,133,156,148,198, 47, 33,106, 86, 92, 21, 45,214,192,150,170,254,242, 5, 95, 39,228, 41, 91, 34,222,234,119, 87,106,228,105, +101,188, 47,253,228,141, 24,153,110, 25,223,166, 88,236,100, 41,100, 76,164,232, 87, 73,121, 30, 87, 96,107,123,107, 85,204,168, + 42, 91,167,119,248,219, 63,247,115,252,211,127,250,191, 24,160,166, 18, 32,125, 21, 89, 59,103, 73,169,170,142,224,108,133,226, +138,233,160,196, 55,132, 2, 99, 86, 66, 66,104,138, 85,157,169,216,238,220,188,232,186, 26,211,136,179, 3,119,185, 28, 47,121, + 4, 50,102,188,178,140,109, 81,184, 52, 36, 62,241, 7,127,204,223,252,153,159,230, 39,127,250,167,249,205,223,250, 56, 47,191, +122,145,151, 94,185, 76, 55,237,104,186, 41, 57, 46, 88,204, 79,106,160,138, 85, 24,107,107, 19,222,253,189,239,225,135, 63,242, + 97,190,254,216, 55,248,194, 23,191, 82, 61,212,246,243,148, 18,107,108,225, 82, 40, 39,204,142, 23,212,200,250,186, 27,115,244, + 41, 50,140, 39,246,161,214,188, 96, 7,244, 39, 61,139,249, 96, 52, 32, 99,243,152, 96,196, 91, 39,109, 59,231,129,147,147, 5, +165, 88, 74, 81,240, 14, 39,211, 21, 46, 23, 10,174,241,140, 41, 17,143,143, 65, 60, 34,134,138, 44,154, 73, 99, 52,134,181,130, + 15, 77, 85,214, 22,114,129,115, 55,223,202, 95,253,137, 31,101,119,119,151,113, 28,185,231,238,187,106,200,134,240,196,211,223, +226,218,225, 49,197, 89, 88,132,166, 37, 3,184,208,159,236,115,124, 98,133, 71,206, 22,243,168, 69,137,161, 16, 90, 79, 80,129, + 28,205, 83,238, 61, 42, 9, 39,193,130, 76, 74,186,193,131, 47, 74, 33, 26,192, 64, 0, 34,100, 37,168, 51, 75,153, 55, 80, 5, + 37,219,192, 77,133, 69, 63, 16,130, 5,127,148, 84,152,107,196,105, 21, 80, 58,103,225, 56,206, 60,206,193,184,148, 20, 9, 72, +140,166, 62, 86,136,131, 21,139,206,187, 85, 71,224, 67, 75,168, 47, 98,212,145,178, 76,174, 26, 77,160, 89, 16,178,100, 75, 55, +171, 65, 13, 89, 33,229,132,244,153,206, 55, 56, 39,164, 65, 45,195, 90, 45,119, 96, 44,118, 0,123,113,140,106,187,168, 38, 24, +105,171,145,134,146,196,162,112, 25,153,132,150,152, 19,241,100,206,152, 60, 93, 16,202,162,101,140,198,230, 15, 62, 16, 66,195, +164, 89, 99,107, 91,104, 84,172, 88,235, 19,139,185, 37,227,229,146,140,196,165,153,162,158,182, 8,243,156,112, 10,107,211, 41, + 77,183,133,115,137,120, 50, 35, 59, 79, 46,142,210, 47,200, 2,231, 78,111,115,237,240,132,174,157, 67,132,197,226, 8,141, 61, + 65, 18,219,219,235,164, 18,184,124,208,211,118, 66,183,189,206, 65,191,224,206,155, 60, 79,188,116,192,119, 46,116,108, 78,166, + 76,215,166,192, 26,243, 62,210, 5,136, 49, 51,235,149, 66,195, 48, 14, 76, 99,207, 94, 26,185,244,242, 43, 4,177,221,155, 44, + 71,240,117,191, 62,166,154, 88,165, 16, 83,177, 2,174, 20,156, 23,198,108, 36,238,148, 10,109,104, 57,127,246, 12,199, 7,187, +204, 82,228,213,107,115,251,206,151,218,152, 26, 82,161, 41,178,121,243, 77, 28,143, 22, 38, 51, 27, 35,163, 42, 12, 25, 45, 61, + 55,221,124,158, 59,111,127, 29, 87,119, 31, 35,161,164, 98,123,233,116, 60,227, 56,101, 66,235,217, 59,200, 56,124,245,169,123, + 67,192, 6, 79, 19, 2,210,128, 23, 71, 83,139, 85, 17,135, 11, 74, 19,214,104,187,142,245,117, 75,214,202,197, 89, 3,160, 70, + 2,196, 89,124,113, 30, 97, 24,123,118,179, 5, 9,149,122,198, 89,183,111,161, 66,243,126, 48,204,103,195, 42,187, 60,231,196, +235,239,188,137,201,173,119,242,201, 71, 46,129,247,248, 96,214, 69, 45,145, 28, 35, 81,107,242,163,195,192, 53, 67,178,221,104, + 29,243,218, 90,187,176, 62,157,176,190,117,154,221,163, 35, 22,199,115,218,174,179,144,169, 18,107,198, 67, 33,198, 68, 89, 40, +151,119, 95,230,252,186,231,157,111,189,135,103, 95,187,206,222,238, 33,222, 5, 94,187,182,207,250,230, 22,235,155,107,164,222, +222,203, 33, 47,207, 72, 35,192, 81, 5,184, 70,149, 84, 74,172, 57, 22,197, 82,225,132, 96,204, 15, 12,214,227,196,190,207, 80, + 71,233,198,156,151,234,118,168,129, 47,234,200, 88,134,130,221,110,118,209,185, 96,232, 88, 81,211, 62,136,145,116,235, 88, 56, +115,223,125,247,115,247,221,247,112,241,181,215,120,253, 27,222,192,238,238, 46,187,215,174,211,184, 80,201,115, 22,150,146, 85, + 44,248,200,153,211,201,132,153, 22,211,235,234,209, 85,170,202, 60,137, 53, 63,174, 10, 75,151, 43, 4, 99, 0,212,130, 70, 61, +120, 69,115,180,194,196, 55,248, 80, 41,111,106,159,149, 56, 71,176,228,148, 85, 60,175,199, 66,177,140, 29, 99, 35,240, 66,182, +200,223,140,221,119, 82,144,108, 93,114,165,242,212, 20, 60, 75,149,211,213, 42, 34,219,133, 95, 60, 37,165,250, 44,100, 10,158, +126, 24,248,201,159,252, 41, 30,125,248,107, 44,134,158,135, 30,122, 39,143, 62,252,112,253,217,236,207, 49,203, 26, 20, 21,180, +152,117,153, 84, 40,234, 32,217,133,174,149, 54,151,197, 33,178,132,207,104, 54, 36, 99,137,228,100,209,153,182,211,178,252,242, + 34,190, 2,247, 11,170, 9,209, 84,147,177, 20,145, 84, 35,242,172,139,186,118,233, 10,187,123,123, 60,244,192, 3,188,243,161, +183, 51, 95,204, 57,222, 63, 96,118,124, 68, 63, 44, 72,113,176,220, 89,160,109, 91,238,186,227, 14,126,244, 71,255, 10,223,255, +190,247,242,212, 83, 79,241,123,191,247,123, 28, 31, 29,225, 36,215,177,238, 95,194, 17, 82, 42, 89,206, 50,218,114,182, 46,108, + 25,228, 96, 79,130,137,218,188,154,242,176, 84,138, 82,169,151, 21, 36, 75,131,210, 12, 57,145,114, 36,141,145, 82, 34, 37,217, +200,180, 20, 27, 65,167, 20,137,201, 96, 20,185, 36, 82,178,112,132,226, 20, 73, 86,237,149, 85, 96, 65,245, 72,103, 19,227,149, +229,150, 69,133,205,205, 13, 30,120,224,109,220,121,199,157,156, 63,127,158,182,109, 57, 57, 62,230,241, 39,159,226,211,159,249, +119,204, 78,102,150,238,163,166, 46, 86,177,253,159,115,134,154,245,206,194, 27,166, 19, 79,167,202,108,232, 25,146, 18,199,116, + 67,124, 24,130, 81,195, 44,128,142,148,139, 85,153, 18,200,178, 44,101,108, 71, 21,151, 64,150, 6,114, 49,236,160,237,212,133, + 6,139,143, 76, 44, 81,135,246, 50,249,234,133,181,147,192,212,170, 75, 3,131,203, 24, 73,138, 66,146,140, 95,238,213, 68,240, +174,224, 67, 13, 99,240,206, 58,251, 12,177,152, 78,162,104,253,188,138,161,105,113,169,218,152, 28,100,235, 50,236,128, 87, 38, +193,225,157,210,122,139,186,164, 20,124, 3,105,176, 75, 68,181, 64, 40,184,224, 44,158, 80, 66, 13,225, 80, 98, 78, 12,125, 61, + 12, 20,146,102,226, 80, 83,203,196, 49,142,153, 49,103, 98,137, 12, 37, 18,135,204,162, 6, 17,205,213,145,100, 2, 77, 67,211, +173,209,180,129,166,105,209,100,137, 74,227,220, 50,199,211,220, 58,225, 20, 19,195,208, 51,164,132,211, 6,215, 4,186,181, 41, +107,237,132,245, 83, 83, 54, 78,109,112,211,198, 41,110, 62,179,205,153,115, 55,113,238,244, 14, 59, 27, 83, 38, 19,143, 15,129, +221,253, 3,130,203,124,232,157,111,226,141,119,191,129,249,209, 1, 63,254,177,247, 50, 92,187,204,159, 61,246, 28, 71,139,158, +121, 63,112,178, 56,230,120,255, 10,235,235, 83, 74, 81,174, 94,191, 78, 26,122,212, 57, 58,239,153,141,137,197,162,167, 13,134, + 38,237, 99,170, 60,111,199,250,218,148,113, 76,156,204, 23, 43,222, 67,170,125, 79,240,142, 24, 45,213, 48,180, 29,235, 91,167, +217,218,220,194,251,150,105,211,114,180, 24, 8,161,225,142,243,183, 24,207, 90, 43,224,196, 65,219, 77, 57, 56,216, 55, 98, 22, +118,169,228,152,105,188, 99,182,152,115,199,237,175,195, 55,142,215, 46, 95,198,187,150,224,132, 88, 18,165, 40,247,222,121, 27, +155,107,167,104,189, 29,214, 99,202,164,164,228,152, 57,158, 45, 24,230, 35,139, 69,228,120,214, 51,155, 47,152,207,122,102,125, +166,143,153,249, 98,228,120, 54, 50, 68,203, 35,207, 89, 9,211, 0,222,211,248,134,181,181,142,201,250,148,126,140, 92,185,118, +221, 46, 78,107, 62, 45,213, 49, 70,198, 56,146, 83,186, 33, 6, 78,133,148, 35,109,104,240,211, 53,154, 2,151, 95,189,204,201, + 98, 32,165,140,212, 51, 97,140,177, 90,208,178,113,218,155, 96,246,201, 58,222,103,133, 18, 17, 3, 84, 53,129,156, 51, 41, 39, + 54,183,118, 8,237, 58,173, 55,200,209, 56, 46,208,170, 95,138,185,208, 72,225,221,111,187,131,231,175,143,188,244,202,101, 84, + 11,135,179,200,124, 88,176,185,185, 65,211, 76,141,203,209,180, 21,176,228,113, 62, 16, 92, 13, 83,169,204,118,170,112, 13, 45, +148,164,164,146, 13,220,147,108,162,212,247, 61,195, 56, 50,140, 35, 41, 69, 82,142,140,217,194,168,170,180,217, 98,184,193, 58, + 78, 49,162,168,175, 9,112,130, 84,240,141, 93,112, 43,157,131,111,248,246,183,191,141, 15,129, 16, 60,151, 46, 95,225,223,254, +209, 31, 16,156, 35, 99,185,235, 78,188, 37,211, 84,184,153,229,187,151,165, 12,106,185,189, 54,209,152,106, 77, 25,180,142,151, + 98,207,157, 53,163, 21, 48, 36, 14, 13,102,127, 20,181,133,115,193,253,165, 41,130, 21,182, 37, 44, 87,135,213,107, 45,238, 70, +192,151,150, 85, 3, 73, 73,213,230,173,171,212, 82, 8, 32, 25,239, 27,123,107,178,233,167,138,228,106, 95,118,166, 57,195,168, +123,214,198, 27,220,196,176,181, 66, 26, 71,158,122,234, 73,118,206,152,138,255,209, 71, 31,225, 27,143,125,211,156, 65,106, 26, +166, 32,212,226, 99, 73, 1, 46,245,162,247, 72,205, 71, 8,178,156,215,152, 34, 57,172, 62, 48,181, 15,198, 90,125,181,110, 79, +147,237,132,178,146,171,101, 76,213,146,186, 92, 77,164, 81,231,208,108, 73, 52,134,151, 21,190,254,248, 55, 89, 44, 22,124,228, + 7, 63,204,223,248,201,191,198,213,247, 95,229,185,239, 60,199,107,151, 46, 49, 95, 44, 12,143,122,250, 12,175,123,221, 93,220, +123,239, 61,244,195,192,167, 63,253,105,190,240,197, 47, 50, 91,204, 42,252, 5, 99,237,122,251,162, 52,143,198,249,118,161,246, +231,246,226,185, 92,234,120, 45, 65,118,203,160, 75,146, 55,202, 78,112,118,169,121, 49,255,183,136,167,241,150, 62,151,213, 68, + 50,118,145, 75,229, 35, 23, 27,213,177, 12,181,177, 75, 65,130, 67,164,173,169,117,133,168, 32,218,224, 72, 68,117,148,232, 80, +146, 61, 96,201, 0,253,174,190, 84,175, 93,124,145,223,250,205,127,197, 45,231,110,161,233, 58, 74, 74,134,182,125,233,101,226, + 48,226, 40, 38,252,241,142, 16,108, 50, 96, 17,128,106, 32, 1, 85, 27, 37, 97,217,231,167,212,252,194, 75,218, 16, 4, 24,172, +194,239,139,218,136, 56, 56,130,115,184, 92,127,239, 70,144,182, 65, 83, 66,138, 71, 66,203, 48,244,182,147,169,130, 62, 31, 60, + 52, 19, 66,202,224,109,247,218, 5, 79, 22, 40, 73,201,222, 87,138,149, 85,175,173,216, 52, 32, 73, 65,178, 99,226, 76,228, 33, +177,128,175,137,127,217, 20,201,206, 57, 98, 1,201, 22,107, 88, 4, 27,159,103,139,194, 20, 47,150, 88,172,138, 43,217,214, 42, + 57,163, 65, 56,165, 13,222,155,112, 10,177, 12,231, 16, 38, 20,236, 2,157,182, 13,125, 46,104,141,140, 28,139, 9, 16, 83,142, +168, 11,120,241,140, 57,162,161,208,228,209, 30,127,245,136,120,139,232, 45,163,101, 70, 39,235,148,154, 38, 27,178, 17,161, 31, + 7, 92,219,144,199,253,218,213, 4, 51, 21,138,195,139,210,117,107, 76,252, 26, 74,164, 65, 25,171, 5, 97,200, 35,154, 28,201, +247,184, 49, 80,230, 61,235,211, 6,137, 45, 40, 76, 39, 83,124,231,105, 82, 33,172,175,177,179,179, 97, 57, 52,197,113,251,173, +215,144, 28, 9, 27,231,120,244,185,215,120,251, 27,206, 18,110,186,151,123,222,250, 38, 62,120,112,192, 35,223,218,101, 60,137, +204,139,141, 5,103,243, 97, 5,108,242,141, 69,253,206, 98, 98, 72,182, 83,183,180, 57,243, 62, 47, 83,180,114, 44, 12,217,252, +235, 27,235, 19, 74,202, 12,201, 10,228,190,207,117, 74, 38, 12, 25,246, 15, 14,145,177,183,119,240, 47,229, 73,159,191,227, 54, +214,143, 35, 71,179, 30, 87, 50,154, 70,174, 29,236,219,187, 85,156, 69,134,170,208, 4, 43, 26,218,181, 53,174,238,238,178,181, +125, 43,139,241,105,134,225,144,147,166,173,209,178, 35, 39,125,207,249, 91,110,102, 51, 77,201, 57,115,114,220, 83, 52, 87,140, +169, 39,165,196, 24, 19, 99, 74, 80, 50, 67,138,228, 69, 98,177,160,146,231,140, 99,222, 56,193, 59,187, 68,138, 23, 58,111,118, + 82,215, 52,148,148,184,253,166, 77,250, 49,162, 57,179,232, 19,147,214,115,254,236, 54,195,152,185,184,123,204, 56,142,156,221, + 62,197,144, 11,141,131,233,218, 58, 47,188,118,196, 15, 62,120, 43,247,255,220,123,249,231,255,250, 97, 94,189,116, 64,104, 3, +185,228, 90,148,234, 42,186, 52, 38,115,227,196,104, 65, 40,203, 20, 48,169,211,131,156,237,119, 16,148, 16, 90,134, 33,213, 84, + 81, 95, 71,200, 70,255,163,192,238,225,156,188, 24,184,247,174,115, 60,243,237, 87,217,153, 58,102,139,136,142, 17, 71, 65,130, + 71,146,226, 92,139,115,137,182,113,164,148,200, 58,226, 75, 13, 46, 41,197, 98,168, 83, 34,250,196, 72,196,101, 67, 48, 47, 29, + 5,133, 66,142,145,164,150, 17,174, 88,183,187,108,168, 28, 14, 95, 65, 62, 62, 44,215,111, 53,243,161,118,198,224,240,106, 74, +110,149,202, 94, 37,179, 56,153,241,240,215,190,102,194,117,236, 25,211,124, 99,194,107,105,140,203,252, 8,136,162,248,202, 75, +137, 53,171, 51, 87,138,154, 83, 87, 83,231,196, 92, 63,222,213,113,184, 84,174,109,205,149,205, 66, 40,150,101, 18,176,207, 53, + 21,187,183,156,138,157,239, 25,154,170, 71, 64, 26,156,119, 53,131,192, 33, 53, 69, 77,202,141,221,185, 22,203, 14,240,217,184, + 6, 34,142,156, 77,108,233, 66, 32, 21, 3,182, 21,117, 55, 26,224,250,179,149, 98,211, 7,239, 92, 77,186,203,168, 10,187,123, +123,124,249, 75, 95,172,207, 8,171,207,212, 83,117, 81, 22, 45,103,133,143,104,101,222, 11, 69,150, 89,244,165,226,112, 45,114, + 55,102, 37,200, 50, 40, 71,151,245, 88,205,130,150,202,207,213, 82,189,159, 38, 36,177,250, 59,160, 75,148,108, 42,164,101,182, +175,111, 42,159, 29,158,121,230, 89, 94,121,245, 50,111,125,219, 91,249,174,251,222,196, 91,191,251,109,188,235,123,222, 85, 71, +128, 6, 67,216,221,223,227, 75,127,246, 23,124,243, 27,223,228,229,151, 95, 54, 65,137,111,237,187,201, 70,185, 43,213, 31,111, +113,194, 30,209,132,214, 17,141,212, 49,141,101,221, 86,112,255, 82,212,166,177, 70, 46, 56,163,102,105, 94,229,223, 22,108,244, +110,242,116,243,100, 87,108,143,253,142,206, 70, 58,182,139,182,184, 69,213,130, 74, 29,169,137,117,174, 86, 65,153, 77, 76, 28, +104, 50,182,176,175, 80, 7, 21, 71,168,158,254,239, 92,120,149, 23, 94,120,181,202, 43,172,255,205,174,198, 7,171, 67, 66, 67, +206,150,192,211, 96,221,139,115,134,119, 20, 41,182,191, 77,118,209, 56,239,144,198,173,114,120,131, 24, 73,171,235, 60, 37,154, +202, 61,147,136,125, 38,121, 43,190,130, 4,208,249,106,164, 9,182, 11,109,170,167,159,166, 88,213,173, 25,117,198, 39,182,135, +200, 42,223, 92,148,113,136, 4,169, 34, 73, 41,168,247,120,133, 44, 5, 87,149,213,102, 3,242,118,145,139,133, 22,168, 4, 19, + 45,134, 2, 93, 64, 7,179,246,164,154, 55,143,100, 59, 72,100, 41,192,179,226,138,250,242,143,174, 64, 18, 22,121,196, 74,172, + 76, 97,249,130, 26, 65, 48,143,121,101,133, 50, 4, 92, 93,179,208,163,193,175,246,140,206,129,208, 0,189, 65,137, 84,241,109, +107,224, 36,132,160, 14,151,148,210, 58,202, 88, 40,193, 98, 15,115, 54, 86, 66, 76,163,117, 37, 62,161,193, 51,246, 51,116, 20, +154, 78,232, 19,136,179, 46,169,145,137,177,181,131,117,153,228,129, 97, 1, 37,137,145,237,162, 39, 28, 11,146,205,146,162, 37, +210, 77, 59,166,147, 83,156,190,229, 13,248, 73,226,165,221, 5,254, 96,228,197,139,135,148, 79, 62, 69,233, 7,154,211,119,243, +208, 59,238,164,164,196, 98, 49,210, 15, 35,135, 71,115, 78,230, 51, 54,215, 54, 45,137,202,219, 14, 50,199,194,152,178,237, 69, + 75,198,239,116, 12,243, 57,139, 49,114, 60,159,145, 74, 97, 28, 19,235,231,207,160,146,153, 95,185,102,137,141, 2,227,152,105, + 26, 79, 30, 22,116,174,144,181, 97,210,118,156,140,209, 38, 24,105, 36,116,167,209,217, 62,253,241, 53, 3,214, 56, 49,171,161, + 78,140,106,166,217,220, 25,216,225,220,105, 97,152,159,176,190,182,193,153,157,211, 28,238, 95,163,196, 30, 39, 66,163,153,197, +201, 9, 99, 60, 3, 18,104,155,192,230,150,103,172,156,255,206, 7, 70,181,162, 36, 21, 69,114,102,136, 35, 89,197,172, 99, 49, +210,167,108,185, 7,177, 48, 14, 61,139,222,214,134, 7,117, 18,225,131,163,233, 60,147,233, 6,211, 46,211, 56,152, 12,137,245, +245,142,115,183,157,231,120, 62,114,249,248, 5, 38,204,184,243,238,187, 57,158, 39,142, 15,118, 17,231, 56,153,245, 92,158,195, + 27,238,191,155,243,183,189,192,229,235,135, 28,204,102,102, 83, 91,145,228,140, 0,182, 44,158, 82,201, 43,109,146, 33,218, 5, +215,216, 89,146,114, 50,222,119, 50,141,143, 43,134, 0,182, 84, 66, 97, 24, 35,136,114, 56,139, 92,221, 61,226,141,119,220,201, +230,230,105,214,166,129,228,231,140,243, 99,200,133,182, 13, 36,201, 56,201, 20,169, 73,100, 21,140,229,155, 96,107,136,172, 68, + 95, 40,157, 18, 82,102,210, 22,178, 70, 98,170, 32,173,146,145, 49,217,245, 80,187,203, 92, 50,213, 79,101,128, 44, 50, 37,217, +148,103, 28,204, 18,236,124, 91,133,176,149, 19, 18, 92,181,120, 86, 31,184,247, 86, 0,215,212,187,214, 45, 61,239,141, 89, 96, +197, 35,132,202, 66,169, 93,104,213,221,148, 98,200,213,160, 30,135,146, 70,179,194,226,155,106,196, 42, 72, 19,240,165, 54, 18, +181,131, 85,231, 41, 37, 35,185, 50,223, 67, 61,203,171,216, 27, 7, 69,146,137,208, 74,229,249,123, 27,241,151, 82,109,125,197, +104,163, 86,146, 44,173,146,102,213, 43,163,105, 40,150,145,171,246,179,214,110, 90,106, 71,111,177,117,214,140,138, 1,181,156, +152, 80, 85,197, 10, 59,167,174, 14, 26, 76,148, 90, 84,170,104,216,192, 99, 53,152,174,126,250, 74,170, 56,103, 39,161, 94,135, + 10, 37, 82, 28,100, 95,239,167,108,211, 98,185,245,174,215,107,168,217,173,127,249, 82,151, 21, 60,190,254,211,215,170, 69,106, +165, 83, 47, 27,117, 38,152,113,185,218,226,124,168,224,251, 90, 73, 52,178,242, 0, 90,138,206, 96,179, 1, 87,167, 65, 42,118, +144,135,250, 0,170, 84, 58, 91, 50, 37, 41,138,211,108,185,227,174,146,190, 42,218,209,156,247,106, 62, 65, 49,194, 78, 17,173, +106,193,229,229,233, 33,184,154,154, 84,247,248, 56, 92,227,241, 44, 61,212, 38,206,146,154, 84, 87,220, 18,161,111,227, 51,253, + 75, 52, 92, 42,124, 95,234,223, 89, 10, 20,103,151, 55, 90, 11, 15, 92, 21,121, 8,222, 99,227,126, 17,139,231,196, 40,109, 5, +173, 66,186,106, 37,245,117,100,163,197,252,167,185,218, 36, 92,221,247, 20, 37,166,140,115, 1, 23,150,190,104, 5, 23,144,162, + 4, 20,223,154,218, 86,139, 89, 55,116, 41,102, 84,136, 99, 49,106,157, 52,248, 54, 88, 92,168, 20,186,214,219, 30,203,190, 61, +156, 91, 30, 68, 85,239,225, 42, 23, 59, 69,203, 53, 54,211, 45,193,133,154, 77,110, 55,158, 21, 51, 75,129, 94, 64,154, 96, 93, +195, 56,146, 83, 77, 92,114, 88, 39, 25, 51, 41, 21,168,249,233,190,138,179,198,148,232,124, 75, 8,181,170,174, 62,220,101, 52, +161,195,198,150,104, 49, 56, 16,169,218, 6, 77, 60, 21, 53,217,136,222,123,198,146,235,115, 42,148, 6, 72,118,201,225,165,250, +150, 75, 21,236,153,141, 79, 48, 1, 31,106,223,143, 5, 22,213,124,226, 38,224, 39, 13,141, 90,209, 18, 87,207,101, 13,165, 78, +245, 3, 35,145,179,226, 93,107,171, 10,169, 66,159, 96,218,135, 89, 78, 16,149, 56,206, 73,163, 29,134,237,250,132, 73, 55,197, + 51,214, 14, 88,112,110,202,164, 85,114,116,248,137,157, 32,101, 24,232,186,134,136,217,150, 38,109, 11,173, 82,134, 68, 39,142, +249, 98, 65, 26, 35, 49,101,142, 23, 11,226, 16,201, 89,233,135, 5,243,177,175,217,211,230, 64,136,243, 25,169, 12, 12, 99, 98, + 28, 18,210,118,148,146, 24,102, 11,130,179, 80, 20, 85,104, 28,180,141,199,183, 13,235,211, 41,109,104, 56, 58,153,113,105,239, + 0,135,240,192, 59,223,195,252,104,193,254,222,101, 66,211,130, 86,251,212, 56,167, 9,129,217, 48, 44,183,139,136,192,198,218, + 41, 78,173,111,112,230,220, 77,236, 31, 70, 14,247,143,232, 26,161,159,237,177,232, 71,214,182,118, 56,123,122,135,180,236,140, + 92,221,141, 22, 97,226, 21,239, 2, 81,133,198,217,228, 33,149, 72,232, 26,200, 70,110, 28,134,136,199,147,114,178, 17,114,178, +223, 47,198,145, 82, 18,125,157, 94,140, 67, 50, 65,221, 95,210, 13,121,103,200,213,249,201, 49,235,157,103,231,236, 45,196,152, +112, 57, 86,177, 89,161,233, 90,214,183, 55,144,172,188,118,121,151,253,107,215, 76,132, 25, 44,179,205,190,251, 58,209, 20, 42, + 35,227, 6,211,163,113,194,250,198, 58, 93,219,209, 15,102,153, 19,215,144, 82,162,241,216,103, 47, 74,202, 6,186,138, 41,147, + 83,225, 39,222,247,122, 62,240,161,239,229,127,254,245,175,113,249,226, 30,157, 79,136,142,220,124,211,205,132,233, 41,156,135, + 92, 19,219, 98,206,214,169,213,164,180, 82,207, 14,154,137,129,113, 74, 38,212,240,158, 62,102,188,154,110, 34,141, 67,117,183, +152,197,212,156, 1,182,123,214, 82,203,232,156, 43, 85, 94,204, 33, 85,125,228, 46, 4,211, 2, 57, 91,179, 73, 13, 4, 19,197, +206, 89, 23, 16, 85,154,198, 89,180,178,232,242,180,193,230,214,216,221, 82,247,232,120,143,215,186, 50,117,178,194,140,248, 80, +239,144,122, 38,160,149,108,234,128, 92, 79,253,128, 77, 86,181,173, 5, 66,169,157,178, 61, 75,193,155,204, 63,215, 49, 63,217, +220, 95,174, 89,130,109, 12,229,139,207,164, 44,140,125,101,157,144,170, 56,116,137, 83,183,251, 98,105,239, 41, 26, 9, 98,100, + 63,173, 46, 33, 89,222,167, 44,143,118,107,244, 86, 86,112,183,252,222,170, 27,162,148,202,137,177,255, 87, 46, 85,202,232,100, +101,135,243, 78, 48,130,131,233, 16, 68,164,230,214, 91, 67,148,163, 18,212,249, 58,150,230,198, 72, 91,106, 10, 80, 77,116, 81, +167,182,148,175, 91,134, 82,189,202,165, 72,229,196, 91,166, 45,197,188,161,150,139, 91,119, 31,169,142, 28,138,128,199,172, 78, +171,196,122,243,120,139, 22, 52, 37,226,210, 65, 88, 61,122, 90, 76,148,224,196,225, 29, 53, 73,200,173,188,182, 57, 11, 18,236, + 66, 75, 37,147,212,196, 5,190,118,176, 32,241, 14,215, 0, 0, 20,218, 73, 68, 65, 84,170,102, 91, 72,163,210, 4, 95,133, 20, +118, 72,250, 10,111,201, 85, 8,129, 19,156, 47,164, 49, 87, 44,174,145,228, 68,177,174,175,122,237, 85,157, 9, 52,176,139, 76, +107,167,173,248,234,215,180,177, 11,181, 42,213,100, 95,156, 15, 30,245, 6,135,113, 8,161, 13,213,254, 34,184,166, 37,136,121, + 68,139,220,120,113,212,149,149, 87,183,100, 65,165,161, 46,178,172,115, 47, 66,227, 90,146, 12,140,165,224, 71, 95,185,211,213, +188,235, 28, 89, 28, 65, 10,237,164,224,104,201, 37, 51,142, 35,226, 19,163, 58,198, 88,240,222, 91,150,178,100, 98, 86, 28,246, +114,250,198,190,239,152, 0, 13,149, 84,151,104,171,101, 72,139,144, 83,182, 93, 24, 66,138,153,166,149,122, 88, 22,124, 18,146, +250,154,107,156,109,191,156,204,238,179,156,254,100, 50,190,109,173, 11,160,144, 72,164, 44,171,140,223,166,117,164, 40, 53,250, +180, 88, 39, 29, 60, 18,132, 60,212,151, 42,216,157,218, 73,139, 15,118,160, 65,187, 66,175,122,231,208, 46, 83,178, 85,255,144, + 44,153,216, 11, 78, 58, 59,100,178,229,178,143,234,136, 57,209,144, 81, 95,208,228,209, 52,214,200, 92,143, 27, 29,190, 49, 33, + 86,206,133, 0,148, 46, 88,170, 93, 82, 92, 87,133, 66, 41,131,247,166,194, 12,182, 90,240,185, 33, 74,162, 9, 45,154, 34,222, +123,114, 82,198, 52, 48,105, 91,196,101,130, 19,202, 56, 16, 51,100, 39,140,243, 26, 73, 89, 50,115,205,134,149,205,137,147,124, + 2,141,189,204, 27,107, 45, 41, 9,139,152,153, 78, 58,110, 93,155,210,199,200, 52, 76,160, 17,250,197, 17,215,119, 71,250, 52, +152,206,226,212,142,137,141,134, 72,210,196,152, 19,113, 54, 99, 46,158,197, 98,198, 48, 24, 98,181, 93, 91,227,230,115,183,115, +112,184, 15, 89,137, 26,233,115,166, 20,232,218,134, 50, 63, 97,126,114, 76, 44, 35,121, 76,230,154, 41,133,105, 19,240, 65,232, +146, 67, 74,166, 79,133, 16, 60,195, 48, 48,157, 78,137,243, 57, 27,107,107,204, 22, 83,252,244, 20,253,193,117, 78,250, 57,131, +102,206,159,221, 97, 18,106, 52,101, 42,117,173, 2,189, 42, 90,162,113, 20, 80, 82,170, 19,179,122,226, 59,231, 80,231, 73, 5, +218, 73, 71,147,215, 76, 9,189, 97,205, 65, 83,109, 64, 57,103,163, 48,166,145, 62,141, 44,134, 66, 31, 45,109, 48, 70,152,208, + 49,198,204,213, 75, 23, 1, 8,161, 49,231,136,115,104, 63,114,112,112,204,100,210, 17,164,112,122,103,157,146, 51,167,166, 19, +230,163,114,120,116, 72,206,229, 70,183,236,106, 36,180, 80,207, 75,165,159,155, 99, 38,139,224,125, 75,137, 61, 94,148,132,161, +182,189,247,248,188, 84, 57,103,156, 40,143, 62,183,199,173,119, 94,226, 3,111,217,230, 79,246,175,176,123,216,179,179, 57,193, +183,141,133,224, 20,143, 72,131,232,136, 83, 35,179,133,224, 24,115, 66,147,160, 65,113,165,135, 88,181, 2, 1,138,120, 66,168, +215,131, 40,205,100, 98, 90,169,170, 5, 16, 45,164,202, 3,208,146,108,236,171,182, 99,207, 37,211,148,101,180,104,237,176,221, +178,145, 74,230, 74, 72,182, 46,213,104,211, 84,231, 60,131,247,136,243,184,198,156, 84,109,229,225, 75, 48, 86,135,137,132, 13, +122,102,205, 82, 37,212,228,100,147,204, 98,103,212, 18, 97,236, 48, 53,187, 57,126, 12, 91, 46,165, 16,154, 64, 82,243,111, 75, + 49,166,138,136,161,174, 71,117,248, 2,197, 27,168, 39, 87, 45,150,195,206,216, 54,216, 5,171,209,190, 47,231,129,100,211,166, + 82,177,164,190,170,223,139,164, 21, 70,221, 9, 53, 22,216, 44,125, 86,184, 88,118, 61, 85,120,238,185, 49,189,241, 53,230, 60, +217, 56,192, 86, 41, 42,104,109,100,140,164,104,154,162,198,172, 8, 21,180, 6, 69,204,129, 36, 62,212, 96,181, 42, 88, 14,166, +216, 15,140,182, 39,147,154,219,237,151,163,118,150,221,250, 13, 24, 11,222, 33,206,118, 56,185,254,165,169,142, 73,197,137,141, + 54,165, 80,138, 91,229,245,106,162,178,189,125,253, 96, 44,204,194, 42,100,227,165, 11,201,210,236,188,171,212,165,140, 86,225, +147,137, 12,156,237, 89,168,149,236, 56, 2, 38,220, 42,152, 24,194,173,194,101,170,192,219,217,216, 29, 41,120, 53,234, 90, 42, +224,130, 93,146,146, 87,155,249, 42,104, 83, 52, 91, 16,196,234,119,174,213,149,212,208,190, 37,167, 33, 47, 35, 10, 75,169,161, + 18, 86,108,100, 92, 13, 10,169,147, 12, 23,106,177, 96,163, 93,173, 81,155,182, 19,113, 52, 82,137, 89,154, 80,103,157,127,240, +214,121,151, 80, 39, 29, 90,193,184,173, 77, 72,164, 20,171, 52,179, 7,151,137,154,204,251, 45,166, 54,117, 94,170,162,211, 17, +213, 44, 25, 62, 56,188, 56,178, 4,124, 72,172, 5, 75, 79, 11, 57, 87,186,159,169,197, 29, 82,137, 92, 85, 69, 89, 28, 42,137, + 98, 99, 24, 20,165, 9, 16, 90, 33,101,131, 75, 4,103, 15,113, 66,160,238,210, 74, 81,114, 31,173, 67, 17, 87, 33, 80,222, 86, + 17,154,160, 56, 74, 20,156, 87,219,105, 97,207, 85, 8,185,162,126, 5, 52,145, 84,144, 12,193, 9,169,216,224, 93,189,181,246, +185,140,203,122,182, 82,166, 4,200, 70,167,243,172, 80,157,193,217,222, 51,151, 82,213,179, 74,201,208,250, 14,215, 20, 84, 35, +154,237,192, 80, 6, 50, 82, 87, 52, 86,108, 74, 80,164, 20,210,201, 64,108,172, 35,241,189,137,235, 18,153, 17, 59,124,130, 19, + 91,101, 8, 12,149, 15, 32,174, 62, 7,125,193,235, 82,203,106,227, 54,157,180, 53, 47,217,148,180, 57,101, 74,227, 25,227, 2, + 34,182,163,246, 86,164,206,147,121,228,139, 43,117, 82,210,217, 94, 51, 37, 74, 54,100,165, 43, 86,224, 30,159, 44,104,138, 35, + 4, 97, 22,204,154,227,101,139,230, 84, 15, 57,144,138,167,164, 1,141, 16, 93, 66, 93, 98,130,194,218, 6, 59, 56,250,249, 17, +243,217, 49, 49,143, 12, 99,228,234,238, 53, 90,103,246,156,101,241, 45,128, 15,129,131,227, 19,139,149, 77, 17,239,132,214, 57, +214, 26, 79,104,108,239,217,116,158, 56, 42, 62,219,206, 89,196,178, 11, 22,253,192,233,141,211,184,114,204,236,228,184,118,182, +142,237,181,134, 51, 59, 19,198,193,186,185,226,133,109, 87, 8, 69, 25,164, 49, 43,162, 90,186, 89, 78,150,196, 22,139, 89, 82, +155,154,105,144, 99, 33, 82, 44,231, 94, 60,206,181,164,104, 35,121, 23, 60,234, 45,197,208,249,204,154,179, 73, 79, 78,150,133, +222,224, 24,116, 36,245, 61,177, 31, 76,104,216, 47, 88, 44, 70,134, 33,146,115,102, 44, 54,154,110, 66, 75,104,167, 21, 66, 19, +216,156, 40,211,206,213, 96, 24,179,202,197,148, 41,185,112,211,214, 58, 27, 91,155, 38,198, 28, 7,114, 44,244, 57,211,231,129, +152, 18,234,171,234, 27,101, 77, 28,190,109,136,189, 21,146,147,182, 97,127, 46,252,217,195, 23,248,165,191,243, 30,222,247,238, +187,249,103,255,226, 79,121,101,247,152,201, 36,160,174, 37,141, 22, 30, 80,162,173, 2, 27,241, 20,245,102, 37,245, 90, 85,226, + 80, 58,129,209,242, 61,172,241,177,243, 71,156, 66, 22, 27, 56,133,134, 16, 2, 13,129, 84,215,152, 90,179, 34,164,158, 21, 41, +231, 26, 73, 91, 89, 11,197,166,138, 49,219,229,239,150, 81,113,197,138,123, 19, 98,214,118, 80, 19, 37,143,100,129, 40,174,142, +176,221,202,126,103,147,222,132,215, 96,196, 82,176,148, 61, 49, 81, 93,201,102,111,148, 32,117, 36,109, 83, 22, 19,197, 89,195, +153,170,205,218, 73, 38,105,192,167, 92, 1,102,101,165,122,103, 57, 53, 13,118,239,217, 57, 14,131, 42,196,100,147,219, 96, 8, + 92,231,151, 77,162, 77,210, 74, 37, 29,221, 16,221,107, 69,125,187,122, 83, 20, 84,109,218, 96,218, 4,197,235, 82, 60,103,218, +143, 92,245,105,230,216,180,201,216, 82,223, 32,170, 6,224, 18, 59,215,199, 74, 95, 21,196,166,210, 90, 12, 23, 87,106,209, 18, +108, 69,234,235, 42, 58,168,115, 43, 78,175,253,189,193, 46,142, 37,128,160,142,196,109,143, 80,208, 98,227, 57,138,189, 56, 22, +104, 86,187, 93,150,225, 47, 55, 18,223,108,199,238,173,219,207,185, 6,187,152,210, 89,150, 57,176,206,118, 57, 82, 74,197,227, + 53,248,106,109, 2,235,210,195,114,140,231,189,125,105,174, 1,239,104,196,118,169, 13, 14, 41,150, 73,171,181,114,211,165,226, +187,142,249,197, 87,105,248,242,139,173, 1,243,170, 3,174,216,101,109,202,115, 27, 11,175,226, 20,139,174, 60,251,213,201,129, + 52,245,178,119,185,142,130, 50, 74,180, 15,222,155, 38, 65, 42, 99, 89,235,192,189,134, 60, 91,192, 10, 53, 98,216, 43,141,107, +112, 65,107,183,234, 73,106, 66, 45,219, 75, 47,173,106,246,194,153, 72,211, 4, 60, 90,108,221, 80, 92, 64,146,174, 46, 85,177, +254, 23,241, 66, 88, 74, 31, 86,168,222,101,161, 96, 21,179,132, 66,147, 29,177,220, 32,193,213,111,145,152, 76,241, 90,212, 94, + 98,231, 2, 67, 46,196,190,106,233,157,167,109,140, 63,223,134, 58,102, 19,101,158, 99,205, 9,142, 20, 53, 60,108, 78, 54,250, + 45, 1,178, 88, 53, 47,201, 84,233,173, 56,130,179,233,136, 3, 82, 99,197,128,170, 35,101, 64,172,232, 19,231,236, 80, 80,143, + 87, 71,104,160, 79,222,112,214,212,195, 73, 51,181,196, 51, 62,187, 75,104, 91,253,202, 57, 35,193,227, 52,153, 37,179,215,250, +121, 26,206,115, 57, 85,113, 54,207,195, 5, 27, 9,118,117, 39, 95,162,109,202, 18, 66, 95, 82,133,217, 22, 68, 38,181,131,177, +117,143,185, 36, 44,128, 65,124,180, 92,250,122,128, 52, 98,128, 15,169,163,124,231, 3, 49, 25,108, 37, 21,177,159, 81, 32, 69, +203,151, 75, 14, 75,249, 43,138, 47, 25, 72,168, 38,242,208, 51, 38, 27, 13,138,179,130,217,103, 37, 21, 27, 45,186,193, 83,242, +220,118,173, 62,152, 8,177, 20, 28, 35, 37, 37,138, 6,186, 16,112, 14, 22,197,138, 70,145,192,186, 59,195,198,198, 22,125, 74, +104, 73,204,143, 79,200,121, 96, 49, 38,154,198, 44,113, 33,120,154,166, 97,119,111,159,146, 35,107, 19,207,180, 11, 56, 23,152, + 54,134, 15,238, 99,180,206,211, 53,244,140,148,108,130,165,147,217,156,166, 13,156, 46,145, 46,100,118,175,237,161, 57,146, 83, +100,251,220, 89,242,116,131,227,217, 49, 82, 10,147, 83, 29,167, 78,173,161,163,167, 35, 49,245, 29,147,105,192,183,230, 60, 48, +113, 78, 65,218, 27, 19,190, 54,192, 34,141,228,226, 9,210,144,211, 64, 44,153,152, 70, 14,143, 70,102, 39, 61, 89, 6, 83, 31, +139, 88,167,164, 14, 45, 29,237,116, 74,167,137,245, 86, 9, 59, 21,104, 83,122,114,206,184,177, 48,166,129,163,249,156, 49,142, +164, 81, 25,198,194, 34, 42,195, 48, 34,206,130,101,156,111,152,116,245,204,114, 66, 19,132,157,205,117,214, 54,183,141,213,144, +147,173,130, 74,230,181,235,251,188,122,241,114,205, 66, 55,209, 85,159, 19,231,207,238,208, 53, 13,254,100,206,250,198, 26,184, +142, 75,215,103, 92,218, 61,225, 99, 63,246,195, 76,166,103,249,213,223,250, 12,126,109, 27,130, 97,136, 83, 52, 38,125, 63,212, +192, 44, 95,136,163, 81, 29, 93, 41,118,102,131,141,106,197,200,103,193,153, 31,223,139,173, 11,125,181,136,165,229,184, 91,108, + 28,236, 93,107, 93,179,128,102, 71,231,212, 44,199,226,173,123,198, 4,213,169,138,198,180,234, 57,146, 38, 52, 89,215,169,229, +198,170,211, 50,202, 21,239,205,103,190, 28,235,199, 58,163,196,153,239, 93,106,144, 86,211, 52,248, 58,177,117,174,174,171,181, +216, 90, 75,151,219,109, 59, 95, 69, 28, 41, 69, 60, 66,235, 61,189, 83, 19, 86,146,113, 14,123, 14,107, 48,153,138,224, 83, 5, + 25,137,253,254, 36,147, 90,107,168,171,225,148,140, 91, 47,206,254,101,245,236, 21,234, 36,184,152,232, 78,156, 71,178,153,213, + 20,200,110,233, 16,178,105, 67, 34,155,194, 31, 76, 20,156, 11,161,166,129,170,203, 21,119,108,200,113,245, 5,141, 84,151,145, + 53, 52,174, 10,216,109, 53, 90,181, 75,181,121, 21, 49,209, 97,201, 74, 44, 66,112,222,219,151,206,242,206, 17, 59,144,196,164, +136,141,171, 96, 2,164, 86,100, 74,241,213, 61, 86, 71, 48,203, 93,115,169, 99,124, 17,103, 59, 98, 48,181, 56,106,225,240, 62, + 84, 68,171, 17,162, 76, 25, 10, 46,203,202,211,237,138, 61, 88,136,172, 38, 6, 78,188,137,176, 82,164, 36,235,222,139,100,139, + 66, 21,197,249,182, 94,210,163, 65,245,157, 9,234,156,247,148,100,129, 46,234, 66,197,214, 22, 84,171,253,161,140,171, 15, 74, + 5,188,214,191,119, 73,238,169,251, 17,113,174, 90,206,212, 10, 25,139, 37,178,162,197,217,129,175,130,137,252,178,214,220, 98, +181,214, 25,251,115,156, 15, 22, 85, 95, 59,254,152, 11,174, 30,192, 89,160, 75,178, 74, 14,203,154, 8,141,162, 99,162, 56, 83, + 56, 23,103,179, 14,201, 2,161,179, 18, 86, 70,252,210,168,214, 77,237,191, 43, 6, 67,132, 10, 71, 17, 99,147, 91, 88,200,136, +250,174, 38,234,217, 37,228,162,146, 27,236,146,213,106,231,145,108,104,215,108, 99, 39, 45, 22,185, 26, 28, 44,162, 34, 4, 26, + 47,149,210,103,133, 93, 87,195, 22,114,174,221, 48,174,114,246,141,100, 21,196,108, 70, 41,103,196, 57,218,224, 45,238,180,113, +248, 42,114,201, 20, 82,117,121,122, 49,113, 74, 94,238,177,188,160,161,144,146, 64, 95, 40, 19, 79,118,130,247,169,170, 78, 13, +164,227,196,236,108, 77,129, 62, 23,154, 44,166, 90, 87,207, 88, 76, 84,168,222,226, 70,157,218, 37,232,156,224, 75,160, 31, 19, +184,140,248, 14,209, 6, 29, 51, 89, 50,243, 26,214, 48,169, 95,244, 64, 66,188, 71,179, 89,233, 82, 28, 43,183,188, 37,248, 2, +154,241, 98,130, 46, 84,151,225,137, 22, 38, 82,113,204, 82,215, 56,185,134,249, 40, 2,121,180,233, 78,201,132, 73,160,100,208, + 92,192, 5,130, 55, 76,177,211, 14,193,124,201,217,165,154,232,149,136, 37, 18,199, 66, 86, 99, 68,219,123, 87,104, 90,155,164, +180,106,164,200, 28, 99,157, 90,100, 22, 37, 17,124,174, 26, 12,111,154,139,152,106,202,157,233, 53,214,167,155,140,100, 72,166, +121,216,222, 57,197,154, 70,242,152, 88,156,156,172,222,167,152, 96,218, 65,170, 19,211, 18, 51, 49,143,108,174, 79,201, 76, 57, +153,205,107, 17,108,237,215, 56,140,248,110,194,209,252, 21, 58,151,241,206,115,120,148, 89, 60,119, 17,209, 76, 27, 2, 71,253, +130,227,131, 14,130,195, 75,166, 33, 32,141,199,139,195,133, 22, 21, 97,125,179, 65,143, 76, 33, 15,129, 38, 52, 8, 13,126, 18, +200,162, 16, 90,156, 10, 27,205,148,172, 61,161,157,226,137, 38,190, 74, 74, 31,163, 41,135,221,210, 82, 90, 61,238,146, 76,172, + 25, 54,112,161,176, 54, 41,180, 34,132,110,100,109,205,132,167, 7,253,192,222,254, 17, 99, 63,162, 37, 17, 75,102, 28,109,247, +154, 82,102, 28, 51,197,195, 65,127, 76,184, 62,199, 53,129,105,219,178,189, 97,163,243,145,166,198,185, 42,222, 43, 94,140, 27, +191,125,243,237, 28,204, 18,177, 92, 67, 37,160, 41,211,199,196,167,191,250, 52,119,190,245, 33,238,125,224, 1,254,122, 9,124, +226, 83, 79, 33, 26, 57,115,182, 53, 97, 89,201,140,243,194, 32,145,152, 51,101,176,243, 56,151, 76, 42,144, 98,164,100, 71,198, + 87,125, 14,140,217,147,179, 48,105,237,188, 78,117,215,219, 56, 76,215,226, 12, 2, 84, 74,229, 24,212, 65,154,111,166, 6, 84, +201, 74,240, 22, 93,236, 75,107,235, 72, 64,187,140,138, 90, 92,183, 26,178, 54, 39,227, 6,148,100,142,129, 36, 74,201, 54,161, + 80,205, 72,177, 28, 15, 91, 85,216,236, 92,213, 49, 46,236,210,247,193, 86,156, 46,217, 10,215, 55, 2,165,193, 73,194,183, 54, +213,243,171,148, 15,123,215, 68,151, 22, 50, 3, 6, 57, 64, 74, 38,136, 77, 7, 20,197, 21,143,115,230, 14,177,181,137, 61,196, + 6,228, 89,250,192,235,185, 46,230,148, 50,113,191, 86,139,122,205,195,168,235,100,239, 60, 78, 13, 72, 43,150, 79,100, 66,242, +154, 75, 82, 42,126, 47,166,186, 79,207, 22,241, 45, 78, 8, 89,136,165, 78, 15,140,194, 98, 66,218, 26,160, 33, 85, 57,239,196, +217,228,118,185,230,175,211,229,214, 9,114,238,246, 55,104,235,116,165,212,179, 29,144, 86,168,124,133,151, 84, 10,142, 23,219, +111,228, 85, 74, 89,174,119,191,175, 54, 33, 27,125,218, 31, 83, 42, 76,224, 70,231,110,210,124, 27,203,216, 46,195,155, 32, 75, +179,153,235,169, 10, 64,155, 35,152,117,209, 9, 90, 71,240,138, 89,209,124, 17, 8,222, 14,122,172,251,137,209,168, 82,246,225, +218, 65,105, 30,119,169,254, 71, 95,139,143,234,232,211,202,224, 93,238,112,212,118, 88,158,170,160, 22,187, 40,114,205,132, 19, +105,240, 90,139,154,229,128, 94,108,164, 98,202,247, 37, 88,160,170,251, 5,235, 62, 75,169, 75, 95, 91, 39,248,101,141,229,188, + 61, 52,206,255,255, 77,157, 75,139, 37, 69, 16,133, 79, 68,100,214,189,211,190, 6,231,225,204,232,128, 8, 34,184, 18,183,238, +252,213,254, 1,119,110,213,133, 8,186, 17,193,141,142, 76,223,170,138,204, 8, 23, 39,170,218, 85, 67,211,208,175,170,204,120, +156,243, 29, 10,166,160, 24,226, 53, 94, 21, 38, 20, 73, 98, 14,175,157, 84, 71,111, 2,175,127,174,246,165,252,138,173,148,249, +220, 17, 29,213,247,169, 78,146,194, 14, 6, 5,100, 83, 38,105, 88, 9,184, 68, 41, 80, 75, 35, 1, 7,172, 65, 66,216, 37,198, +118, 78, 23,178,188,145, 49,202,174, 82,104, 88,105,165, 32, 69,199,242,168, 67,179, 35,125, 32, 45, 17, 42, 72, 95, 57,109, 17, +218,243,182,122,150,186, 4, 55, 36,141, 68, 59, 40,199, 87, 57,248, 51,183, 54,234, 91, 43,181,142, 98, 64, 36, 54,103, 72,202, + 16,238,160,150, 43, 93, 26,126,207,203, 98,233,236, 36,229,216,109,178,109, 97, 21, 95, 79, 46,145,152, 15,200, 98, 53, 57,115, + 14,124, 4,102, 52, 64,137, 7,102, 65,211, 8,223,176,134,244, 32,121,203, 26, 36, 43, 20, 99, 80,254,216,170, 27,154, 57,177, + 40,213,190, 3, 2,100, 67,196, 64,107, 70,142,128, 4,154, 49,101, 44,102, 98, 42, 99, 68,187, 5, 38, 40, 42,186,154,192, 35, +152,197, 93,194,192, 24, 65, 4,170,112, 38, 52, 51, 96, 40,154,151, 37,196,147,190,233, 57,128, 14, 10,196, 60, 79, 34,149, 4, +139,117, 15,118, 37,164,193, 49, 50,118,228,113,152,213,187, 32,129, 17, 43, 26, 26,139,128,224,251, 12,229,247, 9,163,240,210, + 55,199,182,222, 48, 99,167,214, 98,225,225, 57,198,196, 85, 3,210, 30,225,182, 15,228,220,185,178,177,134, 23, 47,158,226,238, +238, 49,166, 7,110,111,254,196,239,127,252,133,155, 3, 47,158,127,132, 71,239,189, 3, 76,197,229,218,145,166,144, 80, 44,166, +208, 46, 88,132,129, 62,189, 84,214,210, 13,125,161,200,113, 1, 69,141,104, 64, 95,174,184,235,244,105,239,201, 78, 85, 67,177, + 23,175, 32,125, 69,107,236,250,210,121,102,141, 57,207,206,175, 13,224, 30, 0,116,192, 60,225, 30,240,216,145, 38,167,182, 72, + 77,177, 99,208,159,126,227,185, 36, 25,240,233,136, 16, 12, 15,108,251,141, 35,247, 49,176,110, 43, 54,103,104, 78,235,132,170, +220,223,110,216,239,111, 96,201,108,104, 6, 60,254,224,125, 92,222,125,138,125,191,135, 97,240,153, 58,210,234, 0, 60,121,249, + 2, 95,126,241, 26,159,125,250, 10, 63,253,252, 27,222,252,253, 15,150, 75,103,170,226,164,173, 43,149, 30,248,136, 64, 95, 26, +238,218, 35,160, 37,214,109,197, 92,189, 4,135, 59,223, 53,101,179, 54,157, 92,122,215, 6,247, 1, 76,131, 87, 81, 46,214, 49, +247,114,163,244, 36,179, 36,146,145, 55, 66, 33, 93,231, 6, 25, 30, 44, 8, 99,140, 18, 45,179, 25,202,242,200,107,146,111,130, + 3,104, 22,156, 94,248, 44, 97,116, 4, 11,131, 18,101, 19,106, 83,196,184, 26,211,103,204, 83,175, 64,191,248, 65,158,235, 21, +112,194,102,139,206, 37,173, 0, 50,186, 11,154,150,230, 38,153,209, 17,189, 82,252,146,202,243, 17, 15, 65, 42, 25,138,136, 9, + 45, 40,137,227, 32,144, 22, 42,191,108,175,162,198,162, 82,178,142,220,226,229, 43,155,165,204,242,150,151,123,152, 22,248, 26, +233, 11, 67,106,172,160, 69, 25, 65,187,175, 82,220,141, 6,152, 20, 1,180, 36,224,113, 82, 71, 42,122, 91,128,156, 92,127,165, + 0,242,252,245,103,217, 15,212, 30,180,186,204,146,106, 41, 21,229,140, 48, 52,138,204,216, 62,148, 23,139, 63,136,150,111, 48, +165, 2, 35,106,212,130,164,245, 65,114,224, 48,124, 20,194,134, 31, 75, 68, 32,101, 91, 35, 30,190, 50,144, 85,207,172,117,126, +221,177,219,160,226, 93, 0,132,105,197,208, 81,201, 42,162,116, 97, 24, 71,238,166, 28, 65, 31,126, 75, 42, 39,216,165, 74,240, + 79,147,149,156,131,170,122,154, 54, 70, 78,202, 1,224,121,200,244,157, 17, 36,157, 85, 42, 78,166,210,210,102,117, 83,228,172, + 24, 79,150, 10,140,205, 27,188,116,149, 42,109,148,173, 65,117,129, 40, 9, 68,170,244,182,241,240,101,241, 65,155, 28,125,166, + 99, 38,154,118,168, 82, 16,168, 10,160, 53,216, 89,229, 38,250,113,241,218,133,157, 97, 58,125,225,194,106, 53,208,208,154, 34, +125,175, 64, 70,197,144, 9,193, 66, 15,111,173, 36, 18, 29,211, 55,168, 68,177,180,219,131, 24,228,172, 20, 5, 37,241,168,169, + 5, 47, 75, 51,131,161,115, 12, 39, 2,109, 87,104, 4, 34,189, 38, 65,220, 97, 91, 85,153,138,168,152, 92,242, 13, 22, 89, 32, +145,216,146, 43, 25, 65,226,178, 24,124,196,233,141,190, 52,190,176, 35, 2, 22,137,222, 13, 35, 20, 57,248, 91,181, 14,126,110, + 70,173,126, 88, 56,101, 38, 53, 24, 57, 41,104,116,190, 8,158,252,123,170, 52,104, 35,169,110, 34, 49,149,207,242,184,119,116, +105,240,218,133, 55, 17,116, 3,246, 16,180, 34,235, 29,129, 33,237, 16, 9, 5, 57,250,172,191, 72, 78, 51,101, 58,215, 28, 19, +150, 64,191,112,188, 56,182,193,181, 73, 5, 78,112, 4, 42, 20,125,166, 66, 26, 57,250, 45, 73,181,226,122,108, 47,251, 17,159, + 25,170, 99,121, 96, 70, 18, 92,132,166,152,251,198, 78, 41,152,225,189,198, 10,137,138,107,172,125,107,179, 14,157, 66, 30,120, + 30, 43, 48,250,172,103,240,125, 60,231, 82,166, 76, 1, 27, 1, 91, 20, 97,128,140,192,186, 13, 24, 38,145,186, 49, 32, 50, 17, +131,100, 51, 31, 94, 72,105,224,237,253,142,102, 13,159,188,122,205, 93,110,118,124,251,205, 87,248,245,151, 31,241,221,247, 63, +224,195,103, 31,227,114,119, 69, 14,170,166, 69, 5, 54, 19,166, 29, 48, 66,113, 76, 27,236,194,194,185, 47, 68,159,154, 24, 46, + 11, 17,182, 98,156,234,221, 93, 47,212,128,216, 21, 88, 58,252,237,134,136,149, 16,146, 69,208, 50,176, 72, 98, 15, 67, 88,194, + 60,177,152,226,182, 79,226,178,141,221,105, 43,245,122,143, 6, 55, 94,202,195, 57, 65,139,160, 16, 48,110,117,248,254,239, 98, + 72,153, 24,251,138, 8, 96, 12, 96, 93,223, 98,250,196,190, 77,184,111,248,119,223, 24,219,234,142,183,235, 13,155, 15, 54, 21, +203, 21, 51, 8, 29,233,151,142,222, 13, 10,171, 9, 90, 98,236,142,125, 50, 64,234,235,207, 95,226,201,211,103, 12, 21,154,206, +204,251,203, 5,161, 19,195, 3,178, 57, 90, 87, 76, 91, 48, 66, 17,219, 14,228, 32, 67,220, 12,195, 3, 41,137, 46,197,198, 7, + 65, 99,185, 57,167, 77,197, 83,245, 32,142, 84, 58, 67,181,124,212,121, 39,134, 61,192, 20, 64, 34,213,224,147,194,186, 0,233, +117, 82,209,161, 82,241, 48, 86,205,222, 60, 8,165,117,246, 11,120,121, 19, 75, 59,153,107, 49,179,168,160,147,133, 56, 33, 21, +149,246, 29,213,107,242,121,214, 0,208,137,133,205,164, 83,202, 14,135,185,234,185,186,109,198,119, 88, 68, 79, 49,114, 36, 96, + 89,120,107, 86,229,216,133,151,242,220,198,131,147, 73,170,161, 19, 54, 5, 40,235,154,158, 1,101,165,164,175,112, 45,137, 35, +222,249, 48,106,101, 53,181, 21, 13, 94, 93,182,130,139,243, 84,174,142,219, 65,116, 85, 78,141,180, 26, 66, 20, 13, 50,148,239, + 2,202,153,149, 73,180,114, 72, 32,162,225, 63,143, 52,168,208, 66, 34,213,237, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, 0}; -- cgit v1.2.3 From 802998b97133b77ffc110b33ff82f708d1259340 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 26 Apr 2012 17:51:41 +0000 Subject: And for sure we're in release stage now! --- source/blender/blenkernel/BKE_blender.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 507200802f4..5afe27f7be3 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -51,7 +51,7 @@ extern "C" { /* can be left blank, otherwise a,b,c... etc with no quotes */ #define BLENDER_VERSION_CHAR /* alpha/beta/rc/release, docs use this */ -#define BLENDER_VERSION_CYCLE rc +#define BLENDER_VERSION_CYCLE release extern char versionstr[]; /* from blender.c */ -- cgit v1.2.3 From b801c6098a346c49eb3b83003aff41a63644b38a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 17:56:21 +0000 Subject: remove pthread include for windows, after this was added I couldn't build anymore with mingw, gave and error with ./source/icons/winblender.rc --- CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc3636239dc..74f951fafa0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1154,9 +1154,6 @@ elseif(WIN32) endif() - # used in many places so include globally, like OpenGL - blender_include_dirs("${PTHREADS_INCLUDE_DIRS}") - elseif(APPLE) if(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.5" OR ${CMAKE_OSX_DEPLOYMENT_TARGET} STRGREATER "10.5") -- cgit v1.2.3 From 458600d6927775c1949b3d7b43f8d9e9e6f0a930 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 18:07:15 +0000 Subject: don't have spaces in idnames, confuses py types: http://www.blender.org/documentation/blender_python_api_2_62_4/bpy.types.Whole%20Character.html --- release/scripts/startup/keyingsets_builtins.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/scripts/startup/keyingsets_builtins.py b/release/scripts/startup/keyingsets_builtins.py index 3527ece2bd3..b7693880f9c 100644 --- a/release/scripts/startup/keyingsets_builtins.py +++ b/release/scripts/startup/keyingsets_builtins.py @@ -45,7 +45,7 @@ ANIM_KS_ROTATION_ID = "Rotation" ANIM_KS_SCALING_ID = "Scaling" ANIM_KS_LOC_ROT_SCALE_ID = "LocRotScale" ANIM_KS_AVAILABLE_ID = "Available" -ANIM_KS_WHOLE_CHARACTER_ID = "Whole Character" +ANIM_KS_WHOLE_CHARACTER_ID = "WholeCharacter" # Location -- cgit v1.2.3 From 6e2cff8c9fa53bb3adf9fb4f8d7502c744288c81 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Apr 2012 18:18:09 +0000 Subject: rename WholeCharacter in C too, add pthreads include back for msvc which needs it. --- CMakeLists.txt | 3 +++ source/blender/editors/armature/poselib.c | 2 +- source/blender/editors/include/ED_keyframing.h | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 74f951fafa0..7e9e50fa8ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1001,6 +1001,9 @@ elseif(WIN32) set(PLATFORM_LINKFLAGS_DEBUG "/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libc.lib") + # used in many places so include globally, like OpenGL + blender_include_dirs("${PTHREADS_INCLUDE_DIRS}") + elseif(CMAKE_COMPILER_IS_GNUCC) # keep GCC specific stuff here set(PLATFORM_LINKLIBS "-lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi") diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index 381423182f9..2799d7994bc 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -472,7 +472,7 @@ static int poselib_add_exec (bContext *C, wmOperator *op) BLI_uniquename(&act->markers, marker, "Pose", '.', offsetof(TimeMarker, name), sizeof(marker->name)); /* use Keying Set to determine what to store for the pose */ - // FIXME: in the past, the Keying Set respected selections (LocRotScale), but the current one doesn't (Whole Character) + // FIXME: in the past, the Keying Set respected selections (LocRotScale), but the current one doesn't (WholeCharacter) // so perhaps we need either a new Keying Set, or just to add overrides here... ANIM_apply_keyingset(C, NULL, act, ks, MODIFYKEY_MODE_INSERT, (float)frame); diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h index a70be6dfb54..afb14191797 100644 --- a/source/blender/editors/include/ED_keyframing.h +++ b/source/blender/editors/include/ED_keyframing.h @@ -323,7 +323,7 @@ int ED_autokeyframe_pchan(struct bContext *C, struct Scene *scene, struct Object #define ANIM_KS_SCALING_ID "Scaling" #define ANIM_KS_LOC_ROT_SCALE_ID "LocRotScale" #define ANIM_KS_AVAILABLE_ID "Available" -#define ANIM_KS_WHOLE_CHARACTER_ID "Whole Character" +#define ANIM_KS_WHOLE_CHARACTER_ID "WholeCharacter" #ifdef __cplusplus } -- cgit v1.2.3 From 2700064c0a8073e7f4d37364e768540d5819322a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 27 Apr 2012 02:29:37 +0000 Subject: cleanup msvc build flags, many were included more than once. also make use of C_WARNINGS, CXX_WARNINGS as other platforms do. --- CMakeLists.txt | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e9e50fa8ed..d216e617548 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -802,33 +802,35 @@ elseif(WIN32) endif() if(MSVC) - if(CMAKE_CL_64) - set(PLATFORM_LINKLIBS ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 advapi32 shfolder shell32 ole32 oleaut32 uuid) - else() - set(PLATFORM_LINKLIBS ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 advapi32 shfolder shell32 ole32 oleaut32 uuid) - endif() + set(PLATFORM_LINKLIBS ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 advapi32 shfolder shell32 ole32 oleaut32 uuid) add_definitions(/D_CRT_NONSTDC_NO_DEPRECATE /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_CONSOLE /D_LIB) - set(CMAKE_CXX_FLAGS "/nologo /J /W1 /Gd /wd4018 /wd4244 /wd4305 /wd4800 /wd4065 /wd4267 /we4013" CACHE STRING "MSVC MT C++ flags " FORCE) - set(CMAKE_C_FLAGS "/nologo /J /W1 /Gd /wd4018 /wd4244 /wd4305 /wd4800 /wd4065 /wd4267 /we4013 /EHsc" CACHE STRING "MSVC MT C++ flags " FORCE) + set(CMAKE_CXX_FLAGS "/nologo /J /Gd /EHsc" CACHE STRING "MSVC MT C++ flags " FORCE) + set(CMAKE_C_FLAGS "/nologo /J /Gd" CACHE STRING "MSVC MT C++ flags " FORCE) if(CMAKE_CL_64) - set(CMAKE_CXX_FLAGS_DEBUG "/Od /Gm /EHsc /RTC1 /MTd /W3 /nologo /Zi /J" CACHE STRING "MSVC MT flags " FORCE) + set(CMAKE_CXX_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /Zi" CACHE STRING "MSVC MT flags " FORCE) else() - set(CMAKE_CXX_FLAGS_DEBUG "/Od /Gm /EHsc /RTC1 /MTd /W3 /nologo /ZI /J" CACHE STRING "MSVC MT flags " FORCE) + set(CMAKE_CXX_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /ZI" CACHE STRING "MSVC MT flags " FORCE) endif() - set(CMAKE_CXX_FLAGS_RELEASE "/O2 /Ob2 /EHsc /MT /W3 /nologo /J" CACHE STRING "MSVC MT flags " FORCE) - set(CMAKE_CXX_FLAGS_MINSIZEREL "/O1 /Ob1 /EHsc /MT /W3 /nologo /J" CACHE STRING "MSVC MT flags " FORCE) - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /EHsc /MT /W3 /nologo /Zi /J" CACHE STRING "MSVC MT flags " FORCE) + set(CMAKE_CXX_FLAGS_RELEASE "/O2 /Ob2 /MT" CACHE STRING "MSVC MT flags " FORCE) + set(CMAKE_CXX_FLAGS_MINSIZEREL "/O1 /Ob1 /MT" CACHE STRING "MSVC MT flags " FORCE) + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /MT /Zi" CACHE STRING "MSVC MT flags " FORCE) if(CMAKE_CL_64) - set(CMAKE_C_FLAGS_DEBUG "/Od /Gm /EHsc /RTC1 /MTd /W3 /nologo /Zi /J" CACHE STRING "MSVC MT flags " FORCE) + set(CMAKE_C_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /Zi" CACHE STRING "MSVC MT flags " FORCE) else() - set(CMAKE_C_FLAGS_DEBUG "/Od /Gm /EHsc /RTC1 /MTd /W3 /nologo /ZI /J" CACHE STRING "MSVC MT flags " FORCE) + set(CMAKE_C_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /ZI" CACHE STRING "MSVC MT flags " FORCE) endif() - set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /EHsc /MT /W3 /nologo /J" CACHE STRING "MSVC MT flags " FORCE) - set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /Ob1 /EHsc /MT /W3 /nologo /J" CACHE STRING "MSVC MT flags " FORCE) - set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /EHsc /MT /W3 /nologo /Zi /J" CACHE STRING "MSVC MT flags " FORCE) + set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT" CACHE STRING "MSVC MT flags " FORCE) + set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /Ob1 /MT" CACHE STRING "MSVC MT flags " FORCE) + set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /MT /Zi" CACHE STRING "MSVC MT flags " FORCE) + + # most msvc warnings are C & C++ + set(_WARNINGS "/W3 /wd4018 /wd4244 /wd4305 /wd4800 /wd4065 /wd4267 /we4013") + set(C_WARNINGS "${_WARNINGS}") + set(CXX_WARNINGS "${_WARNINGS}") + unset(_WARNINGS) if(WITH_INTERNATIONAL) set(GETTEXT ${LIBDIR}/gettext) -- cgit v1.2.3 From bb4942c9203602550968b27fa0ad29a911ae1ff1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 27 Apr 2012 03:01:27 +0000 Subject: code cleanup: quiet msvc warnings --- CMakeLists.txt | 2 +- source/blender/avi/intern/avi.c | 10 +++++----- source/blender/blenkernel/intern/pointcache.c | 2 +- source/blender/blenlib/intern/fileops.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d216e617548..6a9ca35cd05 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -827,7 +827,7 @@ elseif(WIN32) set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /MT /Zi" CACHE STRING "MSVC MT flags " FORCE) # most msvc warnings are C & C++ - set(_WARNINGS "/W3 /wd4018 /wd4244 /wd4305 /wd4800 /wd4065 /wd4267 /we4013") + set(_WARNINGS "/W3 /wd4018 /wd4244 /wd4305 /wd4800 /wd4181 /wd4065 /wd4267 /we4013") set(C_WARNINGS "${_WARNINGS}") set(CXX_WARNINGS "${_WARNINGS}") unset(_WARNINGS) diff --git a/source/blender/avi/intern/avi.c b/source/blender/avi/intern/avi.c index 59ce879520e..2011ced96d9 100644 --- a/source/blender/avi/intern/avi.c +++ b/source/blender/avi/intern/avi.c @@ -1002,7 +1002,7 @@ AviError AVI_write_frame (AviMovie *movie, int frame_num, ...) movie->entries[frame_num * (movie->header->Streams+1) + stream + 1].ChunkId = chunk.fcc; movie->entries[frame_num * (movie->header->Streams+1) + stream + 1].Flags = AVIIF_KEYFRAME; - movie->entries[frame_num * (movie->header->Streams+1) + stream + 1].Offset = ftell(movie->fp)-12L-movie->movi_offset; + movie->entries[frame_num * (movie->header->Streams+1) + stream + 1].Offset = (int)(ftell(movie->fp) - 12L - movie->movi_offset); movie->entries[frame_num * (movie->header->Streams+1) + stream + 1].Size = chunk.size; /* Write the chunk */ @@ -1024,8 +1024,8 @@ AviError AVI_write_frame (AviMovie *movie, int frame_num, ...) movie->entries[frame_num * (movie->header->Streams+1)].ChunkId = FCC("rec "); movie->entries[frame_num * (movie->header->Streams+1)].Flags = AVIIF_LIST; - movie->entries[frame_num * (movie->header->Streams+1)].Offset = rec_off-8L-movie->movi_offset; - movie->entries[frame_num * (movie->header->Streams+1)].Size = ftell(movie->fp)-(rec_off+4L); + movie->entries[frame_num * (movie->header->Streams+1)].Offset = (int)(rec_off - 8L - movie->movi_offset); + movie->entries[frame_num * (movie->header->Streams+1)].Size = (int)(ftell(movie->fp) - (rec_off + 4L)); /* Update the record size */ fseek (movie->fp, rec_off, SEEK_SET); @@ -1044,7 +1044,7 @@ AviError AVI_close_compress (AviMovie *movie) int temp, movi_size, i; fseek (movie->fp, 0L, SEEK_END); - movi_size = ftell (movie->fp); + movi_size = (int)ftell(movie->fp); PUT_FCC ("idx1", movie->fp); PUT_FCCN ((movie->index_entries*(movie->header->Streams+1)*16), movie->fp); @@ -1052,7 +1052,7 @@ AviError AVI_close_compress (AviMovie *movie) for (temp=0; temp < movie->index_entries*(movie->header->Streams+1); temp++) awrite (movie, &movie->entries[temp], 1, sizeof(AviIndexEntry), movie->fp, AVI_INDEXE); - temp = ftell (movie->fp); + temp = (int)ftell(movie->fp); fseek (movie->fp, AVI_RIFF_SOFF, SEEK_SET); diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index dbcef9ad4c8..2812592c69a 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -2313,7 +2313,7 @@ void BKE_ptcache_id_time(PTCacheID *pid, Scene *scene, float cfra, int *startfra if (timescale) { time= BKE_curframe(scene); - nexttime= BKE_frame_to_ctime(scene, CFRA+1); + nexttime = BKE_frame_to_ctime(scene, CFRA + 1.0f); *timescale= MAX2(nexttime - time, 0.0f); } diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 4b5ea44e97c..8990f0f79d3 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -230,7 +230,7 @@ void *BLI_gzopen(const char *filename, const char *mode) GetShortPathNameW(filename_16,short_name_16, 256); for (i = 0; i < 256; i++) { - short_name[i] = short_name_16[i]; + short_name[i] = (char)short_name_16[i]; } gzfile = gzopen(short_name,mode); -- cgit v1.2.3 From 4469ab985761abaacc99eb3d3c6b16a0aee927b1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 27 Apr 2012 07:26:28 +0000 Subject: code cleanup: - move lasso functions into BLI (were in 3D view but UV editor needs access) - remove unused UV functions (ones that assumed 3-4 sized UVs only) --- source/blender/blenlib/BLI_lasso.h | 41 ++++++ source/blender/blenlib/CMakeLists.txt | 6 +- source/blender/blenlib/intern/lasso.c | 129 +++++++++++++++++++ source/blender/blenlib/intern/listbase.c | 7 +- source/blender/editors/include/ED_view3d.h | 2 - source/blender/editors/mesh/meshtools.c | 2 +- source/blender/editors/physics/particle_edit.c | 12 +- .../blender/editors/space_view3d/view3d_select.c | 142 +++++---------------- source/blender/editors/uvedit/uvedit_draw.c | 14 +- source/blender/editors/uvedit/uvedit_intern.h | 11 +- source/blender/editors/uvedit/uvedit_ops.c | 29 +---- 11 files changed, 231 insertions(+), 164 deletions(-) create mode 100644 source/blender/blenlib/BLI_lasso.h create mode 100644 source/blender/blenlib/intern/lasso.c diff --git a/source/blender/blenlib/BLI_lasso.h b/source/blender/blenlib/BLI_lasso.h new file mode 100644 index 00000000000..2360173c3b8 --- /dev/null +++ b/source/blender/blenlib/BLI_lasso.h @@ -0,0 +1,41 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef __BLI_LASSO_H__ +#define __BLI_LASSO_H__ + +/** \file BLI_lasso.h + * \ingroup bli + */ + +struct rcti; + +void BLI_lasso_boundbox(struct rcti *rect, int mcords[][2], short moves); +int BLI_lasso_is_point_inside(int mcords[][2], short moves, int sx, int sy, const int error_value); +int BLI_lasso_is_edge_inside(int mcords[][2], short moves, int x0, int y0, int x1, int y1, const int error_value); + +#endif diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt index c06a1240729..61fe3b560e2 100644 --- a/source/blender/blenlib/CMakeLists.txt +++ b/source/blender/blenlib/CMakeLists.txt @@ -61,6 +61,7 @@ set(SRC intern/graph.c intern/gsqueue.c intern/jitter.c + intern/lasso.c intern/listbase.c intern/math_base.c intern/math_base_inline.c @@ -90,10 +91,9 @@ set(SRC intern/voxel.c intern/winstuff.c + BLI_args.h BLI_array.h BLI_bitmap.h - BLI_smallhash.h - BLI_args.h BLI_blenlib.h BLI_boxpack2d.h BLI_bpath.h @@ -114,6 +114,7 @@ set(SRC BLI_jitter.h BLI_kdopbvh.h BLI_kdtree.h + BLI_lasso.h BLI_linklist.h BLI_listbase.h BLI_math.h @@ -133,6 +134,7 @@ set(SRC BLI_rand.h BLI_rect.h BLI_scanfill.h + BLI_smallhash.h BLI_string.h BLI_string_cursor_utf8.h BLI_string_utf8.h diff --git a/source/blender/blenlib/intern/lasso.c b/source/blender/blenlib/intern/lasso.c new file mode 100644 index 00000000000..29b967fcd37 --- /dev/null +++ b/source/blender/blenlib/intern/lasso.c @@ -0,0 +1,129 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + * + */ + +/** \file blender/blenlib/intern/lasso.c + * \ingroup bli + */ + +#include "DNA_vec_types.h" + +#include "BLI_math.h" +#include "BLI_rect.h" + +#include "BLI_lasso.h" /* own include */ + +void BLI_lasso_boundbox(rcti *rect, int mcords[][2], short moves) +{ + short a; + + rect->xmin = rect->xmax = mcords[0][0]; + rect->ymin = rect->ymax = mcords[0][1]; + + for (a = 1; a < moves; a++) { + if (mcords[a][0] < rect->xmin) rect->xmin = mcords[a][0]; + else if (mcords[a][0] > rect->xmax) rect->xmax = mcords[a][0]; + if (mcords[a][1] < rect->ymin) rect->ymin = mcords[a][1]; + else if (mcords[a][1] > rect->ymax) rect->ymax = mcords[a][1]; + } +} + + +int BLI_lasso_is_point_inside(int mcords[][2], short moves, + const int sx, const int sy, + const int error_value) +{ + /* we do the angle rule, define that all added angles should be about zero or (2 * PI) */ + float angletot = 0.0, dot, ang, cross, fp1[2], fp2[2]; + int a; + int *p1, *p2; + + if (sx == error_value) { + return 0; + } + + p1 = mcords[moves - 1]; + p2 = mcords[0]; + + /* first vector */ + fp1[0] = (float)(p1[0] - sx); + fp1[1] = (float)(p1[1] - sy); + normalize_v2(fp1); + + for (a = 0; a < moves; a++) { + /* second vector */ + fp2[0] = (float)(p2[0] - sx); + fp2[1] = (float)(p2[1] - sy); + normalize_v2(fp2); + + /* dot and angle and cross */ + dot = fp1[0] * fp2[0] + fp1[1] * fp2[1]; + ang = fabs(saacos(dot)); + + cross = (float)((p1[1] - p2[1]) * (p1[0] - sx) + (p2[0] - p1[0]) * (p1[1] - sy)); + + if (cross < 0.0f) angletot -= ang; + else angletot += ang; + + /* circulate */ + fp1[0] = fp2[0]; fp1[1] = fp2[1]; + p1 = p2; + p2 = mcords[a + 1]; + } + + if (fabs(angletot) > 4.0) return 1; + return 0; +} + +/* edge version for lasso select. we assume boundbox check was done */ +int BLI_lasso_is_edge_inside(int mcords[][2], short moves, + int x0, int y0, int x1, int y1, + const int error_value) +{ + int v1[2], v2[2]; + int a; + + if (x0 == error_value || x1 == error_value) { + return 0; + } + + v1[0] = x0, v1[1] = y0; + v2[0] = x1, v2[1] = y1; + + /* check points in lasso */ + if (BLI_lasso_is_point_inside(mcords, moves, v1[0], v1[1], error_value)) return 1; + if (BLI_lasso_is_point_inside(mcords, moves, v2[0], v2[1], error_value)) return 1; + + /* no points in lasso, so we have to intersect with lasso edge */ + + if (isect_line_line_v2_int(mcords[0], mcords[moves - 1], v1, v2) > 0) return 1; + for (a = 0; a < moves - 1; a++) { + if (isect_line_line_v2_int(mcords[a], mcords[a + 1], v1, v2) > 0) return 1; + } + + return 0; +} diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c index fecaa507b5c..b2b18286cfb 100644 --- a/source/blender/blenlib/intern/listbase.c +++ b/source/blender/blenlib/intern/listbase.c @@ -1,9 +1,4 @@ -/* util.c - * - * various string, file, list operations. - * - * - * +/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h index f886c01039e..4b614085f8e 100644 --- a/source/blender/editors/include/ED_view3d.h +++ b/source/blender/editors/include/ED_view3d.h @@ -269,8 +269,6 @@ void view3d_get_transformation(const struct ARegion *ar, struct RegionView3D *rv /* XXX should move to BLI_math */ int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, short x2, short y2); -int lasso_inside(int mcords[][2], short moves, int sx, int sy); -int lasso_inside_edge(int mcords[][2], short moves, int x0, int y0, int x1, int y1); /* get 3d region from context, also if mouse is in header or toolbar */ struct RegionView3D *ED_view3d_context_rv3d(struct bContext *C); diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index 7c02f26dbdc..96fb2afbac4 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -1016,7 +1016,7 @@ static float *editmesh_get_mirror_uv(BMEditMesh *em, int axis, float *uv, float BMFace *efa; BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { - poly_uv_center(em, efa, cent); + uv_poly_center(em, efa, cent); if ( (fabs(cent[0] - cent_vec[0]) < 0.001) && (fabs(cent[1] - cent_vec[1]) < 0.001) ) { BMIter liter; diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 5f22165176b..591015a7479 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -45,7 +45,9 @@ #include "DNA_space_types.h" #include "BLI_math.h" -#include "BLI_blenlib.h" +#include "BLI_lasso.h" +#include "BLI_listbase.h" +#include "BLI_string.h" #include "BLI_dynstr.h" #include "BLI_kdtree.h" #include "BLI_rand.h" @@ -1633,7 +1635,9 @@ int PE_lasso_select(bContext *C, int mcords[][2], short moves, short extend, sho copy_v3_v3(co, key->co); mul_m4_v3(mat, co); project_int(ar, co, vertco); - if ((vertco[0] != IS_CLIPPED) && lasso_inside(mcords,moves,vertco[0],vertco[1]) && key_test_depth(&data, co)) { + if (BLI_lasso_is_point_inside(mcords,moves,vertco[0],vertco[1], IS_CLIPPED) && + key_test_depth(&data, co)) + { if (select && !(key->flag & PEK_SELECT)) { key->flag |= PEK_SELECT; point->flag |= PEP_EDIT_RECALC; @@ -1651,7 +1655,9 @@ int PE_lasso_select(bContext *C, int mcords[][2], short moves, short extend, sho copy_v3_v3(co, key->co); mul_m4_v3(mat, co); project_int(ar, co,vertco); - if ((vertco[0] != IS_CLIPPED) && lasso_inside(mcords,moves,vertco[0],vertco[1]) && key_test_depth(&data, co)) { + if (BLI_lasso_is_point_inside(mcords,moves,vertco[0],vertco[1], IS_CLIPPED) && + key_test_depth(&data, co)) + { if (select && !(key->flag & PEK_SELECT)) { key->flag |= PEK_SELECT; point->flag |= PEP_EDIT_RECALC; diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index ac9c32816dd..09cc6b9c7a5 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -48,9 +48,12 @@ #include "MEM_guardedalloc.h" #include "BLI_math.h" -#include "BLI_blenlib.h" +#include "BLI_lasso.h" +#include "BLI_rect.h" #include "BLI_rand.h" #include "BLI_linklist.h" +#include "BLI_listbase.h" +#include "BLI_string.h" #include "BLI_utildefines.h" /* vertex box select */ @@ -319,79 +322,6 @@ static int edge_inside_rect(rcti *rect, short x1, short y1, short x2, short y2) #define MOVES_GESTURE 50 #define MOVES_LASSO 500 -int lasso_inside(int mcords[][2], short moves, int sx, int sy) -{ - /* we do the angle rule, define that all added angles should be about zero or 2*PI */ - float angletot = 0.0, len, dot, ang, cross, fp1[2], fp2[2]; - int a; - int *p1, *p2; - - if (sx == IS_CLIPPED) - return 0; - - p1 = mcords[moves - 1]; - p2 = mcords[0]; - - /* first vector */ - fp1[0] = (float)(p1[0] - sx); - fp1[1] = (float)(p1[1] - sy); - len = sqrt(fp1[0] * fp1[0] + fp1[1] * fp1[1]); - fp1[0] /= len; - fp1[1] /= len; - - for (a = 0; a < moves; a++) { - /* second vector */ - fp2[0] = (float)(p2[0] - sx); - fp2[1] = (float)(p2[1] - sy); - len = sqrt(fp2[0] * fp2[0] + fp2[1] * fp2[1]); - fp2[0] /= len; - fp2[1] /= len; - - /* dot and angle and cross */ - dot = fp1[0] * fp2[0] + fp1[1] * fp2[1]; - ang = fabs(saacos(dot)); - - cross = (float)((p1[1] - p2[1]) * (p1[0] - sx) + (p2[0] - p1[0]) * (p1[1] - sy)); - - if (cross < 0.0f) angletot -= ang; - else angletot += ang; - - /* circulate */ - fp1[0] = fp2[0]; fp1[1] = fp2[1]; - p1 = p2; - p2 = mcords[a + 1]; - } - - if (fabs(angletot) > 4.0) return 1; - return 0; -} - -/* edge version for lasso select. we assume boundbox check was done */ -int lasso_inside_edge(int mcords[][2], short moves, int x0, int y0, int x1, int y1) -{ - int v1[2], v2[2]; - int a; - - if (x0 == IS_CLIPPED || x1 == IS_CLIPPED) - return 0; - - v1[0] = x0, v1[1] = y0; - v2[0] = x1, v2[1] = y1; - - /* check points in lasso */ - if (lasso_inside(mcords, moves, v1[0], v1[1])) return 1; - if (lasso_inside(mcords, moves, v2[0], v2[1])) return 1; - - /* no points in lasso, so we have to intersect with lasso edge */ - - if (isect_line_line_v2_int(mcords[0], mcords[moves - 1], v1, v2) > 0) return 1; - for (a = 0; a < moves - 1; a++) { - if (isect_line_line_v2_int(mcords[a], mcords[a + 1], v1, v2) > 0) return 1; - } - - return 0; -} - /* warning; lasso select with backbuffer-check draws in backbuf with persp(PERSP_WIN) * and returns with persp(PERSP_VIEW). After lasso select backbuf is not OK @@ -412,7 +342,7 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, int mcords[][2], s mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail); project_int(vc->ar, vec, sco2); - if (lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { + if (BLI_lasso_is_edge_inside(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1], IS_CLIPPED)) { if (select) pchan->bone->flag |= BONE_SELECTED; else pchan->bone->flag &= ~BONE_SELECTED; } @@ -441,7 +371,7 @@ static void do_lasso_select_objects(ViewContext *vc, int mcords[][2], short move for (base = vc->scene->base.first; base; base = base->next) { if (BASE_SELECTABLE(vc->v3d, base)) { /* use this to avoid un-needed lasso lookups */ project_short(vc->ar, base->object->obmat[3], &base->sx); - if (lasso_inside(mcords, moves, base->sx, base->sy)) { + if (BLI_lasso_is_point_inside(mcords, moves, base->sx, base->sy, IS_CLIPPED)) { if (select) ED_base_object_select(base, BA_SELECT); else ED_base_object_select(base, BA_DESELECT); @@ -454,26 +384,13 @@ static void do_lasso_select_objects(ViewContext *vc, int mcords[][2], short move } } -static void lasso_select_boundbox(rcti *rect, int mcords[][2], short moves) -{ - short a; - - rect->xmin = rect->xmax = mcords[0][0]; - rect->ymin = rect->ymax = mcords[0][1]; - - for (a = 1; a < moves; a++) { - if (mcords[a][0] < rect->xmin) rect->xmin = mcords[a][0]; - else if (mcords[a][0] > rect->xmax) rect->xmax = mcords[a][0]; - if (mcords[a][1] < rect->ymin) rect->ymin = mcords[a][1]; - else if (mcords[a][1] > rect->ymax) rect->ymax = mcords[a][1]; - } -} - static void do_lasso_select_mesh__doSelectVert(void *userData, BMVert *eve, int x, int y, int UNUSED(index)) { LassoSelectUserData *data = userData; - if (BLI_in_rcti(data->rect, x, y) && lasso_inside(data->mcords, data->moves, x, y)) { + if (BLI_in_rcti(data->rect, x, y) && + BLI_lasso_is_point_inside(data->mcords, data->moves, x, y, IS_CLIPPED)) + { BM_vert_select_set(data->vc->em->bm, eve, data->select); } } @@ -484,14 +401,15 @@ static void do_lasso_select_mesh__doSelectEdge(void *userData, BMEdge *eed, int if (EDBM_backbuf_check(bm_solidoffs + index)) { if (data->pass == 0) { if (edge_fully_inside_rect(data->rect, x0, y0, x1, y1) && - lasso_inside(data->mcords, data->moves, x0, y0) && - lasso_inside(data->mcords, data->moves, x1, y1)) { + BLI_lasso_is_point_inside(data->mcords, data->moves, x0, y0, IS_CLIPPED) && + BLI_lasso_is_point_inside(data->mcords, data->moves, x1, y1, IS_CLIPPED)) + { BM_edge_select_set(data->vc->em->bm, eed, data->select); data->done = 1; } } else { - if (lasso_inside_edge(data->mcords, data->moves, x0, y0, x1, y1)) { + if (BLI_lasso_is_edge_inside(data->mcords, data->moves, x0, y0, x1, y1, IS_CLIPPED)) { BM_edge_select_set(data->vc->em->bm, eed, data->select); } } @@ -501,7 +419,9 @@ static void do_lasso_select_mesh__doSelectFace(void *userData, BMFace *efa, int { LassoSelectUserData *data = userData; - if (BLI_in_rcti(data->rect, x, y) && lasso_inside(data->mcords, data->moves, x, y)) { + if (BLI_in_rcti(data->rect, x, y) && + BLI_lasso_is_point_inside(data->mcords, data->moves, x, y, IS_CLIPPED)) + { BM_face_select_set(data->vc->em->bm, efa, data->select); } } @@ -513,7 +433,7 @@ static void do_lasso_select_mesh(ViewContext *vc, int mcords[][2], short moves, rcti rect; int bbsel; - lasso_select_boundbox(&rect, mcords, moves); + BLI_lasso_boundbox(&rect, mcords, moves); /* set editmesh */ vc->em = BMEdit_FromObject(vc->obedit); @@ -577,7 +497,7 @@ static void do_lasso_select_mesh_uv(int mcords[][2], short moves, short select) int screenUV[2], nverts, i, ok = 1; rcti rect; - lasso_select_boundbox(&rect, mcords, moves); + BLI_lasso_boundbox(&rect, mcords, moves); if (draw_uvs_face_check()) { /* Face Center Sel */ float cent[2]; @@ -589,7 +509,7 @@ static void do_lasso_select_mesh_uv(int mcords[][2], short moves, short select) if ((select) != (simaFaceSel_Check(efa, tf))) { uv_center(tf->uv, cent, (void *)efa->v4); uvco_to_areaco_noclip(cent, screenUV); - if (BLI_in_rcti(&rect, screenUV[0], screenUV[1]) && lasso_inside(mcords, moves, screenUV[0], screenUV[1])) { + if (BLI_in_rcti(&rect, screenUV[0], screenUV[1]) && BLI_lasso_is_point_inside(mcords, moves, screenUV[0], screenUV[1])) { efa->tmp.l = ok = 1; } } @@ -607,7 +527,7 @@ static void do_lasso_select_mesh_uv(int mcords[][2], short moves, short select) for (i = 0; i < nverts; i++) { if ((select) != (simaUVSel_Check(efa, tf, i))) { uvco_to_areaco_noclip(tf->uv[i], screenUV); - if (BLI_in_rcti(&rect, screenUV[0], screenUV[1]) && lasso_inside(mcords, moves, screenUV[0], screenUV[1])) { + if (BLI_in_rcti(&rect, screenUV[0], screenUV[1]) && BLI_lasso_is_point_inside(mcords, moves, screenUV[0], screenUV[1])) { if (select) { simaUVSel_Set(efa, tf, i); } @@ -633,7 +553,7 @@ static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BP Object *obedit = data->vc->obedit; Curve *cu = (Curve *)obedit->data; - if (lasso_inside(data->mcords, data->moves, x, y)) { + if (BLI_lasso_is_point_inside(data->mcords, data->moves, x, y, IS_CLIPPED)) { if (bp) { bp->f1 = data->select ? (bp->f1 | SELECT) : (bp->f1 & ~SELECT); if (bp == cu->lastsel && !(bp->f1 & 1)) cu->lastsel = NULL; @@ -681,7 +601,7 @@ static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x, { LassoSelectUserData *data = userData; - if (lasso_inside(data->mcords, data->moves, x, y)) { + if (BLI_lasso_is_point_inside(data->mcords, data->moves, x, y, IS_CLIPPED)) { bp->f1 = data->select ? (bp->f1 | SELECT) : (bp->f1 & ~SELECT); } } @@ -722,20 +642,22 @@ static void do_lasso_select_armature(ViewContext *vc, int mcords[][2], short mov project_short(vc->ar, vec, sco2); didpoint = 0; - if (lasso_inside(mcords, moves, sco1[0], sco1[1])) { + if (BLI_lasso_is_point_inside(mcords, moves, sco1[0], sco1[1], IS_CLIPPED)) { if (select) ebone->flag |= BONE_ROOTSEL; else ebone->flag &= ~BONE_ROOTSEL; didpoint = 1; change = TRUE; } - if (lasso_inside(mcords, moves, sco2[0], sco2[1])) { + if (BLI_lasso_is_point_inside(mcords, moves, sco2[0], sco2[1], IS_CLIPPED)) { if (select) ebone->flag |= BONE_TIPSEL; else ebone->flag &= ~BONE_TIPSEL; didpoint = 1; change = TRUE; } /* if one of points selected, we skip the bone itself */ - if (didpoint == 0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { + if (didpoint == 0 && + BLI_lasso_is_edge_inside(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1], IS_CLIPPED)) + { if (select) ebone->flag |= BONE_TIPSEL | BONE_ROOTSEL | BONE_SELECTED; else ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); change = TRUE; @@ -771,7 +693,7 @@ static void do_lasso_select_meta(ViewContext *vc, int mcords[][2], short moves, mul_v3_m4v3(vec, vc->obedit->obmat, &ml->x); project_short(vc->ar, vec, sco); - if (lasso_inside(mcords, moves, sco[0], sco[1])) { + if (BLI_lasso_is_point_inside(mcords, moves, sco[0], sco[1], IS_CLIPPED)) { if (select) ml->flag |= SELECT; else ml->flag &= ~SELECT; } @@ -850,7 +772,7 @@ static void do_lasso_select_paintvert(ViewContext *vc, int mcords[][2], short mo paintvert_deselect_all_visible(ob, SEL_DESELECT, FALSE); /* flush selection at the end */ bm_vertoffs = me->totvert + 1; /* max index array */ - lasso_select_boundbox(&rect, mcords, moves); + BLI_lasso_boundbox(&rect, mcords, moves); EDBM_backbuf_border_mask_init(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax); edbm_backbuf_check_and_select_verts_obmode(me, select); @@ -873,7 +795,7 @@ static void do_lasso_select_paintface(ViewContext *vc, int mcords[][2], short mo bm_vertoffs = me->totpoly + 1; /* max index array */ - lasso_select_boundbox(&rect, mcords, moves); + BLI_lasso_boundbox(&rect, mcords, moves); EDBM_backbuf_border_mask_init(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax); edbm_backbuf_check_and_select_tfaces(me, select); @@ -893,7 +815,7 @@ static void do_lasso_select_node(int mcords[][2], short moves, short select) short node_cent[2]; float node_centf[2]; - lasso_select_boundbox(&rect, mcords, moves); + BLI_lasso_boundbox(&rect, mcords, moves); /* store selection in temp test flag */ for (node = snode->edittree->nodes.first; node; node = node->next) { @@ -902,7 +824,7 @@ static void do_lasso_select_node(int mcords[][2], short moves, short select) node_centf[1] = (node->totr.ymin + node->totr.ymax) / 2; ipoco_to_areaco_noclip(G.v2d, node_centf, node_cent); - if (BLI_in_rcti(&rect, node_cent[0], node_cent[1]) && lasso_inside(mcords, moves, node_cent[0], node_cent[1])) { + if (BLI_in_rcti(&rect, node_cent[0], node_cent[1]) && BLI_lasso_is_point_inside(mcords, moves, node_cent[0], node_cent[1])) { if (select) { node->flag |= SELECT; } diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index e772ff5a87a..987f6b250cb 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -198,11 +198,11 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe i++; } - poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, efa->len); + uv_poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, efa->len); totarea += BM_face_calc_area(efa); //totuvarea += tf_area(tf, efa->v4!=0); - totuvarea += poly_uv_area(tf_uv, efa->len); + totuvarea += uv_poly_area(tf_uv, efa->len); if (uvedit_face_visible_test(scene, ima, efa, tf)) { BM_elem_flag_enable(efa, BM_ELEM_TAG); @@ -248,10 +248,10 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe i++; } - poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, efa->len); + uv_poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, efa->len); //uvarea = tf_area(tf, efa->v4!=0) / totuvarea; - uvarea = poly_uv_area(tf_uv, efa->len) / totuvarea; + uvarea = uv_poly_area(tf_uv, efa->len) / totuvarea; if (area < FLT_EPSILON || uvarea < FLT_EPSILON) areadiff = 1.0f; @@ -315,7 +315,7 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe copy_v2_v2(tf_uvorig[i], luv->uv); } - poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, nverts); + uv_poly_copy_aspect(tf_uvorig, tf_uv, aspx, aspy, nverts); j = nverts - 1; BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { @@ -742,7 +742,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) continue; if (!uvedit_face_select_test(scene, em, efa)) { - poly_uv_center(em, efa, cent); + uv_poly_center(em, efa, cent); bglVertex2fv(cent); } } @@ -757,7 +757,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit) continue; if (uvedit_face_select_test(scene, em, efa)) { - poly_uv_center(em, efa, cent); + uv_poly_center(em, efa, cent); bglVertex2fv(cent); } } diff --git a/source/blender/editors/uvedit/uvedit_intern.h b/source/blender/editors/uvedit/uvedit_intern.h index fdcb5db1911..04d20b3ba09 100644 --- a/source/blender/editors/uvedit/uvedit_intern.h +++ b/source/blender/editors/uvedit/uvedit_intern.h @@ -54,14 +54,9 @@ struct BMVert; int uvedit_face_visible_nolocal(struct Scene *scene, struct BMFace *efa); /* geometric utilities */ - -void uv_center(float uv[][2], float cent[2], int quad); -float uv_area(float uv[][2], int quad); -void uv_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy); - -float poly_uv_area(float uv[][2], int len); -void poly_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy, int len); -void poly_uv_center(struct BMEditMesh *em, struct BMFace *f, float cent[2]); +float uv_poly_area(float uv[][2], int len); +void uv_poly_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy, int len); +void uv_poly_center(struct BMEditMesh *em, struct BMFace *f, float cent[2]); /* find nearest */ diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 1c62ce3a684..832bf6f57e9 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -522,7 +522,7 @@ void uvedit_live_unwrap_update(SpaceImage *sima, Scene *scene, Object *obedit) } /*********************** geometric utilities ***********************/ -void poly_uv_center(BMEditMesh *em, BMFace *f, float cent[2]) +void uv_poly_center(BMEditMesh *em, BMFace *f, float cent[2]) { BMLoop *l; MLoopUV *luv; @@ -538,28 +538,7 @@ void poly_uv_center(BMEditMesh *em, BMFace *f, float cent[2]) mul_v2_fl(cent, 1.0f / (float)f->len); } - -void uv_center(float uv[][2], float cent[2], int quad) -{ - if (quad) { - cent[0] = (uv[0][0] + uv[1][0] + uv[2][0] + uv[3][0]) / 4.0f; - cent[1] = (uv[0][1] + uv[1][1] + uv[2][1] + uv[3][1]) / 4.0f; - } - else { - cent[0] = (uv[0][0] + uv[1][0] + uv[2][0]) / 3.0f; - cent[1] = (uv[0][1] + uv[1][1] + uv[2][1]) / 3.0f; - } -} - -float uv_area(float uv[][2], int quad) -{ - if (quad) - return area_tri_v2(uv[0], uv[1], uv[2]) + area_tri_v2(uv[0], uv[2], uv[3]); - else - return area_tri_v2(uv[0], uv[1], uv[2]); -} - -float poly_uv_area(float uv[][2], int len) +float uv_poly_area(float uv[][2], int len) { //BMESH_TODO: make this not suck //maybe use scanfill? I dunno. @@ -572,7 +551,7 @@ float poly_uv_area(float uv[][2], int len) return 1.0; } -void poly_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy, int len) +void uv_poly_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy, int len) { int i; for (i = 0; i < len; i++) { @@ -2469,7 +2448,7 @@ static int border_select_exec(bContext *C, wmOperator *op) tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (uvedit_face_visible_test(scene, ima, efa, tf)) { - poly_uv_center(em, efa, cent); + uv_poly_center(em, efa, cent); if (BLI_in_rctf(&rectf, cent[0], cent[1])) { BM_elem_flag_enable(efa, BM_ELEM_TAG); change = 1; -- cgit v1.2.3 From da1e128d77e4e2932668a06f92ca675b4d899c20 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 27 Apr 2012 10:00:21 +0000 Subject: fix for modal timer template, wasnt updated for changes to themes. --- release/scripts/templates/operator_modal_timer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/scripts/templates/operator_modal_timer.py b/release/scripts/templates/operator_modal_timer.py index ec47390da81..ebbf6395df5 100644 --- a/release/scripts/templates/operator_modal_timer.py +++ b/release/scripts/templates/operator_modal_timer.py @@ -14,7 +14,7 @@ class ModalTimerOperator(bpy.types.Operator): if event.type == 'TIMER': # change theme color, silly! - color = context.user_preferences.themes[0].view_3d.back + color = context.user_preferences.themes[0].view_3d.space.back color.s = 1.0 color.h += 0.01 -- cgit v1.2.3 From 5d6f746c87db0709107a2b416e112fceb46af359 Mon Sep 17 00:00:00 2001 From: Jens Ole Wund Date: Fri, 27 Apr 2012 11:49:09 +0000 Subject: Patch by Jose Geraldo Brito Tracker 31061 It cures the stiff quad option and does not seem to harm. Nowever the stiff quads behave strange in a ngom mesh. I can imagine that other parts in the sofybody module may be broken by the ngon structure. Well ngons and softbodies are not relly friends: negon wants less edges softbodies would work better if more structural edges were possible --- source/blender/blenkernel/intern/softbody.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c index 01930cc28da..e3a309fc945 100644 --- a/source/blender/blenkernel/intern/softbody.c +++ b/source/blender/blenkernel/intern/softbody.c @@ -78,6 +78,7 @@ variables on the UI for now #include "BKE_DerivedMesh.h" #include "BKE_pointcache.h" #include "BKE_deform.h" +#include "BKE_mesh.h" //XXX #include "BIF_editdeform.h" //XXX #include "BIF_graphics.h" #include "PIL_time.h" @@ -3267,6 +3268,7 @@ static void mesh_to_softbody(Scene *scene, Object *ob) BodyPoint *bp; BodySpring *bs; int a, totedge; + BKE_mesh_tessface_ensure(me); if (ob->softflag & OB_SB_EDGES) totedge= me->totedge; else totedge= 0; -- cgit v1.2.3 From dbe68289f4c7c4b7064bb05f27457f76d54e2db8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 27 Apr 2012 12:44:32 +0000 Subject: fix for select flushing in UV-sync-selection mode (regression from 2.62), both border select and circle select failed in edge and vertex mode (though de-selecting worked ok). --- source/blender/editors/uvedit/uvedit_ops.c | 60 +++++++++++++++++------------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 832bf6f57e9..cdcc1a7e698 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -2261,6 +2261,25 @@ static void UV_OT_unlink_selected(wmOperatorType *ot) ot->poll = ED_operator_uvedit; } +static void uv_select_sync_flush(ToolSettings *ts, BMEditMesh *em, const short select) +{ + /* bmesh API handles flushing but not on de-select */ + if (ts->uv_flag & UV_SYNC_SELECTION) { + if (ts->selectmode != SCE_SELECT_FACE) { + if (select == FALSE) { + EDBM_deselect_flush(em); + } + else { + EDBM_select_flush(em); + } + } + + if (select == FALSE) { + BM_select_history_validate(em->bm); + } + } +} + /* ******************** border select operator **************** */ /* This function sets the selection on tagged faces, need because settings the @@ -2491,20 +2510,7 @@ static int border_select_exec(bContext *C, wmOperator *op) } if (change) { - /* bmesh API habdles flushing but not on de-select */ - if (ts->uv_flag & UV_SYNC_SELECTION) { - if (ts->selectmode != SCE_SELECT_FACE) { - if (select == FALSE) { - EDBM_deselect_flush(em); - } - } - } - - if (ts->uv_flag & UV_SYNC_SELECTION) { - if (select == FALSE) { - BM_select_history_validate(em->bm); - } - } + uv_select_sync_flush(ts, em, select); WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); @@ -2539,13 +2545,12 @@ static void UV_OT_select_border(wmOperatorType *ot) /* ******************** circle select operator **************** */ -static void select_uv_inside_ellipse(BMEditMesh *em, SpaceImage *UNUSED(sima), Scene *scene, int select, - float *offset, float *ell, BMLoop *l, MLoopUV *luv) +static int select_uv_inside_ellipse(BMEditMesh *em, SpaceImage *UNUSED(sima), Scene *scene, int select, + float *offset, float *ell, BMLoop *l, MLoopUV *luv) { /* normalized ellipse: ell[0] = scaleX, ell[1] = scaleY */ float x, y, r2, *uv; - - + uv = luv->uv; x = (uv[0] - offset[0]) * ell[0]; @@ -2554,7 +2559,11 @@ static void select_uv_inside_ellipse(BMEditMesh *em, SpaceImage *UNUSED(sima), S r2 = x * x + y * y; if (r2 < 1.0f) { if (select) uvedit_uv_select_enable(em, scene, l, FALSE); - else uvedit_uv_select_disable(em, scene, l); + else uvedit_uv_select_disable(em, scene, l); + return TRUE; + } + else { + return FALSE; } } @@ -2572,6 +2581,7 @@ static int circle_select_exec(bContext *C, wmOperator *op) int x, y, radius, width, height, select; float zoomx, zoomy, offset[2], ellipse[2]; int gesture_mode = RNA_int_get(op->ptr, "gesture_mode"); + int change = FALSE; /* get operator properties */ select = (gesture_mode == GESTURE_MODAL_SELECT); @@ -2593,15 +2603,15 @@ static int circle_select_exec(bContext *C, wmOperator *op) BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); - select_uv_inside_ellipse(em, sima, scene, select, offset, ellipse, l, luv); + change |= select_uv_inside_ellipse(em, sima, scene, select, offset, ellipse, l, luv); } } -#if 0 //I think the BM_elem_select_set api stuff handles all this as necessary? - if (select) EM_select_flush(em); - else EM_deselect_flush(em); -#endif - WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); + if (change) { + uv_select_sync_flush(scene->toolsettings, em, select); + + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); + } return OPERATOR_FINISHED; } -- cgit v1.2.3 From a299855e34ce4321b2e508646965403f56d6ddc5 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Fri, 27 Apr 2012 13:18:55 +0000 Subject: Changes to get mingw buildslaves going. --- build_files/buildbot/master.cfg | 2 ++ build_files/buildbot/slave_compile.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/build_files/buildbot/master.cfg b/build_files/buildbot/master.cfg index 23751f7dcd4..066c133d335 100644 --- a/build_files/buildbot/master.cfg +++ b/build_files/buildbot/master.cfg @@ -117,6 +117,8 @@ add_builder(c, 'salad_linux_x86_64_scons', '', generic_builder, 'soc-2011-salad' add_builder(c, 'win32_scons', 'windows', generic_builder) add_builder(c, 'salad_win32_scons', 'windows', generic_builder, 'soc-2011-salad') add_builder(c, 'win64_scons', 'win64', generic_builder) +add_builder(c, 'mingw_win64_scons', 'mingw64', generic_builder) +add_builder(c, 'mingw_win32_scons', 'mingw32', generic_builder) #add_builder(c, 'freebsd_i386_cmake', '', generic_builder) #add_builder(c, 'freebsd_x86_64_cmake', '', generic_builder) diff --git a/build_files/buildbot/slave_compile.py b/build_files/buildbot/slave_compile.py index 209253296be..eafdf0868cd 100644 --- a/build_files/buildbot/slave_compile.py +++ b/build_files/buildbot/slave_compile.py @@ -117,6 +117,8 @@ else: scons_options.append('BF_BITNESS=' + bitness) scons_options.append('WITH_BF_CYCLES_CUDA_BINARIES=True') scons_options.append('BF_CYCLES_CUDA_NVCC=nvcc.exe') + if builder.find('mingw') != -1: + scons_options.append('BF_TOOLSET=mingw') retcode = subprocess.call(['python', 'scons/scons.py'] + scons_options) sys.exit(retcode) -- cgit v1.2.3 From dc313ff00d8e5c8681fb6d923b3da0d0b7ffbdac Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 01:59:21 +0000 Subject: add back lasso tool in the UV editor (Ctrl+LMB / Ctrl+Shift+LMB) --- source/blender/editors/mesh/editmesh_tools.c | 1 + source/blender/editors/space_image/image_ops.c | 7 +- source/blender/editors/uvedit/uvedit_ops.c | 158 +++++++++++++++++++++++-- 3 files changed, 150 insertions(+), 16 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index f3737925850..e88b34b5812 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -4280,3 +4280,4 @@ void MESH_OT_inset(wmOperatorType *ot) RNA_def_boolean(ot->srna, "use_outset", FALSE, "Outset", "Outset rather than inset"); RNA_def_boolean(ot->srna, "use_select_inset", TRUE, "Select Outer", "Select the new inset faces"); } + diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 2c688990a8f..d9f3ffafb14 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -190,13 +190,14 @@ int space_image_main_area_poll(bContext *C) return 0; } -/* For IMAGE_OT_curves_point_set to avoid sampling when in uv smooth mode */ +/* For IMAGE_OT_curves_point_set to avoid sampling when in uv smooth mode or editmode */ int space_image_main_area_not_uv_brush_poll(bContext *C) { SpaceImage *sima = CTX_wm_space_image(C); + Scene *scene = CTX_data_scene(C); + ToolSettings *toolsettings = scene->toolsettings; - ToolSettings *toolsettings = CTX_data_scene(C)->toolsettings; - if (sima && !toolsettings->uvsculpt) + if (sima && !toolsettings->uvsculpt && !scene->obedit) return 1; return 0; diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index cdcc1a7e698..4a115465932 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -47,6 +47,7 @@ #include "DNA_scene_types.h" #include "BLI_math.h" +#include "BLI_lasso.h" #include "BLI_blenlib.h" #include "BLI_array.h" #include "BLI_utildefines.h" @@ -1699,7 +1700,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) { SpaceImage *sima = CTX_wm_space_image(C); Scene *scene = CTX_data_scene(C); - ToolSettings *ts = CTX_data_tool_settings(C); + ToolSettings *ts = scene->toolsettings; Object *obedit = CTX_data_edit_object(C); Image *ima = CTX_data_edit_image(C); BMEditMesh *em = BMEdit_FromObject(obedit); @@ -2101,7 +2102,7 @@ static int select_linked_internal(bContext *C, wmOperator *op, wmEvent *event, i { SpaceImage *sima = CTX_wm_space_image(C); Scene *scene = CTX_data_scene(C); - ToolSettings *ts = CTX_data_tool_settings(C); + ToolSettings *ts = scene->toolsettings; Object *obedit = CTX_data_edit_object(C); Image *ima = CTX_data_edit_image(C); BMEditMesh *em = BMEdit_FromObject(obedit); @@ -2203,7 +2204,7 @@ static void UV_OT_select_linked_pick(wmOperatorType *ot) static int unlink_selection_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); - ToolSettings *ts = CTX_data_tool_settings(C); + ToolSettings *ts = scene->toolsettings; Object *obedit = CTX_data_edit_object(C); Image *ima = CTX_data_edit_image(C); BMEditMesh *em = BMEdit_FromObject(obedit); @@ -2289,7 +2290,7 @@ static void uv_select_sync_flush(ToolSettings *ts, BMEditMesh *em, const short s * * De-selects faces that have been tagged on efa->tmp.l. */ -static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Object *obedit, short select) +static void uv_faces_do_sticky(SpaceImage *sima, Scene *scene, Object *obedit, short select) { /* Selecting UV Faces with some modes requires us to change * the selection in other faces (depending on the sticky mode). @@ -2297,7 +2298,7 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje * This only needs to be done when the Mesh is not used for * selection (so for sticky modes, vertex or location based). */ - ToolSettings *ts = CTX_data_tool_settings(C); + ToolSettings *ts = scene->toolsettings; BMEditMesh *em = BMEdit_FromObject(obedit); BMFace *efa; BMLoop *l; @@ -2418,7 +2419,7 @@ static int border_select_exec(bContext *C, wmOperator *op) { SpaceImage *sima = CTX_wm_space_image(C); Scene *scene = CTX_data_scene(C); - ToolSettings *ts = CTX_data_tool_settings(C); + ToolSettings *ts = scene->toolsettings; Object *obedit = CTX_data_edit_object(C); Image *ima = CTX_data_edit_image(C); ARegion *ar = CTX_wm_region(C); @@ -2477,7 +2478,7 @@ static int border_select_exec(bContext *C, wmOperator *op) /* (de)selects all tagged faces and deals with sticky modes */ if (change) - uv_faces_do_sticky(C, sima, scene, obedit, select); + uv_faces_do_sticky(sima, scene, obedit, select); } else { /* other selection modes */ @@ -2512,7 +2513,9 @@ static int border_select_exec(bContext *C, wmOperator *op) if (change) { uv_select_sync_flush(ts, em, select); - WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); + if (ts->uv_flag & UV_SYNC_SELECTION) { + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); + } return OPERATOR_FINISHED; } @@ -2571,6 +2574,7 @@ static int circle_select_exec(bContext *C, wmOperator *op) { SpaceImage *sima = CTX_wm_space_image(C); Scene *scene = CTX_data_scene(C); + ToolSettings *ts = scene->toolsettings; Object *obedit = CTX_data_edit_object(C); BMEditMesh *em = BMEdit_FromObject(obedit); ARegion *ar = CTX_wm_region(C); @@ -2608,9 +2612,11 @@ static int circle_select_exec(bContext *C, wmOperator *op) } if (change) { - uv_select_sync_flush(scene->toolsettings, em, select); + uv_select_sync_flush(ts, em, select); - WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); + if (ts->uv_flag & UV_SYNC_SELECTION) { + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); + } } return OPERATOR_FINISHED; @@ -2640,6 +2646,126 @@ static void UV_OT_circle_select(wmOperatorType *ot) RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); } + +/* ******************** lasso select operator **************** */ + +static void do_lasso_select_mesh_uv(bContext *C, int mcords[][2], short moves, short select) +{ + Image *ima = CTX_data_edit_image(C); + ARegion *ar = CTX_wm_region(C); + Object *obedit = CTX_data_edit_object(C); + Scene *scene = CTX_data_scene(C); + ToolSettings *ts = scene->toolsettings; + BMEditMesh *em = BMEdit_FromObject(obedit); + + BMIter iter, liter; + + BMFace *efa; + BMLoop *l; + MTexPoly *tf; + int screen_uv[2], change = TRUE; + rcti rect; + + BLI_lasso_boundbox(&rect, mcords, moves); + + if (ts->uv_selectmode == UV_SELECT_FACE) { /* Face Center Sel */ + change = FALSE; + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { + /* assume not touched */ + if ((select) != (uvedit_face_select_test(scene, em, efa))) { + float cent[2]; + uv_poly_center(em, efa, cent); + UI_view2d_view_to_region(&ar->v2d, cent[0], cent[1], &screen_uv[0], &screen_uv[1]); + if (BLI_in_rcti(&rect, screen_uv[0], screen_uv[1]) && + BLI_lasso_is_point_inside(mcords, moves, screen_uv[0], screen_uv[1], V2D_IS_CLIPPED)) + { + uvedit_face_select_enable(scene, em, efa, FALSE); + change = TRUE; + } + } + } + } + else { /* Vert Sel */ + BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { + tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); + if (uvedit_face_visible_test(scene, ima, efa, tf)) { + BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { + if ((select) != (uvedit_uv_select_test(em, scene, l))) { + MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); + UI_view2d_view_to_region(&ar->v2d, luv->uv[0], luv->uv[1], &screen_uv[0], &screen_uv[1]); + if (BLI_in_rcti(&rect, screen_uv[0], screen_uv[1]) && + BLI_lasso_is_point_inside(mcords, moves, screen_uv[0], screen_uv[1], V2D_IS_CLIPPED)) + { + if (select) { + uvedit_uv_select_enable(em, scene, l, FALSE); + } + else { + uvedit_uv_select_disable(em, scene, l); + } + } + } + } + } + } + } + if (change) { + uv_select_sync_flush(scene->toolsettings, em, select); + + if (ts->uv_flag & UV_SYNC_SELECTION) { + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); + } + } +} + +static int uv_lasso_select_exec(bContext *C, wmOperator *op) +{ + int i = 0; + int mcords[1024][2]; + + RNA_BEGIN (op->ptr, itemptr, "path") { + float loc[2]; + + RNA_float_get_array(&itemptr, "loc", loc); + mcords[i][0] = (int)loc[0]; + mcords[i][1] = (int)loc[1]; + i++; + if (i >= 1024) break; + } + RNA_END; + + if (i > 1) { + short select; + + select = !RNA_boolean_get(op->ptr, "deselect"); + do_lasso_select_mesh_uv(C, mcords, i, select); + + return OPERATOR_FINISHED; + } + return OPERATOR_PASS_THROUGH; +} + +void UV_OT_select_lasso(wmOperatorType *ot) +{ + ot->name = "Lasso Select UV"; + ot->description = "Select UVs using lasso selection"; + ot->idname = "UV_OT_select_lasso"; + + ot->invoke = WM_gesture_lasso_invoke; + ot->modal = WM_gesture_lasso_modal; + ot->exec = uv_lasso_select_exec; + ot->poll = ED_operator_image_active; + ot->cancel = WM_gesture_lasso_cancel; + + /* flags */ + ot->flag = OPTYPE_UNDO; + + RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", ""); + RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Deselect rather than select items"); + RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection instead of deselecting everything first"); +} + + + /* ******************** snap cursor operator **************** */ static void snap_uv_to_pixel(float *uvco, float w, float h) @@ -3007,9 +3133,9 @@ static int bm_face_is_all_uv_sel(BMesh *bm, BMFace *f, int bool_test) static int hide_exec(bContext *C, wmOperator *op) { SpaceImage *sima = CTX_wm_space_image(C); - ToolSettings *ts = CTX_data_tool_settings(C); Object *obedit = CTX_data_edit_object(C); Scene *scene = CTX_data_scene(C); + ToolSettings *ts = scene->toolsettings; BMEditMesh *em = BMEdit_FromObject(obedit); BMFace *efa; BMLoop *l; @@ -3122,9 +3248,9 @@ static void UV_OT_hide(wmOperatorType *ot) static int reveal_exec(bContext *C, wmOperator *UNUSED(op)) { SpaceImage *sima = CTX_wm_space_image(C); - ToolSettings *ts = CTX_data_tool_settings(C); Object *obedit = CTX_data_edit_object(C); - /*Scene *scene = CTX_data_scene(C);*/ /*UNUSED*/ + Scene *scene = CTX_data_scene(C); + ToolSettings *ts = scene->toolsettings; BMEditMesh *em = BMEdit_FromObject(obedit); BMFace *efa; BMLoop *l; @@ -3550,6 +3676,7 @@ void ED_operatortypes_uvedit(void) WM_operatortype_append(UV_OT_unlink_selected); WM_operatortype_append(UV_OT_select_pinned); WM_operatortype_append(UV_OT_select_border); + WM_operatortype_append(UV_OT_select_lasso); WM_operatortype_append(UV_OT_circle_select); WM_operatortype_append(UV_OT_snap_cursor); @@ -3610,6 +3737,11 @@ void ED_keymap_uvedit(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "UV_OT_circle_select", CKEY, KM_PRESS, 0, 0); + kmi = WM_keymap_add_item(keymap, "UV_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL, 0); + RNA_boolean_set(kmi->ptr, "deselect", FALSE); + kmi = WM_keymap_add_item(keymap, "UV_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL | KM_SHIFT, 0); + RNA_boolean_set(kmi->ptr, "deselect", TRUE); + /* selection manipulation */ RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0)->ptr, "extend", FALSE); RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0)->ptr, "extend", FALSE); -- cgit v1.2.3 From 09dc600839904a198ab4ba3fad62ce58c2d3aa07 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sat, 28 Apr 2012 06:28:07 +0000 Subject: Same mingw fix as for compile --- build_files/buildbot/slave_pack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build_files/buildbot/slave_pack.py b/build_files/buildbot/slave_pack.py index cb02e619c1d..73c633d0c29 100644 --- a/build_files/buildbot/slave_pack.py +++ b/build_files/buildbot/slave_pack.py @@ -81,6 +81,8 @@ if builder.find('scons') != -1: scons_options.append('BF_BITNESS=' + bitness) scons_options.append('WITH_BF_CYCLES_CUDA_BINARIES=True') scons_options.append('BF_CYCLES_CUDA_NVCC=nvcc.exe') + if builder.find('mingw') != -1: + scons_options.append('BF_TOOLSET=mingw') retcode = subprocess.call(['python', 'scons/scons.py'] + scons_options) sys.exit(retcode) -- cgit v1.2.3 From b340f930ec5639f24e7e2d47fab221fb752b61dd Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 06:31:57 +0000 Subject: style cleanup: changes to brace placement / newlines - for/while/if/switch --- intern/container/CTR_Map.h | 2 +- intern/ghost/GHOST_Rect.h | 4 +- intern/guardedalloc/intern/mallocn.c | 80 +- intern/mikktspace/mikktspace.c | 406 +++++----- intern/utfconv/utf_winfunc.c | 12 +- release/plugins/sequence/blur.c | 50 +- release/plugins/texture/clouds2.c | 4 +- release/plugins/texture/tiles.c | 22 +- source/blender/avi/intern/avi.c | 2 + source/blender/avi/intern/codecs.c | 8 +- source/blender/blenkernel/intern/CCGSubSurf.c | 2 + source/blender/blenkernel/intern/DerivedMesh.c | 11 +- source/blender/blenkernel/intern/anim.c | 6 +- source/blender/blenkernel/intern/anim_sys.c | 16 +- source/blender/blenkernel/intern/armature.c | 2 +- source/blender/blenkernel/intern/boids.c | 6 +- source/blender/blenkernel/intern/brush.c | 2 +- source/blender/blenkernel/intern/bvhutils.c | 6 +- source/blender/blenkernel/intern/cloth.c | 176 ++--- source/blender/blenkernel/intern/collision.c | 221 ++---- source/blender/blenkernel/intern/colortools.c | 11 +- source/blender/blenkernel/intern/constraint.c | 21 +- source/blender/blenkernel/intern/context.c | 2 +- source/blender/blenkernel/intern/curve.c | 4 +- source/blender/blenkernel/intern/customdata.c | 7 +- source/blender/blenkernel/intern/deform.c | 4 +- source/blender/blenkernel/intern/depsgraph.c | 4 +- source/blender/blenkernel/intern/displist.c | 2 +- source/blender/blenkernel/intern/dynamicpaint.c | 186 +++-- source/blender/blenkernel/intern/effect.c | 11 +- source/blender/blenkernel/intern/fcurve.c | 3 +- source/blender/blenkernel/intern/fmodifier.c | 3 +- source/blender/blenkernel/intern/font.c | 28 +- source/blender/blenkernel/intern/idprop.c | 3 +- source/blender/blenkernel/intern/image.c | 23 +- source/blender/blenkernel/intern/image_gen.c | 12 +- source/blender/blenkernel/intern/implicit.c | 221 ++---- source/blender/blenkernel/intern/library.c | 15 +- source/blender/blenkernel/intern/material.c | 6 +- source/blender/blenkernel/intern/mball.c | 9 +- source/blender/blenkernel/intern/mesh.c | 37 +- source/blender/blenkernel/intern/movieclip.c | 2 +- source/blender/blenkernel/intern/multires.c | 2 +- .../blender/blenkernel/intern/navmesh_conversion.c | 117 +-- source/blender/blenkernel/intern/nla.c | 4 +- source/blender/blenkernel/intern/object.c | 14 +- source/blender/blenkernel/intern/ocean.c | 149 ++-- source/blender/blenkernel/intern/packedFile.c | 2 +- source/blender/blenkernel/intern/paint.c | 2 +- source/blender/blenkernel/intern/particle.c | 10 +- source/blender/blenkernel/intern/particle_system.c | 40 +- source/blender/blenkernel/intern/pointcache.c | 60 +- source/blender/blenkernel/intern/property.c | 10 +- source/blender/blenkernel/intern/report.c | 2 +- source/blender/blenkernel/intern/sca.c | 10 +- source/blender/blenkernel/intern/seqeffects.c | 2 +- source/blender/blenkernel/intern/sequencer.c | 4 + source/blender/blenkernel/intern/shrinkwrap.c | 67 +- source/blender/blenkernel/intern/sketch.c | 129 ++-- source/blender/blenkernel/intern/softbody.c | 41 +- source/blender/blenkernel/intern/sound.c | 104 +-- source/blender/blenkernel/intern/subsurf_ccg.c | 2 + source/blender/blenkernel/intern/text.c | 93 +-- source/blender/blenkernel/intern/texture.c | 6 +- source/blender/blenkernel/intern/writeffmpeg.c | 30 +- source/blender/blenlib/intern/BLI_kdopbvh.c | 283 +++---- source/blender/blenlib/intern/DLRB_tree.c | 6 +- source/blender/blenlib/intern/bpath.c | 2 +- source/blender/blenlib/intern/dynlib.c | 2 + source/blender/blenlib/intern/freetypefont.c | 19 +- source/blender/blenlib/intern/graph.c | 399 ++++------ source/blender/blenlib/intern/listbase.c | 3 +- source/blender/blenlib/intern/path_util.c | 2 +- source/blender/blenlib/intern/pbvh.c | 10 +- source/blender/blenlib/intern/string.c | 2 +- source/blender/blenlib/intern/string_utf8.c | 2 +- source/blender/blenloader/intern/readblenentry.c | 3 +- source/blender/blenloader/intern/readfile.c | 178 ++--- source/blender/blenloader/intern/writefile.c | 24 +- source/blender/bmesh/intern/bmesh_walkers.c | 3 +- source/blender/bmesh/intern/bmesh_walkers_impl.c | 2 +- source/blender/collada/AnimationExporter.cpp | 110 ++- source/blender/collada/AnimationImporter.cpp | 46 +- source/blender/collada/ArmatureExporter.cpp | 38 +- source/blender/collada/ArmatureImporter.cpp | 3 +- source/blender/collada/CameraExporter.cpp | 11 +- source/blender/collada/DocumentExporter.cpp | 2 +- source/blender/collada/DocumentImporter.cpp | 19 +- source/blender/collada/EffectExporter.cpp | 5 +- source/blender/collada/ErrorHandler.cpp | 22 +- source/blender/collada/GeometryExporter.cpp | 6 +- source/blender/collada/GeometryExporter.h | 9 +- source/blender/collada/ImageExporter.cpp | 5 +- source/blender/collada/LightExporter.cpp | 7 +- source/blender/collada/MaterialExporter.cpp | 5 +- source/blender/collada/MaterialExporter.h | 2 +- source/blender/collada/MeshImporter.cpp | 8 +- source/blender/collada/SceneExporter.cpp | 11 +- source/blender/collada/TransformReader.cpp | 2 +- source/blender/collada/TransformWriter.cpp | 9 +- source/blender/collada/collada_internal.cpp | 39 +- source/blender/editors/animation/anim_filter.c | 3 +- source/blender/editors/animation/anim_markers.c | 2 +- source/blender/editors/armature/editarmature.c | 5 +- .../editors/armature/editarmature_generate.c | 48 +- .../editors/armature/editarmature_retarget.c | 834 +++++++-------------- .../blender/editors/armature/editarmature_sketch.c | 738 ++++++------------ source/blender/editors/armature/poselib.c | 8 +- source/blender/editors/armature/reeb.c | 793 +++++++------------- source/blender/editors/curve/editcurve.c | 2 +- source/blender/editors/curve/editfont.c | 27 +- .../blender/editors/interface/interface_handlers.c | 6 +- .../blender/editors/interface/interface_widgets.c | 3 +- source/blender/editors/interface/resources.c | 3 +- source/blender/editors/mesh/editmesh_tools.c | 5 +- source/blender/editors/mesh/meshtools.c | 5 +- source/blender/editors/object/object_add.c | 4 +- source/blender/editors/object/object_bake.c | 2 +- source/blender/editors/object/object_edit.c | 18 +- source/blender/editors/object/object_hook.c | 2 +- source/blender/editors/object/object_relations.c | 6 +- source/blender/editors/object/object_shapekey.c | 2 +- source/blender/editors/object/object_vgroup.c | 15 +- source/blender/editors/physics/dynamicpaint_ops.c | 3 +- source/blender/editors/physics/particle_edit.c | 12 +- source/blender/editors/physics/physics_fluid.c | 3 +- source/blender/editors/screen/area.c | 18 +- source/blender/editors/screen/glutil.c | 18 +- source/blender/editors/screen/screen_edit.c | 4 +- source/blender/editors/screen/screen_ops.c | 12 +- source/blender/editors/sculpt_paint/paint_cursor.c | 4 + source/blender/editors/sculpt_paint/sculpt.c | 9 +- source/blender/editors/sculpt_paint/sculpt_undo.c | 2 + source/blender/editors/sound/sound_ops.c | 6 +- source/blender/editors/space_action/space_action.c | 14 +- .../editors/space_buttons/buttons_context.c | 2 +- .../blender/editors/space_buttons/buttons_header.c | 4 +- .../blender/editors/space_buttons/space_buttons.c | 12 +- source/blender/editors/space_clip/clip_graph_ops.c | 2 +- source/blender/editors/space_clip/clip_ops.c | 4 +- source/blender/editors/space_clip/space_clip.c | 16 +- source/blender/editors/space_clip/tracking_ops.c | 2 +- source/blender/editors/space_file/file_draw.c | 8 +- source/blender/editors/space_file/file_ops.c | 3 +- source/blender/editors/space_file/filelist.c | 4 +- source/blender/editors/space_file/filesel.c | 3 +- source/blender/editors/space_file/fsmenu.c | 19 +- source/blender/editors/space_file/space_file.c | 8 +- source/blender/editors/space_graph/graph_buttons.c | 2 +- source/blender/editors/space_graph/space_graph.c | 10 +- source/blender/editors/space_image/space_image.c | 2 + source/blender/editors/space_logic/logic_buttons.c | 3 +- source/blender/editors/space_logic/logic_window.c | 72 +- source/blender/editors/space_logic/space_logic.c | 4 +- source/blender/editors/space_nla/nla_buttons.c | 2 +- source/blender/editors/space_nla/space_nla.c | 20 +- source/blender/editors/space_node/drawnode.c | 37 +- source/blender/editors/space_node/node_edit.c | 4 +- source/blender/editors/space_node/node_templates.c | 13 +- source/blender/editors/space_node/space_node.c | 6 +- .../blender/editors/space_outliner/outliner_draw.c | 16 +- .../editors/space_outliner/outliner_select.c | 4 +- .../editors/space_outliner/outliner_tools.c | 2 +- .../editors/space_outliner/space_outliner.c | 16 +- .../editors/space_sequencer/sequencer_draw.c | 12 +- source/blender/editors/space_text/text_draw.c | 3 +- source/blender/editors/space_time/space_time.c | 8 +- .../editors/space_userpref/space_userpref.c | 2 +- source/blender/editors/space_view3d/view3d_edit.c | 9 +- source/blender/editors/transform/transform.c | 169 ++--- .../editors/transform/transform_constraints.c | 9 +- .../editors/transform/transform_conversions.c | 68 +- .../blender/editors/transform/transform_generics.c | 109 ++- source/blender/editors/transform/transform_input.c | 6 +- .../editors/transform/transform_manipulator.c | 12 +- source/blender/editors/transform/transform_ops.c | 53 +- .../editors/transform/transform_orientations.c | 14 +- source/blender/editors/transform/transform_snap.c | 240 ++---- source/blender/editors/util/numinput.c | 3 +- source/blender/gpu/intern/gpu_buffers.c | 6 +- source/blender/gpu/intern/gpu_codegen.c | 8 +- source/blender/gpu/intern/gpu_draw.c | 6 +- source/blender/gpu/intern/gpu_extensions.c | 18 +- source/blender/gpu/intern/gpu_material.c | 17 +- source/blender/ikplugin/intern/itasc_plugin.cpp | 34 +- source/blender/imbuf/intern/anim_movie.c | 2 +- source/blender/imbuf/intern/dds/ColorBlock.cpp | 24 +- .../blender/imbuf/intern/dds/DirectDrawSurface.cpp | 8 +- source/blender/imbuf/intern/dds/PixelFormat.h | 16 +- source/blender/imbuf/intern/jpeg.c | 6 +- .../blender/imbuf/intern/openexr/openexr_api.cpp | 47 +- source/blender/imbuf/intern/png.c | 2 +- source/blender/imbuf/intern/radiance_hdr.c | 7 +- source/blender/imbuf/intern/targa.c | 4 +- source/blender/imbuf/intern/thumbs.c | 4 +- source/blender/imbuf/intern/util.c | 7 +- source/blender/makesdna/intern/dna_genfile.c | 4 +- source/blender/makesdna/intern/makesdna.c | 3 +- source/blender/makesrna/intern/makesrna.c | 4 +- source/blender/makesrna/intern/rna_access.c | 3 +- source/blender/makesrna/intern/rna_fcurve.c | 6 +- source/blender/makesrna/intern/rna_main.c | 3 +- source/blender/makesrna/intern/rna_wm.c | 12 +- source/blender/modifiers/intern/MOD_boolean.c | 2 +- source/blender/modifiers/intern/MOD_cast.c | 14 +- source/blender/modifiers/intern/MOD_collision.c | 18 +- source/blender/modifiers/intern/MOD_displace.c | 2 +- source/blender/modifiers/intern/MOD_explode.c | 4 +- .../blender/modifiers/intern/MOD_fluidsim_util.c | 42 +- source/blender/modifiers/intern/MOD_mask.c | 15 +- source/blender/modifiers/intern/MOD_remesh.c | 6 +- source/blender/modifiers/intern/MOD_screw.c | 2 +- source/blender/modifiers/intern/MOD_simpledeform.c | 9 +- source/blender/modifiers/intern/MOD_util.c | 2 +- source/blender/modifiers/intern/MOD_warp.c | 2 +- source/blender/modifiers/intern/MOD_wave.c | 4 +- .../blender/modifiers/intern/MOD_weightvg_util.c | 6 +- .../blender/nodes/composite/node_composite_util.c | 13 +- .../composite/nodes/node_composite_channelMatte.c | 8 +- .../composite/nodes/node_composite_colorSpill.c | 12 +- .../nodes/composite/nodes/node_composite_filter.c | 2 +- .../nodes/composite/nodes/node_composite_image.c | 7 +- .../nodes/composite/nodes/node_composite_levels.c | 8 +- .../nodes/composite/nodes/node_composite_math.c | 3 +- .../nodes/composite/nodes/node_composite_rotate.c | 2 +- .../composite/nodes/node_composite_sepcombYCCA.c | 12 +- .../composite/nodes/node_composite_transform.c | 2 +- source/blender/nodes/shader/node_shader_util.c | 6 +- .../blender/nodes/shader/nodes/node_shader_math.c | 2 +- .../nodes/texture/nodes/node_texture_math.c | 2 +- .../nodes/texture/nodes/node_texture_output.c | 14 +- source/blender/quicktime/apple/quicktime_import.c | 40 +- source/blender/render/intern/raytrace/bvh.h | 121 ++- .../blender/render/intern/raytrace/rayobject.cpp | 78 +- .../render/intern/raytrace/rayobject_blibvh.cpp | 3 +- .../render/intern/raytrace/rayobject_hint.h | 2 +- .../render/intern/raytrace/rayobject_instance.cpp | 18 +- .../render/intern/raytrace/rayobject_octree.cpp | 72 +- .../render/intern/raytrace/rayobject_qbvh.cpp | 3 +- .../render/intern/raytrace/rayobject_rtbuild.cpp | 53 +- .../render/intern/raytrace/rayobject_svbvh.cpp | 12 +- .../render/intern/raytrace/rayobject_vbvh.cpp | 12 +- source/blender/render/intern/raytrace/reorganize.h | 188 ++--- source/blender/render/intern/raytrace/svbvh.h | 89 +-- source/blender/render/intern/raytrace/vbvh.h | 35 +- .../blender/render/intern/source/convertblender.c | 13 +- source/blender/render/intern/source/initrender.c | 4 +- source/blender/render/intern/source/pointdensity.c | 2 +- source/blender/render/intern/source/rayshade.c | 102 +-- .../blender/render/intern/source/render_texture.c | 10 +- source/blender/render/intern/source/rendercore.c | 4 +- .../blender/render/intern/source/renderdatabase.c | 6 +- source/blender/render/intern/source/shadeoutput.c | 7 +- source/blender/render/intern/source/sunsky.c | 6 +- .../blender/render/intern/source/volume_precache.c | 33 +- source/blender/render/intern/source/volumetric.c | 3 +- source/blender/render/intern/source/voxeldata.c | 17 +- source/blender/render/intern/source/zbuf.c | 4 +- source/blender/windowmanager/intern/wm_keymap.c | 2 + source/blender/windowmanager/intern/wm_operators.c | 7 +- 260 files changed, 3501 insertions(+), 5421 deletions(-) diff --git a/intern/container/CTR_Map.h b/intern/container/CTR_Map.h index 8b6d84337c2..9557821d642 100644 --- a/intern/container/CTR_Map.h +++ b/intern/container/CTR_Map.h @@ -63,7 +63,7 @@ public: for (int i = 0; i < m_num_buckets; ++i) { m_buckets[i] = 0; - for(Entry *entry = map.m_buckets[i]; entry; entry=entry->m_next) + for (Entry *entry = map.m_buckets[i]; entry; entry=entry->m_next) insert(entry->m_key, entry->m_value); } } diff --git a/intern/ghost/GHOST_Rect.h b/intern/ghost/GHOST_Rect.h index bcbcaded364..30d9d16b701 100644 --- a/intern/ghost/GHOST_Rect.h +++ b/intern/ghost/GHOST_Rect.h @@ -241,8 +241,10 @@ inline void GHOST_Rect::wrapPoint(GHOST_TInt32 &x, GHOST_TInt32 &y, GHOST_TInt32 GHOST_TInt32 h= getHeight(); /* highly unlikely but avoid eternal loop */ - if(w-ofs*2 <= 0 || h-ofs*2 <= 0) + if (w-ofs*2 <= 0 || h-ofs*2 <= 0) { return; + } + while(x-ofs < m_l) x+= w-(ofs*2); while(y-ofs < m_t) y+= h-(ofs*2); while(x+ofs > m_r) x-= w-(ofs*2); diff --git a/intern/guardedalloc/intern/mallocn.c b/intern/guardedalloc/intern/mallocn.c index 2a6a0df0ff4..bb3a1c66ddc 100644 --- a/intern/guardedalloc/intern/mallocn.c +++ b/intern/guardedalloc/intern/mallocn.c @@ -243,7 +243,7 @@ void *MEM_dupallocN(void *vmemh) MemHead *memh= vmemh; memh--; - if(memh->mmap) + if (memh->mmap) newp= MEM_mapallocN(memh->len, "dupli_mapalloc"); else newp= MEM_mallocN(memh->len, "dupli_alloc"); @@ -265,8 +265,8 @@ void *MEM_reallocN(void *vmemh, size_t len) memh--; newp= MEM_mallocN(len, memh->name); - if(newp) { - if(len < memh->len) + if (newp) { + if (len < memh->len) memcpy(newp, vmemh, len); else memcpy(newp, vmemh, memh->len); @@ -311,14 +311,14 @@ void *MEM_mallocN(size_t len, const char *str) memh= (MemHead *)malloc(len+sizeof(MemHead)+sizeof(MemTail)); - if(memh) { + if (memh) { make_memhead_header(memh, len, str); mem_unlock_thread(); - if(malloc_debug_memset && len) + if (malloc_debug_memset && len) memset(memh+1, 255, len); #ifdef DEBUG_MEMCOUNTER - if(_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL) + if (_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL) memcount_raise(__func__); memh->_count= _mallocn_count++; #endif @@ -339,11 +339,11 @@ void *MEM_callocN(size_t len, const char *str) memh= (MemHead *)calloc(len+sizeof(MemHead)+sizeof(MemTail),1); - if(memh) { + if (memh) { make_memhead_header(memh, len, str); mem_unlock_thread(); #ifdef DEBUG_MEMCOUNTER - if(_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL) + if (_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL) memcount_raise(__func__); memh->_count= _mallocn_count++; #endif @@ -366,14 +366,14 @@ void *MEM_mapallocN(size_t len, const char *str) memh= mmap(NULL, len+sizeof(MemHead)+sizeof(MemTail), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, -1, 0); - if(memh!=(MemHead *)-1) { + if (memh!=(MemHead *)-1) { make_memhead_header(memh, len, str); memh->mmap= 1; mmap_in_use += len; peak_mem = mmap_in_use > peak_mem ? mmap_in_use : peak_mem; mem_unlock_thread(); #ifdef DEBUG_MEMCOUNTER - if(_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL) + if (_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL) memcount_raise(__func__); memh->_count= _mallocn_count++; #endif @@ -406,9 +406,9 @@ static int compare_len(const void *p1, const void *p2) const MemPrintBlock *pb1= (const MemPrintBlock*)p1; const MemPrintBlock *pb2= (const MemPrintBlock*)p2; - if(pb1->len < pb2->len) + if (pb1->len < pb2->len) return 1; - else if(pb1->len == pb2->len) + else if (pb1->len == pb2->len) return 0; else return -1; @@ -431,7 +431,7 @@ void MEM_printmemlist_stats(void) membl = membase->first; if (membl) membl = MEMNEXT(membl); - while(membl) { + while (membl) { pb->name= membl->name; pb->len= membl->len; pb->items= 1; @@ -439,18 +439,18 @@ void MEM_printmemlist_stats(void) totpb++; pb++; - if(membl->next) + if (membl->next) membl= MEMNEXT(membl->next); else break; } /* sort by name and add together blocks with the same name */ qsort(printblock, totpb, sizeof(MemPrintBlock), compare_name); - for(a=0, b=0; aitems, (double)pb->len/(double)(1024*1024), (double)pb->len/1024.0/(double)pb->items, pb->name); free(printblock); @@ -491,7 +491,7 @@ static void MEM_printmemlist_internal( int pydict ) print_error("# membase_debug.py\n"); print_error("membase = [\\\n"); } - while(membl) { + while (membl) { if (pydict) { fprintf(stderr, "{'len':" SIZET_FORMAT ", 'name':'''%s''', 'pointer':'%p'},\\\n", SIZET_ARG(membl->len), membl->name, (void *)(membl+1)); } else { @@ -501,7 +501,7 @@ static void MEM_printmemlist_internal( int pydict ) print_error("%s len: " SIZET_FORMAT " %p\n", membl->name, SIZET_ARG(membl->len), membl+1); #endif } - if(membl->next) + if (membl->next) membl= MEMNEXT(membl->next); else break; } @@ -536,9 +536,9 @@ void MEM_callbackmemlist(void (*func)(void*)) { membl = membase->first; if (membl) membl = MEMNEXT(membl); - while(membl) { + while (membl) { func(membl+1); - if(membl->next) + if (membl->next) membl= MEMNEXT(membl->next); else break; } @@ -554,13 +554,13 @@ short MEM_testN(void *vmemh) { membl = membase->first; if (membl) membl = MEMNEXT(membl); - while(membl) { + while (membl) { if (vmemh == membl+1) { mem_unlock_thread(); return 1; } - if(membl->next) + if (membl->next) membl= MEMNEXT(membl->next); else break; } @@ -585,13 +585,13 @@ short MEM_freeN(void *vmemh) /* anders compileertie niet meer */ MemHead *memh= vmemh; const char *name; - if (memh == NULL){ + if (memh == NULL) { MemorY_ErroR("free","attempt to free NULL pointer"); /* print_error(err_stream, "%d\n", (memh+4000)->tag1); */ return(-1); } - if(sizeof(intptr_t)==8) { + if (sizeof(intptr_t)==8) { if (((intptr_t) memh) & 0x7) { MemorY_ErroR("free","attempt to free illegal pointer"); return(-1); @@ -605,7 +605,7 @@ short MEM_freeN(void *vmemh) /* anders compileertie niet meer */ } memh--; - if(memh->tag1 == MEMFREE && memh->tag2 == MEMFREE) { + if (memh->tag1 == MEMFREE && memh->tag2 == MEMFREE) { MemorY_ErroR(memh->name,"double free"); return(-1); } @@ -613,7 +613,7 @@ short MEM_freeN(void *vmemh) /* anders compileertie niet meer */ mem_lock_thread(); if ((memh->tag1 == MEMTAG1) && (memh->tag2 == MEMTAG2) && ((memh->len & 0x3) == 0)) { memt = (MemTail *)(((char *) memh) + sizeof(MemHead) + memh->len); - if (memt->tag3 == MEMTAG3){ + if (memt->tag3 == MEMTAG3) { memh->tag1 = MEMFREE; memh->tag2 = MEMFREE; @@ -628,7 +628,7 @@ short MEM_freeN(void *vmemh) /* anders compileertie niet meer */ error = 2; MemorY_ErroR(memh->name,"end corrupt"); name = check_memlist(memh); - if (name != NULL){ + if (name != NULL) { if (name != memh->name) MemorY_ErroR(name,"is also corrupt"); } } else{ @@ -694,13 +694,13 @@ static void rem_memblock(MemHead *memh) totblock--; mem_in_use -= memh->len; - if(memh->mmap) { + if (memh->mmap) { mmap_in_use -= memh->len; if (munmap(memh, memh->len + sizeof(MemHead) + sizeof(MemTail))) printf("Couldn't unmap memory %s\n", memh->name); } else { - if(malloc_debug_memset && memh->len) + if (malloc_debug_memset && memh->len) memset(memh+1, 255, memh->len); free(memh); } @@ -723,7 +723,7 @@ static const char *check_memlist(MemHead *memh) forw = membase->first; if (forw) forw = MEMNEXT(forw); forwok = NULL; - while(forw){ + while (forw) { if (forw->tag1 != MEMTAG1 || forw->tag2 != MEMTAG2) break; forwok = forw; if (forw->next) forw = MEMNEXT(forw->next); @@ -733,7 +733,7 @@ static const char *check_memlist(MemHead *memh) back = (MemHead *) membase->last; if (back) back = MEMNEXT(back); backok = NULL; - while(back){ + while (back) { if (back->tag1 != MEMTAG1 || back->tag2 != MEMTAG2) break; backok = back; if (back->prev) back = MEMNEXT(back->prev); @@ -742,13 +742,13 @@ static const char *check_memlist(MemHead *memh) if (forw != back) return ("MORE THAN 1 MEMORYBLOCK CORRUPT"); - if (forw == NULL && back == NULL){ + if (forw == NULL && back == NULL) { /* geen foute headers gevonden dan maar op zoek naar memblock*/ forw = membase->first; if (forw) forw = MEMNEXT(forw); forwok = NULL; - while(forw){ + while (forw) { if (forw == memh) break; if (forw->tag1 != MEMTAG1 || forw->tag2 != MEMTAG2) break; forwok = forw; @@ -760,7 +760,7 @@ static const char *check_memlist(MemHead *memh) back = (MemHead *) membase->last; if (back) back = MEMNEXT(back); backok = NULL; - while(back){ + while (back) { if (back == memh) break; if (back->tag1 != MEMTAG1 || back->tag2 != MEMTAG2) break; backok = back; @@ -772,10 +772,10 @@ static const char *check_memlist(MemHead *memh) if (forwok) name = forwok->nextname; else name = "No name found"; - if (forw == memh){ + if (forw == memh) { /* voor alle zekerheid wordt dit block maar uit de lijst gehaald */ - if (forwok){ - if (backok){ + if (forwok) { + if (backok) { forwok->next = (MemHead *)&backok->next; backok->prev = (MemHead *)&forwok->next; forwok->nextname = backok->name; @@ -785,7 +785,7 @@ static const char *check_memlist(MemHead *memh) /* membase->last = (struct Link *) &forwok->next; */ } } else{ - if (backok){ + if (backok) { backok->prev = NULL; membase->first = &backok->next; } else{ diff --git a/intern/mikktspace/mikktspace.c b/intern/mikktspace/mikktspace.c index 2036e601bcb..24c77c439a7 100644 --- a/intern/mikktspace/mikktspace.c +++ b/intern/mikktspace/mikktspace.c @@ -193,7 +193,7 @@ static STSpace AvgTSpace(const STSpace * pTS0, const STSpace * pTS1) // this if is important. Due to floating point precision // averaging when ts0==ts1 will cause a slight difference // which results in tangent space splits later on - if(pTS0->fMagS==pTS1->fMagS && pTS0->fMagT==pTS1->fMagT && + if (pTS0->fMagS==pTS1->fMagS && pTS0->fMagT==pTS1->fMagT && veq(pTS0->vOs,pTS1->vOs) && veq(pTS0->vOt, pTS1->vOt)) { ts_res.fMagS = pTS0->fMagS; @@ -207,8 +207,8 @@ static STSpace AvgTSpace(const STSpace * pTS0, const STSpace * pTS1) ts_res.fMagT = 0.5f*(pTS0->fMagT+pTS1->fMagT); ts_res.vOs = vadd(pTS0->vOs,pTS1->vOs); ts_res.vOt = vadd(pTS0->vOt,pTS1->vOt); - if( VNotZero(ts_res.vOs) ) ts_res.vOs = Normalize(ts_res.vOs); - if( VNotZero(ts_res.vOt) ) ts_res.vOt = Normalize(ts_res.vOt); + if ( VNotZero(ts_res.vOs) ) ts_res.vOs = Normalize(ts_res.vOs); + if ( VNotZero(ts_res.vOt) ) ts_res.vOt = Normalize(ts_res.vOt); } return ts_res; @@ -246,7 +246,7 @@ tbool genTangSpace(const SMikkTSpaceContext * pContext, const float fAngularThre const float fThresCos = (float) cos((fAngularThreshold*(float)M_PI)/180.0f); // verify all call-backs have been set - if( pContext->m_pInterface->m_getNumFaces==NULL || + if ( pContext->m_pInterface->m_getNumFaces==NULL || pContext->m_pInterface->m_getNumVerticesOfFace==NULL || pContext->m_pInterface->m_getPosition==NULL || pContext->m_pInterface->m_getNormal==NULL || @@ -254,21 +254,21 @@ tbool genTangSpace(const SMikkTSpaceContext * pContext, const float fAngularThre return TFALSE; // count triangles on supported faces - for(f=0; fm_pInterface->m_getNumVerticesOfFace(pContext, f); - if(verts==3) ++iNrTrianglesIn; + if (verts==3) ++iNrTrianglesIn; else if(verts==4) iNrTrianglesIn += 2; } - if(iNrTrianglesIn<=0) return TFALSE; + if (iNrTrianglesIn<=0) return TFALSE; // allocate memory for an index list piTriListIn = (int *) malloc(sizeof(int)*3*iNrTrianglesIn); pTriInfos = (STriInfo *) malloc(sizeof(STriInfo)*iNrTrianglesIn); - if(piTriListIn==NULL || pTriInfos==NULL) + if (piTriListIn==NULL || pTriInfos==NULL) { - if(piTriListIn!=NULL) free(piTriListIn); - if(pTriInfos!=NULL) free(pTriInfos); + if (piTriListIn!=NULL) free(piTriListIn); + if (pTriInfos!=NULL) free(pTriInfos); return TFALSE; } @@ -283,7 +283,7 @@ tbool genTangSpace(const SMikkTSpaceContext * pContext, const float fAngularThre // Mark all degenerate triangles iTotTris = iNrTrianglesIn; iDegenTriangles = 0; - for(t=0; tm_pInterface->m_getNumVerticesOfFace(pContext, f); - if(verts!=3 && verts!=4) continue; + if (verts!=3 && verts!=4) continue; // I've decided to let degenerate triangles and group-with-anythings @@ -390,28 +390,28 @@ tbool genTangSpace(const SMikkTSpaceContext * pContext, const float fAngularThre // (this is already the case for good triangles but not for // degenerate ones and those with bGroupWithAnything==true) bool bOrient = psTspace[index].bOrient; - if(psTspace[index].iCounter == 0) // tspace was not derived from a group + if (psTspace[index].iCounter == 0) // tspace was not derived from a group { // look for a space created in GenerateTSpaces() by iCounter>0 bool bNotFound = true; int i=1; - while(i 0) bNotFound=false; + if (psTspace[index+i].iCounter > 0) bNotFound=false; else ++i; } - if(!bNotFound) bOrient = psTspace[index+i].bOrient; + if (!bNotFound) bOrient = psTspace[index+i].bOrient; }*/ // set data - for(i=0; ivOs.x, pTSpace->vOs.y, pTSpace->vOs.z}; float bitang[] = {pTSpace->vOt.x, pTSpace->vOt.y, pTSpace->vOt.z}; - if(pContext->m_pInterface->m_setTSpace!=NULL) + if (pContext->m_pInterface->m_setTSpace!=NULL) pContext->m_pInterface->m_setTSpace(pContext, tang, bitang, pTSpace->fMagS, pTSpace->fMagT, pTSpace->bOrient, f, i); - if(pContext->m_pInterface->m_setTSpaceBasic!=NULL) + if (pContext->m_pInterface->m_setTSpaceBasic!=NULL) pContext->m_pInterface->m_setTSpaceBasic(pContext, tang, pTSpace->bOrient==TTRUE ? 1.0f : (-1.0f), f, i); ++index; @@ -464,23 +464,23 @@ static void GenerateSharedVerticesIndexList(int piTriList_in_and_out[], const SM int iMaxCount=0; SVec3 vMin = GetPosition(pContext, 0), vMax = vMin, vDim; float fMin, fMax; - for(i=1; i<(iNrTrianglesIn*3); i++) + for (i=1; i<(iNrTrianglesIn*3); i++) { const int index = piTriList_in_and_out[i]; const SVec3 vP = GetPosition(pContext, index); - if(vMin.x > vP.x) vMin.x = vP.x; + if (vMin.x > vP.x) vMin.x = vP.x; else if(vMax.x < vP.x) vMax.x = vP.x; - if(vMin.y > vP.y) vMin.y = vP.y; + if (vMin.y > vP.y) vMin.y = vP.y; else if(vMax.y < vP.y) vMax.y = vP.y; - if(vMin.z > vP.z) vMin.z = vP.z; + if (vMin.z > vP.z) vMin.z = vP.z; else if(vMax.z < vP.z) vMax.z = vP.z; } vDim = vsub(vMax,vMin); iChannel = 0; fMin = vMin.x; fMax=vMax.x; - if(vDim.y>vDim.x && vDim.y>vDim.z) + if (vDim.y>vDim.x && vDim.y>vDim.z) { iChannel=1; fMin = vMin.y, fMax=vMax.y; @@ -497,12 +497,12 @@ static void GenerateSharedVerticesIndexList(int piTriList_in_and_out[], const SM piHashOffsets = (int *) malloc(sizeof(int)*g_iCells); piHashCount2 = (int *) malloc(sizeof(int)*g_iCells); - if(piHashTable==NULL || piHashCount==NULL || piHashOffsets==NULL || piHashCount2==NULL) + if (piHashTable==NULL || piHashCount==NULL || piHashOffsets==NULL || piHashCount2==NULL) { - if(piHashTable!=NULL) free(piHashTable); - if(piHashCount!=NULL) free(piHashCount); - if(piHashOffsets!=NULL) free(piHashOffsets); - if(piHashCount2!=NULL) free(piHashCount2); + if (piHashTable!=NULL) free(piHashTable); + if (piHashCount!=NULL) free(piHashCount); + if (piHashOffsets!=NULL) free(piHashOffsets); + if (piHashCount2!=NULL) free(piHashCount2); GenerateSharedVerticesIndexListSlow(piTriList_in_and_out, pContext, iNrTrianglesIn); return; } @@ -510,7 +510,7 @@ static void GenerateSharedVerticesIndexList(int piTriList_in_and_out[], const SM memset(piHashCount2, 0, sizeof(int)*g_iCells); // count amount of elements in each cell unit - for(i=0; i<(iNrTrianglesIn*3); i++) + for (i=0; i<(iNrTrianglesIn*3); i++) { const int index = piTriList_in_and_out[i]; const SVec3 vP = GetPosition(pContext, index); @@ -521,11 +521,11 @@ static void GenerateSharedVerticesIndexList(int piTriList_in_and_out[], const SM // evaluate start index of each cell. piHashOffsets[0]=0; - for(k=1; kpTmpVert[l].vert[c]) fvMin[c]=pTmpVert[l].vert[c]; + for (l=(iL_in+1); l<=iR_in; l++) + for (c=0; c<3; c++) + if (fvMin[c]>pTmpVert[l].vert[c]) fvMin[c]=pTmpVert[l].vert[c]; else if(fvMax[c]dx && dy>dz) channel=1; + if (dy>dx && dy>dz) channel=1; else if(dz>dx) channel=2; fSep = 0.5f*(fvMax[channel]+fvMin[channel]); // terminate recursion when the separation/average value // is no longer strictly between fMin and fMax values. - if(fSep>=fvMax[channel] || fSep<=fvMin[channel]) + if (fSep>=fvMax[channel] || fSep<=fvMin[channel]) { // complete the weld - for(l=iL_in; l<=iR_in; l++) + for (l=iL_in; l<=iR_in; l++) { int i = pTmpVert[l].index; const int index = piTriList_in_and_out[i]; @@ -617,7 +617,7 @@ static void MergeVertsFast(int piTriList_in_and_out[], STmpVert pTmpVert[], cons tbool bNotFound = TTRUE; int l2=iL_in, i2rec=-1; - while(l20); // at least 2 entries // separate (by fSep) all points between iL_in and iR_in in pTmpVert[] - while(iL < iR) + while (iL < iR) { tbool bReadyLeftSwap = TFALSE, bReadyRightSwap = TFALSE; - while((!bReadyLeftSwap) && iL=iL_in && iL<=iR_in); bReadyLeftSwap = !(pTmpVert[iL].vert[channel]=iL_in && iR<=iR_in); bReadyRightSwap = pTmpVert[iR].vert[channel]m_pInterface->m_getNumFaces(pContext); f++) + for (f=0; fm_pInterface->m_getNumFaces(pContext); f++) { const int verts = pContext->m_pInterface->m_getNumVerticesOfFace(pContext, f); - if(verts!=3 && verts!=4) continue; + if (verts!=3 && verts!=4) continue; pTriInfos[iDstTriIndex].iOrgFaceNumber = f; pTriInfos[iDstTriIndex].iTSpacesOffs = iTSpacesOffs; - if(verts==3) + if (verts==3) { unsigned char * pVerts = pTriInfos[iDstTriIndex].vert_num; pVerts[0]=0; pVerts[1]=1; pVerts[2]=2; @@ -810,7 +810,7 @@ static int GenerateInitialVerticesIndexList(STriInfo pTriInfos[], int piTriList_ const float distSQ_02 = LengthSquared(vsub(T2,T0)); const float distSQ_13 = LengthSquared(vsub(T3,T1)); tbool bQuadDiagIs_02; - if(distSQ_020 ? ORIENT_PRESERVING : 0); - if( NotZero(fSignedAreaSTx2) ) + if ( NotZero(fSignedAreaSTx2) ) { const float fAbsArea = fabsf(fSignedAreaSTx2); const float fLenOs = Length(vOs); const float fLenOt = Length(vOt); const float fS = (pTriInfos[f].iFlag&ORIENT_PRESERVING)==0 ? (-1.0f) : 1.0f; - if( NotZero(fLenOs) ) pTriInfos[f].vOs = vscale(fS/fLenOs, vOs); - if( NotZero(fLenOt) ) pTriInfos[f].vOt = vscale(fS/fLenOt, vOt); + if ( NotZero(fLenOs) ) pTriInfos[f].vOs = vscale(fS/fLenOs, vOs); + if ( NotZero(fLenOt) ) pTriInfos[f].vOt = vscale(fS/fLenOt, vOt); // evaluate magnitudes prior to normalization of vOs and vOt pTriInfos[f].fMagS = fLenOs / fAbsArea; pTriInfos[f].fMagT = fLenOt / fAbsArea; // if this is a good triangle - if( NotZero(pTriInfos[f].fMagS) && NotZero(pTriInfos[f].fMagT)) + if ( NotZero(pTriInfos[f].fMagS) && NotZero(pTriInfos[f].fMagT)) pTriInfos[f].iFlag &= (~GROUP_WITH_ANY); } } // force otherwise healthy quads to a fixed orientation - while(t<(iNrTrianglesIn-1)) + while (t<(iNrTrianglesIn-1)) { const int iFO_a = pTriInfos[t].iOrgFaceNumber; const int iFO_b = pTriInfos[t+1].iOrgFaceNumber; - if(iFO_a==iFO_b) // this is a quad + if (iFO_a==iFO_b) // this is a quad { const tbool bIsDeg_a = (pTriInfos[t].iFlag&MARK_DEGENERATE)!=0 ? TTRUE : TFALSE; const tbool bIsDeg_b = (pTriInfos[t+1].iFlag&MARK_DEGENERATE)!=0 ? TTRUE : TFALSE; // bad triangles should already have been removed by // DegenPrologue(), but just in case check bIsDeg_a and bIsDeg_a are false - if((bIsDeg_a||bIsDeg_b)==TFALSE) + if ((bIsDeg_a||bIsDeg_b)==TFALSE) { const tbool bOrientA = (pTriInfos[t].iFlag&ORIENT_PRESERVING)!=0 ? TTRUE : TFALSE; const tbool bOrientB = (pTriInfos[t+1].iFlag&ORIENT_PRESERVING)!=0 ? TTRUE : TFALSE; // if this happens the quad has extremely bad mapping!! - if(bOrientA!=bOrientB) + if (bOrientA!=bOrientB) { //printf("found quad with bad mapping\n"); tbool bChooseOrientFirstTri = TFALSE; - if((pTriInfos[t+1].iFlag&GROUP_WITH_ANY)!=0) bChooseOrientFirstTri = TTRUE; + if ((pTriInfos[t+1].iFlag&GROUP_WITH_ANY)!=0) bChooseOrientFirstTri = TTRUE; else if( CalcTexArea(pContext, &piTriListIn[t*3+0]) >= CalcTexArea(pContext, &piTriListIn[(t+1)*3+0]) ) bChooseOrientFirstTri = TTRUE; @@ -1048,7 +1048,7 @@ static void InitTriInfo(STriInfo pTriInfos[], const int piTriListIn[], const SMi // match up edge pairs { SEdge * pEdges = (SEdge *) malloc(sizeof(SEdge)*iNrTrianglesIn*3); - if(pEdges==NULL) + if (pEdges==NULL) BuildNeighborsSlow(pTriInfos, piTriListIn, iNrTrianglesIn); else { @@ -1070,12 +1070,12 @@ static int Build4RuleGroups(STriInfo pTriInfos[], SGroup pGroups[], int piGroupT const int iNrMaxGroups = iNrTrianglesIn*3; int iNrActiveGroups = 0; int iOffset = 0, f=0, i=0; - for(f=0; f0?(i-1):2]; - if(neigh_indexL>=0) // neighbor + if (neigh_indexL>=0) // neighbor { const tbool bAnswer = AssignRecur(piTriListIn, pTriInfos, neigh_indexL, @@ -1102,7 +1102,7 @@ static int Build4RuleGroups(STriInfo pTriInfos[], SGroup pGroups[], int piGroupT const tbool bDiff = bOrPre!=bOrPre2 ? TTRUE : TFALSE; assert(bAnswer || bDiff); } - if(neigh_indexR>=0) // neighbor + if (neigh_indexR>=0) // neighbor { const tbool bAnswer = AssignRecur(piTriListIn, pTriInfos, neigh_indexR, @@ -1141,20 +1141,20 @@ static tbool AssignRecur(const int piTriListIn[], STriInfo psTriInfos[], const int iVertRep = pGroup->iVertexRepresentitive; const int * pVerts = &piTriListIn[3*iMyTriIndex+0]; int i=-1; - if(pVerts[0]==iVertRep) i=0; + if (pVerts[0]==iVertRep) i=0; else if(pVerts[1]==iVertRep) i=1; else if(pVerts[2]==iVertRep) i=2; assert(i>=0 && i<3); // early out - if(pMyTriInfo->AssignedGroup[i] == pGroup) return TTRUE; + if (pMyTriInfo->AssignedGroup[i] == pGroup) return TTRUE; else if(pMyTriInfo->AssignedGroup[i]!=NULL) return TFALSE; - if((pMyTriInfo->iFlag&GROUP_WITH_ANY)!=0) + if ((pMyTriInfo->iFlag&GROUP_WITH_ANY)!=0) { // first to group with a group-with-anything triangle // determines it's orientation. // This is the only existing order dependency in the code!! - if( pMyTriInfo->AssignedGroup[0] == NULL && + if ( pMyTriInfo->AssignedGroup[0] == NULL && pMyTriInfo->AssignedGroup[1] == NULL && pMyTriInfo->AssignedGroup[2] == NULL ) { @@ -1164,7 +1164,7 @@ static tbool AssignRecur(const int piTriListIn[], STriInfo psTriInfos[], } { const tbool bOrient = (pMyTriInfo->iFlag&ORIENT_PRESERVING)!=0 ? TTRUE : TFALSE; - if(bOrient != pGroup->bOrientPreservering) return TFALSE; + if (bOrient != pGroup->bOrientPreservering) return TFALSE; } AddTriToGroup(pGroup, iMyTriIndex); @@ -1173,9 +1173,9 @@ static tbool AssignRecur(const int piTriListIn[], STriInfo psTriInfos[], { const int neigh_indexL = pMyTriInfo->FaceNeighbors[i]; const int neigh_indexR = pMyTriInfo->FaceNeighbors[i>0?(i-1):2]; - if(neigh_indexL>=0) + if (neigh_indexL>=0) AssignRecur(piTriListIn, psTriInfos, neigh_indexL, pGroup); - if(neigh_indexR>=0) + if (neigh_indexR>=0) AssignRecur(piTriListIn, psTriInfos, neigh_indexR, pGroup); } @@ -1199,39 +1199,39 @@ static tbool GenerateTSpaces(STSpace psTspace[], const STriInfo pTriInfos[], con SSubGroup * pUniSubGroups = NULL; int * pTmpMembers = NULL; int iMaxNrFaces=0, iUniqueTspaces=0, g=0, i=0; - for(g=0; giNrFaces; i++) // triangles + for (i=0; iiNrFaces; i++) // triangles { const int f = pGroup->pFaceIndices[i]; // triangle number int index=-1, iVertIndex=-1, iOF_1=-1, iMembers=0, j=0, l=0; SSubGroup tmp_group; tbool bFound; SVec3 n, vOs, vOt; - if(pTriInfos[f].AssignedGroup[0]==pGroup) index=0; + if (pTriInfos[f].AssignedGroup[0]==pGroup) index=0; else if(pTriInfos[f].AssignedGroup[1]==pGroup) index=1; else if(pTriInfos[f].AssignedGroup[2]==pGroup) index=2; assert(index>=0 && index<3); @@ -1245,14 +1245,14 @@ static tbool GenerateTSpaces(STSpace psTspace[], const STriInfo pTriInfos[], con // project vOs = vsub(pTriInfos[f].vOs, vscale(vdot(n,pTriInfos[f].vOs), n)); vOt = vsub(pTriInfos[f].vOt, vscale(vdot(n,pTriInfos[f].vOt), n)); - if( VNotZero(vOs) ) vOs = Normalize(vOs); - if( VNotZero(vOt) ) vOt = Normalize(vOt); + if ( VNotZero(vOs) ) vOs = Normalize(vOs); + if ( VNotZero(vOt) ) vOt = Normalize(vOt); // original face number iOF_1 = pTriInfos[f].iOrgFaceNumber; iMembers = 0; - for(j=0; jiNrFaces; j++) + for (j=0; jiNrFaces; j++) { const int t = pGroup->pFaceIndices[j]; // triangle number const int iOF_2 = pTriInfos[t].iOrgFaceNumber; @@ -1260,8 +1260,8 @@ static tbool GenerateTSpaces(STSpace psTspace[], const STriInfo pTriInfos[], con // project SVec3 vOs2 = vsub(pTriInfos[t].vOs, vscale(vdot(n,pTriInfos[t].vOs), n)); SVec3 vOt2 = vsub(pTriInfos[t].vOt, vscale(vdot(n,pTriInfos[t].vOt), n)); - if( VNotZero(vOs2) ) vOs2 = Normalize(vOs2); - if( VNotZero(vOt2) ) vOt2 = Normalize(vOt2); + if ( VNotZero(vOs2) ) vOs2 = Normalize(vOs2); + if ( VNotZero(vOt2) ) vOt2 = Normalize(vOt2); { const tbool bAny = ( (pTriInfos[f].iFlag | pTriInfos[t].iFlag) & GROUP_WITH_ANY )!=0 ? TTRUE : TFALSE; @@ -1272,7 +1272,7 @@ static tbool GenerateTSpaces(STSpace psTspace[], const STriInfo pTriInfos[], con const float fCosT = vdot(vOt,vOt2); assert(f!=t || bSameOrgFace); // sanity check - if(bAny || bSameOrgFace || (fCosS>fThresCos && fCosT>fThresCos)) + if (bAny || bSameOrgFace || (fCosS>fThresCos && fCosT>fThresCos)) pTmpMembers[iMembers++] = t; } } @@ -1280,7 +1280,7 @@ static tbool GenerateTSpaces(STSpace psTspace[], const STriInfo pTriInfos[], con // sort pTmpMembers tmp_group.iNrFaces = iMembers; tmp_group.pTriMembers = pTmpMembers; - if(iMembers>1) + if (iMembers>1) { unsigned int uSeed = INTERNAL_RND_SORT_SEED; // could replace with a random seed? QuickSort(pTmpMembers, 0, iMembers-1, uSeed); @@ -1289,10 +1289,10 @@ static tbool GenerateTSpaces(STSpace psTspace[], const STriInfo pTriInfos[], con // look for an existing match bFound = TFALSE; l=0; - while(liCounter<2); assert(((pTriInfos[f].iFlag&ORIENT_PRESERVING)!=0) == pGroup->bOrientPreservering); - if(pTS_out->iCounter==1) + if (pTS_out->iCounter==1) { *pTS_out = AvgTSpace(pTS_out, &pSubGroupTspace[l]); pTS_out->iCounter = 2; // update counter @@ -1347,7 +1347,7 @@ static tbool GenerateTSpaces(STSpace psTspace[], const STriInfo pTriInfos[], con } // clean up and offset iUniqueTspaces - for(s=0; s=0 && i<3); @@ -1390,8 +1390,8 @@ static STSpace EvalTspace(int face_indices[], const int iFaces, const int piTriL n = GetNormal(pContext, index); vOs = vsub(pTriInfos[f].vOs, vscale(vdot(n,pTriInfos[f].vOs), n)); vOt = vsub(pTriInfos[f].vOt, vscale(vdot(n,pTriInfos[f].vOt), n)); - if( VNotZero(vOs) ) vOs = Normalize(vOs); - if( VNotZero(vOt) ) vOt = Normalize(vOt); + if ( VNotZero(vOs) ) vOs = Normalize(vOs); + if ( VNotZero(vOt) ) vOt = Normalize(vOt); i2 = piTriListIn[3*f + (i<2?(i+1):0)]; i1 = piTriListIn[3*f + i]; @@ -1423,9 +1423,9 @@ static STSpace EvalTspace(int face_indices[], const int iFaces, const int piTriL } // normalize - if( VNotZero(res.vOs) ) res.vOs = Normalize(res.vOs); - if( VNotZero(res.vOt) ) res.vOt = Normalize(res.vOt); - if(fAngleSum>0) + if ( VNotZero(res.vOs) ) res.vOs = Normalize(res.vOs); + if ( VNotZero(res.vOt) ) res.vOt = Normalize(res.vOt); + if (fAngleSum>0) { res.fMagS /= fAngleSum; res.fMagT /= fAngleSum; @@ -1438,11 +1438,11 @@ static tbool CompareSubGroups(const SSubGroup * pg1, const SSubGroup * pg2) { tbool bStillSame=TTRUE; int i=0; - if(pg1->iNrFaces!=pg2->iNrFaces) return TFALSE; - while(iiNrFaces && bStillSame) + if (pg1->iNrFaces!=pg2->iNrFaces) return TFALSE; + while (iiNrFaces && bStillSame) { bStillSame = pg1->pTriMembers[i]==pg2->pTriMembers[i] ? TTRUE : TFALSE; - if(bStillSame) ++i; + if (bStillSame) ++i; } return bStillSame; } @@ -1467,12 +1467,12 @@ static void QuickSort(int* pSortBuffer, int iLeft, int iRight, unsigned int uSee do { - while(pSortBuffer[iL] < iMid) + while (pSortBuffer[iL] < iMid) ++iL; - while(pSortBuffer[iR] > iMid) + while (pSortBuffer[iR] > iMid) --iR; - if(iL <= iR) + if (iL <= iR) { iTmp = pSortBuffer[iL]; pSortBuffer[iL] = pSortBuffer[iR]; @@ -1480,11 +1480,11 @@ static void QuickSort(int* pSortBuffer, int iLeft, int iRight, unsigned int uSee ++iL; --iR; } } - while(iL <= iR); + while (iL <= iR); - if(iLeft < iR) + if (iLeft < iR) QuickSort(pSortBuffer, iLeft, iR, uSeed); - if(iL < iRight) + if (iL < iRight) QuickSort(pSortBuffer, iL, iRight, uSeed); } @@ -1499,8 +1499,8 @@ static void BuildNeighborsFast(STriInfo pTriInfos[], SEdge * pEdges, const int p // build array of edges unsigned int uSeed = INTERNAL_RND_SORT_SEED; // could replace with a random seed? int iEntries=0, iCurStartIndex=-1, f=0, i=0; - for(f=0; f pSortBuffer[iRight].array[channel]) + if (pSortBuffer[iLeft].array[channel] > pSortBuffer[iRight].array[channel]) { sTmp = pSortBuffer[iLeft]; pSortBuffer[iLeft] = pSortBuffer[iRight]; @@ -1673,12 +1673,12 @@ static void QuickSortEdges(SEdge * pSortBuffer, int iLeft, int iRight, const int do { - while(pSortBuffer[iL].array[channel] < iMid) + while (pSortBuffer[iL].array[channel] < iMid) ++iL; - while(pSortBuffer[iR].array[channel] > iMid) + while (pSortBuffer[iR].array[channel] > iMid) --iR; - if(iL <= iR) + if (iL <= iR) { sTmp = pSortBuffer[iL]; pSortBuffer[iL] = pSortBuffer[iR]; @@ -1686,11 +1686,11 @@ static void QuickSortEdges(SEdge * pSortBuffer, int iLeft, int iRight, const int ++iL; --iR; } } - while(iL <= iR); + while (iL <= iR); - if(iLeft < iR) + if (iLeft < iR) QuickSortEdges(pSortBuffer, iLeft, iR, channel, uSeed); - if(iL < iRight) + if (iL < iRight) QuickSortEdges(pSortBuffer, iL, iRight, channel, uSeed); } @@ -1700,10 +1700,10 @@ static void GetEdge(int * i0_out, int * i1_out, int * edgenum_out, const int ind *edgenum_out = -1; // test if first index is on the edge - if(indices[0]==i0_in || indices[0]==i1_in) + if (indices[0]==i0_in || indices[0]==i1_in) { // test if second index is on the edge - if(indices[1]==i0_in || indices[1]==i1_in) + if (indices[1]==i0_in || indices[1]==i1_in) { edgenum_out[0]=0; // first edge i0_out[0]=indices[0]; @@ -1736,15 +1736,15 @@ static void DegenPrologue(STriInfo pTriInfos[], int piTriList_out[], const int i // locate quads with only one good triangle int t=0; - while(t<(iTotTris-1)) + while (t<(iTotTris-1)) { const int iFO_a = pTriInfos[t].iOrgFaceNumber; const int iFO_b = pTriInfos[t+1].iOrgFaceNumber; - if(iFO_a==iFO_b) // this is a quad + if (iFO_a==iFO_b) // this is a quad { const tbool bIsDeg_a = (pTriInfos[t].iFlag&MARK_DEGENERATE)!=0 ? TTRUE : TFALSE; const tbool bIsDeg_b = (pTriInfos[t+1].iFlag&MARK_DEGENERATE)!=0 ? TTRUE : TFALSE; - if((bIsDeg_a^bIsDeg_b)!=0) + if ((bIsDeg_a^bIsDeg_b)!=0) { pTriInfos[t].iFlag |= QUAD_ONE_DEGEN_TRI; pTriInfos[t+1].iFlag |= QUAD_ONE_DEGEN_TRI; @@ -1760,12 +1760,12 @@ static void DegenPrologue(STriInfo pTriInfos[], int piTriList_out[], const int i iNextGoodTriangleSearchIndex = 1; t=0; bStillFindingGoodOnes = TTRUE; - while(t (t+1)); // swap triangle t0 and t1 - if(!bJustADegenerate) + if (!bJustADegenerate) { int i=0; - for(i=0; i<3; i++) + for (i=0; i<3; i++) { const int index = piTriList_out[t0*3+i]; piTriList_out[t0*3+i] = piTriList_out[t1*3+i]; @@ -1805,7 +1805,7 @@ static void DegenPrologue(STriInfo pTriInfos[], int piTriList_out[], const int i bStillFindingGoodOnes = TFALSE; // this is not supposed to happen } - if(bStillFindingGoodOnes) ++t; + if (bStillFindingGoodOnes) ++t; } assert(bStillFindingGoodOnes); // code will still work. @@ -1817,28 +1817,28 @@ static void DegenEpilogue(STSpace psTspace[], STriInfo pTriInfos[], int piTriLis int t=0, i=0; // deal with degenerate triangles // punishment for degenerate triangles is O(N^2) - for(t=iNrTrianglesIn; tx/4; /* This doesn't seem to work... paprmh */ - if(cast->gamma != 1.0) gamwarp(tbuf, cast->gamma); + if (cast->gamma != 1.0) gamwarp(tbuf, cast->gamma); /* reduce */ - for(i=0; ix<4 || tbuf->y<4) break; + if (tbuf->x<4 || tbuf->y<4) break; } /* enlarge */ - for(i=0; ix > x4) { + if (tbuf->x > x4) { scaleImBuf(tbuf, ibuf->x, ibuf->y); break; } } /* this doesn't seem to work...paprmh*/ - if(cast->gamma != 1.0) gamwarp(tbuf, 1.0 / cast->gamma); + if (cast->gamma != 1.0) gamwarp(tbuf, 1.0 / cast->gamma); - if(ibuf->rect)memcpy(ibuf->rect, tbuf->rect, 4*ibuf->x*ibuf->y); + if (ibuf->rect)memcpy(ibuf->rect, tbuf->rect, 4*ibuf->x*ibuf->y); - if(ibuf->rect_float) + if (ibuf->rect_float) memcpy(ibuf->rect_float, tbuf->rect_float, 4*ibuf->x*ibuf->y*sizeof(float)); freeImBuf(tbuf); @@ -161,13 +161,13 @@ void doblur(struct ImBuf *mbuf, float fac, Cast *cast) /* which buffers ? */ - if(fac>7.0) fac= 7.0; - if(fac<=1.0) return; + if (fac>7.0) fac= 7.0; + if (fac<=1.0) return; pfac= 2.0; pbuf= dupImBuf(mbuf); n= 1; - while(pfac < fac) { + while (pfac < fac) { blurbuf(pbuf, n, cast); blurbuf(pbuf, n, cast); @@ -185,10 +185,10 @@ void doblur(struct ImBuf *mbuf, float fac, Cast *cast) fac= (fac-pfac)/(ifac-pfac); n= mbuf->x*mbuf->y; - if(cast->show) fac=cast->show-1; + if (cast->show) fac=cast->show-1; - if(mbuf->rect_float){ - if(fac>=1) { + if (mbuf->rect_float){ + if (fac>=1) { memcpy(mbuf->rect_float, ibuf->rect_float, 4*n*sizeof(float)); } else if(fac<=0) { @@ -200,7 +200,7 @@ void doblur(struct ImBuf *mbuf, float fac, Cast *cast) irectf= (float *)ibuf->rect_float; prectf= (float *)pbuf->rect_float; mrectf= (float *)mbuf->rect_float; - while(n--) { + while (n--) { mrectf[0]= irectf[0]*fac+ prectf[0]*infac; mrectf[1]= irectf[1]*fac+ prectf[1]*infac; mrectf[2]= irectf[2]*fac+ prectf[2]*infac; @@ -213,10 +213,10 @@ void doblur(struct ImBuf *mbuf, float fac, Cast *cast) } else if(mbuf->rect){ b1= (int)fac*255.0; - if(b1>255) b1= 255; + if (b1>255) b1= 255; b2= 255-b1; - if(b1==255) { + if (b1==255) { memcpy(mbuf->rect, ibuf->rect, 4*n); } else if(b1==0) { @@ -226,7 +226,7 @@ void doblur(struct ImBuf *mbuf, float fac, Cast *cast) irect= (char *)ibuf->rect; prect= (char *)pbuf->rect; mrect= (char *)mbuf->rect; - while(n--) { + while (n--) { mrect[0]= (irect[0]*b1+ prect[0]*b2)>>8; mrect[1]= (irect[1]*b1+ prect[1]*b2)>>8; mrect[2]= (irect[2]*b1+ prect[2]*b2)>>8; @@ -247,7 +247,7 @@ void plugin_seq_doit(Cast *cast, float facf0, float facf1, int x, int y, ImBuf * { float bfacf0, bfacf1; - if(cast->use_ipo==0) { + if (cast->use_ipo==0) { bfacf0= bfacf1= cast->blur+1.0; } else { @@ -255,8 +255,8 @@ void plugin_seq_doit(Cast *cast, float facf0, float facf1, int x, int y, ImBuf * bfacf1 = (facf1 * 6.0) + 1.0; } - if(out->rect) memcpy(out->rect, ibuf1->rect, 4*out->x*out->y); - if(out->rect_float) memcpy(out->rect_float, ibuf1->rect_float, 4*out->x*out->y*sizeof(float)); + if (out->rect) memcpy(out->rect, ibuf1->rect, 4*out->x*out->y); + if (out->rect_float) memcpy(out->rect_float, ibuf1->rect_float, 4*out->x*out->y*sizeof(float)); /****************I can't get this field code to work... works ok without...paprmh****************/ @@ -269,13 +269,13 @@ void plugin_seq_doit(Cast *cast, float facf0, float facf1, int x, int y, ImBuf * doblur(out, bfacf0, cast); /*fieldA*/ -/* if(out->rect)out->rect += out->x * out->y; - if(out->rect_float)out->rect_float += out->x * out->y; +/* if (out->rect)out->rect += out->x * out->y; + if (out->rect_float)out->rect_float += out->x * out->y; doblur(out, bfacf1, cast);*/ /*fieldB*/ -/* if(out->rect)out->rect -= out->x * out->y; - if(out->rect_float)out->rect_float -= out->x * out->y; +/* if (out->rect)out->rect -= out->x * out->y; + if (out->rect_float)out->rect_float -= out->x * out->y; out->flags |= IB_fields; interlace(out);*/ diff --git a/release/plugins/texture/clouds2.c b/release/plugins/texture/clouds2.c index fc20f5769ef..8561d11dc3b 100644 --- a/release/plugins/texture/clouds2.c +++ b/release/plugins/texture/clouds2.c @@ -150,7 +150,7 @@ int plugin_tex_doit(int stype, Cast *cast, float *texvec, float *dxt, float *dyt /* always return this value */ result[0] = CLAMP (val+cast->offset, 0.0, 1.0) * pow (fabs(sqrt(tv[0]*tv[0]+tv[1]*tv[1]+tv[2]*tv[2])), cast->falloff); - if(stype==1) { + if (stype==1) { /* * this is r, g, b, a: */ @@ -161,7 +161,7 @@ int plugin_tex_doit(int stype, Cast *cast, float *texvec, float *dxt, float *dyt res |= TEX_RGB; } - if(stype==2) { + if (stype==2) { /* * This value is the displacement of the actual normal in * the Material calculation. diff --git a/release/plugins/texture/tiles.c b/release/plugins/texture/tiles.c index 151f64b6dab..11e1ed8f8af 100644 --- a/release/plugins/texture/tiles.c +++ b/release/plugins/texture/tiles.c @@ -124,7 +124,7 @@ float sample_wave(float freq, float coord, float pixsize) float fac, frac, retval; int part1, part2; - if(pixsize > freq) return 0.5; + if (pixsize > freq) return 0.5; pixsize/= freq; @@ -132,19 +132,19 @@ float sample_wave(float freq, float coord, float pixsize) part1= ffloor(fac); frac= fac - part1; - if(part1 & 1) retval= 0.0; - else retval= 1.0; + if (part1 & 1) retval= 0.0; + else retval = 1.0; - if(pixsize != 0.0) { + if (pixsize != 0.0) { /* is coord+pixsize another value? */ part2= ffloor(fac + pixsize); - if(part1==part2) return retval; + if (part1==part2) return retval; /* antialias */ - if(retval==1.0) retval= (1.0-frac)/pixsize; - else retval= 1.0-(1.0-frac)/pixsize; + if (retval == 1.0) retval= (1.0 - frac) / pixsize; + else retval= 1.0 - (1.0 - frac) / pixsize; } return retval; } @@ -153,23 +153,23 @@ int plugin_tex_doit(int stype, Cast *cast, float *texvec, float *dxt, float *dyt { float xwave, ywave; - if(stype==1) { + if (stype==1) { texvec[0]+= hnoise(cast->noise, texvec[0], texvec[1], texvec[2]); texvec[1]+= hnoise(cast->noise, texvec[1], texvec[2], texvec[0]); } - if(dxt && dyt) { + if (dxt && dyt) { xwave= sample_wave(cast->size, texvec[0], fabs(dxt[0]) + fabs(dyt[0]) ); ywave= sample_wave(cast->size, texvec[1], fabs(dxt[1]) + fabs(dyt[1]) ); - if(xwave > ywave) result[0]= xwave-ywave; + if (xwave > ywave) result[0]= xwave-ywave; else result[0]= ywave-xwave; } else { xwave= sample_wave(cast->size, texvec[0], 0.0 ); ywave= sample_wave(cast->size, texvec[1], 0.0 ); - if(xwave > ywave) result[0]= xwave-ywave; + if (xwave > ywave) result[0]= xwave-ywave; else result[0]= ywave-xwave; } diff --git a/source/blender/avi/intern/avi.c b/source/blender/avi/intern/avi.c index 2011ced96d9..637d4be30fd 100644 --- a/source/blender/avi/intern/avi.c +++ b/source/blender/avi/intern/avi.c @@ -442,7 +442,9 @@ AviError AVI_open_movie (const char *name, AviMovie *movie) if (GET_FCC (movie->fp) != FCC("RIFF") || !(movie->size = GET_FCC (movie->fp))) + { return AVI_ERROR_FORMAT; + } movie->header = (AviMainHeader *) MEM_mallocN (sizeof (AviMainHeader), "movieheader"); diff --git a/source/blender/avi/intern/codecs.c b/source/blender/avi/intern/codecs.c index 73af7097994..2c244177655 100644 --- a/source/blender/avi/intern/codecs.c +++ b/source/blender/avi/intern/codecs.c @@ -46,10 +46,12 @@ void *avi_format_convert (AviMovie *movie, int stream, void *buffer, AviFormat f return buffer; if (from != AVI_FORMAT_RGB24 && - to != AVI_FORMAT_RGB24) + to != AVI_FORMAT_RGB24) + { return avi_format_convert(movie, stream, - avi_format_convert (movie, stream, buffer, from, AVI_FORMAT_RGB24, size), - AVI_FORMAT_RGB24, to, size); + avi_format_convert(movie, stream, buffer, from, AVI_FORMAT_RGB24, size), + AVI_FORMAT_RGB24, to, size); + } switch (to) { case AVI_FORMAT_RGB24: diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c index f5718974f9f..53e4a973cd4 100644 --- a/source/blender/blenkernel/intern/CCGSubSurf.c +++ b/source/blender/blenkernel/intern/CCGSubSurf.c @@ -1272,7 +1272,9 @@ CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGV if (f->numVerts != numVerts || memcmp(FACE_getVerts(f), ss->tempVerts, sizeof(*ss->tempVerts) * numVerts) || memcmp(FACE_getEdges(f), ss->tempEdges, sizeof(*ss->tempEdges) * numVerts)) + { topologyChanged = 1; + } } if (!f || topologyChanged) { diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index c28958d5b0d..511b4603791 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -2279,8 +2279,10 @@ DerivedMesh *editbmesh_get_derived_cage_and_final(Scene *scene, Object *obedit, * the data we need, rebuild the derived mesh */ if (!em->derivedCage || - (em->lastDataMask & dataMask) != dataMask) + (em->lastDataMask & dataMask) != dataMask) + { editbmesh_build_data(scene, obedit, em, dataMask); + } *final_r = em->derivedFinal; return em->derivedCage; @@ -2292,8 +2294,10 @@ DerivedMesh *editbmesh_get_derived_cage(Scene *scene, Object *obedit, BMEditMesh * the data we need, rebuild the derived mesh */ if (!em->derivedCage || - (em->lastDataMask & dataMask) != dataMask) + (em->lastDataMask & dataMask) != dataMask) + { editbmesh_build_data(scene, obedit, em, dataMask); + } return em->derivedCage; } @@ -2701,8 +2705,7 @@ void DM_calc_auto_bump_scale(DerivedMesh *dm) if (nr_tris_to_pile==1 || nr_tris_to_pile==2) { const int indices[] = {offs+0, offs+1, offs+2, offs+0, offs+2, (offs+3)&0x3 }; int t; - for ( t=0; tpathcache[a]->steps < 0) || - (a >= totpart && psys->childcache[a-totpart]->steps < 0))) + ((a < totpart && psys->pathcache[a]->steps < 0) || + (a >= totpart && psys->childcache[a-totpart]->steps < 0))) + { continue; + } if (part->ren_as==PART_DRAW_GR) { /* prevent divide by zero below [#28336] */ diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 75b9ae59e26..be53e3ddcba 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -1250,8 +1250,7 @@ static void animsys_evaluate_fcurves (PointerRNA *ptr, ListBase *list, AnimMappe FCurve *fcu; /* calculate then execute each curve */ - for (fcu= list->first; fcu; fcu= fcu->next) - { + for (fcu= list->first; fcu; fcu= fcu->next) { /* check if this F-Curve doesn't belong to a muted group */ if ((fcu->grp == NULL) || (fcu->grp->flag & AGRP_MUTED)==0) { /* check if this curve should be skipped */ @@ -1274,8 +1273,7 @@ static void animsys_evaluate_drivers (PointerRNA *ptr, AnimData *adt, float ctim /* drivers are stored as F-Curves, but we cannot use the standard code, as we need to check if * the depsgraph requested that this driver be evaluated... */ - for (fcu= adt->drivers.first; fcu; fcu= fcu->next) - { + for (fcu= adt->drivers.first; fcu; fcu= fcu->next) { ChannelDriver *driver= fcu->driver; short ok= 0; @@ -1351,8 +1349,7 @@ void animsys_evaluate_action_group (PointerRNA *ptr, bAction *act, bActionGroup return; /* calculate then execute each curve */ - for (fcu= agrp->channels.first; (fcu) && (fcu->grp == agrp); fcu= fcu->next) - { + for (fcu= agrp->channels.first; (fcu) && (fcu->grp == agrp); fcu= fcu->next) { /* check if this curve should be skipped */ if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0) { calculate_fcurve(fcu, ctime); @@ -1968,8 +1965,7 @@ void nladata_flush_channels (ListBase *channels) float value= nec->value; /* write values - see animsys_write_rna_setting() to sync the code */ - switch (RNA_property_type(prop)) - { + switch (RNA_property_type(prop)) { case PROP_BOOLEAN: if (RNA_property_array_length(ptr, prop)) RNA_property_boolean_set_index(ptr, prop, array_index, ANIMSYS_FLOAT_AS_BOOL(value)); @@ -2217,7 +2213,9 @@ void BKE_animsys_evaluate_animdata (Scene *scene, ID *id, AnimData *adt, float c * or be layered on top of existing animation data. * - Drivers should be in the appropriate order to be evaluated without problems... */ - if ((recalc & ADT_RECALC_DRIVERS) /*&& (adt->recalc & ADT_RECALC_DRIVERS)*/) // XXX for now, don't check yet, as depsgraph hasn't been updated + if ((recalc & ADT_RECALC_DRIVERS) + /* XXX for now, don't check yet, as depsgraph hasn't been updated */ + /* && (adt->recalc & ADT_RECALC_DRIVERS)*/) { animsys_evaluate_drivers(&id_ptr, adt, ctime); } diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 0f3e27a9b6e..931aa2d6242 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -1372,7 +1372,7 @@ void armature_mat_pose_to_bone_ex(Object *ob, bPoseChannel *pchan, float inmat[] /* same as object_mat3_to_rot() */ void pchan_mat3_to_rot(bPoseChannel *pchan, float mat[][3], short use_compat) { - switch(pchan->rotmode) { + switch (pchan->rotmode) { case ROT_MODE_QUAT: mat3_to_quat(pchan->quat, mat); break; diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c index a556c99dc7d..fbcabccd2b9 100644 --- a/source/blender/blenkernel/intern/boids.c +++ b/source/blender/blenkernel/intern/boids.c @@ -962,7 +962,7 @@ void boid_brain(BoidBrainData *bbd, int p, ParticleData *pa) set_boid_values(&val, bbd->part->boids, pa); /* go through rules */ - switch(state->ruleset_type) { + switch (state->ruleset_type) { case eBoidRulesetType_Fuzzy: { for (rule = state->rules.first; rule; rule = rule->next) { @@ -1258,7 +1258,7 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) bpa->ground = boid_find_ground(bbd, pa, ground_co, ground_nor); /* change modes, constrain movement & keep track of down vector */ - switch(bpa->data.mode) { + switch (bpa->data.mode) { case eBoidMode_InAir: { float grav[3]; @@ -1437,7 +1437,7 @@ BoidRule *boid_new_rule(int type) if (type <= 0) return NULL; - switch(type) { + switch (type) { case eBoidRuleType_Goal: case eBoidRuleType_Avoid: rule = MEM_callocN(sizeof(BoidRuleGoalAvoid), "BoidRuleGoalAvoid"); diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index e7ba09d3959..3df6de2fd24 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -337,7 +337,7 @@ void brush_reset_sculpt(Brush *br) brush_set_defaults(br); brush_curve_preset(br, CURVE_PRESET_SMOOTH); - switch(br->sculpt_tool) { + switch (br->sculpt_tool) { case SCULPT_TOOL_CLAY: br->flag |= BRUSH_FRONTFACE; break; diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c index 009b7ca7f99..df80ce6e87c 100644 --- a/source/blender/blenkernel/intern/bvhutils.c +++ b/source/blender/blenkernel/intern/bvhutils.c @@ -649,8 +649,7 @@ BVHTree* bvhtree_from_mesh_edges(BVHTreeFromMesh *data, DerivedMesh *mesh, float BVHTree *tree = bvhcache_find(&mesh->bvhCache, BVHTREE_FROM_EDGES); //Not in cache - if (tree == NULL) - { + if (tree == NULL) { int i; int numEdges= mesh->getNumEdges(mesh); MVert *vert = mesh->getVertDataArray(mesh, CD_MVERT); @@ -675,8 +674,7 @@ BVHTree* bvhtree_from_mesh_edges(BVHTreeFromMesh *data, DerivedMesh *mesh, float } } } - else - { + else { // printf("BVHTree is already build, using cached tree\n"); } diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c index a0c273cf962..97baaad430b 100644 --- a/source/blender/blenkernel/intern/cloth.c +++ b/source/blender/blenkernel/intern/cloth.c @@ -191,8 +191,7 @@ static BVHTree *bvhselftree_build_from_cloth (ClothModifierData *clmd, float eps bvhtree = BLI_bvhtree_new(cloth->numverts, epsilon, 4, 6); // fill tree - for (i = 0; i < cloth->numverts; i++, verts++) - { + for (i = 0; i < cloth->numverts; i++, verts++) { copy_v3_v3(&co[0*3], verts->xold); BLI_bvhtree_insert(bvhtree, i, co, 1); @@ -232,8 +231,7 @@ static BVHTree *bvhtree_build_from_cloth (ClothModifierData *clmd, float epsilon bvhtree = BLI_bvhtree_new(cloth->numfaces, epsilon, 4, 26); // fill tree - for (i = 0; i < cloth->numfaces; i++, mfaces++) - { + for (i = 0; i < cloth->numfaces; i++, mfaces++) { copy_v3_v3(&co[0*3], verts[mfaces->v1].xold); copy_v3_v3(&co[1*3], verts[mfaces->v2].xold); copy_v3_v3(&co[2*3], verts[mfaces->v3].xold); @@ -266,10 +264,8 @@ void bvhtree_update_from_cloth(ClothModifierData *clmd, int moving) mfaces = cloth->mfaces; // update vertex position in bvh tree - if (verts && mfaces) - { - for (i = 0; i < cloth->numfaces; i++, mfaces++) - { + if (verts && mfaces) { + for (i = 0; i < cloth->numfaces; i++, mfaces++) { copy_v3_v3(&co[0*3], verts[mfaces->v1].txold); copy_v3_v3(&co[1*3], verts[mfaces->v2].txold); copy_v3_v3(&co[2*3], verts[mfaces->v3].txold); @@ -278,8 +274,7 @@ void bvhtree_update_from_cloth(ClothModifierData *clmd, int moving) copy_v3_v3(&co[3*3], verts[mfaces->v4].txold); // copy new locations into array - if (moving) - { + if (moving) { // update moving positions copy_v3_v3(&co_moving[0*3], verts[mfaces->v1].tx); copy_v3_v3(&co_moving[1*3], verts[mfaces->v2].tx); @@ -319,15 +314,12 @@ void bvhselftree_update_from_cloth(ClothModifierData *clmd, int moving) mfaces = cloth->mfaces; // update vertex position in bvh tree - if (verts && mfaces) - { - for (i = 0; i < cloth->numverts; i++, verts++) - { + if (verts && mfaces) { + for (i = 0; i < cloth->numverts; i++, verts++) { copy_v3_v3(&co[0*3], verts->txold); // copy new locations into array - if (moving) - { + if (moving) { // update moving positions copy_v3_v3(&co_moving[0*3], verts->tx); @@ -558,11 +550,9 @@ void cloth_free_modifier(ClothModifierData *clmd ) cloth = clmd->clothObject; - if ( cloth ) - { + if ( cloth ) { // If our solver provides a free function, call it - if ( solvers [clmd->sim_parms->solver_type].free ) - { + if ( solvers [clmd->sim_parms->solver_type].free ) { solvers [clmd->sim_parms->solver_type].free ( clmd ); } @@ -574,11 +564,9 @@ void cloth_free_modifier(ClothModifierData *clmd ) cloth->numverts = 0; // Free the springs. - if ( cloth->springs != NULL ) - { + if ( cloth->springs != NULL ) { LinkNode *search = cloth->springs; - while (search) - { + while (search) { ClothSpring *spring = search->link; MEM_freeN ( spring ); @@ -628,14 +616,12 @@ void cloth_free_modifier_extern ( ClothModifierData *clmd ) cloth = clmd->clothObject; - if ( cloth ) - { + if ( cloth ) { if (G.rt > 0) printf("cloth_free_modifier_extern in\n"); // If our solver provides a free function, call it - if ( solvers [clmd->sim_parms->solver_type].free ) - { + if ( solvers [clmd->sim_parms->solver_type].free ) { solvers [clmd->sim_parms->solver_type].free ( clmd ); } @@ -647,11 +633,9 @@ void cloth_free_modifier_extern ( ClothModifierData *clmd ) cloth->numverts = 0; // Free the springs. - if ( cloth->springs != NULL ) - { + if ( cloth->springs != NULL ) { LinkNode *search = cloth->springs; - while (search) - { + while (search) { ClothSpring *spring = search->link; MEM_freeN ( spring ); @@ -708,8 +692,7 @@ static void cloth_to_object (Object *ob, ClothModifierData *clmd, float (*verte /* inverse matrix is not uptodate... */ invert_m4_m4(ob->imat, ob->obmat); - for (i = 0; i < cloth->numverts; i++) - { + for (i = 0; i < cloth->numverts; i++) { copy_v3_v3 (vertexCos[i], cloth->verts[i].x); mul_m4_v3(ob->imat, vertexCos[i]); /* cloth is in global coords */ } @@ -749,17 +732,12 @@ static void cloth_apply_vgroup ( ClothModifierData *clmd, DerivedMesh *dm ) verts = clothObj->verts; - if (cloth_uses_vgroup(clmd)) - { - for ( i = 0; i < numverts; i++, verts++ ) - { + if (cloth_uses_vgroup(clmd)) { + for ( i = 0; i < numverts; i++, verts++ ) { dvert = dm->getVertData ( dm, i, CD_MDEFORMVERT ); - if ( dvert ) - { - for ( j = 0; j < dvert->totweight; j++ ) - { - if (( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_mass-1)) && (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL )) - { + if ( dvert ) { + for ( j = 0; j < dvert->totweight; j++ ) { + if (( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_mass-1)) && (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL )) { verts->goal = dvert->dw [j].weight; /* goalfac= 1.0f; */ /* UNUSED */ @@ -769,22 +747,18 @@ static void cloth_apply_vgroup ( ClothModifierData *clmd, DerivedMesh *dm ) */ verts->goal = ( float ) pow ( verts->goal , 4.0f ); - if ( verts->goal >=SOFTGOALSNAP ) - { + if ( verts->goal >=SOFTGOALSNAP ) { verts->flags |= CLOTH_VERT_FLAG_PINNED; } } - if (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_SCALING ) - { - if ( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_struct-1)) - { + if (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_SCALING ) { + if ( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_struct-1)) { verts->struct_stiff = dvert->dw [j].weight; verts->shear_stiff = dvert->dw [j].weight; } - if ( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_bend-1)) - { + if ( dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_bend-1)) { verts->bend_stiff = dvert->dw [j].weight; } } @@ -812,8 +786,7 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d float maxdist = 0; // If we have a clothObject, free it. - if ( clmd->clothObject != NULL ) - { + if ( clmd->clothObject != NULL ) { cloth_free_modifier ( clmd ); if (G.rt > 0) printf("cloth_free_modifier cloth_from_object\n"); @@ -821,8 +794,7 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d // Allocate a new cloth object. clmd->clothObject = MEM_callocN ( sizeof ( Cloth ), "cloth" ); - if ( clmd->clothObject ) - { + if ( clmd->clothObject ) { clmd->clothObject->old_solver_type = 255; // clmd->clothObject->old_collision_type = 255; cloth = clmd->clothObject; @@ -851,10 +823,8 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d verts = clmd->clothObject->verts; // set initial values - for ( i = 0; i < dm->getNumVerts(dm); i++, verts++ ) - { - if (first) - { + for ( i = 0; i < dm->getNumVerts(dm); i++, verts++ ) { + if (first) { copy_v3_v3( verts->x, mvert[i].co ); mul_m4_v3( ob->obmat, verts->x ); @@ -891,18 +861,15 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d // has to be happen before springs are build! cloth_apply_vgroup (clmd, dm); - if ( !cloth_build_springs ( clmd, dm ) ) - { + if ( !cloth_build_springs ( clmd, dm ) ) { cloth_free_modifier ( clmd ); modifier_setError(&(clmd->modifier), "%s", TIP_("Can't build springs.")); printf("cloth_free_modifier cloth_build_springs\n"); return 0; } - for ( i = 0; i < dm->getNumVerts(dm); i++) - { - if ((!(cloth->verts[i].flags & CLOTH_VERT_FLAG_PINNED)) && (cloth->verts[i].goal > ALMOST_ZERO)) - { + for ( i = 0; i < dm->getNumVerts(dm); i++) { + if ((!(cloth->verts[i].flags & CLOTH_VERT_FLAG_PINNED)) && (cloth->verts[i].goal > ALMOST_ZERO)) { cloth_add_spring (clmd, i, i, 0.0, CLOTH_SPRING_TYPE_GOAL); } } @@ -917,8 +884,7 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d clmd->clothObject->bvhtree = bvhtree_build_from_cloth ( clmd, MAX2(clmd->coll_parms->epsilon, clmd->coll_parms->distance_repel) ); - for (i = 0; i < dm->getNumVerts(dm); i++) - { + for (i = 0; i < dm->getNumVerts(dm); i++) { maxdist = MAX2(maxdist, clmd->coll_parms->selfepsilon* ( cloth->verts[i].avg_spring_len*2.0f)); } @@ -937,8 +903,7 @@ static void cloth_from_mesh ( ClothModifierData *clmd, DerivedMesh *dm ) /* Allocate our vertices. */ clmd->clothObject->numverts = numverts; clmd->clothObject->verts = MEM_callocN ( sizeof ( ClothVertex ) * clmd->clothObject->numverts, "clothVertex" ); - if ( clmd->clothObject->verts == NULL ) - { + if ( clmd->clothObject->verts == NULL ) { cloth_free_modifier ( clmd ); modifier_setError(&(clmd->modifier), "%s", TIP_("Out of memory on allocating clmd->clothObject->verts.")); printf("cloth_free_modifier clmd->clothObject->verts\n"); @@ -948,8 +913,7 @@ static void cloth_from_mesh ( ClothModifierData *clmd, DerivedMesh *dm ) // save face information clmd->clothObject->numfaces = numfaces; clmd->clothObject->mfaces = MEM_callocN ( sizeof ( MFace ) * clmd->clothObject->numfaces, "clothMFaces" ); - if ( clmd->clothObject->mfaces == NULL ) - { + if ( clmd->clothObject->mfaces == NULL ) { cloth_free_modifier ( clmd ); modifier_setError(&(clmd->modifier), "%s", TIP_("Out of memory on allocating clmd->clothObject->mfaces.")); printf("cloth_free_modifier clmd->clothObject->mfaces\n"); @@ -977,8 +941,7 @@ int cloth_add_spring ( ClothModifierData *clmd, unsigned int indexA, unsigned in Cloth *cloth = clmd->clothObject; ClothSpring *spring = NULL; - if (cloth) - { + if (cloth) { // TODO: look if this spring is already there spring = ( ClothSpring * ) MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" ); @@ -1006,11 +969,9 @@ static void cloth_free_errorsprings(Cloth *cloth, EdgeHash *UNUSED(edgehash), Li { unsigned int i = 0; - if ( cloth->springs != NULL ) - { + if ( cloth->springs != NULL ) { LinkNode *search = cloth->springs; - while (search) - { + while (search) { ClothSpring *spring = search->link; MEM_freeN ( spring ); @@ -1021,10 +982,8 @@ static void cloth_free_errorsprings(Cloth *cloth, EdgeHash *UNUSED(edgehash), Li cloth->springs = NULL; } - if (edgelist) - { - for ( i = 0; i < cloth->numverts; i++ ) - { + if (edgelist) { + for ( i = 0; i < cloth->numverts; i++ ) { BLI_linklist_free ( edgelist[i],NULL ); } @@ -1062,8 +1021,7 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) if (!edgelist) return 0; - for ( i = 0; i < numverts; i++ ) - { + for ( i = 0; i < numverts; i++ ) { edgelist[i] = NULL; } @@ -1074,12 +1032,10 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) edgehash = BLI_edgehash_new(); // structural springs - for ( i = 0; i < numedges; i++ ) - { + for ( i = 0; i < numedges; i++ ) { spring = ( ClothSpring * ) MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" ); - if ( spring ) - { + if ( spring ) { spring->ij = MIN2(medge[i].v1, medge[i].v2); spring->kl = MAX2(medge[i].v2, medge[i].v1); spring->restlen = len_v3v3(cloth->verts[spring->kl].xrest, cloth->verts[spring->ij].xrest); @@ -1104,22 +1060,19 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) if (struct_springs > 0) clmd->sim_parms->avg_spring_len /= struct_springs; - for (i = 0; i < numverts; i++) - { + for (i = 0; i < numverts; i++) { cloth->verts[i].avg_spring_len = cloth->verts[i].avg_spring_len * 0.49f / ((float)cloth->verts[i].spring_count); } // shear springs - for ( i = 0; i < numfaces; i++ ) - { + for ( i = 0; i < numfaces; i++ ) { // triangle faces already have shear springs due to structural geometry if ( !mface[i].v4 ) continue; spring = ( ClothSpring *) MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" ); - if (!spring) - { + if (!spring) { cloth_free_errorsprings(cloth, edgehash, edgelist); return 0; } @@ -1140,8 +1093,7 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) // if ( mface[i].v4 ) --> Quad face spring = ( ClothSpring * ) MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" ); - if (!spring) - { + if (!spring) { cloth_free_errorsprings(cloth, edgehash, edgelist); return 0; } @@ -1162,15 +1114,13 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) if (numfaces) { // bending springs search2 = cloth->springs; - for ( i = struct_springs; i < struct_springs+shear_springs; i++ ) - { + for ( i = struct_springs; i < struct_springs+shear_springs; i++ ) { if ( !search2 ) break; tspring2 = search2->link; search = edgelist[tspring2->kl]; - while ( search ) - { + while ( search ) { tspring = search->link; index2 = ( ( tspring->ij==tspring2->kl ) ? ( tspring->kl ) : ( tspring->ij ) ); @@ -1181,8 +1131,7 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) { spring = ( ClothSpring * ) MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" ); - if (!spring) - { + if (!spring) { cloth_free_errorsprings(cloth, edgehash, edgelist); return 0; } @@ -1212,16 +1161,14 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) /* of the strands. -jahka */ search = cloth->springs; search2 = search->next; - while (search && search2) - { + while (search && search2) { tspring = search->link; tspring2 = search2->link; if (tspring->ij == tspring2->kl) { spring = ( ClothSpring * ) MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" ); - if (!spring) - { + if (!spring) { cloth_free_errorsprings(cloth, edgehash, edgelist); return 0; } @@ -1242,13 +1189,12 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) } /* insert other near springs in edgehash AFTER bending springs are calculated (for selfcolls) */ - for ( i = 0; i < numedges; i++ ) // struct springs + for (i = 0; i < numedges; i++) { /* struct springs */ BLI_edgehash_insert ( edgehash, MIN2(medge[i].v1, medge[i].v2), MAX2(medge[i].v2, medge[i].v1), NULL ); - - for ( i = 0; i < numfaces; i++ ) // edge springs - { - if (mface[i].v4) - { + } + + for (i = 0; i < numfaces; i++) { /* edge springs */ + if (mface[i].v4) { BLI_edgehash_insert ( edgehash, MIN2(mface[i].v1, mface[i].v3), MAX2(mface[i].v3, mface[i].v1), NULL ); BLI_edgehash_insert ( edgehash, MIN2(mface[i].v2, mface[i].v4), MAX2(mface[i].v2, mface[i].v4), NULL ); @@ -1258,10 +1204,8 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm ) cloth->numsprings = struct_springs + shear_springs + bend_springs; - if ( edgelist ) - { - for ( i = 0; i < numverts; i++ ) - { + if ( edgelist ) { + for ( i = 0; i < numverts; i++ ) { BLI_linklist_free ( edgelist[i],NULL ); } diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c index 5b03f73e120..264a251c317 100644 --- a/source/blender/blenkernel/intern/collision.c +++ b/source/blender/blenkernel/intern/collision.c @@ -80,8 +80,7 @@ void collision_move_object(CollisionModifierData *collmd, float step, float prev float tv[3] = {0, 0, 0}; unsigned int i = 0; - for ( i = 0; i < collmd->numverts; i++ ) - { + for ( i = 0; i < collmd->numverts; i++ ) { sub_v3_v3v3 ( tv, collmd->xnew[i].co, collmd->x[i].co ); VECADDS ( collmd->current_x[i].co, collmd->x[i].co, tv, prevstep ); VECADDS ( collmd->current_xnew[i].co, collmd->x[i].co, tv, step ); @@ -101,8 +100,7 @@ BVHTree *bvhtree_build_from_mvert ( MFace *mfaces, unsigned int numfaces, MVert tree = BLI_bvhtree_new ( numfaces*2, epsilon, 4, 26 ); // fill tree - for ( i = 0; i < numfaces; i++, tface++ ) - { + for ( i = 0; i < numfaces; i++, tface++ ) { copy_v3_v3 ( &co[0*3], x[tface->v1].co ); copy_v3_v3 ( &co[1*3], x[tface->v2].co ); copy_v3_v3 ( &co[2*3], x[tface->v3].co ); @@ -128,10 +126,8 @@ void bvhtree_update_from_mvert ( BVHTree * bvhtree, MFace *faces, int numfaces, if ( !bvhtree ) return; - if ( x ) - { - for ( i = 0; i < numfaces; i++, mfaces++ ) - { + if ( x ) { + for ( i = 0; i < numfaces; i++, mfaces++ ) { copy_v3_v3 ( &co[0*3], x[mfaces->v1].co ); copy_v3_v3 ( &co[1*3], x[mfaces->v2].co ); copy_v3_v3 ( &co[2*3], x[mfaces->v3].co ); @@ -139,8 +135,7 @@ void bvhtree_update_from_mvert ( BVHTree * bvhtree, MFace *faces, int numfaces, copy_v3_v3 ( &co[3*3], x[mfaces->v4].co ); // copy new locations into array - if ( moving && xnew ) - { + if ( moving && xnew ) { // update moving positions copy_v3_v3 ( &co_moving[0*3], xnew[mfaces->v1].co ); copy_v3_v3 ( &co_moving[1*3], xnew[mfaces->v2].co ); @@ -150,8 +145,7 @@ void bvhtree_update_from_mvert ( BVHTree * bvhtree, MFace *faces, int numfaces, ret = BLI_bvhtree_update_node ( bvhtree, i, co, co_moving, ( mfaces->v4 ? 4 : 3 ) ); } - else - { + else { ret = BLI_bvhtree_update_node ( bvhtree, i, co, NULL, ( mfaces->v4 ? 4 : 3 ) ); } @@ -465,8 +459,7 @@ static void collision_compute_barycentric ( float pv[3], float p1[3], float p2[3 d = ( a * c - b * b ); - if ( ABS ( d ) < (double)ALMOST_ZERO ) - { + if ( ABS ( d ) < (double)ALMOST_ZERO ) { *w1 = *w2 = *w3 = 1.0 / 3.0; return; } @@ -504,8 +497,7 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM cloth1 = clmd->clothObject; - for ( ; collpair != collision_end; collpair++ ) - { + for ( ; collpair != collision_end; collpair++ ) { // only handle static collisions here if ( collpair->flag & COLLISION_IN_FUTURE ) continue; @@ -540,8 +532,7 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM // TODO // If v_n_mag < 0 the edges are approaching each other. - if ( magrelVel > ALMOST_ZERO ) - { + if ( magrelVel > ALMOST_ZERO ) { // Calculate Impulse magnitude to stop all motion in normal direction. float magtangent = 0, repulse = 0, d = 0; double impulse = 0.0; @@ -558,8 +549,7 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM magtangent = MIN2 ( clmd->coll_parms->friction * 0.01f * magrelVel, sqrtf( dot_v3v3( vrel_t_pre,vrel_t_pre ) ) ); // Apply friction impulse. - if ( magtangent > ALMOST_ZERO ) - { + if ( magtangent > ALMOST_ZERO ) { normalize_v3( vrel_t_pre ); impulse = magtangent / ( 1.0f + w1*w1 + w2*w2 + w3*w3 ); // 2.0 * @@ -587,8 +577,7 @@ static int cloth_collision_response_static ( ClothModifierData *clmd, CollisionM spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale; d = clmd->coll_parms->epsilon*8.0f/9.0f + epsilon2*8.0f/9.0f - collpair->distance; - if ( ( magrelVel < 0.1f*d*spf ) && ( d > ALMOST_ZERO ) ) - { + if ( ( magrelVel < 0.1f*d*spf ) && ( d > ALMOST_ZERO ) ) { repulse = MIN2 ( d*1.0f/spf, 0.1f*d*spf - magrelVel ); // stay on the safe side and clamp repulse @@ -685,10 +674,8 @@ static CollPair* cloth_edge_collision ( ModifierData *md1, ModifierData *md2, face2 = & ( collmd->mfaces[overlap->indexB] ); // check all 4 possible collisions - for ( i = 0; i < 4; i++ ) - { - if ( i == 0 ) - { + for ( i = 0; i < 4; i++ ) { + if ( i == 0 ) { // fill faceA ap1 = face1->v1; ap2 = face1->v2; @@ -699,10 +686,8 @@ static CollPair* cloth_edge_collision ( ModifierData *md1, ModifierData *md2, bp2 = face2->v2; bp3 = face2->v3; } - else if ( i == 1 ) - { - if ( face1->v4 ) - { + else if ( i == 1 ) { + if ( face1->v4 ) { // fill faceA ap1 = face1->v1; ap2 = face1->v3; @@ -717,10 +702,8 @@ static CollPair* cloth_edge_collision ( ModifierData *md1, ModifierData *md2, continue; } } - if ( i == 2 ) - { - if ( face2->v4 ) - { + if ( i == 2 ) { + if ( face2->v4 ) { // fill faceA ap1 = face1->v1; ap2 = face1->v2; @@ -735,10 +718,8 @@ static CollPair* cloth_edge_collision ( ModifierData *md1, ModifierData *md2, continue; } } - else if ( i == 3 ) - { - if ( face1->v4 && face2->v4 ) - { + else if ( i == 3 ) { + if ( face1->v4 && face2->v4 ) { // fill faceA ap1 = face1->v1; ap2 = face1->v3; @@ -847,8 +828,7 @@ static int cloth_edge_collision_response_moving ( ClothModifierData *clmd, Colli cloth1 = clmd->clothObject; - for ( ; collpair != collision_end; collpair++ ) - { + for ( ; collpair != collision_end; collpair++ ) { if (!(collpair->flag & COLLISION_IS_EDGES)) continue; @@ -865,8 +845,7 @@ static int cloth_edge_collision_response_moving ( ClothModifierData *clmd, Colli magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal ); // If v_n_mag < 0 the edges are approaching each other. - if ( magrelVel > ALMOST_ZERO ) - { + if ( magrelVel > ALMOST_ZERO ) { // Calculate Impulse magnitude to stop all motion in normal direction. float magtangent = 0, repulse = 0, d = 0; double impulse = 0.0; @@ -885,8 +864,7 @@ static int cloth_edge_collision_response_moving ( ClothModifierData *clmd, Colli magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel,sqrt ( dot_v3v3 ( vrel_t_pre,vrel_t_pre ) ) ); // Apply friction impulse. - if ( magtangent > ALMOST_ZERO ) - { + if ( magtangent > ALMOST_ZERO ) { normalize_v3( vrel_t_pre ); impulse = magtangent; @@ -906,8 +884,7 @@ static int cloth_edge_collision_response_moving ( ClothModifierData *clmd, Colli spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale; d = collpair->distance; - if ( ( magrelVel < 0.1*d*spf && ( d > ALMOST_ZERO ) ) ) - { + if ( ( magrelVel < 0.1*d*spf && ( d > ALMOST_ZERO ) ) ) { repulse = MIN2 ( d*1.0/spf, 0.1*d*spf - magrelVel ); // stay on the safe side and clamp repulse @@ -949,8 +926,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM cloth1 = clmd->clothObject; - for ( ; collpair != collision_end; collpair++ ) - { + for ( ; collpair != collision_end; collpair++ ) { if (collpair->flag & COLLISION_IS_EDGES) continue; @@ -967,8 +943,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal ); // If v_n_mag < 0 the edges are approaching each other. - if ( magrelVel > ALMOST_ZERO ) - { + if ( magrelVel > ALMOST_ZERO ) { // Calculate Impulse magnitude to stop all motion in normal direction. float magtangent = 0, repulse = 0, d = 0; double impulse = 0.0; @@ -985,8 +960,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel,sqrt ( dot_v3v3 ( vrel_t_pre,vrel_t_pre ) ) ); // Apply friction impulse. - if ( magtangent > ALMOST_ZERO ) - { + if ( magtangent > ALMOST_ZERO ) { normalize_v3( vrel_t_pre ); impulse = magtangent; // 2.0 * @@ -1006,8 +980,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale; d = -collpair->distance; - if ( ( magrelVel < 0.1*d*spf ) && ( d > ALMOST_ZERO ) ) - { + if ( ( magrelVel < 0.1*d*spf ) && ( d > ALMOST_ZERO ) ) { repulse = MIN2 ( d*1.0/spf, 0.1*d*spf - magrelVel ); // stay on the safe side and clamp repulse @@ -1034,8 +1007,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM magrelVel = dot_v3v3 ( relativeVelocity, collpair->normal ); // If v_n_mag < 0 the edges are approaching each other. - if ( magrelVel > ALMOST_ZERO ) - { + if ( magrelVel > ALMOST_ZERO ) { // Calculate Impulse magnitude to stop all motion in normal direction. float magtangent = 0, repulse = 0, d = 0; double impulse = 0.0; @@ -1052,8 +1024,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM magtangent = MIN2 ( clmd->coll_parms->friction * 0.01 * magrelVel,sqrt ( dot_v3v3 ( vrel_t_pre,vrel_t_pre ) ) ); // Apply friction impulse. - if ( magtangent > ALMOST_ZERO ) - { + if ( magtangent > ALMOST_ZERO ) { normalize_v3( vrel_t_pre ); impulse = magtangent; // 2.0 * @@ -1072,8 +1043,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM spf = (float)clmd->sim_parms->stepsPerFrame / clmd->sim_parms->timescale; d = -collpair->distance; - if ( ( magrelVel < 0.1*d*spf ) && ( d > ALMOST_ZERO ) ) - { + if ( ( magrelVel < 0.1*d*spf ) && ( d > ALMOST_ZERO ) ) { repulse = MIN2 ( d*1.0/spf, 0.1*d*spf - magrelVel ); // stay on the safe side and clamp repulse @@ -1202,10 +1172,8 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTree face2 = & ( collmd->mfaces[overlap->indexB] ); // check all 4 possible collisions - for ( i = 0; i < 4; i++ ) - { - if ( i == 0 ) - { + for ( i = 0; i < 4; i++ ) { + if ( i == 0 ) { // fill faceA ap1 = face1->v1; ap2 = face1->v2; @@ -1216,10 +1184,8 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTree bp2 = face2->v2; bp3 = face2->v3; } - else if ( i == 1 ) - { - if ( face1->v4 ) - { + else if ( i == 1 ) { + if ( face1->v4 ) { // fill faceA ap1 = face1->v1; ap2 = face1->v3; @@ -1234,10 +1200,8 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTree continue; } } - if ( i == 2 ) - { - if ( face2->v4 ) - { + if ( i == 2 ) { + if ( face2->v4 ) { // fill faceA ap1 = face1->v1; ap2 = face1->v2; @@ -1252,10 +1216,8 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTree continue; } } - else if ( i == 3 ) - { - if ( face1->v4 && face2->v4 ) - { + else if ( i == 3 ) { + if ( face1->v4 && face2->v4 ) { // fill faceA ap1 = face1->v1; ap2 = face1->v3; @@ -1417,10 +1379,8 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, face2 = & ( collmd->mfaces[overlap->indexB] ); // check all 4 possible collisions - for ( i = 0; i < 4; i++ ) - { - if ( i == 0 ) - { + for ( i = 0; i < 4; i++ ) { + if ( i == 0 ) { // fill faceA collpair->ap1 = face1->v1; collpair->ap2 = face1->v2; @@ -1431,10 +1391,8 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, collpair->bp2 = face2->v2; collpair->bp3 = face2->v3; } - else if ( i == 1 ) - { - if ( face1->v4 ) - { + else if ( i == 1 ) { + if ( face1->v4 ) { // fill faceA collpair->ap1 = face1->v1; collpair->ap2 = face1->v4; @@ -1448,10 +1406,8 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, else i++; } - if ( i == 2 ) - { - if ( face2->v4 ) - { + if ( i == 2 ) { + if ( face2->v4 ) { // fill faceA collpair->ap1 = face1->v1; collpair->ap2 = face1->v2; @@ -1465,10 +1421,8 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, else break; } - else if ( i == 3 ) - { - if ( face1->v4 && face2->v4 ) - { + else if ( i == 3 ) { + if ( face1->v4 && face2->v4 ) { // fill faceA collpair->ap1 = face1->v1; collpair->ap2 = face1->v4; @@ -1513,8 +1467,7 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, distance = 2.0 * (double)( epsilon1 + epsilon2 + ALMOST_ZERO ); #endif - if ( distance <= ( epsilon1 + epsilon2 + ALMOST_ZERO ) ) - { + if ( distance <= ( epsilon1 + epsilon2 + ALMOST_ZERO ) ) { normalize_v3_v3( collpair->normal, collpair->vector ); collpair->distance = distance; @@ -2283,14 +2236,12 @@ static void cloth_bvh_objcollisions_nearcheck ( ClothModifierData * clmd, Collis #ifdef WITH_ELTOPO machine_epsilon_offset(clmd->clothObject); - for ( i = 0; i < numresult; i++ ) - { + for ( i = 0; i < numresult; i++ ) { *collisions_index = cloth_collision ( (ModifierData *)clmd, (ModifierData *)collmd, overlap+i, *collisions_index, dt, tri_visithash, arena ); } - for ( i = 0; i < numresult; i++ ) - { + for ( i = 0; i < numresult; i++ ) { *collisions_index = cloth_edge_collision ( (ModifierData *)clmd, (ModifierData *)collmd, overlap+i, *collisions_index, visithash, arena ); } @@ -2298,8 +2249,7 @@ static void cloth_bvh_objcollisions_nearcheck ( ClothModifierData * clmd, Collis BLI_ghash_free(tri_visithash, NULL, NULL); BLI_memarena_free(arena); #else /* WITH_ELTOPO */ - for ( i = 0; i < numresult; i++ ) - { + for ( i = 0; i < numresult; i++ ) { *collisions_index = cloth_collision ( (ModifierData *)clmd, (ModifierData *)collmd, overlap+i, *collisions_index, dt ); } @@ -2323,12 +2273,10 @@ static int cloth_bvh_objcollisions_resolve ( ClothModifierData * clmd, Collision // process all collisions (calculate impulses, TODO: also repulses if distance too short) result = 1; - for ( j = 0; j < 5; j++ ) // 5 is just a value that ensures convergence - { + for ( j = 0; j < 5; j++ ) { /* 5 is just a value that ensures convergence */ result = 0; - if ( collmd->bvhtree ) - { + if ( collmd->bvhtree ) { #ifdef WITH_ELTOPO result += cloth_collision_response_moving(clmd, collmd, collisions, collisions_index); result += cloth_edge_collision_response_moving(clmd, collmd, collisions, collisions_index); @@ -2339,14 +2287,11 @@ static int cloth_bvh_objcollisions_resolve ( ClothModifierData * clmd, Collision { #else // apply impulses in parallel - if ( result ) - { + if (result) { #endif - for ( i = 0; i < numverts; i++ ) - { + for (i = 0; i < numverts; i++) { // calculate "velocities" (just xnew = xold + v; no dt in v) - if ( verts[i].impulse_count ) - { + if (verts[i].impulse_count) { VECADDMUL ( verts[i].tv, verts[i].impulse, 1.0f / verts[i].impulse_count ); copy_v3_v3 ( verts[i].impulse, tnull ); verts[i].impulse_count = 0; @@ -2402,8 +2347,7 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl collisions_index = MEM_callocN(sizeof(CollPair *) *numcollobj , "CollPair"); // check all collision objects - for (i = 0; i < numcollobj; i++) - { + for (i = 0; i < numcollobj; i++) { Object *collob= collobjs[i]; CollisionModifierData *collmd = (CollisionModifierData*)modifiers_findByType(collob, eModifierType_Collision); BVHTreeOverlap *overlap = NULL; @@ -2435,8 +2379,7 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl } rounds++; - for (i = 0; i < numcollobj; i++) - { + for (i = 0; i < numcollobj; i++) { if ( collisions[i] ) MEM_freeN ( collisions[i] ); } @@ -2449,12 +2392,9 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl //////////////////////////////////////////////////////////// // verts come from clmd - for ( i = 0; i < numverts; i++ ) - { - if ( clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL ) - { - if ( verts [i].flags & CLOTH_VERT_FLAG_PINNED ) - { + for ( i = 0; i < numverts; i++ ) { + if ( clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL ) { + if ( verts [i].flags & CLOTH_VERT_FLAG_PINNED ) { continue; } } @@ -2467,10 +2407,8 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl //////////////////////////////////////////////////////////// // Test on *simple* selfcollisions //////////////////////////////////////////////////////////// - if ( clmd->coll_parms->flags & CLOTH_COLLSETTINGS_FLAG_SELF ) - { - for (l = 0; l < (unsigned int)clmd->coll_parms->self_loop_count; l++) - { + if ( clmd->coll_parms->flags & CLOTH_COLLSETTINGS_FLAG_SELF ) { + for (l = 0; l < (unsigned int)clmd->coll_parms->self_loop_count; l++) { // TODO: add coll quality rounds again BVHTreeOverlap *overlap = NULL; unsigned int result = 0; @@ -2483,14 +2421,12 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl verts = cloth->verts; - if ( cloth->bvhselftree ) - { - // search for overlapping collision pairs + if ( cloth->bvhselftree ) { + // search for overlapping collision pairs overlap = BLI_bvhtree_overlap ( cloth->bvhselftree, cloth->bvhselftree, &result ); // #pragma omp parallel for private(k, i, j) schedule(static) - for ( k = 0; k < result; k++ ) - { + for ( k = 0; k < result; k++ ) { float temp[3]; float length = 0; float mindistance; @@ -2500,8 +2436,7 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl mindistance = clmd->coll_parms->selfepsilon* ( cloth->verts[i].avg_spring_len + cloth->verts[j].avg_spring_len ); - if ( clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL ) - { + if ( clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL ) { if ( ( cloth->verts [i].flags & CLOTH_VERT_FLAG_PINNED ) && ( cloth->verts [j].flags & CLOTH_VERT_FLAG_PINNED ) ) { @@ -2514,29 +2449,24 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl if ( ( ABS ( temp[0] ) > mindistance ) || ( ABS ( temp[1] ) > mindistance ) || ( ABS ( temp[2] ) > mindistance ) ) continue; // check for adjacent points (i must be smaller j) - if ( BLI_edgehash_haskey ( cloth->edgehash, MIN2(i, j), MAX2(i, j) ) ) - { + if ( BLI_edgehash_haskey ( cloth->edgehash, MIN2(i, j), MAX2(i, j) ) ) { continue; } length = normalize_v3( temp ); - if ( length < mindistance ) - { + if ( length < mindistance ) { float correction = mindistance - length; - if ( cloth->verts [i].flags & CLOTH_VERT_FLAG_PINNED ) - { + if ( cloth->verts [i].flags & CLOTH_VERT_FLAG_PINNED ) { mul_v3_fl( temp, -correction ); VECADD ( verts[j].tx, verts[j].tx, temp ); } - else if ( cloth->verts [j].flags & CLOTH_VERT_FLAG_PINNED ) - { + else if ( cloth->verts [j].flags & CLOTH_VERT_FLAG_PINNED ) { mul_v3_fl( temp, correction ); VECADD ( verts[i].tx, verts[i].tx, temp ); } - else - { + else { mul_v3_fl( temp, correction * -0.5 ); VECADD ( verts[j].tx, verts[j].tx, temp ); @@ -2560,12 +2490,9 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl //////////////////////////////////////////////////////////// // SELFCOLLISIONS: update velocities //////////////////////////////////////////////////////////// - if ( ret2 ) - { - for ( i = 0; i < cloth->numverts; i++ ) - { - if ( ! ( verts [i].flags & CLOTH_VERT_FLAG_PINNED ) ) - { + if ( ret2 ) { + for ( i = 0; i < cloth->numverts; i++ ) { + if ( ! ( verts [i].flags & CLOTH_VERT_FLAG_PINNED ) ) { sub_v3_v3v3 ( verts[i].tv, verts[i].tx, verts[i].txold ); } } diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c index 25391a34689..2d5631509b4 100644 --- a/source/blender/blenkernel/intern/colortools.c +++ b/source/blender/blenkernel/intern/colortools.c @@ -202,7 +202,7 @@ void curvemap_reset(CurveMap *cuma, rctf *clipr, int preset, int slope) if (cuma->curve) MEM_freeN(cuma->curve); - switch(preset) { + switch (preset) { case CURVE_PRESET_LINE: cuma->totpoint= 2; break; case CURVE_PRESET_SHARP: cuma->totpoint= 4; break; case CURVE_PRESET_SMOOTH: cuma->totpoint= 4; break; @@ -214,7 +214,7 @@ void curvemap_reset(CurveMap *cuma, rctf *clipr, int preset, int slope) cuma->curve= MEM_callocN(cuma->totpoint*sizeof(CurveMapPoint), "curve points"); - switch(preset) { + switch (preset) { case CURVE_PRESET_LINE: cuma->curve[0].x= clipr->xmin; cuma->curve[0].y= clipr->ymax; @@ -252,10 +252,9 @@ void curvemap_reset(CurveMap *cuma, rctf *clipr, int preset, int slope) case CURVE_PRESET_MID9: { int i; - for (i=0; i < cuma->totpoint; i++) - { - cuma->curve[i].x= i / ((float)cuma->totpoint-1); - cuma->curve[i].y= 0.5; + for (i = 0; i < cuma->totpoint; i++) { + cuma->curve[i].x = i / ((float)cuma->totpoint - 1); + cuma->curve[i].y = 0.5; } } break; diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 0a6e8a163cc..82a908eaf57 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -3439,8 +3439,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr { bShrinkwrapConstraint *scon = (bShrinkwrapConstraint *) con->data; - if ( VALID_CONS_TARGET(ct) && (ct->tar->type == OB_MESH) ) - { + if ( VALID_CONS_TARGET(ct) && (ct->tar->type == OB_MESH) ) { int fail = FALSE; float co[3] = {0.0f, 0.0f, 0.0f}; float no[3] = {0.0f, 0.0f, 0.0f}; @@ -3461,12 +3460,10 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr unit_m4(ct->matrix); - if (target != NULL) - { + if (target != NULL) { space_transform_from_matrixs(&transform, cob->matrix, ct->tar->obmat); - switch(scon->shrinkType) - { + switch (scon->shrinkType) { case MOD_SHRINKWRAP_NEAREST_SURFACE: case MOD_SHRINKWRAP_NEAREST_VERTEX: @@ -3475,8 +3472,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr else bvhtree_from_mesh_faces(&treeData, target, 0.0, 2, 6); - if (treeData.tree == NULL) - { + if (treeData.tree == NULL) { fail = TRUE; break; } @@ -3506,14 +3502,12 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr bvhtree_from_mesh_faces(&treeData, target, scon->dist, 4, 6); - if (treeData.tree == NULL) - { + if (treeData.tree == NULL) { fail = TRUE; break; } - if (normal_projection_project_vertex(0, co, no, &transform, treeData.tree, &hit, treeData.raycast_callback, &treeData) == FALSE) - { + if (normal_projection_project_vertex(0, co, no, &transform, treeData.tree, &hit, treeData.raycast_callback, &treeData) == FALSE) { fail = TRUE; break; } @@ -3542,8 +3536,7 @@ static void shrinkwrap_evaluate (bConstraint *UNUSED(con), bConstraintOb *cob, L bConstraintTarget *ct= targets->first; /* only evaluate if there is a target */ - if (VALID_CONS_TARGET(ct)) - { + if (VALID_CONS_TARGET(ct)) { copy_v3_v3(cob->matrix[3], ct->matrix[3]); } } diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index e9dd4d01b0e..7a5b4ef9b24 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -777,7 +777,7 @@ int CTX_data_mode_enum(const bContext *C) Object *obedit= CTX_data_edit_object(C); if (obedit) { - switch(obedit->type) { + switch (obedit->type) { case OB_MESH: return CTX_MODE_EDIT_MESH; case OB_CURVE: diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index 9232fe8ec04..e5b2e5f69c7 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -636,7 +636,7 @@ static void calcknots(float *knots, const short pnts, const short order, const s float k; int a; - switch(flag & (CU_NURB_ENDPOINT|CU_NURB_BEZIER)) { + switch (flag & (CU_NURB_ENDPOINT|CU_NURB_BEZIER)) { case CU_NURB_ENDPOINT: k= 0.0; for (a=1; a <= pnts_order; a++) { @@ -2038,7 +2038,7 @@ static void make_bevel_list_3D_tangent(BevList *bl) static void make_bevel_list_3D(BevList *bl, int smooth_iter, int twist_mode) { - switch(twist_mode) { + switch (twist_mode) { case CU_TWIST_TANGENT: make_bevel_list_3D_tangent(bl); break; diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index 1514716d717..ee8e57d5a3e 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -2337,7 +2337,10 @@ int CustomData_layer_has_math(struct CustomData *data, int layer_n) const LayerTypeInfo *typeInfo = layerType_getInfo(data->layers[layer_n].type); if (typeInfo->equal && typeInfo->add && typeInfo->multiply && - typeInfo->initminmax && typeInfo->dominmax) return 1; + typeInfo->initminmax && typeInfo->dominmax) + { + return 1; + } return 0; } @@ -2684,7 +2687,9 @@ int CustomData_verify_versions(struct CustomData *data, int index) if (!typeInfo->defaultname && (index > 0) && data->layers[index-1].type == layer->type) + { keeplayer = 0; /* multiple layers of which we only support one */ + } } if (!keeplayer) { diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index 1232177fa10..3e0c947ff4a 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -479,7 +479,7 @@ void flip_side_name(char name[MAX_VGROUP_NAME], const char from_name[MAX_VGROUP_ /* first case; separator . - _ with extensions r R l L */ if (is_char_sep(name[len - 2]) ) { - switch(name[len - 1]) { + switch (name[len - 1]) { case 'l': prefix[len - 1] = 0; strcpy(replace, "r"); @@ -500,7 +500,7 @@ void flip_side_name(char name[MAX_VGROUP_NAME], const char from_name[MAX_VGROUP_ } /* case; beginning with r R l L , with separator after it */ else if (is_char_sep(name[1]) ) { - switch(name[0]) { + switch (name[0]) { case 'l': strcpy(replace, "r"); BLI_strncpy(suffix, name + 1, sizeof(suffix)); diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index aa6d42977ca..246c973169e 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -462,7 +462,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O if (ob->parent) { node2 = dag_get_node(dag,ob->parent); - switch(ob->partype) { + switch (ob->partype) { case PARSKEL: dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Parent"); break; @@ -2245,7 +2245,7 @@ static void dag_object_time_update_flags(Object *ob) Curve *cu; Lattice *lt; - switch(ob->type) { + switch (ob->type) { case OB_MESH: me= ob->data; if (me->key) { diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index 01d5d6ef2ad..fcd80698d5c 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -228,7 +228,7 @@ void count_displist(ListBase *lb, int *totvert, int *totface) dl= lb->first; while (dl) { - switch(dl->type) { + switch (dl->type) { case DL_SURF: *totvert+= dl->nr*dl->parts; *totface+= (dl->nr-1)*(dl->parts-1); diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index 9ce4d68eeed..31544dd5ca0 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -231,13 +231,22 @@ static int dynamicPaint_surfaceNumOfPoints(DynamicPaintSurface *surface) /* checks whether surface's format/type has realtime preview */ int dynamicPaint_surfaceHasColorPreview(DynamicPaintSurface *surface) { - if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) return 0; + if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) { + return 0; + } else if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) { if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE || - surface->type == MOD_DPAINT_SURFACE_T_WAVE) return 0; - else return 1; + surface->type == MOD_DPAINT_SURFACE_T_WAVE) + { + return 0; + } + else { + return 1; + } + } + else { + return 1; } - else return 1; } /* get currently active surface (in user interface) */ @@ -393,11 +402,15 @@ void dynamicPaintSurface_updateType(struct DynamicPaintSurface *surface) static int surface_totalSamples(DynamicPaintSurface *surface) { if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ && - surface->flags & MOD_DPAINT_ANTIALIAS) - return (surface->data->total_points*5); + surface->flags & MOD_DPAINT_ANTIALIAS) + { + return (surface->data->total_points * 5); + } if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX && - surface->flags & MOD_DPAINT_ANTIALIAS && surface->data->adj_data) + surface->flags & MOD_DPAINT_ANTIALIAS && surface->data->adj_data) + { return (surface->data->total_points+surface->data->adj_data->total_targets); + } return surface->data->total_points; } @@ -548,8 +561,7 @@ static int surface_getBrushFlags(DynamicPaintSurface *surface, Scene *scene) else base = scene->base.first; - while (base || go) - { + while (base || go) { brushObj = NULL; /* select object */ @@ -559,8 +571,7 @@ static int surface_getBrushFlags(DynamicPaintSurface *surface, Scene *scene) else brushObj = base->object; - if (!brushObj) - { + if (!brushObj) { if (surface->brush_group) go = go->next; else base= base->next; continue; @@ -572,12 +583,10 @@ static int surface_getBrushFlags(DynamicPaintSurface *surface, Scene *scene) base= base->next; md = modifiers_findByType(brushObj, eModifierType_DynamicPaint); - if (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) - { + if (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) { DynamicPaintModifierData *pmd2 = (DynamicPaintModifierData *)md; - if (pmd2->brush) - { + if (pmd2->brush) { DynamicPaintBrushSettings *brush = pmd2->brush; if (brush->flags & MOD_DPAINT_USES_VELOCITY) @@ -888,8 +897,10 @@ void surface_freeUnusedData(DynamicPaintSurface *surface) /* free bakedata if not active or surface is baked */ if (!(surface->flags & MOD_DPAINT_ACTIVE) || - (surface->pointcache && surface->pointcache->flag & PTCACHE_BAKED)) + (surface->pointcache && surface->pointcache->flag & PTCACHE_BAKED)) + { free_bakeData(surface->data); + } } void dynamicPaint_freeSurfaceData(DynamicPaintSurface *surface) @@ -1219,9 +1230,13 @@ static int surface_usesAdjData(DynamicPaintSurface *surface) { if (surface_usesAdjDistance(surface)) return 1; if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX && - surface->flags & MOD_DPAINT_ANTIALIAS) return 1; - - return 0; + surface->flags & MOD_DPAINT_ANTIALIAS) + { + return 1; + } + else { + return 0; + } } /* initialize surface adjacency data */ @@ -1294,10 +1309,12 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, int for /* now check if total number of edges+faces for * each vertex is even, if not -> vertex is on mesh edge */ for (i=0; itotal_points; i++) { - if ((temp_data[i]%2) || - temp_data[i] < 4) + if ((temp_data[i] % 2) || + (temp_data[i] < 4)) + { ad->flags[i] |= ADJ_ON_MESH_EDGE; - + } + /* reset temp data */ temp_data[i] = 0; } @@ -1863,8 +1880,10 @@ static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene /* restore canvas derivedmesh if required */ if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE && - surface->flags & MOD_DPAINT_DISP_INCREMENTAL && surface->next) + surface->flags & MOD_DPAINT_DISP_INCREMENTAL && surface->next) + { canvas_copyDerivedMesh(canvas, dm); + } BKE_ptcache_validate(cache, surface->current_frame); BKE_ptcache_write(&pid, surface->current_frame); @@ -2042,9 +2061,12 @@ static int dynamicPaint_findNeighbourPixel(PaintUVPoint *tempPoints, DerivedMesh //printf("connected UV : %f,%f & %f,%f - %f,%f & %f,%f\n", s_uv1[0], s_uv1[1], s_uv2[0], s_uv2[1], t_uv1[0], t_uv1[1], t_uv2[0], t_uv2[1]); if (((s_uv1[0] == t_uv1[0] && s_uv1[1] == t_uv1[1]) && - (s_uv2[0] == t_uv2[0] && s_uv2[1] == t_uv2[1]) ) || - ((s_uv2[0] == t_uv1[0] && s_uv2[1] == t_uv1[1]) && - (s_uv1[0] == t_uv2[0] && s_uv1[1] == t_uv2[1]) )) return ((px+neighX[n_index]) + w*(py+neighY[n_index])); + (s_uv2[0] == t_uv2[0] && s_uv2[1] == t_uv2[1]) ) || + ((s_uv2[0] == t_uv1[0] && s_uv2[1] == t_uv1[1]) && + (s_uv1[0] == t_uv2[0] && s_uv1[1] == t_uv2[1]) )) + { + return ((px+neighX[n_index]) + w*(py+neighY[n_index])); + } /* * Find a point that is relatively at same edge position @@ -2185,11 +2207,9 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) */ if (!error) { #pragma omp parallel for schedule(static) - for (ty = 0; ty < h; ty++) - { + for (ty = 0; ty < h; ty++) { int tx; - for (tx = 0; tx < w; tx++) - { + for (tx = 0; tx < w; tx++) { int i, sample; int index = tx+w*ty; PaintUVPoint *tPoint = (&tempPoints[index]); @@ -2257,8 +2277,7 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) /* If collision wasn't found but the face is a quad * do another check for the second half */ - if ((!isInside) && mface[i].v4) - { + if ((!isInside) && mface[i].v4) { /* change d2 to test the other half */ sub_v2_v2v2(d2, tface[i].uv[3], tface[i].uv[0]); // uv3 - uv0 @@ -2330,11 +2349,9 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) * (To avoid seams on uv island edges) */ #pragma omp parallel for schedule(static) - for (ty = 0; ty < h; ty++) - { + for (ty = 0; ty < h; ty++) { int tx; - for (tx = 0; tx < w; tx++) - { + for (tx = 0; tx < w; tx++) { int index = tx+w*ty; PaintUVPoint *tPoint = (&tempPoints[index]); @@ -2408,11 +2425,9 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) * When base loop is over convert found neighbor indexes to real ones * Also count the final number of active surface points */ - for (ty = 0; ty < h; ty++) - { + for (ty = 0; ty < h; ty++) { int tx; - for (tx = 0; tx < w; tx++) - { + for (tx = 0; tx < w; tx++) { int index = tx+w*ty; PaintUVPoint *tPoint = (&tempPoints[index]); @@ -2440,11 +2455,9 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) if (sData->adj_data) { PaintAdjData *ed = sData->adj_data; unsigned int n_pos = 0; - for (ty = 0; ty < h; ty++) - { + for (ty = 0; ty < h; ty++) { int tx; - for (tx = 0; tx < w; tx++) - { + for (tx = 0; tx < w; tx++) { int i, index = tx+w*ty; if (tempPoints[index].face_index != -1) { @@ -2576,8 +2589,7 @@ void dynamicPaint_outputSurfaceImage(DynamicPaintSurface *surface, char* filenam if (ibuf == NULL) {setError(surface->canvas, "Image save failed: Not enough free memory.");return;} #pragma omp parallel for schedule(static) - for (index = 0; index < sData->total_points; index++) - { + for (index = 0; index < sData->total_points; index++) { int pos=f_data->uv_p[index].pixel_index*4; /* image buffer position */ /* Set values of preferred type */ @@ -2759,8 +2771,7 @@ static void mesh_faces_spherecast_dp(void *userdata, int index, const BVHTreeRay { float dist = bvhtree_ray_tri_intersection(ray, hit->dist, t0, t1, t2); - if (dist >= 0 && dist < hit->dist) - { + if (dist >= 0 && dist < hit->dist) { hit->index = index; hit->dist = dist; hit->no[0] = (quad) ? 1.0f : 0.0f; @@ -2799,8 +2810,7 @@ static void mesh_faces_nearest_point_dp(void *userdata, int index, const float * int vertex, edge; dist = nearest_point_in_tri_surface(t0, t1, t2, co, &vertex, &edge, nearest_tmp); - if (dist < nearest->dist) - { + if (dist < nearest->dist) { nearest->index = index; nearest->dist = dist; copy_v3_v3(nearest->co, nearest_tmp); @@ -3188,8 +3198,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, /* check bounding box collision */ if (grid && meshBrush_boundsIntersect(&grid->grid_bounds, &mesh_bb, brush, brush_radius)) /* Build a bvh tree from transformed vertices */ - if (bvhtree_from_mesh_faces(&treeData, dm, 0.0f, 4, 8)) - { + if (bvhtree_from_mesh_faces(&treeData, dm, 0.0f, 4, 8)) { int c_index; int total_cells = grid->dim[0]*grid->dim[1]*grid->dim[2]; @@ -3203,8 +3212,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, /* loop through cell points and process brush */ #pragma omp parallel for schedule(static) - for (id = 0; id < grid->s_num[c_index]; id++) - { + for (id = 0; id < grid->s_num[c_index]; id++) { int index = grid->t_index[grid->s_pos[c_index] + id]; int ss, samples = bData->s_num[index]; float total_sample = (float)samples; @@ -3220,8 +3228,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, total_sample = gaussianTotal; /* Supersampling */ - for (ss=0; sscollision == MOD_DPAINT_COL_VOLUME || brush->collision == MOD_DPAINT_COL_VOLDIST) - if (BLI_bvhtree_ray_cast(treeData.tree, ray_start, ray_dir, 0.0f, &hit, mesh_faces_spherecast_dp, &treeData) != -1) - { + if (BLI_bvhtree_ray_cast(treeData.tree, ray_start, ray_dir, 0.0f, &hit, mesh_faces_spherecast_dp, &treeData) != -1) { /* We hit a triangle, now check if collision point normal is facing the point */ /* For optimization sake, hit point normal isn't calculated in ray cast loop */ @@ -3277,8 +3283,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, /* If ray and hit face normal are facing same direction * hit point is inside a closed mesh. */ - if (dot>=0) - { + if (dot>=0) { float dist = hit.dist; int f_index = hit.index; @@ -3342,8 +3347,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, hit.dist = brush_radius; /* Do a face normal directional raycast, and use that distance */ - if (BLI_bvhtree_ray_cast(treeData.tree, ray_start, proj_ray, 0.0f, &hit, mesh_faces_spherecast_dp, &treeData) != -1) - { + if (BLI_bvhtree_ray_cast(treeData.tree, ray_start, proj_ray, 0.0f, &hit, mesh_faces_spherecast_dp, &treeData) != -1) { proxDist = hit.dist; madd_v3_v3v3fl(hitCo, ray_start, proj_ray, hit.dist); /* Calculate final hit coordinates */ hQuad = (hit.no[0] == 1.0f); @@ -3446,8 +3450,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, /* * Process hit color and alpha */ - if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) - { + if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) { float sampleColor[3]; float alpha_factor = 1.0f; @@ -3589,8 +3592,7 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface, BLI_begin_threaded_malloc(); /* only continue if particle bb is close enough to canvas bb */ - if (boundsIntersectDist(&grid->grid_bounds, &part_bb, range)) - { + if (boundsIntersectDist(&grid->grid_bounds, &part_bb, range)) { int c_index; int total_cells = grid->dim[0]*grid->dim[1]*grid->dim[2]; @@ -3603,13 +3605,14 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface, /* check cell bounding box */ if (!grid->s_num[c_index] || - !boundsIntersectDist(&grid->bounds[c_index], &part_bb, range)) + !boundsIntersectDist(&grid->bounds[c_index], &part_bb, range)) + { continue; + } /* loop through cell points */ #pragma omp parallel for schedule(static) - for (id = 0; id < grid->s_num[c_index]; id++) - { + for (id = 0; id < grid->s_num[c_index]; id++) { int index = grid->t_index[grid->s_pos[c_index] + id]; float disp_intersect = 0.0f; float radius = 0.0f; @@ -3714,8 +3717,7 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface, } } - if (strength > 0.001f) - { + if (strength > 0.001f) { float paintColor[4] = {0.0f}; float depth = 0.0f; @@ -3781,8 +3783,7 @@ static int dynamicPaint_paintSinglePoint(DynamicPaintSurface *surface, float *po * Loop through every surface point */ #pragma omp parallel for schedule(static) - for (index = 0; index < sData->total_points; index++) - { + for (index = 0; index < sData->total_points; index++) { float distance = len_v3v3(pointCoord, bData->realCoord[bData->s_pos[index]].v); float colorband[4] = {0.0f}; float strength; @@ -3891,8 +3892,7 @@ static void dynamicPaint_prepareAdjacencyData(DynamicPaintSurface *surface, int if (!bNeighs) return; #pragma omp parallel for schedule(static) - for (index = 0; index < sData->total_points; index++) - { + for (index = 0; index < sData->total_points; index++) { int i; int numOfNeighs = adj_data->n_num[index]; @@ -3911,8 +3911,7 @@ static void dynamicPaint_prepareAdjacencyData(DynamicPaintSurface *surface, int /* calculate average values (single thread) */ bData->average_dist = 0.0f; - for (index = 0; index < sData->total_points; index++) - { + for (index = 0; index < sData->total_points; index++) { int i; int numOfNeighs = adj_data->n_num[index]; @@ -4080,8 +4079,7 @@ static int dynamicPaint_prepareEffectStep(DynamicPaintSurface *surface, Scene *s if (*force) { #pragma omp parallel for schedule(static) - for (index = 0; index < sData->total_points; index++) - { + for (index = 0; index < sData->total_points; index++) { float forc[3] = {0}; /* apply force fields */ @@ -4121,8 +4119,7 @@ static int dynamicPaint_prepareEffectStep(DynamicPaintSurface *surface, Scene *s } /* calculate average values (single thread) */ - for (index = 0; index < sData->total_points; index++) - { + for (index = 0; index < sData->total_points; index++) { average_force += (*force)[index*4+3]; } average_force /= sData->total_points; @@ -4171,8 +4168,7 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface, float *force memcpy(prevPoint, sData->type_data, sData->total_points*sizeof(struct PaintPoint)); #pragma omp parallel for schedule(static) - for (index = 0; index < sData->total_points; index++) - { + for (index = 0; index < sData->total_points; index++) { int i; int numOfNeighs = sData->adj_data->n_num[index]; PaintPoint *pPoint = &((PaintPoint*)sData->type_data)[index]; @@ -4214,8 +4210,7 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface, float *force memcpy(prevPoint, sData->type_data, sData->total_points*sizeof(struct PaintPoint)); #pragma omp parallel for schedule(static) - for (index = 0; index < sData->total_points; index++) - { + for (index = 0; index < sData->total_points; index++) { int i; int numOfNeighs = sData->adj_data->n_num[index]; float totalAlpha = 0.0f; @@ -4256,8 +4251,7 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface, float *force /* * Drip Effect */ - if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP && force) - { + if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP && force) { float eff_scale = distance_scale*EFF_MOVEMENT_PER_FRAME*timescale/2.0f; /* Copy current surface to the previous points array to read unmodified values */ memcpy(prevPoint, sData->type_data, sData->total_points*sizeof(struct PaintPoint)); @@ -4335,8 +4329,7 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale) if (!prevPoint) return; /* calculate average neigh distance (single thread) */ - for (index = 0; index < sData->total_points; index++) - { + for (index = 0; index < sData->total_points; index++) { int i; int numOfNeighs = sData->adj_data->n_num[index]; @@ -4435,8 +4428,7 @@ static void dynamicPaint_surfacePreStep(DynamicPaintSurface *surface, float time int index; #pragma omp parallel for schedule(static) - for (index=0; indextotal_points; index++) - { + for (index=0; indextotal_points; index++) { /* Do drying dissolve effects */ if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) { PaintPoint *pPoint = &((PaintPoint*)sData->type_data)[index]; @@ -4651,8 +4643,7 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, Scene *sc * Prepare each surface point for a new step */ #pragma omp parallel for schedule(static) - for (index=0; indextotal_points; index++) - { + for (index=0; indextotal_points; index++) { float prev_point[3] = {0.0f, 0.0f, 0.0f}; if (do_velocity_data && !new_bdata) { copy_v3_v3(prev_point, bData->realCoord[bData->s_pos[index]].v); @@ -4796,8 +4787,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su else base = scene->base.first; - while (base || go) - { + while (base || go) { brushObj = NULL; /* select object */ if (surface->brush_group) { @@ -4821,12 +4811,10 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su /* check if target has an active dp modifier */ md = modifiers_findByType(brushObj, eModifierType_DynamicPaint); - if (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) - { + if (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) { DynamicPaintModifierData *pmd2 = (DynamicPaintModifierData *)md; /* make sure we're dealing with a brush */ - if (pmd2->brush) - { + if (pmd2->brush) { DynamicPaintBrushSettings *brush = pmd2->brush; BrushMaterials bMats = {0}; diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index 4f320b41184..c275d4ef0ac 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -129,7 +129,7 @@ PartDeflect *object_add_collision_fields(int type) pd->f_damp = 1.0f; /* set sensible defaults based on type */ - switch(type) { + switch (type) { case PFIELD_VORTEX: pd->shape = PFIELD_SHAPE_PLANE; break; @@ -419,8 +419,7 @@ static float eff_calc_visibility(ListBase *colliders, EffectorCache *eff, Effect len = normalize_v3(norm); // check all collision objects - for (col = colls->first; col; col = col->next) - { + for (col = colls->first; col; col = col->next) { CollisionModifierData *collmd = col->collmd; if (col->ob == eff->ob) @@ -506,7 +505,8 @@ float effector_falloff(EffectorCache *eff, EffectorData *efd, EffectedPoint *UNU falloff=0.0f; else if (eff->pd->zdir == PFIELD_Z_NEG && fac > 0.0f) falloff=0.0f; - else switch(eff->pd->falloff) { + else { + switch (eff->pd->falloff) { case PFIELD_FALL_SPHERE: falloff*= falloff_func_dist(eff->pd, efd->distance); break; @@ -529,6 +529,7 @@ float effector_falloff(EffectorCache *eff, EffectorData *efd, EffectedPoint *UNU falloff*= falloff_func_rad(eff->pd, r_fac); break; + } } return falloff; @@ -835,7 +836,7 @@ static void do_physical_effector(EffectorCache *eff, EffectorData *efd, Effected copy_v3_v3(force, efd->vec_to_point); - switch(pd->forcefield) { + switch (pd->forcefield) { case PFIELD_WIND: copy_v3_v3(force, efd->nor); mul_v3_fl(force, strength * efd->falloff); diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index bb8cfe37a88..806d795cc9d 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -1655,8 +1655,7 @@ static float evaluate_driver (ChannelDriver *driver, const float evaltime) { driver->curval= 0.0f; } - else - { + else { /* this evaluates the expression using Python,and returns its result: * - on errors it reports, then returns 0.0f */ diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c index ed5cf5e7924..0b722aabd4c 100644 --- a/source/blender/blenkernel/intern/fmodifier.c +++ b/source/blender/blenkernel/intern/fmodifier.c @@ -318,8 +318,7 @@ static void fcm_fn_generator_evaluate (FCurve *UNUSED(fcu), FModifier *fcm, floa /* get function pointer to the func to use: * WARNING: must perform special argument validation hereto guard against crashes */ - switch (data->type) - { + switch (data->type) { /* simple ones */ case FCM_GENERATOR_FN_SIN: /* sine wave */ fn= sin; diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index b2759f18e9b..cdc923600d7 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -68,8 +68,7 @@ void free_vfont(struct VFont *vf) if (vf == NULL) return; if (vf->data) { - while (vf->data->characters.first) - { + while (vf->data->characters.first) { VChar *che = vf->data->characters.first; while (che->nurbsbase.first) { @@ -136,8 +135,7 @@ struct TmpFont *vfont_find_tmpfont(VFont *vfont) // Try finding the font from font list tmpfnt = ttfdata.first; - while (tmpfnt) - { + while (tmpfnt) { if (tmpfnt->vfont == vfont) break; tmpfnt = tmpfnt->next; @@ -280,7 +278,7 @@ VFont *load_vfont(Main *bmain, const char *name) static VFont *which_vfont(Curve *cu, CharInfo *info) { - switch(info->flag & (CU_CHINFO_BOLD|CU_CHINFO_ITALIC)) { + switch (info->flag & (CU_CHINFO_BOLD|CU_CHINFO_ITALIC)) { case CU_CHINFO_BOLD: if (cu->vfontb) return(cu->vfontb); else return(cu->vfont); case CU_CHINFO_ITALIC: @@ -397,8 +395,7 @@ static void buildchar(Main *bmain, Curve *cu, unsigned long character, CharInfo nu1 = che->nurbsbase.first; // Create the character - while (nu1) - { + while (nu1) { bezt1 = nu1->bezt; if (bezt1) { nu2 =(Nurb*) MEM_mallocN(sizeof(Nurb),"duplichar_nurb"); @@ -822,10 +819,15 @@ struct chartrans *BKE_text_to_curve(Main *bmain, Scene *scene, Object *ob, int m } } else if ((cu->spacemode==CU_JUSTIFY) && (cu->tb[0].w != 0.0f)) { - float curofs= 0.0f; - for (i=0; i<=slen; i++) { - for (j=i; (mem[j]) && (mem[j]!='\n') && - (mem[j]!='\r') && (chartransdata[j].dobreak==0) && (jlinenr]-linedata[ct->linenr])/linedata4[ct->linenr]; @@ -833,7 +835,7 @@ struct chartrans *BKE_text_to_curve(Main *bmain, Scene *scene, Object *ob, int m } if (mem[i]=='\n' || mem[i]=='\r' || chartransdata[i].dobreak) curofs= 0; ct++; - } + } } } @@ -950,7 +952,7 @@ struct chartrans *BKE_text_to_curve(Main *bmain, Scene *scene, Object *ob, int m if ((mode==FO_CURSUP || mode==FO_PAGEUP) && ct->linenr==0); else if ((mode==FO_CURSDOWN || mode==FO_PAGEDOWN) && ct->linenr==lnr); else { - switch(mode) { + switch (mode) { case FO_CURSUP: lnr= ct->linenr-1; break; case FO_CURSDOWN: lnr= ct->linenr+1; break; case FO_PAGEUP: lnr= ct->linenr-10; break; diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c index bb51325a6ef..dfe73ae20db 100644 --- a/source/blender/blenkernel/intern/idprop.c +++ b/source/blender/blenkernel/intern/idprop.c @@ -581,8 +581,7 @@ void IDP_FreeIterBeforeEnd(void *vself) static void IDP_FreeGroup(IDProperty *prop) { IDProperty *loop; - for (loop=prop->data.group.first; loop; loop=loop->next) - { + for (loop=prop->data.group.first; loop; loop=loop->next) { IDP_FreeProperty(loop); } BLI_freelistN(&prop->data.group); diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 6e0330f5316..5c9c942cc6c 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -578,7 +578,7 @@ static ImBuf *add_ibuf_size(unsigned int width, unsigned int height, const char BLI_strncpy(ibuf->name, name, sizeof(ibuf->name)); ibuf->userflags |= IB_BITMAPDIRTY; - switch(uvtestgrid) { + switch (uvtestgrid) { case 1: BKE_image_buf_fill_checker(rect, rect_float, width, height); break; @@ -929,7 +929,7 @@ char BKE_ftype_to_imtype(const int ftype) int BKE_imtype_is_movie(const char imtype) { - switch(imtype) { + switch (imtype) { case R_IMF_IMTYPE_AVIRAW: case R_IMF_IMTYPE_AVIJPEG: case R_IMF_IMTYPE_AVICODEC: @@ -946,7 +946,7 @@ int BKE_imtype_is_movie(const char imtype) int BKE_imtype_supports_zbuf(const char imtype) { - switch(imtype) { + switch (imtype) { case R_IMF_IMTYPE_IRIZ: case R_IMF_IMTYPE_OPENEXR: /* but not R_IMF_IMTYPE_MULTILAYER */ return 1; @@ -956,7 +956,7 @@ int BKE_imtype_supports_zbuf(const char imtype) int BKE_imtype_supports_compress(const char imtype) { - switch(imtype) { + switch (imtype) { case R_IMF_IMTYPE_PNG: return 1; } @@ -965,7 +965,7 @@ int BKE_imtype_supports_compress(const char imtype) int BKE_imtype_supports_quality(const char imtype) { - switch(imtype) { + switch (imtype) { case R_IMF_IMTYPE_JPEG90: case R_IMF_IMTYPE_JP2: case R_IMF_IMTYPE_AVIJPEG: @@ -979,7 +979,7 @@ char BKE_imtype_valid_channels(const char imtype) char chan_flag= IMA_CHAN_FLAG_RGB; /* assume all support rgb */ /* alpha */ - switch(imtype) { + switch (imtype) { case R_IMF_IMTYPE_TARGA: case R_IMF_IMTYPE_IRIS: case R_IMF_IMTYPE_PNG: @@ -995,7 +995,7 @@ char BKE_imtype_valid_channels(const char imtype) } /* bw */ - switch(imtype) { + switch (imtype) { case R_IMF_IMTYPE_PNG: case R_IMF_IMTYPE_JPEG90: case R_IMF_IMTYPE_TARGA: @@ -1110,8 +1110,11 @@ int BKE_add_image_extension(char *string, const char imtype) } #ifdef WITH_TIFF else if (imtype==R_IMF_IMTYPE_TIFF) { - if (!BLI_testextensie(string, ".tif") && - !BLI_testextensie(string, ".tiff")) extension= ".tif"; + if (!BLI_testextensie(string, ".tif") && + !BLI_testextensie(string, ".tiff")) + { + extension= ".tif"; + } } #endif #ifdef WITH_OPENEXR @@ -1791,7 +1794,7 @@ void BKE_image_signal(Image *ima, ImageUser *iuser, int signal) if (ima==NULL) return; - switch(signal) { + switch (signal) { case IMA_SIGNAL_FREE: image_free_buffers(ima); if (iuser) diff --git a/source/blender/blenkernel/intern/image_gen.c b/source/blender/blenkernel/intern/image_gen.c index 675c0771140..1441bd7b12b 100644 --- a/source/blender/blenkernel/intern/image_gen.c +++ b/source/blender/blenkernel/intern/image_gen.c @@ -169,12 +169,10 @@ static void checker_board_color_fill(unsigned char *rect, float *rect_float, int hue_step= power_of_2_max_i(width / 8); if (hue_step < 8) hue_step= 8; - for (y= 0; y < height; y++) - { + for (y= 0; y < height; y++) { val= 0.1 + (y * (0.4 / height)); /* use a number lower then 1.0 else its too bright */ - for (x= 0; x < width; x++) - { + for (x= 0; x < width; x++) { hue= (float)((double)(x/hue_step) * 1.0 / width * hue_step); hsv_to_rgb(hue, sat, val, &r, &g, &b); @@ -291,12 +289,10 @@ static void checker_board_text(unsigned char *rect, float *rect_float, int width BLF_buffer(mono, rect_float, rect, width, height, 4); - for (y= 0; y < height; y+=step) - { + for (y= 0; y < height; y+=step) { text[1]= '1'; - for (x= 0; x < width; x+=step) - { + for (x= 0; x < width; x+=step) { /* hard coded offset */ pen_x = x + 33; pen_y = y + 44; diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c index a4edc1e531a..b593419db9f 100644 --- a/source/blender/blenkernel/intern/implicit.c +++ b/source/blender/blenkernel/intern/implicit.c @@ -178,8 +178,7 @@ static void print_fvector(float m3[3]) DO_INLINE void print_lfvector(float (*fLongVector)[3], unsigned int verts) { unsigned int i = 0; - for (i = 0; i < verts; i++) - { + for (i = 0; i < verts; i++) { print_fvector(fLongVector[i]); } } @@ -193,8 +192,7 @@ DO_INLINE lfVector *create_lfvector(unsigned int verts) /* delete long vector */ DO_INLINE void del_lfvector(float (*fLongVector)[3]) { - if (fLongVector != NULL) - { + if (fLongVector != NULL) { MEM_freeN (fLongVector); // cloth_aligned_free(&MEMORY_BASE, fLongVector); } @@ -208,8 +206,7 @@ DO_INLINE void cp_lfvector(float (*to)[3], float (*from)[3], unsigned int verts) DO_INLINE void init_lfvector(float (*fLongVector)[3], float vector[3], unsigned int verts) { unsigned int i = 0; - for (i = 0; i < verts; i++) - { + for (i = 0; i < verts; i++) { copy_v3_v3(fLongVector[i], vector); } } @@ -223,8 +220,7 @@ DO_INLINE void mul_lfvectorS(float (*to)[3], float (*fLongVector)[3], float scal { unsigned int i = 0; - for (i = 0; i < verts; i++) - { + for (i = 0; i < verts; i++) { mul_fvector_S(to[i], fLongVector[i], scalar); } } @@ -233,8 +229,7 @@ DO_INLINE void mul_lfvectorS(float (*to)[3], float (*fLongVector)[3], float scal DO_INLINE void submul_lfvectorS(float (*to)[3], float (*fLongVector)[3], float scalar, unsigned int verts) { unsigned int i = 0; - for (i = 0; i < verts; i++) - { + for (i = 0; i < verts; i++) { VECSUBMUL(to[i], fLongVector[i], scalar); } } @@ -258,8 +253,7 @@ DO_INLINE void add_lfvector_lfvector(float (*to)[3], float (*fLongVectorA)[3], f { unsigned int i = 0; - for (i = 0; i < verts; i++) - { + for (i = 0; i < verts; i++) { VECADD(to[i], fLongVectorA[i], fLongVectorB[i]); } @@ -269,8 +263,7 @@ DO_INLINE void add_lfvector_lfvectorS(float (*to)[3], float (*fLongVectorA)[3], { unsigned int i = 0; - for (i = 0; i < verts; i++) - { + for (i = 0; i < verts; i++) { VECADDS(to[i], fLongVectorA[i], fLongVectorB[i], bS); } @@ -280,8 +273,7 @@ DO_INLINE void add_lfvectorS_lfvectorS(float (*to)[3], float (*fLongVectorA)[3], { unsigned int i = 0; - for (i = 0; i < verts; i++) - { + for (i = 0; i < verts; i++) { VECADDSS(to[i], fLongVectorA[i], aS, fLongVectorB[i], bS); } } @@ -289,8 +281,7 @@ DO_INLINE void add_lfvectorS_lfvectorS(float (*to)[3], float (*fLongVectorA)[3], DO_INLINE void sub_lfvector_lfvectorS(float (*to)[3], float (*fLongVectorA)[3], float (*fLongVectorB)[3], float bS, unsigned int verts) { unsigned int i = 0; - for (i = 0; i < verts; i++) - { + for (i = 0; i < verts; i++) { VECSUBS(to[i], fLongVectorA[i], fLongVectorB[i], bS); } @@ -300,8 +291,7 @@ DO_INLINE void sub_lfvector_lfvector(float (*to)[3], float (*fLongVectorA)[3], f { unsigned int i = 0; - for (i = 0; i < verts; i++) - { + for (i = 0; i < verts; i++) { sub_v3_v3v3(to[i], fLongVectorA[i], fLongVectorB[i]); } @@ -350,15 +340,12 @@ DO_INLINE void inverse_fmatrix(float to[3][3], float from[3][3]) unsigned int i, j; float d; - if ((d=det_fmatrix(from))==0) - { + if ((d=det_fmatrix(from)) == 0) { printf("can't build inverse"); exit(0); } - for (i=0;i<3;i++) - { - for (j=0;j<3;j++) - { + for (i=0;i<3;i++) { + for (j=0;j<3;j++) { int i1=(i+1)%3; int i2=(i+2)%3; int j1=(j+1)%3; @@ -535,8 +522,7 @@ DO_INLINE fmatrix3x3 *create_bfmatrix(unsigned int verts, unsigned int springs) /* delete big matrix */ DO_INLINE void del_bfmatrix(fmatrix3x3 *matrix) { - if (matrix != NULL) - { + if (matrix != NULL) { MEM_freeN (matrix); } } @@ -554,8 +540,7 @@ DO_INLINE void init_bfmatrix(fmatrix3x3 *matrix, float m3[3][3]) { unsigned int i; - for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) - { + for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) { cp_fmatrix(matrix[i].m, m3); } } @@ -567,12 +552,10 @@ DO_INLINE void initdiag_bfmatrix(fmatrix3x3 *matrix, float m3[3][3]) unsigned int i,j; float tmatrix[3][3] = {{0,0,0},{0,0,0},{0,0,0}}; - for (i = 0; i < matrix[0].vcount; i++) - { + for (i = 0; i < matrix[0].vcount; i++) { cp_fmatrix(matrix[i].m, m3); } - for (j = matrix[0].vcount; j < matrix[0].vcount+matrix[0].scount; j++) - { + for (j = matrix[0].vcount; j < matrix[0].vcount+matrix[0].scount; j++) { cp_fmatrix(matrix[j].m, tmatrix); } } @@ -581,8 +564,7 @@ DO_INLINE void initdiag_bfmatrix(fmatrix3x3 *matrix, float m3[3][3]) DO_INLINE void mul_bfmatrix_S(fmatrix3x3 *matrix, float scalar) { unsigned int i = 0; - for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) - { + for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) { mul_fmatrix_S(matrix[i].m, scalar); } } @@ -601,15 +583,13 @@ DO_INLINE void mul_bfmatrix_lfvector( float (*to)[3], fmatrix3x3 *from, lfVector { #pragma omp section { - for (i = from[0].vcount; i < from[0].vcount+from[0].scount; i++) - { + for (i = from[0].vcount; i < from[0].vcount+from[0].scount; i++) { muladd_fmatrix_fvector(to[from[i].c], from[i].m, fLongVector[from[i].r]); } } #pragma omp section { - for (i = 0; i < from[0].vcount+from[0].scount; i++) - { + for (i = 0; i < from[0].vcount+from[0].scount; i++) { muladd_fmatrix_fvector(temp[from[i].r], from[i].m, fLongVector[from[i].c]); } } @@ -627,8 +607,7 @@ DO_INLINE void mul_prevfmatrix_lfvector( float (*to)[3], fmatrix3x3 *from, lfVec { unsigned int i = 0; - for (i = 0; i < from[0].vcount; i++) - { + for (i = 0; i < from[0].vcount; i++) { mul_fmatrix_fvector(to[from[i].r], from[i].m, fLongVector[from[i].c]); } } @@ -639,8 +618,7 @@ DO_INLINE void add_bfmatrix_bfmatrix( fmatrix3x3 *to, fmatrix3x3 *from, fmatrix unsigned int i = 0; /* process diagonal elements */ - for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) - { + for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) { add_fmatrix_fmatrix(to[i].m, from[i].m, matrix[i].m); } @@ -651,8 +629,7 @@ DO_INLINE void addadd_bfmatrix_bfmatrix( fmatrix3x3 *to, fmatrix3x3 *from, fmat unsigned int i = 0; /* process diagonal elements */ - for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) - { + for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) { addadd_fmatrix_fmatrix(to[i].m, from[i].m, matrix[i].m); } @@ -663,8 +640,7 @@ DO_INLINE void subadd_bfmatrix_bfmatrix( fmatrix3x3 *to, fmatrix3x3 *from, fmat unsigned int i = 0; /* process diagonal elements */ - for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) - { + for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) { subadd_fmatrix_fmatrix(to[i].m, from[i].m, matrix[i].m); } @@ -675,8 +651,7 @@ DO_INLINE void sub_bfmatrix_bfmatrix( fmatrix3x3 *to, fmatrix3x3 *from, fmatrix unsigned int i = 0; /* process diagonal elements */ - for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) - { + for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) { sub_fmatrix_fmatrix(to[i].m, from[i].m, matrix[i].m); } @@ -687,8 +662,7 @@ DO_INLINE void sub_bfmatrix_Smatrix( fmatrix3x3 *to, fmatrix3x3 *from, fmatrix3 unsigned int i = 0; /* process diagonal elements */ - for (i = 0; i < matrix[0].vcount; i++) - { + for (i = 0; i < matrix[0].vcount; i++) { sub_fmatrix_fmatrix(to[matrix[i].c].m, from[matrix[i].c].m, matrix[i].m); } @@ -699,8 +673,7 @@ DO_INLINE void addsub_bfmatrix_bfmatrix( fmatrix3x3 *to, fmatrix3x3 *from, fmat unsigned int i = 0; /* process diagonal elements */ - for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) - { + for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) { addsub_fmatrix_fmatrix(to[i].m, from[i].m, matrix[i].m); } @@ -713,8 +686,7 @@ DO_INLINE void subadd_bfmatrixS_bfmatrixS( fmatrix3x3 *to, fmatrix3x3 *from, flo unsigned int i = 0; /* process diagonal elements */ - for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) - { + for (i = 0; i < matrix[0].vcount+matrix[0].scount; i++) { subadd_fmatrixS_fmatrixS(to[i].m, from[i].m, aS, matrix[i].m, bS); } @@ -772,12 +744,10 @@ int implicit_init (Object *UNUSED(ob), ClothModifierData *clmd) id->dV = create_lfvector(cloth->numverts); id->z = create_lfvector(cloth->numverts); - for (i=0;inumverts;i++) - { + for (i=0;inumverts;i++) { id->A[i].r = id->A[i].c = id->dFdV[i].r = id->dFdV[i].c = id->dFdX[i].r = id->dFdX[i].c = id->P[i].c = id->P[i].r = id->Pinv[i].c = id->Pinv[i].r = id->bigI[i].c = id->bigI[i].r = id->M[i].r = id->M[i].c = i; - if (verts [i].flags & CLOTH_VERT_FLAG_PINNED) - { + if (verts [i].flags & CLOTH_VERT_FLAG_PINNED) { id->S[pinned].pinned = 1; id->S[pinned].c = id->S[pinned].r = i; pinned++; @@ -791,8 +761,7 @@ int implicit_init (Object *UNUSED(ob), ClothModifierData *clmd) // init springs search = cloth->springs; - for (i=0;inumsprings;i++) - { + for (i=0;inumsprings;i++) { spring = search->link; // dFdV_start[i].r = big_I[i].r = big_zero[i].r = @@ -810,8 +779,7 @@ int implicit_init (Object *UNUSED(ob), ClothModifierData *clmd) initdiag_bfmatrix(id->bigI, I); - for (i = 0; i < cloth->numverts; i++) - { + for (i = 0; i < cloth->numverts; i++) { copy_v3_v3(id->X[i], verts[i].x); } @@ -823,12 +791,10 @@ int implicit_free (ClothModifierData *clmd) Cloth *cloth; cloth = (Cloth *)clmd->clothObject; - if (cloth) - { + if (cloth) { id = cloth->implicit; - if (id) - { + if (id) { del_bfmatrix(id->A); del_bfmatrix(id->dFdV); del_bfmatrix(id->dFdX); @@ -886,12 +852,10 @@ DO_INLINE float fbstar_jacobi(float length, float L, float kb, float cb) float tempfb = kb * fb(length, L); float fbstar = cb * (length - L); - if (tempfb < fbstar) - { + if (tempfb < fbstar) { return cb; } - else - { + else { return kb * fbderiv(length, L); } } @@ -900,8 +864,7 @@ DO_INLINE void filter(lfVector *V, fmatrix3x3 *S) { unsigned int i=0; - for (i=0;istarget && conjgrad_loopcount < conjgrad_looplimit) - { + while (s>starget && conjgrad_loopcount < conjgrad_looplimit) { // Mul(q,A,d); // q = A*d; mul_bfmatrix_lfvector(q, lA, d); @@ -979,8 +941,7 @@ DO_INLINE void BuildPPinv(fmatrix3x3 *lA, fmatrix3x3 *P, fmatrix3x3 *Pinv) // Take only the diagonal blocks of A // #pragma omp parallel for private(i) if (lA[0].vcount > CLOTH_OPENMP_LIMIT) - for (i = 0; iflags &= ~CLOTH_SPRING_FLAG_NEEDED; - if (length > ALMOST_ZERO) - { + if (length > ALMOST_ZERO) { /* if (length>L) { @@ -1270,16 +1230,13 @@ DO_INLINE void cloth_calc_spring_force(ClothModifierData *clmd, ClothSpring *s, */ mul_fvector_S(dir, extent, 1.0f/length); } - else - { + else { mul_fvector_S(dir, extent, 0.0f); } // calculate force of structural + shear springs - if ((s->type & CLOTH_SPRING_TYPE_STRUCTURAL) || (s->type & CLOTH_SPRING_TYPE_SHEAR)) - { - if (length > L || no_compress) - { + if ((s->type & CLOTH_SPRING_TYPE_STRUCTURAL) || (s->type & CLOTH_SPRING_TYPE_SHEAR)) { + if (length > L || no_compress) { s->flags |= CLOTH_SPRING_FLAG_NEEDED; k = clmd->sim_parms->structural; @@ -1337,10 +1294,8 @@ DO_INLINE void cloth_calc_spring_force(ClothModifierData *clmd, ClothSpring *s, // dfdx_spring(s->dfdx, dir, length, 0.0, k); // dfdv_damp(s->dfdv, dir, MIN2(1.0, (clmd->sim_parms->goalfrict/100.0))); } - else // calculate force of bending springs - { - if (length < L) - { + else { /* calculate force of bending springs */ + if (length < L) { s->flags |= CLOTH_SPRING_FLAG_NEEDED; k = clmd->sim_parms->bending; @@ -1358,10 +1313,8 @@ DO_INLINE void cloth_calc_spring_force(ClothModifierData *clmd, ClothSpring *s, DO_INLINE void cloth_apply_spring_force(ClothModifierData *UNUSED(clmd), ClothSpring *s, lfVector *lF, lfVector *UNUSED(X), lfVector *UNUSED(V), fmatrix3x3 *dFdV, fmatrix3x3 *dFdX) { - if (s->flags & CLOTH_SPRING_FLAG_NEEDED) - { - if (!(s->type & CLOTH_SPRING_TYPE_BENDING)) - { + if (s->flags & CLOTH_SPRING_FLAG_NEEDED) { + if (!(s->type & CLOTH_SPRING_TYPE_BENDING)) { sub_fmatrix_fmatrix(dFdV[s->ij].m, dFdV[s->ij].m, s->dfdv); sub_fmatrix_fmatrix(dFdV[s->kl].m, dFdV[s->kl].m, s->dfdv); add_fmatrix_fmatrix(dFdV[s->matrix_index].m, dFdV[s->matrix_index].m, s->dfdv); @@ -1486,8 +1439,7 @@ static void hair_velocity_smoothing(ClothModifierData *clmd, lfVector *lF, lfVec } /* gather colliders */ - if (colliders && collfac > 0.0f) for (col = colliders->first; col; col = col->next) - { + if (colliders && collfac > 0.0f) for (col = colliders->first; col; col = col->next) { MVert *loc0 = col->collmd->x; MVert *loc1 = col->collmd->xnew; float vel[3]; @@ -1593,8 +1545,7 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec /* multiply lF with mass matrix * force = mass * acceleration (in this case: gravity) */ - for (i = 0; i < numverts; i++) - { + for (i = 0; i < numverts; i++) { float temp[3]; copy_v3_v3(temp, lF[i]); mul_fmatrix_fvector(lF[i], M[i].m, temp); @@ -1603,8 +1554,7 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec submul_lfvectorS(lF, lV, spring_air, numverts); /* handle external forces like wind */ - if (effectors) - { + if (effectors) { // 0 = force, 1 = normalized force winvec = create_lfvector(cloth->numverts); @@ -1612,14 +1562,12 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec printf("winvec: out of memory in implicit.c\n"); // precalculate wind forces - for (i = 0; i < cloth->numverts; i++) - { + for (i = 0; i < cloth->numverts; i++) { pd_point_from_loc(clmd->scene, (float*)lX[i], (float*)lV[i], i, &epoint); pdDoEffectors(effectors, NULL, clmd->sim_parms->effector_weights, &epoint, winvec[i], NULL); } - for (i = 0; i < cloth->numfaces; i++) - { + for (i = 0; i < cloth->numfaces; i++) { float trinormal[3]={0,0,0}; // normalized triangle normal float triunnormal[3]={0,0,0}; // not-normalized-triangle normal float tmp[3]={0,0,0}; @@ -1650,8 +1598,7 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec VECADDS(lF[mfaces[i].v3], lF[mfaces[i].v3], tmp, factor); // add wind from v4 - if (mfaces[i].v4) - { + if (mfaces[i].v4) { copy_v3_v3(tmp, trinormal); mul_v3_fl(tmp, calculateVertexWindForce(winvec[mfaces[i].v4], triunnormal)); VECADDS(lF[mfaces[i].v4], lF[mfaces[i].v4], tmp, factor); @@ -1692,8 +1639,7 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec // calculate spring forces search = cloth->springs; - while (search) - { + while (search) { // only handle active springs // if (((clmd->sim_parms->flags & CSIMSETT_FLAG_TEARING_ENABLED) && !(springs[i].flags & CSPRING_FLAG_DEACTIVATE))|| !(clmd->sim_parms->flags & CSIMSETT_FLAG_TEARING_ENABLED)) {} cloth_calc_spring_force(clmd, search->link, lF, lX, lV, dFdV, dFdX, time); @@ -1703,8 +1649,7 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec // apply spring forces search = cloth->springs; - while (search) - { + while (search) { // only handle active springs // if (((clmd->sim_parms->flags & CSIMSETT_FLAG_TEARING_ENABLED) && !(springs[i].flags & CSPRING_FLAG_DEACTIVATE))|| !(clmd->sim_parms->flags & CSIMSETT_FLAG_TEARING_ENABLED)) cloth_apply_spring_force(clmd, search->link, lF, lX, lV, dFdV, dFdX); @@ -1836,21 +1781,17 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase Implicit_Data *id = cloth->implicit; int do_extra_solve; - if (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL) /* do goal stuff */ - { - for (i = 0; i < numverts; i++) - { + if (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL) { /* do goal stuff */ + for (i = 0; i < numverts; i++) { // update velocities with constrained velocities from pinned verts - if (verts [i].flags & CLOTH_VERT_FLAG_PINNED) - { + if (verts [i].flags & CLOTH_VERT_FLAG_PINNED) { sub_v3_v3v3(id->V[i], verts[i].xconst, verts[i].xold); // mul_v3_fl(id->V[i], clmd->sim_parms->stepsPerFrame); } } } - while (step < tf) - { + while (step < tf) { // damping velocity for artistic reasons mul_lfvectorS(id->V, id->V, clmd->sim_parms->vel_damping, numverts); @@ -1864,13 +1805,10 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase add_lfvector_lfvectorS(id->Xnew, id->X, id->Vnew, dt, numverts); /* move pinned verts to correct position */ - for (i = 0; i < numverts; i++) - { - if (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL) - { - if (verts [i].flags & CLOTH_VERT_FLAG_PINNED) - { - float tvect[3] = {.0,.0,.0}; + for (i = 0; i < numverts; i++) { + if (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL) { + if (verts[i].flags & CLOTH_VERT_FLAG_PINNED) { + float tvect[3] = {0.0f, 0.0f, 0.0f}; sub_v3_v3v3(tvect, verts[i].xconst, verts[i].xold); mul_fvector_S(tvect, tvect, step+dt); VECADD(tvect, tvect, verts[i].xold); @@ -1881,14 +1819,12 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase copy_v3_v3(verts[i].txold, id->X[i]); } - if (clmd->coll_parms->flags & CLOTH_COLLSETTINGS_FLAG_ENABLED && clmd->clothObject->bvhtree) - { + if (clmd->coll_parms->flags & CLOTH_COLLSETTINGS_FLAG_ENABLED && clmd->clothObject->bvhtree) { // collisions // itstart(); // update verts to current positions - for (i = 0; i < numverts; i++) - { + for (i = 0; i < numverts; i++) { copy_v3_v3(verts[i].tx, id->Xnew[i]); sub_v3_v3v3(verts[i].tv, verts[i].tx, verts[i].txold); @@ -1904,8 +1840,7 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase do_extra_solve = cloth_bvh_objcollision(ob, clmd, step/clmd->sim_parms->timescale, dt/clmd->sim_parms->timescale); // copy corrected positions back to simulation - for (i = 0; i < numverts; i++) - { + for (i = 0; i < numverts; i++) { // correct velocity again, just to be sure we had to change it due to adaptive collisions sub_v3_v3v3(verts[i].tv, verts[i].tx, id->X[i]); } @@ -1913,11 +1848,9 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase //if (do_extra_solve) // cloth_calc_helper_forces(ob, clmd, initial_cos, step/clmd->sim_parms->timescale, dt/clmd->sim_parms->timescale); - for (i = 0; i < numverts; i++) - { + for (i = 0; i < numverts; i++) { - if (do_extra_solve) - { + if (do_extra_solve) { if ((clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL) && (verts [i].flags & CLOTH_VERT_FLAG_PINNED)) continue; @@ -1933,8 +1866,7 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase // if there were collisions, advance the velocity from v_n+1/2 to v_n+1 - if (do_extra_solve) - { + if (do_extra_solve) { // V = Vnew; cp_lfvector(id->V, id->Vnew, numverts); @@ -1944,8 +1876,7 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase simulate_implicit_euler(id->Vnew, id->X, id->V, id->F, id->dFdV, id->dFdX, dt / 2.0f, id->A, id->B, id->dV, id->S, id->z, id->olddV, id->P, id->Pinv, id->M, id->bigI); } } - else - { + else { // X = Xnew; cp_lfvector(id->X, id->Xnew, numverts); } @@ -1959,16 +1890,13 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase step += dt; } - for (i = 0; i < numverts; i++) - { - if ((clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL) && (verts [i].flags & CLOTH_VERT_FLAG_PINNED)) - { + for (i = 0; i < numverts; i++) { + if ((clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_GOAL) && (verts [i].flags & CLOTH_VERT_FLAG_PINNED)) { copy_v3_v3(verts[i].txold, verts[i].xconst); // TODO: test --> should be .x copy_v3_v3(verts[i].x, verts[i].xconst); copy_v3_v3(verts[i].v, id->V[i]); } - else - { + else { copy_v3_v3(verts[i].txold, id->X[i]); copy_v3_v3(verts[i].x, id->X[i]); copy_v3_v3(verts[i].v, id->V[i]); @@ -1987,8 +1915,7 @@ void implicit_set_positions (ClothModifierData *clmd) unsigned int numverts = cloth->numverts, i; Implicit_Data *id = cloth->implicit; - for (i = 0; i < numverts; i++) - { + for (i = 0; i < numverts; i++) { copy_v3_v3(id->X[i], verts[i].x); copy_v3_v3(id->V[i], verts[i].v); } diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 7e756e853b1..07839b10ef1 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -182,7 +182,7 @@ int id_make_local(ID *id, int test) if (id->flag & LIB_INDIRECT) return 0; - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_SCE: return 0; /* not implemented */ case ID_LI: @@ -279,7 +279,7 @@ int id_copy(ID *id, ID **newid, int test) /* conventions: * - make shallow copy, only this ID block * - id.us of the new ID is set to 1 */ - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_SCE: return 0; /* can't be copied from here */ case ID_LI: @@ -368,7 +368,7 @@ int id_unlink(ID *id, int test) Main *mainlib= G.main; ListBase *lb; - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_TXT: if (test) return 1; unlink_text(mainlib, (Text*)id); @@ -425,7 +425,7 @@ int id_single_user(bContext *C, ID *id, PointerRNA *ptr, PropertyRNA *prop) ListBase *which_libbase(Main *mainlib, short type) { - switch( type ) { + switch ( type ) { case ID_SCE: return &(mainlib->scene); case ID_LI: @@ -589,7 +589,7 @@ static ID *alloc_libblock_notest(short type) { ID *id= NULL; - switch( type ) { + switch ( type ) { case ID_SCE: id= MEM_callocN(sizeof(Scene), "scene"); break; @@ -796,7 +796,7 @@ void free_libblock(ListBase *lb, void *idv) BPY_id_release(id); #endif - switch( GS(id->name) ) { /* GetShort from util.h */ + switch ( GS(id->name) ) { /* GetShort from util.h */ case ID_SCE: free_scene((Scene *)id); break; @@ -1010,8 +1010,7 @@ static void IDnames_to_dyn_pupstring(DynStr *pupds, ListBase *lb, ID *link, shor BLI_dynstr_append(pupds, numstr); /* icon */ - switch(GS(id->name)) - { + switch (GS(id->name)) { case ID_MA: /* fall through */ case ID_TE: /* fall through */ case ID_IM: /* fall through */ diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 6d44282c60a..21a91b34e8d 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -493,7 +493,7 @@ short *give_totcolp(Object *ob) /* same as above but for ID's */ Material ***give_matarar_id(ID *id) { - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_ME: return &(((Mesh *)id)->mat); break; @@ -509,7 +509,7 @@ Material ***give_matarar_id(ID *id) short *give_totcolp_id(ID *id) { - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_ME: return &(((Mesh *)id)->totcol); break; @@ -525,7 +525,7 @@ short *give_totcolp_id(ID *id) static void data_delete_material_index_id(ID *id, short index) { - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_ME: mesh_delete_material_index((Mesh *)id, index); break; diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c index c06d796d562..60ccfa2a7cb 100644 --- a/source/blender/blenkernel/intern/mball.c +++ b/source/blender/blenkernel/intern/mball.c @@ -204,7 +204,7 @@ MetaElem *add_metaball_element(MetaBall *mb, const int type) ml->s= 2.0; ml->flag= MB_SCALE_RAD; - switch(type) { + switch (type) { case MB_BALL: ml->type = MB_BALL; ml->expx= ml->expy= ml->expz= 1.0; @@ -853,7 +853,7 @@ void docube(CUBE *cube, PROCESS *p, MetaBall *mb) count++; } if (count>2) { - switch(count) { + switch (count) { case 3: accum_mballfaces(indexar[2], indexar[1], indexar[0], 0); break; @@ -1179,10 +1179,13 @@ int getedge (EDGELIST *table[], k2=t; } q = table[HASH(i1, j1, k1)+HASH(i2, j2, k2)]; - for (; q != NULL; q = q->next) + for (; q != NULL; q = q->next) { if (q->i1 == i1 && q->j1 == j1 && q->k1 == k1 && q->i2 == i2 && q->j2 == j2 && q->k2 == k2) + { return q->vid; + } + } return -1; } diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 59dd7db43da..7509260d503 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -128,18 +128,22 @@ static int customdata_compare(CustomData *c1, CustomData *c2, Mesh *m1, Mesh *m2 CustomDataLayer *l1, *l2; int i, i1=0, i2=0, tot, j; - for (i=0; itotlayer; i++) { - if (ELEM7(c1->layers[i].type, CD_MVERT, CD_MEDGE, CD_MPOLY, - CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT)) + for (i = 0; i < c1->totlayer; i++) { + if (ELEM7(c1->layers[i].type, CD_MVERT, CD_MEDGE, CD_MPOLY, + CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT)) + { i1++; + } } - - for (i=0; itotlayer; i++) { - if (ELEM7(c2->layers[i].type, CD_MVERT, CD_MEDGE, CD_MPOLY, - CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT)) + + for (i = 0; i < c2->totlayer; i++) { + if (ELEM7(c2->layers[i].type, CD_MVERT, CD_MEDGE, CD_MPOLY, + CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT)) + { i2++; + } } - + if (i1 != i2) return MESHCMP_CDLAYERS_MISMATCH; @@ -148,12 +152,16 @@ static int customdata_compare(CustomData *c1, CustomData *c2, Mesh *m1, Mesh *m2 i1 = 0; i2 = 0; for (i=0; i < tot; i++) { while (i1 < c1->totlayer && !ELEM7(l1->type, CD_MVERT, CD_MEDGE, CD_MPOLY, - CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT)) + CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT)) + { i1++, l1++; + } - while (i2 < c2->totlayer && !ELEM7(l2->type, CD_MVERT, CD_MEDGE, CD_MPOLY, - CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT)) + while (i2 < c2->totlayer && !ELEM7(l2->type, CD_MVERT, CD_MEDGE, CD_MPOLY, + CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT)) + { i2++, l2++; + } if (l1->type == CD_MVERT) { MVert *v1 = l1->data; @@ -3054,10 +3062,13 @@ void mesh_flush_hidden_from_verts(const MVert *mvert, for (i = 0; i < totedge; i++) { MEdge *e = &medge[i]; if (mvert[e->v1].flag & ME_HIDE || - mvert[e->v2].flag & ME_HIDE) + mvert[e->v2].flag & ME_HIDE) + { e->flag |= ME_HIDE; - else + } + else { e->flag &= ~ME_HIDE; + } } for (i = 0; i < totpoly; i++) { MPoly *p = &mpoly[i]; diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c index 9a640bcb8eb..f23578e07d7 100644 --- a/source/blender/blenkernel/intern/movieclip.c +++ b/source/blender/blenkernel/intern/movieclip.c @@ -517,7 +517,7 @@ static void real_ibuf_size(MovieClip *clip, MovieClipUser *user, ImBuf *ibuf, in *height = ibuf->y; if (clip->flag & MCLIP_USE_PROXY) { - switch(user->render_size) { + switch (user->render_size) { case MCLIP_PROXY_RENDER_SIZE_25: (*width) *= 4; (*height) *= 4; diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 7580f2eee4d..e2142c393a5 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -1017,7 +1017,7 @@ static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm column_vectors_to_mat3(mat, tx, ty, no); - switch(op) { + switch (op) { case APPLY_DISPLACEMENTS: /* Convert displacement to object space * and add to grid points */ diff --git a/source/blender/blenkernel/intern/navmesh_conversion.c b/source/blender/blenkernel/intern/navmesh_conversion.c index 34e0be1de92..23d2f50c3f7 100644 --- a/source/blender/blenkernel/intern/navmesh_conversion.c +++ b/source/blender/blenkernel/intern/navmesh_conversion.c @@ -57,8 +57,7 @@ BLI_INLINE int left(const float* a, const float* b, const float* c) int polyNumVerts(const unsigned short* p, const int vertsPerPoly) { int i, nv = 0; - for (i=0; igetNumVerts(dm); - if (nverts>=0xffff) - { + if (nverts>=0xffff) { printf("Converting navmesh: Error! Too many vertices. Max number of vertices %d\n", 0xffff); return 0; } @@ -128,8 +125,7 @@ int buildRawVertIndicesData(DerivedMesh* dm, int *nverts_r, float **verts_r, dm->getVertCos(dm, (float(*)[3])verts); //flip coordinates - for (vi=0; vigetNumTessFaces(dm); faces = dm->getTessFaceArray(dm); ntris = nfaces; - for (fi=0; fiv4) ntris++; @@ -149,15 +144,13 @@ int buildRawVertIndicesData(DerivedMesh* dm, int *nverts_r, float **verts_r, tris = MEM_callocN(sizeof(unsigned short)*3*ntris, "buildRawVertIndicesData tris"); tri = tris; triIdx = 0; - for (fi=0; fiv1; tri[3*triIdx+1] = (unsigned short) face->v3; tri[3*triIdx+2] = (unsigned short) face->v2; trisToFacesMap[triIdx++]=fi; - if (face->v4) - { + if (face->v4) { tri[3*triIdx+0] = (unsigned short) face->v1; tri[3*triIdx+1] = (unsigned short) face->v4; tri[3*triIdx+2] = (unsigned short) face->v3; @@ -187,8 +180,7 @@ int buildPolygonsByDetailedMeshes(const int vertsPerPoly, const int npolys, unsigned short* newPoly = MEM_callocN(sizeof(unsigned short)*capacity, "buildPolygonsByDetailedMeshes newPoly"); memset(newPoly, 0xff, sizeof(unsigned short)*capacity); - for (polyidx=0; polyidx0) - { + for (i=0; i< ntris; i++) { + if (recastData[trisToFacesMap[trisMapping[i]]]>0) { validTriStart = i; break; } } - if (validTriStart<0) - { + if (validTriStart<0) { printf("Converting navmesh: Error! No valid polygons in mesh\n"); MEM_freeN(trisMapping); return 0; @@ -396,8 +367,7 @@ int buildNavMeshData(const int nverts, const float* verts, //and reserve memory for adjacency info dtris = MEM_callocN(sizeof(unsigned short)*3*2*ndtris, "buildNavMeshData dtris"); memset(dtris, 0xffff, sizeof(unsigned short)*3*2*ndtris); - for (i=0; iend = (float)ceil((double)info.length * FPS); } - else + else #endif { strip->end = 10.0f; @@ -373,7 +373,7 @@ NlaStrip *add_nla_soundstrip (Scene *scene, Speaker *speaker) strip->extendmode = NLASTRIP_EXTEND_NOTHING; /* nothing to extend... */ /* strip should be referenced as-is */ - strip->scale= 1.0f; + strip->scale = 1.0f; strip->repeat = 1.0f; /* return this strip */ diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index bc9411b7e02..6d3cce6ccfc 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1483,7 +1483,7 @@ void object_rot_to_mat3(Object *ob, float mat[][3]) void object_mat3_to_rot(Object *ob, float mat[][3], short use_compat) { - switch(ob->rotmode) { + switch (ob->rotmode) { case ROT_MODE_QUAT: { float dquat[4]; @@ -2025,7 +2025,7 @@ static void solve_parenting (Scene *scene, Object *ob, Object *par, float obmat[ if (ob->partype & PARSLOW) copy_m4_m4(slowmat, obmat); - switch(ob->partype & PARTYPE) { + switch (ob->partype & PARTYPE) { case PAROBJECT: ok= 0; if (par->type==OB_CURVE) { @@ -2260,7 +2260,7 @@ void minmax_object(Object *ob, float min[3], float max[3]) int a; short change= FALSE; - switch(ob->type) { + switch (ob->type) { case OB_CURVE: case OB_FONT: case OB_SURF: @@ -2568,7 +2568,7 @@ void object_handle_update(Scene *scene, Object *ob) } /* includes all keys and modifiers */ - switch(ob->type) { + switch (ob->type) { case OB_MESH: { #if 0 // XXX, comment for 2.56a release, background wont set 'scene->customdata_mask' @@ -2784,8 +2784,7 @@ int ray_hit_boundbox(struct BoundBox *bb, float ray_start[3], float ray_normal[3 int result = 0; int i; - for (i = 0; i < 12 && result == 0; i++) - { + for (i = 0; i < 12 && result == 0; i++) { float lambda; int v1, v2, v3; v1 = triangle_indexes[i][0]; @@ -2812,8 +2811,7 @@ int object_insert_ptcache(Object *ob) BLI_sortlist(&ob->pc_ids, pc_cmp); - for (link=ob->pc_ids.first, i = 0; link; link=link->next, i++) - { + for (link=ob->pc_ids.first, i = 0; link; link=link->next, i++) { int index = GET_INT_FROM_POINTER(link->data); if (i < index) diff --git a/source/blender/blenkernel/intern/ocean.c b/source/blender/blenkernel/intern/ocean.c index 907de7888cb..5ba1b3d86c3 100644 --- a/source/blender/blenkernel/intern/ocean.c +++ b/source/blender/blenkernel/intern/ocean.c @@ -196,15 +196,13 @@ static float Ph(struct Ocean* o, float kx,float kz ) float tmp; float k2 = kx*kx + kz*kz; - if (k2 == 0.0f) - { + if (k2 == 0.0f) { return 0.0f; // no DC component } // damp out the waves going in the direction opposite the wind tmp = (o->_wx * kx + o->_wz * kz)/sqrtf(k2); - if (tmp < 0) - { + if (tmp < 0) { tmp *= o->_damp_reflections; } @@ -421,18 +419,15 @@ void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u frac_z) { - if (oc->_do_disp_y) - { + if (oc->_do_disp_y) { ocr->disp[1] = INTERP(oc->_disp_y); } - if (oc->_do_normals) - { + if (oc->_do_normals) { ocr->normal[0] = INTERP(oc->_N_x); ocr->normal[1] = oc->_N_y/*INTERP(oc->_N_y) (MEM01)*/; ocr->normal[2] = INTERP(oc->_N_z); } - if (oc->_do_chop) - { + if (oc->_do_chop) { ocr->disp[0] = INTERP(oc->_disp_x); ocr->disp[2] = INTERP(oc->_disp_z); } @@ -441,8 +436,7 @@ void BKE_ocean_eval_uv_catrom(struct Ocean *oc, struct OceanResult *ocr, float u ocr->disp[2] = 0.0; } - if (oc->_do_jacobian) - { + if (oc->_do_jacobian) { compute_eigenstuff(ocr, INTERP(oc->_Jxx),INTERP(oc->_Jzz),INTERP(oc->_Jxz)); } } @@ -474,8 +468,7 @@ void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i,int j) ocr->disp[1] = oc->_do_disp_y ? oc->_disp_y[i*oc->_N+j] : 0.0f; - if (oc->_do_chop) - { + if (oc->_do_chop) { ocr->disp[0] = oc->_disp_x[i*oc->_N+j]; ocr->disp[2] = oc->_disp_z[i*oc->_N+j]; } @@ -484,8 +477,7 @@ void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i,int j) ocr->disp[2] = 0.0f; } - if (oc->_do_normals) - { + if (oc->_do_normals) { ocr->normal[0] = oc->_N_x[i*oc->_N+j]; ocr->normal[1] = oc->_N_y/*oc->_N_y[i*oc->_N+j] (MEM01)*/; ocr->normal[2] = oc->_N_z[i*oc->_N+j]; @@ -493,8 +485,7 @@ void BKE_ocean_eval_ij(struct Ocean *oc, struct OceanResult *ocr, int i,int j) normalize_v3(ocr->normal); } - if (oc->_do_jacobian) - { + if (oc->_do_jacobian) { compute_eigenstuff(ocr, oc->_Jxx[i*oc->_N+j],oc->_Jzz[i*oc->_N+j],oc->_Jxz[i*oc->_N+j]); } @@ -511,12 +502,10 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount // compute a new htilda #pragma omp parallel for private(i, j) - for (i = 0 ; i < o->_M ; ++i) - { + for (i = 0 ; i < o->_M ; ++i) { // note the <= _N/2 here, see the fftw doco about // the mechanics of the complex->real fft storage - for ( j = 0 ; j <= o->_N / 2 ; ++j) - { + for ( j = 0 ; j <= o->_N / 2 ; ++j) { fftw_complex exp_param1; fftw_complex exp_param2; fftw_complex conj_param; @@ -541,8 +530,7 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount #pragma omp section { - if (o->_do_disp_y) - { + if (o->_do_disp_y) { // y displacement fftw_execute(o->_disp_y_plan); } @@ -550,13 +538,10 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount #pragma omp section { - if (o->_do_chop) - { + if (o->_do_chop) { // x displacement - for ( i = 0 ; i < o->_M ; ++i) - { - for ( j = 0 ; j <= o->_N / 2 ; ++j) - { + for ( i = 0 ; i < o->_M ; ++i) { + for ( j = 0 ; j <= o->_N / 2 ; ++j) { fftw_complex mul_param; fftw_complex minus_i; @@ -575,13 +560,10 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount #pragma omp section { - if (o->_do_chop) - { + if (o->_do_chop) { // z displacement - for ( i = 0 ; i < o->_M ; ++i) - { - for ( j = 0 ; j <= o->_N / 2 ; ++j) - { + for ( i = 0 ; i < o->_M ; ++i) { + for ( j = 0 ; j <= o->_N / 2 ; ++j) { fftw_complex mul_param; fftw_complex minus_i; @@ -600,13 +582,10 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount #pragma omp section { - if (o->_do_jacobian) - { + if (o->_do_jacobian) { // Jxx - for ( i = 0 ; i < o->_M ; ++i) - { - for ( j = 0 ; j <= o->_N / 2 ; ++j) - { + for ( i = 0 ; i < o->_M ; ++i) { + for ( j = 0 ; j <= o->_N / 2 ; ++j) { fftw_complex mul_param; //init_complex(mul_param, -scale, 0); @@ -620,10 +599,8 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount } fftw_execute(o->_Jxx_plan); - for ( i = 0 ; i < o->_M ; ++i) - { - for ( j = 0 ; j < o->_N ; ++j) - { + for ( i = 0 ; i < o->_M ; ++i) { + for ( j = 0 ; j < o->_N ; ++j) { o->_Jxx[i*o->_N+j] += 1.0; } } @@ -632,13 +609,10 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount #pragma omp section { - if (o->_do_jacobian) - { + if (o->_do_jacobian) { // Jzz - for ( i = 0 ; i < o->_M ; ++i) - { - for ( j = 0 ; j <= o->_N / 2 ; ++j) - { + for ( i = 0 ; i < o->_M ; ++i) { + for ( j = 0 ; j <= o->_N / 2 ; ++j) { fftw_complex mul_param; //init_complex(mul_param, -scale, 0); @@ -651,10 +625,8 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount } } fftw_execute(o->_Jzz_plan); - for ( i = 0 ; i < o->_M ; ++i) - { - for ( j = 0 ; j < o->_N ; ++j) - { + for ( i = 0 ; i < o->_M ; ++i) { + for ( j = 0 ; j < o->_N ; ++j) { o->_Jzz[i*o->_N+j] += 1.0; } } @@ -663,13 +635,10 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount #pragma omp section { - if (o->_do_jacobian) - { + if (o->_do_jacobian) { // Jxz - for ( i = 0 ; i < o->_M ; ++i) - { - for ( j = 0 ; j <= o->_N / 2 ; ++j) - { + for ( i = 0 ; i < o->_M ; ++i) { + for ( j = 0 ; j <= o->_N / 2 ; ++j) { fftw_complex mul_param; //init_complex(mul_param, -scale, 0); @@ -688,12 +657,9 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount #pragma omp section { // fft normals - if (o->_do_normals) - { - for ( i = 0 ; i < o->_M ; ++i) - { - for ( j = 0 ; j <= o->_N / 2 ; ++j) - { + if (o->_do_normals) { + for ( i = 0 ; i < o->_M ; ++i) { + for ( j = 0 ; j <= o->_N / 2 ; ++j) { fftw_complex mul_param; init_complex(mul_param, 0.0, -1.0); @@ -709,12 +675,9 @@ void BKE_simulate_ocean(struct Ocean *o, float t, float scale, float chop_amount #pragma omp section { - if (o->_do_normals) - { - for ( i = 0 ; i < o->_M ; ++i) - { - for ( j = 0 ; j <= o->_N / 2 ; ++j) - { + if (o->_do_normals) { + for ( i = 0 ; i < o->_M ; ++i) { + for ( j = 0 ; j <= o->_N / 2 ; ++j) { fftw_complex mul_param; init_complex(mul_param, 0.0, -1.0); @@ -757,12 +720,9 @@ static void set_height_normalize_factor(struct Ocean *oc) BLI_rw_mutex_lock(&oc->oceanmutex, THREAD_LOCK_READ); - for (i = 0; i < oc->_M; ++i) - { - for (j = 0; j < oc->_N; ++j) - { - if ( max_h < fabsf(oc->_disp_y[i*oc->_N+j])) - { + for (i = 0; i < oc->_M; ++i) { + for (j = 0; j < oc->_N; ++j) { + if ( max_h < fabsf(oc->_disp_y[i*oc->_N+j])) { max_h = fabsf(oc->_disp_y[i*oc->_N+j]); } } @@ -851,10 +811,8 @@ void BKE_init_ocean(struct Ocean* o, int M,int N, float Lx, float Lz, float V, f /*srand(seed);*/ BLI_srand(seed); - for (i = 0 ; i < o->_M ; ++i) - { - for (j = 0 ; j < o->_N ; ++j) - { + for (i = 0 ; i < o->_M ; ++i) { + for (j = 0 ; j < o->_N ; ++j) { float r1 = gaussRand(); float r2 = gaussRand(); @@ -921,14 +879,12 @@ void BKE_free_ocean_data(struct Ocean *oc) BLI_rw_mutex_lock(&oc->oceanmutex, THREAD_LOCK_WRITE); - if (oc->_do_disp_y) - { + if (oc->_do_disp_y) { fftw_destroy_plan(oc->_disp_y_plan); MEM_freeN(oc->_disp_y); } - if (oc->_do_normals) - { + if (oc->_do_normals) { MEM_freeN(oc->_fft_in_nx); MEM_freeN(oc->_fft_in_nz); fftw_destroy_plan(oc->_N_x_plan); @@ -938,8 +894,7 @@ void BKE_free_ocean_data(struct Ocean *oc) MEM_freeN(oc->_N_z); } - if (oc->_do_chop) - { + if (oc->_do_chop) { MEM_freeN(oc->_fft_in_x); MEM_freeN(oc->_fft_in_z); fftw_destroy_plan(oc->_disp_x_plan); @@ -948,8 +903,7 @@ void BKE_free_ocean_data(struct Ocean *oc) MEM_freeN(oc->_disp_z); } - if (oc->_do_jacobian) - { + if (oc->_do_jacobian) { MEM_freeN(oc->_fft_in_jxx); MEM_freeN(oc->_fft_in_jzz); MEM_freeN(oc->_fft_in_jxz); @@ -1002,7 +956,7 @@ static void cache_filename(char *string, const char *path, const char *relbase, char cachepath[FILE_MAX]; const char *fname; - switch(type) { + switch (type) { case CACHE_TYPE_FOAM: fname= "foam_"; break; @@ -1043,8 +997,7 @@ void BKE_free_ocean_cache(struct OceanCache *och) if (!och) return; if (och->ibufs_disp) { - for (i=och->start, f=0; i<=och->end; i++, f++) - { + for (i=och->start, f=0; i<=och->end; i++, f++) { if (och->ibufs_disp[f]) { IMB_freeImBuf(och->ibufs_disp[f]); } @@ -1053,8 +1006,7 @@ void BKE_free_ocean_cache(struct OceanCache *och) } if (och->ibufs_foam) { - for (i=och->start, f=0; i<=och->end; i++, f++) - { + for (i=och->start, f=0; i<=och->end; i++, f++) { if (och->ibufs_foam[f]) { IMB_freeImBuf(och->ibufs_foam[f]); } @@ -1063,8 +1015,7 @@ void BKE_free_ocean_cache(struct OceanCache *och) } if (och->ibufs_norm) { - for (i=och->start, f=0; i<=och->end; i++, f++) - { + for (i=och->start, f=0; i<=och->end; i++, f++) { if (och->ibufs_norm[f]) { IMB_freeImBuf(och->ibufs_norm[f]); } diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c index b55033b8493..e0c61fbcc90 100644 --- a/source/blender/blenkernel/intern/packedFile.c +++ b/source/blender/blenkernel/intern/packedFile.c @@ -72,7 +72,7 @@ int seekPackedFile(PackedFile *pf, int offset, int whence) if (pf) { oldseek = pf->seek; - switch(whence) { + switch (whence) { case SEEK_CUR: seek = oldseek + offset; break; diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c index 27f5f7d9eb1..f417f9b79fb 100644 --- a/source/blender/blenkernel/intern/paint.c +++ b/source/blender/blenkernel/intern/paint.c @@ -59,7 +59,7 @@ Paint *paint_get_active(Scene *sce) ToolSettings *ts = sce->toolsettings; if (sce->basact && sce->basact->object) { - switch(sce->basact->object->mode) { + switch (sce->basact->object->mode) { case OB_MODE_SCULPT: return &ts->sculpt->paint; case OB_MODE_VERTEX_PAINT: diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index a154a1f8926..febe4277010 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -1572,7 +1572,7 @@ static float psys_interpolate_value_from_verts(DerivedMesh *dm, short from, int if (values==0 || index==-1) return 0.0; - switch(from) { + switch (from) { case PART_FROM_VERT: return values[index]; case PART_FROM_FACE: @@ -1936,7 +1936,7 @@ static void do_kink(ParticleKey *state, ParticleKey *par, float *par_rot, float copy_v3_v3(result, state->co); sub_v3_v3v3(par_vec, par->co, state->co); - switch(type) { + switch (type) { case PART_KINK_CURL: { negate_v3(par_vec); @@ -2846,7 +2846,7 @@ static void cache_key_incremental_rotation(ParticleCacheKey *key0, ParticleCache { float cosangle, angle, tangent[3], normal[3], q[4]; - switch(i) { + switch (i) { case 0: /* start from second key */ break; @@ -3778,7 +3778,7 @@ static void get_cpa_texture(DerivedMesh *dm, ParticleSystem *psys, ParticleSetti if (ELEM(texco, TEXCO_UV, TEXCO_ORCO) && (ELEM(part->from, PART_FROM_FACE, PART_FROM_VOLUME) == 0 || part->distr == PART_DISTR_GRID)) texco = TEXCO_GLOB; - switch(texco) { + switch (texco) { case TEXCO_GLOB: copy_v3_v3(texvec, par->state.co); break; @@ -3846,7 +3846,7 @@ void psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTex if (texco == TEXCO_UV && (ELEM(part->from, PART_FROM_FACE, PART_FROM_VOLUME) == 0 || part->distr == PART_DISTR_GRID)) texco = TEXCO_GLOB; - switch(texco) { + switch (texco) { case TEXCO_GLOB: copy_v3_v3(texvec, pa->state.co); break; diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index 4ce24953c89..d3644657de7 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -787,7 +787,7 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch pa->num = i = ctx->index[p]; mface = dm->getTessFaceData(dm,i,CD_MFACE); - switch(distr) { + switch (distr) { case PART_DISTR_JIT: if (ctx->jitlevel == 1) { if (mface->v4) @@ -855,13 +855,15 @@ static void distribute_threads_exec(ParticleThread *thread, ParticleData *pa, Ch } if (intersect==0) pa->foffset=0.0; - else switch(distr) { - case PART_DISTR_JIT: - pa->foffset*= ctx->jit[p%(2*ctx->jitlevel)]; - break; - case PART_DISTR_RAND: - pa->foffset*=BLI_frand(); - break; + else { + switch (distr) { + case PART_DISTR_JIT: + pa->foffset *= ctx->jit[p % (2 * ctx->jitlevel)]; + break; + case PART_DISTR_RAND: + pa->foffset *= BLI_frand(); + break; + } } } } @@ -1575,7 +1577,7 @@ static void initialize_all_particles(ParticleSimulationData *sim) static void get_angular_velocity_vector(short avemode, ParticleKey *state, float *vec) { - switch(avemode) { + switch (avemode) { case PART_AVE_VELOCITY: copy_v3_v3(vec, state->vel); break; @@ -1779,7 +1781,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P if (part->rotmode) { /* create vector into which rotation is aligned */ - switch(part->rotmode) { + switch (part->rotmode) { case PART_ROT_NOR: copy_v3_v3(rot_vec, nor); break; @@ -2141,7 +2143,7 @@ static void integrate_particle(ParticleSettings *part, ParticleData *pa, float d if (pa->prev_state.time < 0.f && integrator == PART_INT_VERLET) integrator = PART_INT_EULER; - switch(integrator) { + switch (integrator) { case PART_INT_EULER: steps=1; break; @@ -2175,7 +2177,7 @@ static void integrate_particle(ParticleSettings *part, ParticleData *pa, float d /* calculate next state */ add_v3_v3(states[i].vel, impulse); - switch(integrator) { + switch (integrator) { case PART_INT_EULER: madd_v3_v3v3fl(pa->state.co, states->co, states->vel, dtime); madd_v3_v3v3fl(pa->state.vel, states->vel, acceleration, dtime); @@ -2193,7 +2195,7 @@ static void integrate_particle(ParticleSettings *part, ParticleData *pa, float d } break; case PART_INT_RK4: - switch(i) { + switch (i) { case 0: copy_v3_v3(dx[0], states->vel); mul_v3_fl(dx[0], dtime); @@ -2859,7 +2861,7 @@ static float collision_point_distance_with_normal(float p[3], ParticleCollisionE if (fac >= 0.f) collision_interpolate_element(pce, 0.f, fac, col); - switch(pce->tot) { + switch (pce->tot) { case 1: { sub_v3_v3v3(nor, p, pce->x0); @@ -2884,7 +2886,7 @@ static void collision_point_on_surface(float p[3], ParticleCollisionElement *pce { collision_interpolate_element(pce, 0.f, fac, col); - switch(pce->tot) { + switch (pce->tot) { case 1: { sub_v3_v3v3(co, p, pce->x0); @@ -3833,7 +3835,7 @@ static void dynamics_step(ParticleSimulationData *sim, float cfra) sim->colliders = get_collider_cache(sim->scene, sim->ob, NULL); /* initialize physics type specific stuff */ - switch(part->phystype) { + switch (part->phystype) { case PART_PHYS_BOIDS: { ParticleTarget *pt = psys->targets.first; @@ -3908,7 +3910,7 @@ static void dynamics_step(ParticleSimulationData *sim, float cfra) pa->state.time = -1.f; } - switch(part->phystype) { + switch (part->phystype) { case PART_PHYS_NEWTON: { LOOP_DYNAMIC_PARTICLES { @@ -4499,7 +4501,7 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys) /* setup necessary physics type dependent additional data if it doesn't yet exist */ psys_prepare_physics(&sim); - switch(part->type) { + switch (part->type) { case PART_HAIR: { /* nothing to do so bail out early */ @@ -4551,7 +4553,7 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys) } default: { - switch(part->phystype) { + switch (part->phystype) { case PART_PHYS_NO: case PART_PHYS_KEYED: { diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 2812592c69a..39293084dc0 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -433,7 +433,7 @@ static void ptcache_particle_extra_read(void *psys_v, PTCacheMem *pm, float UNUS PTCacheExtra *extra = pm->extradata.first; for (; extra; extra=extra->next) { - switch(extra->type) { + switch (extra->type) { case BPHYS_EXTRA_FLUID_SPRINGS: { if (psys->fluid_springs) @@ -690,14 +690,20 @@ static int ptcache_dynamicpaint_write(PTCacheFile *pf, void *dp_v) /* cache type */ ptcache_file_write(pf, &surface->type, 1, sizeof(int)); - if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) - in_len = sizeof(PaintPoint)*total_points; + if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) { + in_len = sizeof(PaintPoint) * total_points; + } else if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE || - surface->type == MOD_DPAINT_SURFACE_T_WEIGHT) - in_len = sizeof(float)*total_points; - else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE) - in_len = sizeof(PaintWavePoint)*total_points; - else return 0; + surface->type == MOD_DPAINT_SURFACE_T_WEIGHT) + { + in_len = sizeof(float) * total_points; + } + else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE) { + in_len = sizeof(PaintWavePoint) * total_points; + } + else { + return 0; + } out = (unsigned char *)MEM_callocN(LZO_OUT_LEN(in_len), "pointcache_lzo_buffer"); @@ -727,14 +733,20 @@ static int ptcache_dynamicpaint_read(PTCacheFile *pf, void *dp_v) return 0; /* read surface data */ - if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) + if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) { data_len = sizeof(PaintPoint); + } else if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE || - surface->type == MOD_DPAINT_SURFACE_T_WEIGHT) + surface->type == MOD_DPAINT_SURFACE_T_WEIGHT) + { data_len = sizeof(float); - else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE) + } + else if (surface->type == MOD_DPAINT_SURFACE_T_WAVE) { data_len = sizeof(PaintWavePoint); - else return 0; + } + else { + return 0; + } ptcache_file_compressed_read(pf, (unsigned char*)surface->data->type_data, data_len*surface->data->total_points); @@ -989,8 +1001,7 @@ void BKE_ptcache_ids_from_object(ListBase *lb, Object *ob, Scene *scene, int dup } else if (md->type == eModifierType_Smoke) { SmokeModifierData *smd = (SmokeModifierData *)md; - if (smd->type & MOD_SMOKE_TYPE_DOMAIN) - { + if (smd->type & MOD_SMOKE_TYPE_DOMAIN) { pid= MEM_callocN(sizeof(PTCacheID), "PTCacheID"); BKE_ptcache_id_from_smoke(pid, ob, (SmokeModifierData*)md); BLI_addtail(lb, pid); @@ -998,8 +1009,7 @@ void BKE_ptcache_ids_from_object(ListBase *lb, Object *ob, Scene *scene, int dup } else if (md->type == eModifierType_DynamicPaint) { DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md; - if (pmd->canvas) - { + if (pmd->canvas) { DynamicPaintSurface *surface = pmd->canvas->surfaces.first; for (; surface; surface=surface->next) { @@ -1205,8 +1215,7 @@ static int ptcache_file_compressed_read(PTCacheFile *pf, unsigned char *result, r = lzo1x_decompress_safe(in, (lzo_uint)in_len, result, (lzo_uint *)&out_len, NULL); #endif #ifdef WITH_LZMA - if (compressed == 2) - { + if (compressed == 2) { size_t sizeOfIt; size_t leni = in_len, leno = len; ptcache_file_read(pf, &size, 1, sizeof(unsigned int)); @@ -1270,8 +1279,7 @@ static int ptcache_file_compressed_write(PTCacheFile *pf, unsigned char *in, uns else ptcache_file_write(pf, in, in_len, sizeof(unsigned char)); - if (compressed == 2) - { + if (compressed == 2) { unsigned int size = sizeOfIt; ptcache_file_write(pf, &sizeOfIt, 1, sizeof(unsigned int)); ptcache_file_write(pf, props, size, sizeof(unsigned char)); @@ -2505,16 +2513,14 @@ int BKE_ptcache_object_reset(Scene *scene, Object *ob, int mode) } if (md->type == eModifierType_Smoke) { SmokeModifierData *smd = (SmokeModifierData *)md; - if (smd->type & MOD_SMOKE_TYPE_DOMAIN) - { + if (smd->type & MOD_SMOKE_TYPE_DOMAIN) { BKE_ptcache_id_from_smoke(&pid, ob, (SmokeModifierData*)md); reset |= BKE_ptcache_id_reset(scene, &pid, mode); } } if (md->type == eModifierType_DynamicPaint) { DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md; - if (pmd->canvas) - { + if (pmd->canvas) { DynamicPaintSurface *surface = pmd->canvas->surfaces.first; for (; surface; surface=surface->next) { @@ -2813,8 +2819,7 @@ void BKE_ptcache_bake(PTCacheBaker* baker) PTCacheID *pid2; BKE_ptcache_ids_from_object(&pidlist2, pid->ob, scene, MAX_DUPLI_RECUR); for (pid2=pidlist2.first; pid2; pid2=pid2->next) { - if (pid2->type == PTCACHE_TYPE_SMOKE_DOMAIN) - { + if (pid2->type == PTCACHE_TYPE_SMOKE_DOMAIN) { if (pid2->cache && !(pid2->cache->flag & PTCACHE_BAKED)) { if (bake || pid2->cache->flag & PTCACHE_REDO_NEEDED) BKE_ptcache_id_clear(pid2, PTCACHE_CLEAR_ALL, 0); @@ -3246,8 +3251,7 @@ void BKE_ptcache_update_info(PTCacheID *pid) } if (cache->flag & PTCACHE_DISK_CACHE) { - if (pid->type == PTCACHE_TYPE_SMOKE_DOMAIN) - { + if (pid->type == PTCACHE_TYPE_SMOKE_DOMAIN) { int totpoint = pid->totpoint(pid->calldata, 0); if (cache->totpoint > totpoint) diff --git a/source/blender/blenkernel/intern/property.c b/source/blender/blenkernel/intern/property.c index 066de61575d..e7247be7f51 100644 --- a/source/blender/blenkernel/intern/property.c +++ b/source/blender/blenkernel/intern/property.c @@ -99,7 +99,7 @@ void init_property(bProperty *prop) prop->data= 0; - switch(prop->type) { + switch (prop->type) { case GPROP_BOOL: case GPROP_INT: case GPROP_FLOAT: @@ -206,7 +206,7 @@ int compare_property(bProperty *prop, const char *str) // extern int Gdfra; /* sector.c */ float fvalue, ftest; - switch(prop->type) { + switch (prop->type) { case GPROP_BOOL: if (BLI_strcasecmp(str, "true")==0) { if (prop->data==1) return 0; @@ -242,7 +242,7 @@ void set_property(bProperty *prop, const char *str) { // extern int Gdfra; /* sector.c */ - switch(prop->type) { + switch (prop->type) { case GPROP_BOOL: if (BLI_strcasecmp(str, "true")==0) prop->data= 1; else if (BLI_strcasecmp(str, "false")==0) prop->data= 0; @@ -266,7 +266,7 @@ void add_property(bProperty *prop, const char *str) { // extern int Gdfra; /* sector.c */ - switch(prop->type) { + switch (prop->type) { case GPROP_BOOL: case GPROP_INT: prop->data+= atoi(str); @@ -288,7 +288,7 @@ void set_property_valstr(bProperty *prop, char *str) if (str == NULL) return; - switch(prop->type) { + switch (prop->type) { case GPROP_BOOL: case GPROP_INT: sprintf(str, "%d", prop->data); diff --git a/source/blender/blenkernel/intern/report.c b/source/blender/blenkernel/intern/report.c index b3e288dfc74..a7df6b10f06 100644 --- a/source/blender/blenkernel/intern/report.c +++ b/source/blender/blenkernel/intern/report.c @@ -43,7 +43,7 @@ static const char *report_type_str(int type) { - switch(type) { + switch (type) { case RPT_DEBUG: return "Debug"; case RPT_INFO: return "Info"; case RPT_OPERATOR: return "Operator"; diff --git a/source/blender/blenkernel/intern/sca.c b/source/blender/blenkernel/intern/sca.c index 8123cbf3f0b..b5bb6b76c61 100644 --- a/source/blender/blenkernel/intern/sca.c +++ b/source/blender/blenkernel/intern/sca.c @@ -110,7 +110,7 @@ void init_sensor(bSensor *sens) sens->data= NULL; sens->pulse = 0; - switch(sens->type) { + switch (sens->type) { case SENS_ALWAYS: sens->pulse = 0; break; @@ -272,7 +272,7 @@ void init_controller(bController *cont) if (cont->data) MEM_freeN(cont->data); cont->data= NULL; - switch(cont->type) { + switch (cont->type) { case CONT_EXPRESSION: cont->data= MEM_callocN(sizeof(bExpressionCont), "expcont"); break; @@ -400,7 +400,7 @@ void init_actuator(bActuator *act) if (act->data) MEM_freeN(act->data); act->data= NULL; - switch(act->type) { + switch (act->type) { case ACT_ACTION: case ACT_SHAPEACTION: act->data= MEM_callocN(sizeof(bActionActuator), "actionact"); @@ -647,7 +647,7 @@ void sca_remove_ob_poin(Object *obt, Object *ob) sens= obt->sensors.first; while (sens) { - switch(sens->type) { + switch (sens->type) { case SENS_MESSAGE: ms= sens->data; if (ms->fromObject==ob) ms->fromObject= NULL; @@ -657,7 +657,7 @@ void sca_remove_ob_poin(Object *obt, Object *ob) act= obt->actuators.first; while (act) { - switch(act->type) { + switch (act->type) { case ACT_CAMERA: ca= act->data; if (ca->ob==ob) ca->ob= NULL; diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c index 8015e53e4c9..d3eade834e6 100644 --- a/source/blender/blenkernel/intern/seqeffects.c +++ b/source/blender/blenkernel/intern/seqeffects.c @@ -2112,7 +2112,7 @@ static void transform_image(int x, int y, struct ImBuf *ibuf1, struct ImBuf *out yt += (yo / 2.0f); //interpolate - switch(interpolation) { + switch (interpolation) { case 0: neareast_interpolation(ibuf1,out, xt,yt,xi,yi); break; diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 2d4397d16cd..1c06f1da018 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -3099,13 +3099,17 @@ int seqbase_isolated_sel_check(ListBase *seqbase) if ( (seq->seq1 && (seq->seq1->flag & SELECT) == 0) || (seq->seq2 && (seq->seq2->flag & SELECT) == 0) || (seq->seq3 && (seq->seq3->flag & SELECT) == 0) ) + { return FALSE; + } } else { if ( (seq->seq1 && (seq->seq1->flag & SELECT)) || (seq->seq2 && (seq->seq2->flag & SELECT)) || (seq->seq3 && (seq->seq3->flag & SELECT)) ) + { return FALSE; + } } } diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index 4006837efd6..e201209ec3f 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -146,8 +146,7 @@ static void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc) BENCH(bvhtree_from_mesh_verts(&treeData, calc->target, 0.0, 2, 6)); - if (treeData.tree == NULL) - { + if (treeData.tree == NULL) { OUT_OF_MEMORY(); return; } @@ -158,8 +157,7 @@ static void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc) #ifndef __APPLE__ #pragma omp parallel for default(none) private(i) firstprivate(nearest) shared(treeData,calc) schedule(static) #endif - for (i = 0; inumVerts; ++i) - { + for (i = 0; inumVerts; ++i) { float *co = calc->vertexCos[i]; float tmp_co[3]; float weight = defvert_array_find_weight_safe(calc->dvert, i, calc->vgroup); @@ -189,8 +187,7 @@ static void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc) //Found the nearest vertex - if (nearest.index != -1) - { + if (nearest.index != -1) { //Adjusting the vertex weight, so that after interpolating it keeps a certain distance from the nearest position float dist = sasqrt(nearest.dist); if (dist > FLT_EPSILON) weight *= (dist - calc->keepDist)/dist; @@ -224,8 +221,7 @@ int normal_projection_project_vertex(char options, const float *vert, const floa memcpy( &hit_tmp, hit, sizeof(hit_tmp) ); //Apply space transform (TODO readjust dist) - if (transf) - { + if (transf) { copy_v3_v3( tmp_co, vert ); space_transform_apply( transf, tmp_co ); co = tmp_co; @@ -298,8 +294,7 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc) //Prepare data to retrieve the direction in which we should project each vertex - if (calc->smd->projAxis == MOD_SHRINKWRAP_PROJECT_OVER_NORMAL) - { + if (calc->smd->projAxis == MOD_SHRINKWRAP_PROJECT_OVER_NORMAL) { if (calc->vert == NULL) return; } else { @@ -316,8 +311,7 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc) return; } - if (calc->smd->auxTarget) - { + if (calc->smd->auxTarget) { auxMesh = object_get_derived_final(calc->smd->auxTarget); if (!auxMesh) return; @@ -332,16 +326,14 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc) #ifndef __APPLE__ #pragma omp parallel for private(i,hit) schedule(static) #endif - for (i = 0; inumVerts; ++i) - { + for (i = 0; inumVerts; ++i) { float *co = calc->vertexCos[i]; float tmp_co[3], tmp_no[3]; float weight = defvert_array_find_weight_safe(calc->dvert, i, calc->vgroup); if (weight == 0.0f) continue; - if (calc->vert) - { + if (calc->vert) { /* calc->vert contains verts from derivedMesh */ /* this coordinated are deformed by vertexCos only for normal projection (to get correct normals) */ /* for other cases calc->varts contains undeformed coordinates and vertexCos should be used */ @@ -364,8 +356,7 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc) hit.dist = 10000.0f; //TODO: we should use FLT_MAX here, but sweepsphere code isn't prepared for that //Project over positive direction of axis - if (use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR) - { + if (use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR) { if (auxData.tree) normal_projection_project_vertex(0, tmp_co, tmp_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData); @@ -374,8 +365,7 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc) } //Project over negative direction of axis - if (use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR && hit.index == -1) - { + if (use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR && hit.index == -1) { float inv_no[3]; negate_v3_v3(inv_no, tmp_no); @@ -386,8 +376,7 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc) } - if (hit.index != -1) - { + if (hit.index != -1) { madd_v3_v3v3fl(hit.co, hit.co, tmp_no, calc->keepDist); interp_v3_v3v3(co, co, hit.co, weight); } @@ -414,8 +403,7 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc) //Create a bvh-tree of the given target BENCH(bvhtree_from_mesh_faces( &treeData, calc->target, 0.0, 2, 6)); - if (treeData.tree == NULL) - { + if (treeData.tree == NULL) { OUT_OF_MEMORY(); return; } @@ -429,8 +417,7 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc) #ifndef __APPLE__ #pragma omp parallel for default(none) private(i) firstprivate(nearest) shared(calc,treeData) schedule(static) #endif - for (i = 0; inumVerts; ++i) - { + for (i = 0; inumVerts; ++i) { float *co = calc->vertexCos[i]; float tmp_co[3]; float weight = defvert_array_find_weight_safe(calc->dvert, i, calc->vgroup); @@ -458,10 +445,8 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc) BLI_bvhtree_find_nearest(treeData.tree, tmp_co, &nearest, treeData.nearest_callback, &treeData); //Found the nearest vertex - if (nearest.index != -1) - { - if (calc->smd->shrinkOpts & MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE) - { + if (nearest.index != -1) { + if (calc->smd->shrinkOpts & MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE) { //Make the vertex stay on the front side of the face madd_v3_v3v3fl(tmp_co, nearest.co, nearest.no, calc->keepDist); } @@ -511,8 +496,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedM } - if (smd->target) - { + if (smd->target) { calc.target = object_get_derived_final(smd->target); //TODO there might be several "bugs" on non-uniform scales matrixs @@ -528,28 +512,24 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedM calc.vgroup = defgroup_name_index(calc.ob, smd->vgroup_name); - if (dm != NULL && smd->shrinkType == MOD_SHRINKWRAP_PROJECT) - { + if (dm != NULL && smd->shrinkType == MOD_SHRINKWRAP_PROJECT) { //Setup arrays to get vertexs positions, normals and deform weights calc.vert = dm->getVertDataArray(dm, CD_MVERT); calc.dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT); //Using vertexs positions/normals as if a subsurface was applied - if (smd->subsurfLevels) - { + if (smd->subsurfLevels) { SubsurfModifierData ssmd= {{NULL}}; ssmd.subdivType = ME_CC_SUBSURF; //catmull clark ssmd.levels = smd->subsurfLevels; //levels ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, FALSE, NULL, 0, 0, (ob->mode & OB_MODE_EDIT)); - if (ss_mesh) - { + if (ss_mesh) { calc.vert = ss_mesh->getVertDataArray(ss_mesh, CD_MVERT); - if (calc.vert) - { - //TRICKY: this code assumes subsurface will have the transformed original vertices - //in their original order at the end of the vert array. + if (calc.vert) { + /* TRICKY: this code assumes subsurface will have the transformed original vertices + * in their original order at the end of the vert array. */ calc.vert = calc.vert + ss_mesh->getNumVerts(ss_mesh) - dm->getNumVerts(dm); } } @@ -562,8 +542,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedM //Projecting target defined - lets work! if (calc.target) { - switch(smd->shrinkType) - { + switch (smd->shrinkType) { case MOD_SHRINKWRAP_NEAREST_SURFACE: BENCH(shrinkwrap_calc_nearest_surface_point(&calc)); break; diff --git a/source/blender/blenkernel/intern/sketch.c b/source/blender/blenkernel/intern/sketch.c index 71ea85de716..32681c3a041 100644 --- a/source/blender/blenkernel/intern/sketch.c +++ b/source/blender/blenkernel/intern/sketch.c @@ -44,8 +44,7 @@ void freeSketch(SK_Sketch *sketch) { SK_Stroke *stk, *next; - for (stk = sketch->strokes.first; stk; stk = next) - { + for (stk = sketch->strokes.first; stk; stk = next) { next = stk->next; sk_freeStroke(stk); @@ -119,8 +118,7 @@ SK_Stroke* sk_createStroke(void) void sk_shrinkStrokeBuffer(SK_Stroke *stk) { - if (stk->nb_points < stk->buf_size) - { + if (stk->nb_points < stk->buf_size) { SK_Point *old_points = stk->points; stk->buf_size = stk->nb_points; @@ -135,8 +133,7 @@ void sk_shrinkStrokeBuffer(SK_Stroke *stk) void sk_growStrokeBuffer(SK_Stroke *stk) { - if (stk->nb_points == stk->buf_size) - { + if (stk->nb_points == stk->buf_size) { SK_Point *old_points = stk->points; stk->buf_size *= 2; @@ -151,12 +148,10 @@ void sk_growStrokeBuffer(SK_Stroke *stk) void sk_growStrokeBufferN(SK_Stroke *stk, int n) { - if (stk->nb_points + n > stk->buf_size) - { + if (stk->nb_points + n > stk->buf_size) { SK_Point *old_points = stk->points; - while (stk->nb_points + n > stk->buf_size) - { + while (stk->nb_points + n > stk->buf_size) { stk->buf_size *= 2; } @@ -202,8 +197,7 @@ void sk_insertStrokePoints(SK_Stroke *stk, SK_Point *pts, int len, int start, in sk_growStrokeBufferN(stk, len - size); - if (len != size) - { + if (len != size) { int tail_size = stk->nb_points - end + 1; memmove(stk->points + start + len, stk->points + end + 1, tail_size * sizeof(SK_Point)); @@ -218,8 +212,7 @@ void sk_trimStroke(SK_Stroke *stk, int start, int end) { int size = end - start + 1; - if (start > 0) - { + if (start > 0) { memmove(stk->points, stk->points + start, size * sizeof(SK_Point)); } @@ -253,8 +246,7 @@ void sk_straightenStroke(SK_Stroke *stk, int start, int end, float p_start[3], f sk_insertStrokePoint(stk, &pt1, start + 1); /* insert after start */ sk_insertStrokePoint(stk, &pt2, end + 1); /* insert before end (since end was pushed back already) */ - for (i = 1; i < total; i++) - { + for (i = 1; i < total; i++) { float delta = (float)i / (float)total; float *p = stk->points[start + 1 + i].p; @@ -269,30 +261,23 @@ void sk_polygonizeStroke(SK_Stroke *stk, int start, int end) int i; /* find first exact points outside of range */ - for (;start > 0; start--) - { - if (stk->points[start].type == PT_EXACT) - { + for (;start > 0; start--) { + if (stk->points[start].type == PT_EXACT) { break; } } - for (;end < stk->nb_points - 1; end++) - { - if (stk->points[end].type == PT_EXACT) - { + for (;end < stk->nb_points - 1; end++) { + if (stk->points[end].type == PT_EXACT) { break; } } offset = start + 1; - for (i = start + 1; i < end; i++) - { - if (stk->points[i].type == PT_EXACT) - { - if (offset != i) - { + for (i = start + 1; i < end; i++) { + if (stk->points[i].type == PT_EXACT) { + if (offset != i) { memcpy(stk->points + offset, stk->points + i, sizeof(SK_Point)); } @@ -301,8 +286,7 @@ void sk_polygonizeStroke(SK_Stroke *stk, int start, int end) } /* some points were removes, move end of array */ - if (offset < end) - { + if (offset < end) { int size = stk->nb_points - end; memmove(stk->points + offset, stk->points + end, size * sizeof(SK_Point)); stk->nb_points = offset + size; @@ -323,8 +307,7 @@ void sk_flattenStroke(SK_Stroke *stk, int start, int end) project_v3_v3v3(normal, distance, normal); limit = normalize_v3(normal); - for (i = 1; i < total - 1; i++) - { + for (i = 1; i < total - 1; i++) { float d = limit * i / total; float offset[3]; float *p = stk->points[start + i].p; @@ -342,8 +325,7 @@ void sk_flattenStroke(SK_Stroke *stk, int start, int end) void sk_removeStroke(SK_Sketch *sketch, SK_Stroke *stk) { - if (sketch->active_stroke == stk) - { + if (sketch->active_stroke == stk) { sketch->active_stroke = NULL; } @@ -358,8 +340,7 @@ void sk_reverseStroke(SK_Stroke *stk) sk_allocStrokeBuffer(stk); - for (i = 0; i < stk->nb_points; i++) - { + for (i = 0; i < stk->nb_points; i++) { sk_copyPoint(stk->points + i, old_points + stk->nb_points - 1 - i); } @@ -376,8 +357,7 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) char work; int i; - if (start == -1) - { + if (start == -1) { start = 0; end = stk->nb_points - 1; } @@ -386,8 +366,7 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) stk->nb_points = 0; /* adding points before range */ - for (i = 0; i < start; i++) - { + for (i = 0; i < start; i++) { sk_appendStrokePoint(stk, old_points + i); } @@ -398,8 +377,7 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) work = 1; /* while still reducing */ - while (work) - { + while (work) { int ls, le; work = 0; @@ -407,15 +385,13 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) le = start+1; /* while not over interval */ - while (ls < end) - { + while (ls < end) { int max_i = 0; short v1[2]; float max_dist = 16; /* more than 4 pixels */ /* find the next marked point */ - while (marked[le] == 0) - { + while (marked[le] == 0) { le++; } @@ -424,8 +400,7 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) v1[0] = old_points[ls].p2d[1] - old_points[le].p2d[1]; - for ( i = ls + 1; i < le; i++ ) - { + for ( i = ls + 1; i < le; i++ ) { float mul; float dist; short v2[2]; @@ -433,8 +408,7 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) v2[0] = old_points[i].p2d[0] - old_points[ls].p2d[0]; v2[1] = old_points[i].p2d[1] - old_points[ls].p2d[1]; - if (v2[0] == 0 && v2[1] == 0) - { + if (v2[0] == 0 && v2[1] == 0) { continue; } @@ -442,15 +416,13 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) dist = mul * mul * (v2[0]*v2[0] + v2[1]*v2[1]); - if (dist > max_dist) - { + if (dist > max_dist) { max_dist = dist; max_i = i; } } - if (max_i != 0) - { + if (max_i != 0) { work = 1; marked[max_i] = 1; } @@ -462,10 +434,8 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) /* adding points after range */ - for (i = start; i <= end; i++) - { - if (marked[i]) - { + for (i = start; i <= end; i++) { + if (marked[i]) { sk_appendStrokePoint(stk, old_points + i); } } @@ -473,8 +443,7 @@ void sk_filterStroke(SK_Stroke *stk, int start, int end) MEM_freeN(marked); /* adding points after range */ - for (i = end + 1; i < nb_points; i++) - { + for (i = end + 1; i < nb_points; i++) { sk_appendStrokePoint(stk, old_points + i); } @@ -490,13 +459,11 @@ void sk_filterLastContinuousStroke(SK_Stroke *stk) end = stk->nb_points -1; - for (start = end - 1; start > 0 && stk->points[start].type == PT_CONTINUOUS; start--) - { + for (start = end - 1; start > 0 && stk->points[start].type == PT_CONTINUOUS; start--) { /* nothing to do here*/ } - if (end - start > 1) - { + if (end - start > 1) { sk_filterStroke(stk, start, end); } } @@ -505,8 +472,7 @@ SK_Point *sk_lastStrokePoint(SK_Stroke *stk) { SK_Point *pt = NULL; - if (stk->nb_points > 0) - { + if (stk->nb_points > 0) { pt = stk->points + (stk->nb_points - 1); } @@ -520,8 +486,7 @@ void sk_endContinuousStroke(SK_Stroke *stk) void sk_updateNextPoint(SK_Sketch *sketch, SK_Stroke *stk) { - if (stk) - { + if (stk) { memcpy(&sketch->next_point, stk->points[stk->nb_points - 1].p, sizeof(SK_Point)); } } @@ -529,8 +494,7 @@ void sk_updateNextPoint(SK_Sketch *sketch, SK_Stroke *stk) int sk_stroke_filtermval(SK_DrawData *dd) { int retval = 0; - if (ABS(dd->mval[0] - dd->previous_mval[0]) + ABS(dd->mval[1] - dd->previous_mval[1]) > U.gp_manhattendist) - { + if (ABS(dd->mval[0] - dd->previous_mval[0]) + ABS(dd->mval[1] - dd->previous_mval[1]) > U.gp_manhattendist) { retval = 1; } @@ -551,12 +515,10 @@ void sk_deleteSelectedStrokes(SK_Sketch *sketch) { SK_Stroke *stk, *next; - for (stk = sketch->strokes.first; stk; stk = next) - { + for (stk = sketch->strokes.first; stk; stk = next) { next = stk->next; - if (stk->selected == 1) - { + if (stk->selected == 1) { sk_removeStroke(sketch, stk); } } @@ -566,31 +528,26 @@ void sk_selectAllSketch(SK_Sketch *sketch, int mode) { SK_Stroke *stk = NULL; - if (mode == -1) - { - for (stk = sketch->strokes.first; stk; stk = stk->next) - { + if (mode == -1) { + for (stk = sketch->strokes.first; stk; stk = stk->next) { stk->selected = 0; } } else if (mode == 0) { - for (stk = sketch->strokes.first; stk; stk = stk->next) - { + for (stk = sketch->strokes.first; stk; stk = stk->next) { stk->selected = 1; } } else if (mode == 1) { int selected = 1; - for (stk = sketch->strokes.first; stk; stk = stk->next) - { + for (stk = sketch->strokes.first; stk; stk = stk->next) { selected &= stk->selected; } selected ^= 1; - for (stk = sketch->strokes.first; stk; stk = stk->next) - { + for (stk = sketch->strokes.first; stk; stk = stk->next) { stk->selected = selected; } } diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c index e3a309fc945..d0eca731a1a 100644 --- a/source/blender/blenkernel/intern/softbody.c +++ b/source/blender/blenkernel/intern/softbody.c @@ -402,7 +402,10 @@ static void ccd_mesh_update(Object *ob,ccd_Mesh *pccd_M) if (!cmd->numverts || !cmd->numfaces) return; if ((pccd_M->totvert != cmd->numverts) || - (pccd_M->totface != cmd->numfaces)) return; + (pccd_M->totface != cmd->numfaces)) + { + return; + } pccd_M->bbmin[0]=pccd_M->bbmin[1]=pccd_M->bbmin[2]=1e30f; pccd_M->bbmax[0]=pccd_M->bbmax[1]=pccd_M->bbmax[2]=-1e30f; @@ -1388,8 +1391,7 @@ static void scan_for_ext_face_forces(Object *ob,float timenow) } bf = sb->scratch->bodyface; for (a=0; ascratch->totface; a++, bf++) { - if (( bf->flag & BFF_INTERSECT) || ( bf->flag & BFF_CLOSEVERT)) - { + if (( bf->flag & BFF_INTERSECT) || ( bf->flag & BFF_CLOSEVERT)) { sb->bpoint[bf->v1].choke2=MAX2(sb->bpoint[bf->v1].choke2,choke); sb->bpoint[bf->v2].choke2=MAX2(sb->bpoint[bf->v2].choke2,choke); sb->bpoint[bf->v3].choke2=MAX2(sb->bpoint[bf->v3].choke2,choke); @@ -1935,8 +1937,8 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3], } } - if ((deflected < 2)&& (G.rt != 444)) // we did not hit a face until now - { // see if 'outer' hits an edge + if ((deflected < 2)&& (G.rt != 444)) { /* we did not hit a face until now */ + /* see if 'outer' hits an edge */ float dist; closest_to_line_segment_v3(ve, opco, nv1, nv2); @@ -2831,8 +2833,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa nlEnd(NL_MATRIX); nlEnd(NL_SYSTEM); - if ((G.rt == 32) && (nl_flags & NLF_BUILD)) - { + if ((G.rt == 32) && (nl_flags & NLF_BUILD)) { printf("####MEE#####\n"); nlPrintMatrix(); } @@ -3230,8 +3231,7 @@ static void springs_from_mesh(Object *ob) float scale =1.0f; sb= ob->soft; - if (me && sb) - { + if (me && sb) { /* using bp->origS as a container for spring calcualtions here ** will be overwritten sbObjectStep() to receive ** actual modifier stack positions @@ -3307,8 +3307,7 @@ static void mesh_to_softbody(Scene *scene, Object *ob) this enables per vertex *mass painting* */ - if (sb->namedVG_Mass[0]) - { + if (sb->namedVG_Mass[0]) { int grp= defgroup_name_index (ob,sb->namedVG_Mass); /* printf("VGN %s %d\n",sb->namedVG_Mass,grp); */ if (grp > -1) { @@ -3321,8 +3320,7 @@ static void mesh_to_softbody(Scene *scene, Object *ob) /* first set the default */ bp->springweight = 1.0f; - if (sb->namedVG_Spring_K[0]) - { + if (sb->namedVG_Spring_K[0]) { int grp= defgroup_name_index (ob,sb->namedVG_Spring_K); //printf("VGN %s %d\n",sb->namedVG_Spring_K,grp); if (grp > -1) { @@ -3639,8 +3637,7 @@ static void curve_surf_to_softbody(Scene *scene, Object *ob) } } - if (totspring) - { + if (totspring) { build_bps_springlist(ob); /* link bps to springs */ if (ob->softflag & OB_SB_SELF) {calculate_collision_balls(ob);} } @@ -3896,7 +3893,7 @@ static void softbody_reset(Object *ob, SoftBody *sb, float (*vertexCos)[3], int SB_estimate_transform(ob,NULL,NULL,NULL); SB_estimate_transform(ob,NULL,NULL,NULL); } - switch(ob->type) { + switch (ob->type) { case OB_MESH: if (ob->softflag & OB_SB_FACECOLL) mesh_faces_to_scratch(ob); break; @@ -3952,8 +3949,7 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime) if (sb->solver_ID>0) mid_flags |= MID_PRESERVE; forcetime = forcetimemax; /* hope for integrating in one step */ - while ( (ABS(timedone) < ABS(dtime)) && (loops < 2000) ) - { + while ( (ABS(timedone) < ABS(dtime)) && (loops < 2000) ) { /* set goals in time */ interpolate_exciter(ob,200,(int)(200.0f*(timedone/dtime))); @@ -4021,12 +4017,11 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime) } } - else if (sb->solver_ID == 2) - {/* do semi "fake" implicit euler */ + else if (sb->solver_ID == 2) { + /* do semi "fake" implicit euler */ //removed }/*SOLVER SELECT*/ - else if (sb->solver_ID == 4) - { + else if (sb->solver_ID == 4) { /* do semi "fake" implicit euler */ }/*SOLVER SELECT*/ else if (sb->solver_ID == 3) { @@ -4083,7 +4078,7 @@ void sbObjectStep(Scene *scene, Object *ob, float cfra, float (*vertexCos)[3], i if (sb->bpoint == NULL || ((ob->softflag & OB_SB_EDGES) && !ob->soft->bspring && object_has_edges(ob))) { - switch(ob->type) { + switch (ob->type) { case OB_MESH: mesh_to_softbody(scene, ob); break; diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c index c2dbb518837..28ce95ea8d1 100644 --- a/source/blender/blenkernel/intern/sound.c +++ b/source/blender/blenkernel/intern/sound.c @@ -95,8 +95,7 @@ struct bSound* sound_new_file(struct Main *bmain, const char *filename) sound_load(bmain, sound); - if (!sound->playback_handle) - { + if (!sound->playback_handle) { free_libblock(&bmain->sound, sound); sound = NULL; } @@ -106,22 +105,19 @@ struct bSound* sound_new_file(struct Main *bmain, const char *filename) void sound_free(struct bSound* sound) { - if (sound->packedfile) - { + if (sound->packedfile) { freePackedFile(sound->packedfile); sound->packedfile = NULL; } #ifdef WITH_AUDASPACE - if (sound->handle) - { + if (sound->handle) { AUD_unload(sound->handle); sound->handle = NULL; sound->playback_handle = NULL; } - if (sound->cache) - { + if (sound->cache) { AUD_unload(sound->cache); sound->cache = NULL; } @@ -141,10 +137,8 @@ static void sound_sync_callback(void* data, int mode, float time) struct Scene* scene; scene = bmain->scene.first; - while (scene) - { - if (scene->audio.flag & AUDIO_SYNC) - { + while (scene) { + if (scene->audio.flag & AUDIO_SYNC) { if (mode) sound_play_scene(scene); else @@ -282,8 +276,7 @@ struct bSound* sound_new_limiter(struct Main *bmain, struct bSound *source, floa void sound_delete(struct Main *bmain, struct bSound* sound) { - if (sound) - { + if (sound) { sound_free(sound); free_libblock(&bmain->sound, sound); @@ -312,8 +305,7 @@ void sound_cache_notifying(struct Main* main, struct bSound* sound) void sound_delete_cache(struct bSound* sound) { sound->flags &= ~SOUND_FLAGS_CACHING; - if (sound->cache) - { + if (sound->cache) { AUD_unload(sound->cache); sound->cache = NULL; sound->playback_handle = sound->handle; @@ -322,16 +314,13 @@ void sound_delete_cache(struct bSound* sound) void sound_load(struct Main *bmain, struct bSound* sound) { - if (sound) - { - if (sound->cache) - { + if (sound) { + if (sound->cache) { AUD_unload(sound->cache); sound->cache = NULL; } - if (sound->handle) - { + if (sound->handle) { AUD_unload(sound->handle); sound->handle = NULL; sound->playback_handle = NULL; @@ -341,7 +330,7 @@ void sound_load(struct Main *bmain, struct bSound* sound) // XXX unused currently #if 0 - switch(sound->type) + switch (sound->type) { case SOUND_TYPE_FILE: #endif @@ -376,15 +365,13 @@ void sound_load(struct Main *bmain, struct bSound* sound) break; } #endif - if (sound->flags & SOUND_FLAGS_MONO) - { + if (sound->flags & SOUND_FLAGS_MONO) { void* handle = AUD_monoSound(sound->handle); AUD_unload(sound->handle); sound->handle = handle; } - if (sound->flags & SOUND_FLAGS_CACHING) - { + if (sound->flags & SOUND_FLAGS_CACHING) { sound->cache = AUD_bufferSound(sound->handle); } @@ -557,14 +544,12 @@ void sound_play_scene(struct Scene *scene) if (status == AUD_STATUS_INVALID) sound_start_play_scene(scene); - if (!scene->sound_scene_handle) - { + if (!scene->sound_scene_handle) { AUD_unlock(); return; } - if (status != AUD_STATUS_PLAYING) - { + if (status != AUD_STATUS_PLAYING) { AUD_seek(scene->sound_scene_handle, CFRA / FPS); AUD_resume(scene->sound_scene_handle); } @@ -577,8 +562,7 @@ void sound_play_scene(struct Scene *scene) void sound_stop_scene(struct Scene *scene) { - if (scene->sound_scene_handle) - { + if (scene->sound_scene_handle) { AUD_pause(scene->sound_scene_handle); if (scene->audio.flag & AUDIO_SYNC) @@ -596,12 +580,10 @@ void sound_seek_scene(struct Main *bmain, struct Scene *scene) status = scene->sound_scene_handle ? AUD_getStatus(scene->sound_scene_handle) : AUD_STATUS_INVALID; - if (status == AUD_STATUS_INVALID) - { + if (status == AUD_STATUS_INVALID) { sound_start_play_scene(scene); - if (!scene->sound_scene_handle) - { + if (!scene->sound_scene_handle) { AUD_unlock(); return; } @@ -616,10 +598,8 @@ void sound_seek_scene(struct Main *bmain, struct Scene *scene) } } - if (scene->audio.flag & AUDIO_SCRUB && !animation_playing) - { - if (scene->audio.flag & AUDIO_SYNC) - { + if (scene->audio.flag & AUDIO_SCRUB && !animation_playing) { + if (scene->audio.flag & AUDIO_SYNC) { AUD_seek(scene->sound_scene_handle, CFRA / FPS); AUD_seekSequencer(scene->sound_scene_handle, CFRA / FPS); } @@ -648,8 +628,7 @@ void sound_seek_scene(struct Main *bmain, struct Scene *scene) float sound_sync_scene(struct Scene *scene) { - if (scene->sound_scene_handle) - { + if (scene->sound_scene_handle) { if (scene->audio.flag & AUDIO_SYNC) return AUD_getSequencerPosition(scene->sound_scene_handle); else @@ -668,8 +647,7 @@ int sound_scene_playing(struct Scene *scene) void sound_free_waveform(struct bSound* sound) { - if (sound->waveform) - { + if (sound->waveform) { MEM_freeN(((SoundWaveform*)sound->waveform)->data); MEM_freeN(sound->waveform); } @@ -683,8 +661,7 @@ void sound_read_waveform(struct bSound* sound) info = AUD_getInfo(sound->playback_handle); - if (info.length > 0) - { + if (info.length > 0) { SoundWaveform* waveform = MEM_mallocN(sizeof(SoundWaveform), "SoundWaveform"); int length = info.length * SOUND_WAVE_SAMPLES_PER_SECOND; @@ -709,23 +686,16 @@ void sound_update_scene(struct Scene* scene) void* handle; float quat[4]; - for (SETLOOPER(scene, sce_it, base)) - { + for (SETLOOPER(scene, sce_it, base)) { ob = base->object; - if (ob->type == OB_SPEAKER) - { - if (ob->adt) - { - for (track = ob->adt->nla_tracks.first; track; track = track->next) - { - for (strip = track->strips.first; strip; strip = strip->next) - { - if (strip->type == NLASTRIP_TYPE_SOUND) - { + if (ob->type == OB_SPEAKER) { + if (ob->adt) { + for (track = ob->adt->nla_tracks.first; track; track = track->next) { + for (strip = track->strips.first; strip; strip = strip->next) { + if (strip->type == NLASTRIP_TYPE_SOUND) { speaker = (Speaker*)ob->data; - if (AUD_removeSet(scene->speaker_handles, strip->speaker_handle)) - { + if (AUD_removeSet(scene->speaker_handles, strip->speaker_handle)) { if (speaker->sound) AUD_moveSequence(strip->speaker_handle, strip->start / FPS, -1, 0); else { @@ -734,15 +704,13 @@ void sound_update_scene(struct Scene* scene) } } else { - if (speaker->sound) - { + if (speaker->sound) { strip->speaker_handle = AUD_addSequence(scene->sound_scene, speaker->sound->playback_handle, strip->start / FPS, -1, 0); AUD_setRelativeSequence(strip->speaker_handle, 0); } } - if (strip->speaker_handle) - { + if (strip->speaker_handle) { AUD_addSet(new_set, strip->speaker_handle); AUD_updateSequenceData(strip->speaker_handle, speaker->volume_max, speaker->volume_min, speaker->distance_max, @@ -765,13 +733,11 @@ void sound_update_scene(struct Scene* scene) } } - while ((handle = AUD_getSet(scene->speaker_handles))) - { + while ((handle = AUD_getSet(scene->speaker_handles))) { AUD_removeSequence(scene->sound_scene, handle); } - if (scene->camera) - { + if (scene->camera) { mat4_to_quat(quat, scene->camera->obmat); AUD_setSequencerAnimData(scene->sound_scene, AUD_AP_LOCATION, CFRA, scene->camera->obmat[3], 1); AUD_setSequencerAnimData(scene->sound_scene, AUD_AP_ORIENTATION, CFRA, quat, 1); diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 83a24f6afdc..83225163ea3 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -2423,7 +2423,9 @@ static void ccgDM_release(DerivedMesh *dm) /* Check that mmd still exists */ if (!ccgdm->multires.local_mmd && BLI_findindex(&ccgdm->multires.ob->modifiers, ccgdm->multires.mmd) < 0) + { ccgdm->multires.mmd = NULL; + } if (ccgdm->multires.mmd) { if (ccgdm->multires.modified_flags & MULTIRES_COORDS_MODIFIED) diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c index 1197ec23907..cb7369476c0 100644 --- a/source/blender/blenkernel/intern/text.c +++ b/source/blender/blenkernel/intern/text.c @@ -1193,9 +1193,11 @@ void txt_order_cursors(Text *text) if (!text->sell) return; /* Flip so text->curl is before text->sell */ - if (txt_get_span(text->curl, text->sell)<0 || - (text->curl==text->sell && text->curc>text->selc)) + if ((txt_get_span(text->curl, text->sell) < 0) || + (text->curl == text->sell && text->curc > text->selc)) + { txt_curs_swap(text); + } } int txt_has_sel(Text *text) @@ -2018,7 +2020,7 @@ void txt_do_undo(Text *text) undoing= 1; - switch(op) { + switch (op) { case UNDO_CLEFT: txt_move_right(text, 0); break; @@ -2245,7 +2247,7 @@ void txt_do_redo(Text *text) undoing= 1; - switch(op) { + switch (op) { case UNDO_CLEFT: txt_move_left(text, 0); break; @@ -2832,8 +2834,7 @@ void txt_indent(Text *text) } num = 0; - while (TRUE) - { + while (TRUE) { tmp= MEM_mallocN(text->curl->len+indentlen+1, "textline_string"); text->curc = 0; @@ -2851,8 +2852,7 @@ void txt_indent(Text *text) txt_make_dirty(text); txt_clean_text(text); - if (text->curl == text->sell) - { + if (text->curl == text->sell) { text->selc = text->sell->len; break; } @@ -2862,14 +2862,12 @@ void txt_indent(Text *text) } } text->curc = 0; - while ( num > 0 ) - { + while ( num > 0 ) { text->curl = text->curl->prev; num--; } - if (!undoing) - { + if (!undoing) { txt_undo_add_toop(text, UNDO_INDENT, txt_get_span(text->lines.first, text->curl), text->curc, txt_get_span(text->lines.first, text->sell), text->selc); } } @@ -2893,12 +2891,10 @@ void txt_unindent(Text *text) indent = spaceslen; } - while (TRUE) - { + while (TRUE) { int i = 0; - if (BLI_strncasecmp(text->curl->line, remove, indent) == 0) - { + if (BLI_strncasecmp(text->curl->line, remove, indent) == 0) { while (i< text->curl->len) { text->curl->line[i]= text->curl->line[i+indent]; i++; @@ -2909,8 +2905,7 @@ void txt_unindent(Text *text) txt_make_dirty(text); txt_clean_text(text); - if (text->curl == text->sell) - { + if (text->curl == text->sell) { text->selc = text->sell->len; break; } @@ -2921,14 +2916,12 @@ void txt_unindent(Text *text) } text->curc = 0; - while ( num > 0 ) - { + while ( num > 0 ) { text->curl = text->curl->prev; num--; } - if (!undoing) - { + if (!undoing) { txt_undo_add_toop(text, UNDO_UNINDENT, txt_get_span(text->lines.first, text->curl), text->curc, txt_get_span(text->lines.first, text->sell), text->selc); } } @@ -2944,8 +2937,7 @@ void txt_comment(Text *text) if (!text->sell) return;// Need to change this need to check if only one line is selected to more then one num = 0; - while (TRUE) - { + while (TRUE) { tmp= MEM_mallocN(text->curl->len+2, "textline_string"); text->curc = 0; @@ -2963,8 +2955,7 @@ void txt_comment(Text *text) txt_make_dirty(text); txt_clean_text(text); - if (text->curl == text->sell) - { + if (text->curl == text->sell) { text->selc = text->sell->len; break; } @@ -2974,14 +2965,12 @@ void txt_comment(Text *text) } } text->curc = 0; - while ( num > 0 ) - { + while ( num > 0 ) { text->curl = text->curl->prev; num--; } - if (!undoing) - { + if (!undoing) { txt_undo_add_toop(text, UNDO_COMMENT, txt_get_span(text->lines.first, text->curl), text->curc, txt_get_span(text->lines.first, text->sell), text->selc); } } @@ -2995,12 +2984,10 @@ void txt_uncomment(Text *text) if (!text->curl) return; if (!text->sell) return; - while (TRUE) - { + while (TRUE) { int i = 0; - if (text->curl->line[i] == remove) - { + if (text->curl->line[i] == remove) { while (i< text->curl->len) { text->curl->line[i]= text->curl->line[i+1]; i++; @@ -3012,8 +2999,7 @@ void txt_uncomment(Text *text) txt_make_dirty(text); txt_clean_text(text); - if (text->curl == text->sell) - { + if (text->curl == text->sell) { text->selc = text->sell->len; break; } @@ -3024,14 +3010,12 @@ void txt_uncomment(Text *text) } text->curc = 0; - while ( num > 0 ) - { + while ( num > 0 ) { text->curl = text->curl->prev; num--; } - if (!undoing) - { + if (!undoing) { txt_undo_add_toop(text, UNDO_UNCOMMENT, txt_get_span(text->lines.first, text->curl), text->curc, txt_get_span(text->lines.first, text->sell), text->selc); } } @@ -3047,27 +3031,23 @@ int setcurr_tab_spaces (Text *text, int space) if (!text) return 0; if (!text->curl) return 0; - while (text->curl->line[i] == indent) - { + while (text->curl->line[i] == indent) { //we only count those tabs/spaces that are before any text or before the curs; - if (i == text->curc) - { + if (i == text->curc) { return i; } else { i++; } } - if (strstr(text->curl->line, word)) - { + if (strstr(text->curl->line, word)) { /* if we find a ':' on this line, then add a tab but not if it is: * 1) in a comment * 2) within an identifier * 3) after the cursor (text->curc), i.e. when creating space before a function def [#25414] */ int a, is_indent = 0; - for (a=0; (a < text->curc) && (text->curl->line[a] != '\0'); a++) - { + for (a=0; (a < text->curc) && (text->curl->line[a] != '\0'); a++) { char ch= text->curl->line[a]; if (ch=='#') { break; @@ -3084,13 +3064,10 @@ int setcurr_tab_spaces (Text *text, int space) } } - for (test=0; back_words[test]; test++) - { + for (test=0; back_words[test]; test++) { /* if there are these key words then remove a tab because we are done with the block */ - if (strstr(text->curl->line, back_words[test]) && i > 0) - { - if (strcspn(text->curl->line, back_words[test]) < strcspn(text->curl->line, comm)) - { + if (strstr(text->curl->line, back_words[test]) && i > 0) { + if (strcspn(text->curl->line, back_words[test]) < strcspn(text->curl->line, comm)) { i -= space; } } @@ -3139,14 +3116,16 @@ TextMarker *txt_find_marker_region(Text *text, TextLine *line, int start, int en for (marker=text->markers.first; marker; marker=next) { next= marker->next; - if (group && marker->group != group) continue; + if (group && marker->group != group) continue; else if ((marker->flags & flags) != flags) continue; - else if (marker->lineno < lineno) continue; + else if (marker->lineno < lineno) continue; else if (marker->lineno > lineno) break; if ((marker->start==marker->end && start<=marker->start && marker->start<=end) || - (marker->startend>start)) + (marker->startend>start)) + { return marker; + } } return NULL; } diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index 23d818369a2..29b9505f449 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -663,7 +663,7 @@ void default_tex(Tex *tex) void tex_set_type(Tex *tex, int type) { - switch(type) { + switch (type) { case TEX_VOXELDATA: if (tex->vd == NULL) @@ -1180,7 +1180,7 @@ Tex *give_current_material_texture(Material *ma) int give_active_mtex(ID *id, MTex ***mtex_ar, short *act) { - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_MA: *mtex_ar= ((Material *)id)->mtex; if (act) *act= (((Material *)id)->texact); @@ -1211,7 +1211,7 @@ void set_active_mtex(ID *id, short act) if (act<0) act= 0; else if (act>=MAX_MTEX) act= MAX_MTEX-1; - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_MA: ((Material *)id)->texact= act; break; diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c index 59c38117858..079bde0afec 100644 --- a/source/blender/blenkernel/intern/writeffmpeg.c +++ b/source/blender/blenkernel/intern/writeffmpeg.c @@ -120,19 +120,17 @@ static int write_audio_frame(void) audio_time += (double) audio_input_samples / (double) c->sample_rate; pkt.size = avcodec_encode_audio(c, audio_output_buffer, - audio_outbuf_size, - (short*) audio_input_buffer); + audio_outbuf_size, + (short *)audio_input_buffer); - if (pkt.size < 0) - { + if (pkt.size < 0) { // XXX error("Error writing audio packet"); return -1; } pkt.data = audio_output_buffer; - if (c->coded_frame && c->coded_frame->pts != AV_NOPTS_VALUE) - { + if (c->coded_frame && c->coded_frame->pts != AV_NOPTS_VALUE) { pkt.pts = av_rescale_q(c->coded_frame->pts, c->time_base, audio_stream->time_base); fprintf(stderr, "Audio Frame PTS: %d\n", (int)pkt.pts); @@ -175,7 +173,7 @@ static AVFrame* alloc_picture(int pix_fmt, int width, int height) * first is always desired guess_format parameter */ static const char** get_file_extensions(int format) { - switch(format) { + switch (format) { case FFMPEG_DV: { static const char * rv[] = { ".dv", NULL }; return rv; @@ -372,7 +370,7 @@ static void set_ffmpeg_property_option(AVCodecContext* c, IDProperty * prop) *param++ = 0; } - switch(prop->type) { + switch (prop->type) { case IDP_STRING: fprintf(stderr, "%s.\n", IDP_String(prop)); av_set_string3(c, prop->name, IDP_String(prop), 1, &rv); @@ -717,7 +715,7 @@ static int start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty, Report BLI_snprintf(of->filename, sizeof(of->filename), "%s", name); /* set the codec to the user's selection */ - switch(ffmpeg_type) { + switch (ffmpeg_type) { case FFMPEG_AVI: case FFMPEG_MOV: case FFMPEG_MKV: @@ -929,8 +927,7 @@ int start_ffmpeg(struct Scene *scene, RenderData *rd, int rectx, int recty, Repo success = start_ffmpeg_impl(rd, rectx, recty, reports); #ifdef WITH_AUDASPACE - if (audio_stream) - { + if (audio_stream) { AVCodecContext* c = audio_stream->codec; AUD_DeviceSpecs specs; specs.channels = c->channels; @@ -974,8 +971,7 @@ int append_ffmpeg(RenderData *rd, int start_frame, int frame, int *pixels, int r // why is this done before writing the video frame and again at end_ffmpeg? // write_audio_frames(frame / (((double)rd->frs_sec) / rd->frs_sec_base)); - if (video_stream) - { + if (video_stream) { avframe= generate_video_frame((unsigned char*) pixels, reports); success= (avframe && write_video_frame(rd, frame - start_frame, avframe, reports)); @@ -1172,10 +1168,12 @@ static const AVOption *my_av_find_opt(void *v, const char *name, const AVOption *o= c->option; for (;o && o->name; o++) { - if (!strcmp(o->name, name) && - (!unit || (o->unit && !strcmp(o->unit, unit))) && - (o->flags & mask) == flags ) + if (!strcmp(o->name, name) && + (!unit || (o->unit && !strcmp(o->unit, unit))) && + (o->flags & mask) == flags) + { return o; + } } return NULL; } diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c index 2cc67b3f0aa..3921c01d2cf 100644 --- a/source/blender/blenlib/intern/BLI_kdopbvh.c +++ b/source/blender/blenlib/intern/BLI_kdopbvh.c @@ -217,12 +217,10 @@ static void bvh_insertionsort(BVHNode **a, int lo, int hi, int axis) { int i,j; BVHNode *t; - for (i=lo; i < hi; i++) - { + for (i=lo; i < hi; i++) { j=i; t = a[i]; - while ((j!=lo) && (t->bv[axis] < (a[j-1])->bv[axis])) - { + while ((j!=lo) && (t->bv[axis] < (a[j-1])->bv[axis])) { a[j] = a[j-1]; j--; } @@ -233,8 +231,7 @@ static void bvh_insertionsort(BVHNode **a, int lo, int hi, int axis) static int bvh_partition(BVHNode **a, int lo, int hi, BVHNode * x, int axis) { int i=lo, j=hi; - while (1) - { + while (1) { while ((a[i])->bv[axis] < x->bv[axis]) i++; j--; while (x->bv[axis] < (a[j])->bv[axis]) j--; @@ -284,22 +281,18 @@ static void bvh_heapsort(BVHNode **a, int lo, int hi, int axis) static BVHNode *bvh_medianof3(BVHNode **a, int lo, int mid, int hi, int axis) // returns Sortable { - if ((a[mid])->bv[axis] < (a[lo])->bv[axis]) - { + if ((a[mid])->bv[axis] < (a[lo])->bv[axis]) { if ((a[hi])->bv[axis] < (a[mid])->bv[axis]) return a[mid]; - else - { + else { if ((a[hi])->bv[axis] < (a[lo])->bv[axis]) return a[hi]; else return a[lo]; } } - else - { - if ((a[hi])->bv[axis] < (a[mid])->bv[axis]) - { + else { + if ((a[hi])->bv[axis] < (a[mid])->bv[axis]) { if ((a[hi])->bv[axis] < (a[lo])->bv[axis]) return a[lo]; else @@ -354,8 +347,7 @@ static void sort_along_axis(BVHTree *tree, int start, int end, int axis) static int partition_nth_element(BVHNode **a, int _begin, int _end, int n, int axis) { int begin = _begin, end = _end, cut; - while (end-begin > 3) - { + while (end-begin > 3) { cut = bvh_partition(a, begin, end, bvh_medianof3(a, begin, (begin+end)/2, end-1, axis), axis ); if (cut <= n) begin = cut; @@ -375,8 +367,7 @@ static void build_skip_links(BVHTree *tree, BVHNode *node, BVHNode *left, BVHNod node->skip[0] = left; node->skip[1] = right; - for (i = 0; i < node->totnode; i++) - { + for (i = 0; i < node->totnode; i++) { if (i+1 < node->totnode) build_skip_links(tree, node->children[i], left, node->children[i+1] ); else @@ -396,20 +387,16 @@ static void create_kdop_hull(BVHTree *tree, BVHNode *node, const float *co, int int i, k; // don't init boudings for the moving case - if (!moving) - { - for (i = tree->start_axis; i < tree->stop_axis; i++) - { - bv[2*i] = FLT_MAX; - bv[2*i + 1] = -FLT_MAX; + if (!moving) { + for (i = tree->start_axis; i < tree->stop_axis; i++) { + bv[2 * i] = FLT_MAX; + bv[2 * i + 1] = -FLT_MAX; } } - for (k = 0; k < numpoints; k++) - { - // for all Axes. - for (i = tree->start_axis; i < tree->stop_axis; i++) - { + for (k = 0; k < numpoints; k++) { + /* for all Axes. */ + for (i = tree->start_axis; i < tree->stop_axis; i++) { newminmax = dot_v3v3(&co[k * 3], KDOP_AXES[i]); if (newminmax < bv[2 * i]) bv[2 * i] = newminmax; @@ -427,17 +414,14 @@ static void refit_kdop_hull(BVHTree *tree, BVHNode *node, int start, int end) float *bv = node->bv; - for (i = tree->start_axis; i < tree->stop_axis; i++) - { + for (i = tree->start_axis; i < tree->stop_axis; i++) { bv[2*i] = FLT_MAX; bv[2*i + 1] = -FLT_MAX; } - for (j = start; j < end; j++) - { -// for all Axes. - for (i = tree->start_axis; i < tree->stop_axis; i++) - { + for (j = start; j < end; j++) { + /* for all Axes. */ + for (i = tree->start_axis; i < tree->stop_axis; i++) { newmin = tree->nodes[j]->bv[(2 * i)]; if ((newmin < bv[(2 * i)])) bv[(2 * i)] = newmin; @@ -459,15 +443,13 @@ static char get_largest_axis(float *bv) middle_point[0] = (bv[1]) - (bv[0]); // x axis middle_point[1] = (bv[3]) - (bv[2]); // y axis middle_point[2] = (bv[5]) - (bv[4]); // z axis - if (middle_point[0] > middle_point[1]) - { + if (middle_point[0] > middle_point[1]) { if (middle_point[0] > middle_point[2]) return 1; // max x axis else return 5; // max z axis } - else - { + else { if (middle_point[1] > middle_point[2]) return 3; // max y axis else @@ -481,18 +463,14 @@ static void node_join(BVHTree *tree, BVHNode *node) { int i, j; - for (i = tree->start_axis; i < tree->stop_axis; i++) - { + for (i = tree->start_axis; i < tree->stop_axis; i++) { node->bv[2*i] = FLT_MAX; node->bv[2*i + 1] = -FLT_MAX; } - for (i = 0; i < tree->tree_type; i++) - { - if (node->children[i]) - { - for (j = tree->start_axis; j < tree->stop_axis; j++) - { + for (i = 0; i < tree->tree_type; i++) { + if (node->children[i]) { + for (j = tree->start_axis; j < tree->stop_axis; j++) { // update minimum if (node->children[i]->bv[(2 * j)] < node->bv[(2 * j)]) node->bv[(2 * j)] = node->children[i]->bv[(2 * j)]; @@ -619,17 +597,17 @@ static void build_implicit_tree_helper(BVHTree *tree, BVHBuildHelper *data) data->tree_type= tree->tree_type; //Calculate the smallest tree_type^n such that tree_type^n >= num_leafs - for ( - data->leafs_per_child[0] = 1; - data->leafs_per_child[0] < data->totleafs; - data->leafs_per_child[0] *= data->tree_type - ); + for (data->leafs_per_child[0] = 1; + data->leafs_per_child[0] < data->totleafs; + data->leafs_per_child[0] *= data->tree_type) + { + /* pass */ + } data->branches_on_level[0] = 1; //We could stop the loop first (but I am lazy to find out when) - for (depth = 1; depth < 32; depth++) - { + for (depth = 1; depth < 32; depth++) { data->branches_on_level[depth] = data->branches_on_level[depth-1] * data->tree_type; data->leafs_per_child [depth] = data->leafs_per_child [depth-1] / data->tree_type; } @@ -700,8 +678,7 @@ static int implicit_needed_branches(int tree_type, int leafs) static void split_leafs(BVHNode **leafs_array, int *nth, int partitions, int split_axis) { int i; - for (i=0; i < partitions-1; i++) - { + for (i=0; i < partitions-1; i++) { if (nth[i] >= nth[partitions]) break; @@ -742,8 +719,7 @@ static void non_recursive_bvh_div_nodes(BVHTree *tree, BVHNode *branches_array, //Most of bvhtree code relies on 1-leaf trees having at least one branch //We handle that special case here - if (num_leafs == 1) - { + if (num_leafs == 1) { BVHNode *root = branches_array+0; refit_kdop_hull(tree, root, 0, num_leafs); root->main_axis = get_largest_axis(root->bv) / 2; @@ -758,8 +734,7 @@ static void non_recursive_bvh_div_nodes(BVHTree *tree, BVHNode *branches_array, build_implicit_tree_helper(tree, &data); //Loop tree levels (log N) loops - for (i=1, depth = 1; i <= num_branches; i = i*tree_type + tree_offset, depth++) - { + for (i=1, depth = 1; i <= num_branches; i = i*tree_type + tree_offset, depth++) { const int first_of_next_level = i*tree_type + tree_offset; const int end_j = MIN2(first_of_next_level, num_branches + 1); //index of last branch on this level int j; @@ -885,22 +860,19 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis) tree->nodes = (BVHNode **)MEM_callocN(sizeof(BVHNode *)*numnodes, "BVHNodes"); - if (!tree->nodes) - { + if (!tree->nodes) { MEM_freeN(tree); return NULL; } tree->nodebv = (float*)MEM_callocN(sizeof(float)* axis * numnodes, "BVHNodeBV"); - if (!tree->nodebv) - { + if (!tree->nodebv) { MEM_freeN(tree->nodes); MEM_freeN(tree); } tree->nodechild = (BVHNode**)MEM_callocN(sizeof(BVHNode*) * tree_type * numnodes, "BVHNodeBV"); - if (!tree->nodechild) - { + if (!tree->nodechild) { MEM_freeN(tree->nodebv); MEM_freeN(tree->nodes); MEM_freeN(tree); @@ -908,8 +880,7 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis) tree->nodearray = (BVHNode *)MEM_callocN(sizeof(BVHNode)* numnodes, "BVHNodeArray"); - if (!tree->nodearray) - { + if (!tree->nodearray) { MEM_freeN(tree->nodechild); MEM_freeN(tree->nodebv); MEM_freeN(tree->nodes); @@ -918,8 +889,7 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis) } //link the dynamic bv and child links - for (i=0; i< numnodes; i++) - { + for (i=0; i< numnodes; i++) { tree->nodearray[i].bv = tree->nodebv + i * axis; tree->nodearray[i].children = tree->nodechild + i * tree_type; } @@ -931,8 +901,7 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis) void BLI_bvhtree_free(BVHTree *tree) { - if (tree) - { + if (tree) { MEM_freeN(tree->nodes); MEM_freeN(tree->nodearray); MEM_freeN(tree->nodebv); @@ -985,8 +954,7 @@ int BLI_bvhtree_insert(BVHTree *tree, int index, const float *co, int numpoints) node->index= index; // inflate the bv with some epsilon - for (i = tree->start_axis; i < tree->stop_axis; i++) - { + for (i = tree->start_axis; i < tree->stop_axis; i++) { node->bv[(2 * i)] -= tree->epsilon; // minimum node->bv[(2 * i) + 1] += tree->epsilon; // maximum } @@ -1013,8 +981,7 @@ int BLI_bvhtree_update_node(BVHTree *tree, int index, const float *co, const flo create_kdop_hull(tree, node, co_moving, numpoints, 1); // inflate the bv with some epsilon - for (i = tree->start_axis; i < tree->stop_axis; i++) - { + for (i = tree->start_axis; i < tree->stop_axis; i++) { node->bv[(2 * i)] -= tree->epsilon; // minimum node->bv[(2 * i) + 1] += tree->epsilon; // maximum } @@ -1057,8 +1024,7 @@ static int tree_overlap(BVHNode *node1, BVHNode *node2, int start_axis, int stop bv2 += start_axis<<1; // test all axis if min + max overlap - for (; bv1 != bv1_end; bv1+=2, bv2+=2) - { + for (; bv1 != bv1_end; bv1+=2, bv2+=2) { if ((*(bv1) > *(bv2 + 1)) || (*(bv2) > *(bv1 + 1))) return 0; } @@ -1070,27 +1036,21 @@ static void traverse(BVHOverlapData *data, BVHNode *node1, BVHNode *node2) { int j; - if (tree_overlap(node1, node2, data->start_axis, data->stop_axis)) - { + if (tree_overlap(node1, node2, data->start_axis, data->stop_axis)) { // check if node1 is a leaf - if (!node1->totnode) - { + if (!node1->totnode) { // check if node2 is a leaf - if (!node2->totnode) - { + if (!node2->totnode) { - if (node1 == node2) - { + if (node1 == node2) { return; } - if (data->i >= data->max_overlap) - { + if (data->i >= data->max_overlap) { // try to make alloc'ed memory bigger data->overlap = realloc(data->overlap, sizeof(BVHTreeOverlap)*data->max_overlap*2); - if (!data->overlap) - { + if (!data->overlap) { printf("Out of Memory in traverse\n"); return; } @@ -1103,20 +1063,15 @@ static void traverse(BVHOverlapData *data, BVHNode *node1, BVHNode *node2) data->i++; } - else - { - for (j = 0; j < data->tree2->tree_type; j++) - { + else { + for (j = 0; j < data->tree2->tree_type; j++) { if (node2->children[j]) traverse(data, node1, node2->children[j]); } } } - else - { - - for (j = 0; j < data->tree2->tree_type; j++) - { + else { + for (j = 0; j < data->tree2->tree_type; j++) { if (node1->children[j]) traverse(data, node1->children[j], node2); } @@ -1142,8 +1097,7 @@ BVHTreeOverlap *BLI_bvhtree_overlap(BVHTree *tree1, BVHTree *tree2, unsigned int data = MEM_callocN(sizeof(BVHOverlapData *)* tree1->tree_type, "BVHOverlapData_star"); - for (j = 0; j < tree1->tree_type; j++) - { + for (j = 0; j < tree1->tree_type; j++) { data[j] = (BVHOverlapData *)MEM_callocN(sizeof(BVHOverlapData), "BVHOverlapData"); // init BVHOverlapData @@ -1157,8 +1111,7 @@ BVHTreeOverlap *BLI_bvhtree_overlap(BVHTree *tree1, BVHTree *tree2, unsigned int } #pragma omp parallel for private(j) schedule(static) - for (j = 0; j < MIN2(tree1->tree_type, tree1->nodes[tree1->totleaf]->totnode); j++) - { + for (j = 0; j < MIN2(tree1->tree_type, tree1->nodes[tree1->totleaf]->totnode); j++) { traverse(data[j], tree1->nodes[tree1->totleaf]->children[j], tree2->nodes[tree2->totleaf]); } @@ -1167,14 +1120,12 @@ BVHTreeOverlap *BLI_bvhtree_overlap(BVHTree *tree1, BVHTree *tree2, unsigned int to = overlap = (BVHTreeOverlap *)MEM_callocN(sizeof(BVHTreeOverlap)*total, "BVHTreeOverlap"); - for (j = 0; j < tree1->tree_type; j++) - { + for (j = 0; j < tree1->tree_type; j++) { memcpy(to, data[j]->overlap, data[j]->i*sizeof(BVHTreeOverlap)); to+=data[j]->i; } - for (j = 0; j < tree1->tree_type; j++) - { + for (j = 0; j < tree1->tree_type; j++) { free(data[j]->overlap); MEM_freeN(data[j]); } @@ -1191,8 +1142,7 @@ static float calc_nearest_point(const float proj[3], BVHNode *node, float *neare const float *bv = node->bv; //nearest on AABB hull - for (i=0; i != 3; i++, bv += 2) - { + for (i=0; i != 3; i++, bv += 2) { if (bv[0] > proj[i]) nearest[i] = bv[0]; else if (bv[1] < proj[i]) @@ -1235,35 +1185,28 @@ typedef struct NodeDistance // TODO: use a priority queue to reduce the number of nodes looked on static void dfs_find_nearest_dfs(BVHNearestData *data, BVHNode *node) { - if (node->totnode == 0) - { + if (node->totnode == 0) { if (data->callback) data->callback(data->userdata , node->index, data->co, &data->nearest); - else - { + else { data->nearest.index = node->index; data->nearest.dist = calc_nearest_point(data->proj, node, data->nearest.co); } } - else - { + else { //Better heuristic to pick the closest node to dive on int i; float nearest[3]; - if (data->proj[ node->main_axis ] <= node->children[0]->bv[node->main_axis*2+1]) - { + if (data->proj[ node->main_axis ] <= node->children[0]->bv[node->main_axis*2+1]) { - for (i=0; i != node->totnode; i++) - { + for (i=0; i != node->totnode; i++) { if ( calc_nearest_point(data->proj, node->children[i], nearest) >= data->nearest.dist) continue; dfs_find_nearest_dfs(data, node->children[i]); } } - else - { - for (i=node->totnode-1; i >= 0 ; i--) - { + else { + for (i=node->totnode-1; i >= 0 ; i--) { if ( calc_nearest_point(data->proj, node->children[i], nearest) >= data->nearest.dist) continue; dfs_find_nearest_dfs(data, node->children[i]); } @@ -1381,17 +1324,14 @@ int BLI_bvhtree_find_nearest(BVHTree *tree, const float co[3], BVHTreeNearest *n data.callback = callback; data.userdata = userdata; - for (i = data.tree->start_axis; i != data.tree->stop_axis; i++) - { + for (i = data.tree->start_axis; i != data.tree->stop_axis; i++) { data.proj[i] = dot_v3v3(data.co, KDOP_AXES[i]); } - if (nearest) - { + if (nearest) { memcpy( &data.nearest , nearest, sizeof(*nearest) ); } - else - { + else { data.nearest.index = -1; data.nearest.dist = FLT_MAX; } @@ -1401,8 +1341,7 @@ int BLI_bvhtree_find_nearest(BVHTree *tree, const float co[3], BVHTreeNearest *n dfs_find_nearest_begin(&data, root); //copy back results - if (nearest) - { + if (nearest) { memcpy(nearest, &data.nearest, sizeof(*nearest)); } @@ -1424,10 +1363,8 @@ static float ray_nearest_hit(BVHRayCastData *data, float *bv) float low = 0, upper = data->hit.dist; - for (i=0; i != 3; i++, bv += 2) - { - if (data->ray_dot_axis[i] == 0.0f) - { + for (i=0; i != 3; i++, bv += 2) { + if (data->ray_dot_axis[i] == 0.0f) { //axis aligned ray if (data->ray.origin[i] < bv[0] - data->ray.radius || data->ray.origin[i] > bv[1] + data->ray.radius) @@ -1435,18 +1372,15 @@ static float ray_nearest_hit(BVHRayCastData *data, float *bv) return FLT_MAX; } } - else - { + else { float ll = (bv[0] - data->ray.radius - data->ray.origin[i]) / data->ray_dot_axis[i]; float lu = (bv[1] + data->ray.radius - data->ray.origin[i]) / data->ray_dot_axis[i]; - if (data->ray_dot_axis[i] > 0.0f) - { + if (data->ray_dot_axis[i] > 0.0f) { if (ll > low) low = ll; if (lu < upper) upper = lu; } - else - { + else { if (lu > low) low = lu; if (ll < upper) upper = ll; } @@ -1494,31 +1428,25 @@ static void dfs_raycast(BVHRayCastData *data, BVHNode *node) float dist = (data->ray.radius > 0.0f) ? ray_nearest_hit(data, node->bv) : fast_ray_nearest_hit(data, node); if (dist >= data->hit.dist) return; - if (node->totnode == 0) - { - if (data->callback) + if (node->totnode == 0) { + if (data->callback) { data->callback(data->userdata, node->index, &data->ray, &data->hit); - else - { + } + else { data->hit.index = node->index; data->hit.dist = dist; madd_v3_v3v3fl(data->hit.co, data->ray.origin, data->ray.direction, dist); } } - else - { + else { //pick loop direction to dive into the tree (based on ray direction and split axis) - if (data->ray_dot_axis[ (int)node->main_axis ] > 0.0f) - { - for (i=0; i != node->totnode; i++) - { + if (data->ray_dot_axis[ (int)node->main_axis ] > 0.0f) { + for (i=0; i != node->totnode; i++) { dfs_raycast(data, node->children[i]); } } - else - { - for (i=node->totnode-1; i >= 0; i--) - { + else { + for (i=node->totnode-1; i >= 0; i--) { dfs_raycast(data, node->children[i]); } } @@ -1575,13 +1503,11 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float dir[3], f normalize_v3(data.ray.direction); - for (i=0; i<3; i++) - { + for (i=0; i<3; i++) { data.ray_dot_axis[i] = dot_v3v3(data.ray.direction, KDOP_AXES[i]); data.idot_axis[i] = 1.0f / data.ray_dot_axis[i]; - if (fabsf(data.ray_dot_axis[i]) < FLT_EPSILON) - { + if (fabsf(data.ray_dot_axis[i]) < FLT_EPSILON) { data.ray_dot_axis[i] = 0.0; } data.index[2*i] = data.idot_axis[i] < 0.0f ? 1 : 0; @@ -1593,14 +1519,12 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float dir[3], f if (hit) memcpy( &data.hit, hit, sizeof(*hit) ); - else - { + else { data.hit.index = -1; data.hit.dist = FLT_MAX; } - if (root) - { + if (root) { dfs_raycast(&data, root); // iterative_raycast(&data, root); } @@ -1635,8 +1559,7 @@ float BLI_bvhtree_bb_raycast(float *bv, const float light_start[3], const float dist = ray_nearest_hit(&data, bv); - if (dist > 0.0f) - { + if (dist > 0.0f) { madd_v3_v3v3fl(pos, light_start, data.ray.direction, dist); } return dist; @@ -1666,8 +1589,7 @@ typedef struct RangeQueryData static void dfs_range_query(RangeQueryData *data, BVHNode *node) { - if (node->totnode == 0) - { + if (node->totnode == 0) { #if 0 /*UNUSED*/ //Calculate the node min-coords (if the node was a point then this is the point coordinates) float co[3]; @@ -1676,18 +1598,14 @@ static void dfs_range_query(RangeQueryData *data, BVHNode *node) co[2] = node->bv[4]; #endif } - else - { + else { int i; - for (i=0; i != node->totnode; i++) - { + for (i=0; i != node->totnode; i++) { float nearest[3]; float dist = calc_nearest_point(data->center, node->children[i], nearest); - if (dist < data->radius) - { + if (dist < data->radius) { //Its a leaf.. call the callback - if (node->children[i]->totnode == 0) - { + if (node->children[i]->totnode == 0) { data->hits++; data->callback(data->userdata, node->children[i]->index, dist); } @@ -1711,15 +1629,12 @@ int BLI_bvhtree_range_query(BVHTree *tree, const float co[3], float radius, BVHT data.callback = callback; data.userdata = userdata; - if (root != NULL) - { + if (root != NULL) { float nearest[3]; float dist = calc_nearest_point(data.center, root, nearest); - if (dist < data.radius) - { - //Its a leaf.. call the callback - if (root->totnode == 0) - { + if (dist < data.radius) { + /* Its a leaf.. call the callback */ + if (root->totnode == 0) { data.hits++; data.callback(data.userdata, root->index, dist); } diff --git a/source/blender/blenlib/intern/DLRB_tree.c b/source/blender/blenlib/intern/DLRB_tree.c index 0e90042a35f..7c5ee236a35 100644 --- a/source/blender/blenlib/intern/DLRB_tree.c +++ b/source/blender/blenlib/intern/DLRB_tree.c @@ -141,8 +141,7 @@ DLRBT_Node *BLI_dlrbTree_search (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp_cb, v return NULL; /* iteratively perform this search */ - while (node && found==0) - { + while (node && found == 0) { /* check if traverse further or not * NOTE: it is assumed that the values will be unit values only */ @@ -183,8 +182,7 @@ DLRBT_Node *BLI_dlrbTree_search_exact (DLRBT_Tree *tree, DLRBT_Comparator_FP cmp return NULL; /* iteratively perform this search */ - while (node && found==0) - { + while (node && found==0) { /* check if traverse further or not * NOTE: it is assumed that the values will be unit values only */ diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c index 0504ac5be60..7c3ad2c62a2 100644 --- a/source/blender/blenlib/intern/bpath.c +++ b/source/blender/blenlib/intern/bpath.c @@ -387,7 +387,7 @@ void bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int fla return; } - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_IM: ima= (Image *)id; if (ima->packedfile == NULL || (flag & BPATH_TRAVERSE_SKIP_PACKED) == 0) { diff --git a/source/blender/blenlib/intern/dynlib.c b/source/blender/blenlib/intern/dynlib.c index e300d09ffbc..c80f3e08e3b 100644 --- a/source/blender/blenlib/intern/dynlib.c +++ b/source/blender/blenlib/intern/dynlib.c @@ -85,7 +85,9 @@ char *BLI_dynlib_get_error_as_string(DynamicLibrary *lib) if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, sizeof(buf), NULL)) + { return buf; + } } return NULL; diff --git a/source/blender/blenlib/intern/freetypefont.c b/source/blender/blenlib/intern/freetypefont.c index a9a1f2bc57e..8f2a2e6f8b5 100644 --- a/source/blender/blenlib/intern/freetypefont.c +++ b/source/blender/blenlib/intern/freetypefont.c @@ -127,17 +127,21 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf npoints[j] = ftoutline.contours[j] - ftoutline.contours[j - 1]; } - // get number of on-curve points for beziertriples (including conic virtual on-points) + // get number of on-curve points for beziertriples (including conic virtual on-points) for (j = 0; j < ftoutline.n_contours; j++) { for (k = 0; k < npoints[j]; k++) { - if (j > 0) l = k + ftoutline.contours[j - 1] + 1; else l = k; - if (ftoutline.tags[l] == FT_Curve_Tag_On) - onpoints[j]++; + l = (j > 0) ? (k + ftoutline.contours[j - 1] + 1) : k; - if (k < npoints[j] - 1 ) + if (ftoutline.tags[l] == FT_Curve_Tag_On) + onpoints[j]++; + + if (k < npoints[j] - 1 ) { if ( ftoutline.tags[l] == FT_Curve_Tag_Conic && - ftoutline.tags[l+1] == FT_Curve_Tag_Conic) + ftoutline.tags[l+1] == FT_Curve_Tag_Conic) + { onpoints[j]++; + } + } } } @@ -398,8 +402,7 @@ static VFontData *objfnt_to_ftvfontdata(PackedFile * pf) } // Load characters - while (charcode < 256) - { + while (charcode < 256) { // Generate the font data freetypechar_to_vchar(face, charcode, vfd); diff --git a/source/blender/blenlib/intern/graph.c b/source/blender/blenlib/intern/graph.c index 75131f81ade..432a74a5890 100644 --- a/source/blender/blenlib/intern/graph.c +++ b/source/blender/blenlib/intern/graph.c @@ -46,13 +46,11 @@ static void flagAxialSymmetry(BNode *root_node, BNode *end_node, BArc *arc, int void BLI_freeNode(BGraph *graph, BNode *node) { - if (node->arcs) - { + if (node->arcs) { MEM_freeN(node->arcs); } - if (graph->free_node) - { + if (graph->free_node) { graph->free_node(node); } } @@ -70,8 +68,7 @@ BNode *BLI_otherNode(BArc *arc, BNode *node) void BLI_removeArc(BGraph *graph, BArc *arc) { - if (graph->free_arc) - { + if (graph->free_arc) { graph->free_arc(arc); } @@ -82,8 +79,7 @@ void BLI_flagNodes(BGraph *graph, int flag) { BNode *node; - for (node = graph->nodes.first; node; node = node->next) - { + for (node = graph->nodes.first; node; node = node->next) { node->flag = flag; } } @@ -92,8 +88,7 @@ void BLI_flagArcs(BGraph *graph, int flag) { BArc *arc; - for (arc = graph->arcs.first; arc; arc = arc->next) - { + for (arc = graph->arcs.first; arc; arc = arc->next) { arc->flag = flag; } } @@ -109,10 +104,8 @@ void BLI_buildAdjacencyList(BGraph *graph) BNode *node; BArc *arc; - for (node = graph->nodes.first; node; node = node->next) - { - if (node->arcs != NULL) - { + for (node = graph->nodes.first; node; node = node->next) { + if (node->arcs != NULL) { MEM_freeN(node->arcs); } @@ -122,16 +115,13 @@ void BLI_buildAdjacencyList(BGraph *graph) node->flag = 0; } - for (arc = graph->arcs.first; arc; arc= arc->next) - { + for (arc = graph->arcs.first; arc; arc= arc->next) { addArcToNodeAdjacencyList(arc->head, arc); addArcToNodeAdjacencyList(arc->tail, arc); } - for (node = graph->nodes.first; node; node = node->next) - { - if (node->degree != node->flag) - { + for (node = graph->nodes.first; node; node = node->next) { + if (node->degree != node->flag) { printf("error in node [%p]. Added only %i arcs out of %i\n", (void *)node, node->flag, node->degree); } } @@ -141,8 +131,7 @@ void BLI_rebuildAdjacencyListForNode(BGraph* graph, BNode *node) { BArc *arc; - if (node->arcs != NULL) - { + if (node->arcs != NULL) { MEM_freeN(node->arcs); } @@ -151,20 +140,16 @@ void BLI_rebuildAdjacencyListForNode(BGraph* graph, BNode *node) /* temporary use to indicate the first index available in the lists */ node->flag = 0; - for (arc = graph->arcs.first; arc; arc= arc->next) - { - if (arc->head == node) - { + for (arc = graph->arcs.first; arc; arc= arc->next) { + if (arc->head == node) { addArcToNodeAdjacencyList(arc->head, arc); } - else if (arc->tail == node) - { + else if (arc->tail == node) { addArcToNodeAdjacencyList(arc->tail, arc); } } - if (node->degree != node->flag) - { + if (node->degree != node->flag) { printf("error in node [%p]. Added only %i arcs out of %i\n", (void *)node, node->flag, node->degree); } } @@ -173,10 +158,8 @@ void BLI_freeAdjacencyList(BGraph *graph) { BNode *node; - for (node = graph->nodes.first; node; node = node->next) - { - if (node->arcs != NULL) - { + for (node = graph->nodes.first; node; node = node->next) { + if (node->arcs != NULL) { MEM_freeN(node->arcs); node->arcs = NULL; } @@ -187,10 +170,8 @@ int BLI_hasAdjacencyList(BGraph *graph) { BNode *node; - for (node = graph->nodes.first; node; node = node->next) - { - if (node->arcs == NULL) - { + for (node = graph->nodes.first; node; node = node->next) { + if (node->arcs == NULL) { return 0; } } @@ -200,28 +181,24 @@ int BLI_hasAdjacencyList(BGraph *graph) void BLI_replaceNodeInArc(BGraph *graph, BArc *arc, BNode *node_src, BNode *node_replaced) { - if (arc->head == node_replaced) - { + if (arc->head == node_replaced) { arc->head = node_src; node_src->degree++; } - if (arc->tail == node_replaced) - { + if (arc->tail == node_replaced) { arc->tail = node_src; node_src->degree++; } - if (arc->head == arc->tail) - { + if (arc->head == arc->tail) { node_src->degree -= 2; graph->free_arc(arc); BLI_freelinkN(&graph->arcs, arc); } - if (node_replaced->degree == 0) - { + if (node_replaced->degree == 0) { BLI_removeNode(graph, node_replaced); } } @@ -230,26 +207,22 @@ void BLI_replaceNode(BGraph *graph, BNode *node_src, BNode *node_replaced) { BArc *arc, *next_arc; - for (arc = graph->arcs.first; arc; arc = next_arc) - { + for (arc = graph->arcs.first; arc; arc = next_arc) { next_arc = arc->next; - if (arc->head == node_replaced) - { + if (arc->head == node_replaced) { arc->head = node_src; node_replaced->degree--; node_src->degree++; } - if (arc->tail == node_replaced) - { + if (arc->tail == node_replaced) { arc->tail = node_src; node_replaced->degree--; node_src->degree++; } - if (arc->head == arc->tail) - { + if (arc->head == arc->tail) { node_src->degree -= 2; graph->free_arc(arc); @@ -257,8 +230,7 @@ void BLI_replaceNode(BGraph *graph, BNode *node_src, BNode *node_replaced) } } - if (node_replaced->degree == 0) - { + if (node_replaced->degree == 0) { BLI_removeNode(graph, node_replaced); } } @@ -267,12 +239,9 @@ void BLI_removeDoubleNodes(BGraph *graph, float limit) { BNode *node_src, *node_replaced; - for (node_src = graph->nodes.first; node_src; node_src = node_src->next) - { - for (node_replaced = graph->nodes.first; node_replaced; node_replaced = node_replaced->next) - { - if (node_replaced != node_src && len_v3v3(node_replaced->p, node_src->p) <= limit) - { + for (node_src = graph->nodes.first; node_src; node_src = node_src->next) { + for (node_replaced = graph->nodes.first; node_replaced; node_replaced = node_replaced->next) { + if (node_replaced != node_src && len_v3v3(node_replaced->p, node_src->p) <= limit) { BLI_replaceNode(graph, node_src, node_replaced); } } @@ -285,11 +254,9 @@ BNode * BLI_FindNodeByPosition(BGraph *graph, float *p, float limit) BNode *closest_node = NULL, *node; float min_distance = 0.0f; - for (node = graph->nodes.first; node; node = node->next) - { + for (node = graph->nodes.first; node; node = node->next) { float distance = len_v3v3(p, node->p); - if (distance <= limit && (closest_node == NULL || distance < min_distance)) - { + if (distance <= limit && (closest_node == NULL || distance < min_distance)) { closest_node = node; min_distance = distance; } @@ -301,15 +268,13 @@ BNode * BLI_FindNodeByPosition(BGraph *graph, float *p, float limit) static void flagSubgraph(BNode *node, int subgraph) { - if (node->subgraph_index == 0) - { + if (node->subgraph_index == 0) { BArc *arc; int i; node->subgraph_index = subgraph; - for (i = 0; i < node->degree; i++) - { + for (i = 0; i < node->degree; i++) { arc = node->arcs[i]; flagSubgraph(BLI_otherNode(arc, node), subgraph); } @@ -321,20 +286,16 @@ int BLI_FlagSubgraphs(BGraph *graph) BNode *node; int subgraph = 0; - if (BLI_hasAdjacencyList(graph) == 0) - { + if (BLI_hasAdjacencyList(graph) == 0) { BLI_buildAdjacencyList(graph); } - for (node = graph->nodes.first; node; node = node->next) - { + for (node = graph->nodes.first; node; node = node->next) { node->subgraph_index = 0; } - for (node = graph->nodes.first; node; node = node->next) - { - if (node->subgraph_index == 0) - { + for (node = graph->nodes.first; node; node = node->next) { + if (node->subgraph_index == 0) { subgraph++; flagSubgraph(node, subgraph); } @@ -347,10 +308,8 @@ void BLI_ReflagSubgraph(BGraph *graph, int old_subgraph, int new_subgraph) { BNode *node; - for (node = graph->nodes.first; node; node = node->next) - { - if (node->flag == old_subgraph) - { + for (node = graph->nodes.first; node; node = node->next) { + if (node->flag == old_subgraph) { node->flag = new_subgraph; } } @@ -362,26 +321,22 @@ static int detectCycle(BNode *node, BArc *src_arc) { int value = 0; - if (node->flag == 0) - { + if (node->flag == 0) { int i; /* mark node as visited */ node->flag = 1; - for (i = 0; i < node->degree && value == 0; i++) - { + for (i = 0; i < node->degree && value == 0; i++) { BArc *arc = node->arcs[i]; /* don't go back on the source arc */ - if (arc != src_arc) - { + if (arc != src_arc) { value = detectCycle(BLI_otherNode(arc, node), arc); } } } - else - { + else { value = 1; } @@ -399,11 +354,9 @@ int BLI_isGraphCyclic(BGraph *graph) BLI_flagNodes(graph, 0); /* detectCycles in subgraphs */ - for (node = graph->nodes.first; node && value == 0; node = node->next) - { + for (node = graph->nodes.first; node && value == 0; node = node->next) { /* only for nodes in subgraphs that haven't been visited yet */ - if (node->flag == 0) - { + if (node->flag == 0) { value = value || detectCycle(node, NULL); } } @@ -415,10 +368,8 @@ BArc * BLI_findConnectedArc(BGraph *graph, BArc *arc, BNode *v) { BArc *nextArc; - for (nextArc = graph->arcs.first; nextArc; nextArc = nextArc->next) - { - if (arc != nextArc && (nextArc->head == v || nextArc->tail == v)) - { + for (nextArc = graph->arcs.first; nextArc; nextArc = nextArc->next) { + if (arc != nextArc && (nextArc->head == v || nextArc->tail == v)) { break; } } @@ -434,30 +385,24 @@ static int subtreeShape(BNode *node, BArc *rootArc, int include_root) node->flag = 1; - if (include_root) - { + if (include_root) { BNode *newNode = BLI_otherNode(rootArc, node); return subtreeShape(newNode, rootArc, 0); } - else - { + else { /* Base case, no arcs leading away */ - if (node->arcs == NULL || *(node->arcs) == NULL) - { + if (node->arcs == NULL || *(node->arcs) == NULL) { return 0; } - else - { + else { int i; - for (i = 0; i < node->degree; i++) - { + for (i = 0; i < node->degree; i++) { BArc *arc = node->arcs[i]; BNode *newNode = BLI_otherNode(arc, node); /* stop immediate and cyclic backtracking */ - if (arc != rootArc && newNode->flag == 0) - { + if (arc != rootArc && newNode->flag == 0) { depth += subtreeShape(newNode, arc, 0); } } @@ -480,13 +425,11 @@ float BLI_subtreeLength(BNode *node) node->flag = 0; /* flag node as visited */ - for (i = 0; i < node->degree; i++) - { + for (i = 0; i < node->degree; i++) { BArc *arc = node->arcs[i]; BNode *other_node = BLI_otherNode(arc, node); - if (other_node->flag != 0) - { + if (other_node->flag != 0) { float subgraph_length = arc->length + BLI_subtreeLength(other_node); length = MAX2(length, subgraph_length); } @@ -503,15 +446,12 @@ void BLI_calcGraphLength(BGraph *graph) nb_subgraphs = BLI_FlagSubgraphs(graph); - for (i = 1; i <= nb_subgraphs; i++) - { + for (i = 1; i <= nb_subgraphs; i++) { BNode *node; - for (node = graph->nodes.first; node; node = node->next) - { + for (node = graph->nodes.first; node; node = node->next) { /* start on an external node of the subgraph */ - if (node->subgraph_index == i && node->degree == 1) - { + if (node->subgraph_index == i && node->degree == 1) { float subgraph_length = BLI_subtreeLength(node); length = MAX2(length, subgraph_length); break; @@ -542,32 +482,27 @@ static void testRadialSymmetry(BGraph *graph, BNode* root_node, RadialArc* ring, int i; /* sort ring by angle */ - for (i = 0; i < total - 1; i++) - { + for (i = 0; i < total - 1; i++) { float minAngle = FLT_MAX; int minIndex = -1; int j; - for (j = i + 1; j < total; j++) - { + for (j = i + 1; j < total; j++) { float angle = dot_v3v3(ring[i].n, ring[j].n); /* map negative values to 1..2 */ - if (angle < 0) - { + if (angle < 0) { angle = 1 - angle; } - if (angle < minAngle) - { + if (angle < minAngle) { minIndex = j; minAngle = angle; } } /* swap if needed */ - if (minIndex != i + 1) - { + if (minIndex != i + 1) { RadialArc tmp; tmp = ring[i + 1]; ring[i + 1] = ring[minIndex]; @@ -575,8 +510,7 @@ static void testRadialSymmetry(BGraph *graph, BNode* root_node, RadialArc* ring, } } - for (i = 0; i < total && symmetric; i++) - { + for (i = 0; i < total && symmetric; i++) { BNode *node1, *node2; float tangent[3]; float normal[3]; @@ -593,29 +527,25 @@ static void testRadialSymmetry(BGraph *graph, BNode* root_node, RadialArc* ring, BLI_mirrorAlongAxis(p, root_node->p, normal); /* check if it's within limit before continuing */ - if (len_v3v3(node1->p, p) > limit) - { + if (len_v3v3(node1->p, p) > limit) { symmetric = 0; } } - if (symmetric) - { + if (symmetric) { /* mark node as symmetric physically */ copy_v3_v3(root_node->symmetry_axis, axis); root_node->symmetry_flag |= SYM_PHYSICAL; root_node->symmetry_flag |= SYM_RADIAL; /* FLAG SYMMETRY GROUP */ - for (i = 0; i < total; i++) - { + for (i = 0; i < total; i++) { ring[i].arc->symmetry_group = group; ring[i].arc->symmetry_flag = SYM_SIDE_RADIAL + i; } - if (graph->radial_symmetry) - { + if (graph->radial_symmetry) { graph->radial_symmetry(root_node, ring, total); } } @@ -634,13 +564,11 @@ static void handleRadialSymmetry(BGraph *graph, BNode *root_node, int depth, flo root_node->symmetry_flag |= SYM_TOPOLOGICAL; /* total the number of arcs in the symmetry ring */ - for (i = 0; i < root_node->degree; i++) - { + for (i = 0; i < root_node->degree; i++) { BArc *connectedArc = root_node->arcs[i]; /* depth is store as a negative in flag. symmetry level is positive */ - if (connectedArc->symmetry_level == -depth) - { + if (connectedArc->symmetry_level == -depth) { total++; } } @@ -649,13 +577,11 @@ static void handleRadialSymmetry(BGraph *graph, BNode *root_node, int depth, flo unit = ring; /* fill in the ring */ - for (unit = ring, i = 0; i < root_node->degree; i++) - { + for (unit = ring, i = 0; i < root_node->degree; i++) { BArc *connectedArc = root_node->arcs[i]; /* depth is store as a negative in flag. symmetry level is positive */ - if (connectedArc->symmetry_level == -depth) - { + if (connectedArc->symmetry_level == -depth) { BNode *otherNode = BLI_otherNode(connectedArc, root_node); float vec[3]; @@ -676,19 +602,16 @@ static void handleRadialSymmetry(BGraph *graph, BNode *root_node, int depth, flo * using a rather bogus insertion sort * butrings will never get too big to matter * */ - for (i = 0; i < total; i++) - { + for (i = 0; i < total; i++) { int j; - for (j = i - 1; j >= 0; j--) - { + for (j = i - 1; j >= 0; j--) { BArc *arc1, *arc2; arc1 = ring[j].arc; arc2 = ring[j + 1].arc; - if (arc1->length > arc2->length) - { + if (arc1->length > arc2->length) { /* swap with smaller */ RadialArc tmp; @@ -696,8 +619,7 @@ static void handleRadialSymmetry(BGraph *graph, BNode *root_node, int depth, flo ring[j + 1] = ring[j]; ring[j] = tmp; } - else - { + else { break; } } @@ -707,38 +629,32 @@ static void handleRadialSymmetry(BGraph *graph, BNode *root_node, int depth, flo first = 0; group = 0; - for (i = 1; i < total; i++) - { + for (i = 1; i < total; i++) { int dispatch = 0; int last = i - 1; - if (fabsf(ring[first].arc->length - ring[i].arc->length) > limit) - { + if (fabsf(ring[first].arc->length - ring[i].arc->length) > limit) { dispatch = 1; } /* if not dispatching already and on last arc * Dispatch using current arc as last * */ - if (dispatch == 0 && i == total - 1) - { + if (dispatch == 0 && i == total - 1) { last = i; dispatch = 1; } - if (dispatch) - { + if (dispatch) { int sub_total = last - first + 1; group += 1; - if (sub_total == 1) - { + if (sub_total == 1) { group -= 1; /* not really a group so decrement */ /* NOTHING TO DO */ } - else if (sub_total == 2) - { + else if (sub_total == 2) { BArc *arc1, *arc2; BNode *node1, *node2; @@ -750,14 +666,12 @@ static void handleRadialSymmetry(BGraph *graph, BNode *root_node, int depth, flo testAxialSymmetry(graph, root_node, node1, node2, arc1, arc2, axis, limit, group); } - else if (sub_total != total) /* allocate a new sub ring if needed */ - { + else if (sub_total != total) /* allocate a new sub ring if needed */ { RadialArc *sub_ring = MEM_callocN(sizeof(RadialArc) * sub_total, "radial symmetry ring"); int sub_i; /* fill in the sub ring */ - for (sub_i = 0; sub_i < sub_total; sub_i++) - { + for (sub_i = 0; sub_i < sub_total; sub_i++) { sub_ring[sub_i] = ring[first + sub_i]; } @@ -765,8 +679,7 @@ static void handleRadialSymmetry(BGraph *graph, BNode *root_node, int depth, flo MEM_freeN(sub_ring); } - else if (sub_total == total) - { + else if (sub_total == total) { testRadialSymmetry(graph, root_node, ring, total, axis, limit, group); } @@ -786,12 +699,10 @@ static void flagAxialSymmetry(BNode *root_node, BNode *end_node, BArc *arc, int sub_v3_v3v3(vec, end_node->p, root_node->p); - if (dot_v3v3(vec, root_node->symmetry_axis) < 0) - { + if (dot_v3v3(vec, root_node->symmetry_axis) < 0) { arc->symmetry_flag |= SYM_SIDE_NEGATIVE; } - else - { + else { arc->symmetry_flag |= SYM_SIDE_POSITIVE; } } @@ -809,16 +720,13 @@ static void testAxialSymmetry(BGraph *graph, BNode* root_node, BNode* node1, BNo cross_v3_v3v3(nor, vec, axis); - if (abs(nor[0]) > abs(nor[1]) && abs(nor[0]) > abs(nor[2]) && nor[0] < 0) - { + if (abs(nor[0]) > abs(nor[1]) && abs(nor[0]) > abs(nor[2]) && nor[0] < 0) { negate_v3(nor); } - else if (abs(nor[1]) > abs(nor[0]) && abs(nor[1]) > abs(nor[2]) && nor[1] < 0) - { + else if (abs(nor[1]) > abs(nor[0]) && abs(nor[1]) > abs(nor[2]) && nor[1] < 0) { negate_v3(nor); } - else if (abs(nor[2]) > abs(nor[1]) && abs(nor[2]) > abs(nor[0]) && nor[2] < 0) - { + else if (abs(nor[2]) > abs(nor[1]) && abs(nor[2]) > abs(nor[0]) && nor[2] < 0) { negate_v3(nor); } @@ -827,8 +735,7 @@ static void testAxialSymmetry(BGraph *graph, BNode* root_node, BNode* node1, BNo BLI_mirrorAlongAxis(p, root_node->p, nor); /* check if it's within limit before continuing */ - if (len_v3v3(node1->p, p) <= limit) - { + if (len_v3v3(node1->p, p) <= limit) { /* mark node as symmetric physically */ copy_v3_v3(root_node->symmetry_axis, nor); root_node->symmetry_flag |= SYM_PHYSICAL; @@ -838,13 +745,11 @@ static void testAxialSymmetry(BGraph *graph, BNode* root_node, BNode* node1, BNo flagAxialSymmetry(root_node, node1, arc1, group); flagAxialSymmetry(root_node, node2, arc2, group); - if (graph->axial_symmetry) - { + if (graph->axial_symmetry) { graph->axial_symmetry(root_node, node1, node2, arc1, arc2); } } - else - { + else { /* NOT SYMMETRIC */ } } @@ -858,20 +763,16 @@ static void handleAxialSymmetry(BGraph *graph, BNode *root_node, int depth, floa /* mark topological symmetry */ root_node->symmetry_flag |= SYM_TOPOLOGICAL; - for (i = 0; i < root_node->degree; i++) - { + for (i = 0; i < root_node->degree; i++) { BArc *connectedArc = root_node->arcs[i]; /* depth is store as a negative in flag. symmetry level is positive */ - if (connectedArc->symmetry_level == -depth) - { - if (arc1 == NULL) - { + if (connectedArc->symmetry_level == -depth) { + if (arc1 == NULL) { arc1 = connectedArc; node1 = BLI_otherNode(arc1, root_node); } - else - { + else { arc2 = connectedArc; node2 = BLI_otherNode(arc2, root_node); break; /* Can stop now, the two arcs have been found */ @@ -880,8 +781,7 @@ static void handleAxialSymmetry(BGraph *graph, BNode *root_node, int depth, floa } /* shouldn't happen, but just to be sure */ - if (node1 == NULL || node2 == NULL) - { + if (node1 == NULL || node2 == NULL) { return; } @@ -897,18 +797,15 @@ static void markdownSecondarySymmetry(BGraph *graph, BNode *node, int depth, int /* count the number of branches in this symmetry group * and determinate the axis of symmetry * */ - for (i = 0; i < node->degree; i++) - { + for (i = 0; i < node->degree; i++) { BArc *connectedArc = node->arcs[i]; /* depth is store as a negative in flag. symmetry level is positive */ - if (connectedArc->symmetry_level == -depth) - { + if (connectedArc->symmetry_level == -depth) { count++; } /* If arc is on the axis */ - else if (connectedArc->symmetry_level == level) - { + else if (connectedArc->symmetry_level == level) { add_v3_v3(axis, connectedArc->head->p); sub_v3_v3v3(axis, axis, connectedArc->tail->p); } @@ -917,22 +814,18 @@ static void markdownSecondarySymmetry(BGraph *graph, BNode *node, int depth, int normalize_v3(axis); /* Split between axial and radial symmetry */ - if (count == 2) - { + if (count == 2) { handleAxialSymmetry(graph, node, depth, axis, limit); } - else - { + else { handleRadialSymmetry(graph, node, depth, axis, limit); } /* markdown secondary symetries */ - for (i = 0; i < node->degree; i++) - { + for (i = 0; i < node->degree; i++) { BArc *connectedArc = node->arcs[i]; - if (connectedArc->symmetry_level == -depth) - { + if (connectedArc->symmetry_level == -depth) { /* markdown symmetry for branches corresponding to the depth */ markdownSymmetryArc(graph, connectedArc, node, level + 1, limit); } @@ -944,19 +837,16 @@ static void markdownSymmetryArc(BGraph *graph, BArc *arc, BNode *node, int level int i; /* if arc is null, we start straight from a node */ - if (arc) - { + if (arc) { arc->symmetry_level = level; node = BLI_otherNode(arc, node); } - for (i = 0; i < node->degree; i++) - { + for (i = 0; i < node->degree; i++) { BArc *connectedArc = node->arcs[i]; - if (connectedArc != arc) - { + if (connectedArc != arc) { BNode *connectedNode = BLI_otherNode(connectedArc, node); /* symmetry level is positive value, negative values is subtree depth */ @@ -966,26 +856,22 @@ static void markdownSymmetryArc(BGraph *graph, BArc *arc, BNode *node, int level arc = NULL; - for (i = 0; i < node->degree; i++) - { + for (i = 0; i < node->degree; i++) { int issymmetryAxis = 0; BArc *connectedArc = node->arcs[i]; /* only arcs not already marked as symetric */ - if (connectedArc->symmetry_level < 0) - { + if (connectedArc->symmetry_level < 0) { int j; /* true by default */ issymmetryAxis = 1; - for (j = 0; j < node->degree; j++) - { + for (j = 0; j < node->degree; j++) { BArc *otherArc = node->arcs[j]; /* different arc, same depth */ - if (otherArc != connectedArc && otherArc->symmetry_level == connectedArc->symmetry_level) - { + if (otherArc != connectedArc && otherArc->symmetry_level == connectedArc->symmetry_level) { /* not on the symmetry axis */ issymmetryAxis = 0; break; @@ -994,15 +880,12 @@ static void markdownSymmetryArc(BGraph *graph, BArc *arc, BNode *node, int level } /* arc could be on the symmetry axis */ - if (issymmetryAxis == 1) - { + if (issymmetryAxis == 1) { /* no arc as been marked previously, keep this one */ - if (arc == NULL) - { + if (arc == NULL) { arc = connectedArc; } - else if (connectedArc->symmetry_level < arc->symmetry_level) - { + else if (connectedArc->symmetry_level < arc->symmetry_level) { /* go with more complex subtree as symmetry arc */ arc = connectedArc; } @@ -1010,20 +893,17 @@ static void markdownSymmetryArc(BGraph *graph, BArc *arc, BNode *node, int level } /* go down the arc continuing the symmetry axis */ - if (arc) - { + if (arc) { markdownSymmetryArc(graph, arc, node, level, limit); } /* secondary symmetry */ - for (i = 0; i < node->degree; i++) - { + for (i = 0; i < node->degree; i++) { BArc *connectedArc = node->arcs[i]; /* only arcs not already marked as symetric and is not the next arc on the symmetry axis */ - if (connectedArc->symmetry_level < 0) - { + if (connectedArc->symmetry_level < 0) { /* subtree depth is store as a negative value in the symmetry */ markdownSecondarySymmetry(graph, node, -connectedArc->symmetry_level, level, limit); } @@ -1035,13 +915,11 @@ void BLI_markdownSymmetry(BGraph *graph, BNode *root_node, float limit) BNode *node; BArc *arc; - if (root_node == NULL) - { + if (root_node == NULL) { return; } - if (BLI_isGraphCyclic(graph)) - { + if (BLI_isGraphCyclic(graph)) { return; } @@ -1054,37 +932,29 @@ void BLI_markdownSymmetry(BGraph *graph, BNode *root_node, float limit) node = root_node; /* sanity check REMOVE ME */ - if (node->degree > 0) - { + if (node->degree > 0) { arc = node->arcs[0]; - if (node->degree == 1) - { + if (node->degree == 1) { markdownSymmetryArc(graph, arc, node, 1, limit); } - else - { + else { markdownSymmetryArc(graph, NULL, node, 1, limit); } /* mark down non-symetric arcs */ - for (arc = graph->arcs.first; arc; arc = arc->next) - { - if (arc->symmetry_level < 0) - { + for (arc = graph->arcs.first; arc; arc = arc->next) { + if (arc->symmetry_level < 0) { arc->symmetry_level = 0; } - else - { + else { /* mark down nodes with the lowest level symmetry axis */ - if (arc->head->symmetry_level == 0 || arc->head->symmetry_level > arc->symmetry_level) - { + if (arc->head->symmetry_level == 0 || arc->head->symmetry_level > arc->symmetry_level) { arc->head->symmetry_level = arc->symmetry_level; } - if (arc->tail->symmetry_level == 0 || arc->tail->symmetry_level > arc->symmetry_level) - { + if (arc->tail->symmetry_level == 0 || arc->tail->symmetry_level > arc->symmetry_level) { arc->tail->symmetry_level = arc->symmetry_level; } } @@ -1108,16 +978,13 @@ void* IT_peek(void* arg, int n) { BArcIterator *iter = (BArcIterator*)arg; - if (iter->index + n < 0) - { + if (iter->index + n < 0) { return iter->head(iter); } - else if (iter->index + n >= iter->length) - { + else if (iter->index + n >= iter->length) { return iter->tail(iter); } - else - { + else { return iter->peek(iter, n); } } diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c index b2b18286cfb..f7114822dfd 100644 --- a/source/blender/blenlib/intern/listbase.c +++ b/source/blender/blenlib/intern/listbase.c @@ -184,8 +184,7 @@ void BLI_sortlist(ListBase *listbase, int (*cmp)(void *, void *)) BLI_remlink(listbase, current); - while (previous && cmp(previous, current) == 1) - { + while (previous && cmp(previous, current) == 1) { previous = previous->prev; } diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c index 3c59ca8d52b..f52921cd19b 100644 --- a/source/blender/blenlib/intern/path_util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -1156,7 +1156,7 @@ char *BLI_get_folder_version(const int id, const int ver, const int do_check) { static char path[FILE_MAX] = ""; int ok; - switch(id) { + switch (id) { case BLENDER_RESOURCE_PATH_USER: ok= get_path_user(path, NULL, NULL, NULL, ver); break; diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c index 7a955cf6ed9..f4481c37f2d 100644 --- a/source/blender/blenlib/intern/pbvh.c +++ b/source/blender/blenlib/intern/pbvh.c @@ -1151,7 +1151,7 @@ static void pbvh_update_draw_buffers(PBVH *bvh, PBVHNode **nodes, int totnode) } if (node->flag & PBVH_UpdateDrawBuffers) { - switch(bvh->type) { + switch (bvh->type) { case PBVH_GRIDS: GPU_update_grid_buffers(node->draw_buffers, bvh->grids, @@ -1290,7 +1290,9 @@ void BLI_pbvh_get_grid_updates(PBVH *bvh, int clear, void ***gridfaces, int *tot for (hiter = BLI_ghashIterator_new(map), i = 0; !BLI_ghashIterator_isDone(hiter); BLI_ghashIterator_step(hiter), ++i) + { faces[i]= BLI_ghashIterator_getKey(hiter); + } BLI_ghashIterator_free(hiter); @@ -1345,7 +1347,7 @@ void BLI_pbvh_node_num_verts(PBVH *bvh, PBVHNode *node, int *uniquevert, int *to { int tot; - switch(bvh->type) { + switch (bvh->type) { case PBVH_GRIDS: tot= node->totprim*bvh->gridsize*bvh->gridsize; if (totvert) *totvert= tot; @@ -1360,7 +1362,7 @@ void BLI_pbvh_node_num_verts(PBVH *bvh, PBVHNode *node, int *uniquevert, int *to void BLI_pbvh_node_get_grids(PBVH *bvh, PBVHNode *node, int **grid_indices, int *totgrid, int *maxgrid, int *gridsize, DMGridData ***griddata, DMGridAdjacency **gridadj) { - switch(bvh->type) { + switch (bvh->type) { case PBVH_GRIDS: if (grid_indices) *grid_indices= node->prim_indices; if (totgrid) *totgrid= node->totprim; @@ -1504,7 +1506,7 @@ int BLI_pbvh_node_raycast(PBVH *bvh, PBVHNode *node, float (*origco)[3], if (node->flag & PBVH_FullyHidden) return 0; - switch(bvh->type) { + switch (bvh->type) { case PBVH_FACES: vert = bvh->verts; faces= node->prim_indices; diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c index 4c92a872ed7..b2245226a3c 100644 --- a/source/blender/blenlib/intern/string.c +++ b/source/blender/blenlib/intern/string.c @@ -125,7 +125,7 @@ size_t BLI_strescape(char *dst, const char *src, const size_t maxlen) { size_t len= 0; while (len < maxlen) { - switch(*src) { + switch (*src) { case '\0': goto escape_finish; case '\\': diff --git a/source/blender/blenlib/intern/string_utf8.c b/source/blender/blenlib/intern/string_utf8.c index aede08be7f9..20c5c8082ce 100644 --- a/source/blender/blenlib/intern/string_utf8.c +++ b/source/blender/blenlib/intern/string_utf8.c @@ -168,7 +168,7 @@ static const size_t utf8_skip_data[256] = { size_t utf8_size; \ while (*src != '\0' && (utf8_size= utf8_skip_data[*src]) < maxncpy) { \ maxncpy -= utf8_size; \ - switch(utf8_size) { \ + switch (utf8_size) { \ case 6: *dst ++ = *src ++; \ case 5: *dst ++ = *src ++; \ case 4: *dst ++ = *src ++; \ diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c index 49990a953f6..8f3131c733a 100644 --- a/source/blender/blenloader/intern/readblenentry.c +++ b/source/blender/blenloader/intern/readblenentry.c @@ -156,8 +156,7 @@ LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *to for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) { if (bhead->code==ofblocktype) { char *idname= bhead_id_name(fd, bhead); - switch(GS(idname)) - { + switch (GS(idname)) { case ID_MA: /* fall through */ case ID_TE: /* fall through */ case ID_IM: /* fall through */ diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index d278d3733e6..545ba2f198f 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -1061,8 +1061,7 @@ void blo_freefiledata(FileData *fd) close(fd->filedes); } - if (fd->gzfiledes != NULL) - { + if (fd->gzfiledes != NULL) { gzclose(fd->gzfiledes); } @@ -2756,9 +2755,9 @@ static void switch_endian_keyblock(Key *key, KeyBlock *kb) cp= key->elemstr; poin= data; - while ( cp[0] ) { /* cp[0]==amount */ + while ( cp[0] ) { /* cp[0] == amount */ - switch(cp[1]) { /* cp[1]= type */ + switch (cp[1]) { /* cp[1] = type */ case IPO_FLOAT: case IPO_BPOINT: case IPO_BEZTRIPLE: @@ -3442,7 +3441,7 @@ static void lib_link_particlesettings(FileData *fd, Main *main) for (; state; state=state->next) { rule = state->rules.first; for (; rule; rule=rule->next) - switch(rule->type) { + switch (rule->type) { case eBoidRuleType_Goal: case eBoidRuleType_Avoid: { @@ -4235,8 +4234,7 @@ static void lib_link_object(FileData *fd, Main *main) { SmokeModifierData *smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke); - if (smd && smd->type == MOD_SMOKE_TYPE_DOMAIN && smd->domain) - { + if (smd && smd->type == MOD_SMOKE_TYPE_DOMAIN && smd->domain) { smd->domain->flags |= MOD_SMOKE_FILE_LOAD; /* flag for refreshing the simulation after loading */ } } @@ -4359,8 +4357,7 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) else if (md->type==eModifierType_Smoke) { SmokeModifierData *smd = (SmokeModifierData*) md; - if (smd->type==MOD_SMOKE_TYPE_DOMAIN) - { + if (smd->type==MOD_SMOKE_TYPE_DOMAIN) { smd->flow = NULL; smd->coll = NULL; smd->domain = newdataadr(fd, smd->domain); @@ -4405,8 +4402,7 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) smd->flow = NULL; smd->domain = NULL; smd->coll = newdataadr(fd, smd->coll); - if (smd->coll) - { + if (smd->coll) { smd->coll->points = NULL; smd->coll->numpoints = 0; } @@ -4418,8 +4414,7 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) else if (md->type==eModifierType_DynamicPaint) { DynamicPaintModifierData *pmd = (DynamicPaintModifierData*) md; - if (pmd->canvas) - { + if (pmd->canvas) { pmd->canvas = newdataadr(fd, pmd->canvas); pmd->canvas->pmd = pmd; pmd->canvas->dm = NULL; @@ -4439,8 +4434,7 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) } } } - if (pmd->brush) - { + if (pmd->brush) { pmd->brush = newdataadr(fd, pmd->brush); pmd->brush->pmd = pmd; pmd->brush->psys = newdataadr(fd, pmd->brush->psys); @@ -6089,8 +6083,7 @@ static void direct_link_sound(FileData *fd, bSound *sound) sound->waveform = NULL; // versioning stuff, if there was a cache, then we enable caching: - if (sound->cache) - { + if (sound->cache) { sound->flags |= SOUND_FLAGS_CACHING; sound->cache = NULL; } @@ -6233,8 +6226,7 @@ static void lib_link_movieclip(FileData *fd, Main *main) static const char *dataname(short id_code) { - - switch( id_code ) { + switch ( id_code ) { case ID_OB: return "Data from OB"; case ID_ME: return "Data from ME"; case ID_IP: return "Data from IP"; @@ -6344,7 +6336,7 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID bhead= read_data_into_oldnewmap(fd, bhead, allocname); /* init pointers direct data */ - switch( GS(id->name) ) { + switch (GS(id->name)) { case ID_WM: direct_link_windowmanager(fd, (wmWindowManager *)id); break; @@ -6922,7 +6914,7 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) if (sl) { /* first channels for ipo action nla... */ - switch(sl->spacetype) { + switch (sl->spacetype) { case SPACE_IPO: ar= MEM_callocN(sizeof(ARegion), "area region from do_versions"); BLI_addtail(lb, ar); @@ -7044,7 +7036,7 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb) if (sl) { /* if active spacetype has view2d data, copy that over to main region */ /* and we split view3d */ - switch(sl->spacetype) { + switch (sl->spacetype) { case SPACE_VIEW3D: view3d_split_250((View3D *)sl, lb); break; @@ -7450,8 +7442,7 @@ static void do_version_constraints_radians_degrees_250(ListBase *lb) static void do_version_old_trackto_to_constraints(Object *ob) { /* create new trackto constraint from the relationship */ - if (ob->track) - { + if (ob->track) { bConstraint *con= add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_TRACKTO); bTrackToConstraint *data = con->data; @@ -8336,8 +8327,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) Mesh *me; sound = main->sound.first; - while (sound) - { + while (sound) { sound->max_gain = 1.0; sound->min_gain = 0.0; sound->distance = 1.0; @@ -9753,17 +9743,16 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if (md->type==eModifierType_Mirror) { MirrorModifierData *mmd = (MirrorModifierData*) md; - switch(mmd->axis) - { - case 0: - mmd->flag |= MOD_MIR_AXIS_X; - break; - case 1: - mmd->flag |= MOD_MIR_AXIS_Y; - break; - case 2: - mmd->flag |= MOD_MIR_AXIS_Z; - break; + switch (mmd->axis) { + case 0: + mmd->flag |= MOD_MIR_AXIS_X; + break; + case 1: + mmd->flag |= MOD_MIR_AXIS_Y; + break; + case 2: + mmd->flag |= MOD_MIR_AXIS_Z; + break; } mmd->axis = 0; @@ -10062,8 +10051,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) * */ { Scene *sce; - for (sce=main->scene.first; sce; sce = sce->id.next) - { + for (sce=main->scene.first; sce; sce = sce->id.next) { if (sce->toolsettings->skgen_subdivisions[0] == sce->toolsettings->skgen_subdivisions[1] || sce->toolsettings->skgen_subdivisions[0] == sce->toolsettings->skgen_subdivisions[2] || sce->toolsettings->skgen_subdivisions[1] == sce->toolsettings->skgen_subdivisions[2]) @@ -10479,13 +10467,11 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } // convert fluids to modifier - if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) - { + if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) { Object *ob; for (ob = main->object.first; ob; ob= ob->id.next) { - if (ob->fluidsimSettings) - { + if (ob->fluidsimSettings) { FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifier_new(eModifierType_Fluidsim); BLI_addhead(&ob->modifiers, (ModifierData *)fluidmd); @@ -10809,10 +10795,8 @@ static void do_versions(FileData *fd, Library *lib, Main *main) bActuator *act; int a; - for (sound = main->sound.first; sound; sound = sound->id.next) - { - if (sound->newpackedfile) - { + for (sound = main->sound.first; sound; sound = sound->id.next) { + if (sound->newpackedfile) { sound->packedfile = sound->newpackedfile; sound->newpackedfile = NULL; } @@ -10822,8 +10806,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) for (act= ob->actuators.first; act; act= act->next) { if (act->type == ACT_SOUND) { bSoundActuator *sAct = (bSoundActuator*) act->data; - if (sAct->sound) - { + if (sAct->sound) { sound = newlibadr(fd, lib, sAct->sound); sAct->flag = sound->flags & SOUND_FLAGS_3D ? ACT_SND_3D_SOUND : 0; sAct->pitch = sound->pitch; @@ -10846,13 +10829,10 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - for (scene = main->scene.first; scene; scene = scene->id.next) - { - if (scene->ed && scene->ed->seqbasep) - { + for (scene = main->scene.first; scene; scene = scene->id.next) { + if (scene->ed && scene->ed->seqbasep) { SEQ_BEGIN(scene->ed, seq) { - if (seq->type == SEQ_HD_SOUND) - { + if (seq->type == SEQ_HD_SOUND) { char str[FILE_MAX]; BLI_join_dirfile(str, sizeof(str), seq->strip->dir, seq->strip->stripdata->name); BLI_path_abs(str, main->name); @@ -11228,8 +11208,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if (tex->vd->extend == 0) tex->vd->extend = TEX_CLIP; - for (sce= main->scene.first; sce; sce= sce->id.next) - { + for (sce= main->scene.first; sce; sce= sce->id.next) { if (sce->audio.main == 0.0f) sce->audio.main = 1.0f; @@ -11371,8 +11350,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 8)) - { + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 8)) { { Scene *sce= main->scene.first; while (sce) { @@ -11494,8 +11472,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 9)) - { + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 9)) { Scene *sce; Mesh *me; Object *ob; @@ -11521,8 +11498,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 10)) - { + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 10)) { Object *ob; /* properly initialize hair clothsim data on old files */ @@ -11539,8 +11515,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } /* fix bad area setup in subversion 10 */ - if (main->versionfile == 250 && main->subversionfile == 10) - { + if (main->versionfile == 250 && main->subversionfile == 10) { /* fix for new view type in sequencer */ bScreen *screen; ScrArea *sa; @@ -11579,8 +11554,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 11)) - { + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 11)) { { /* fix for new view type in sequencer */ bScreen *screen; @@ -11622,8 +11596,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 12)) - { + if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 12)) { Scene *sce; Object *ob; Brush *brush; @@ -11984,8 +11957,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } - if (main->versionfile < 253) - { + if (main->versionfile < 253) { Object *ob; Scene *scene; bScreen *sc; @@ -12196,8 +12168,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 253 || (main->versionfile == 253 && main->subversionfile < 1)) - { + if (main->versionfile < 253 || (main->versionfile == 253 && main->subversionfile < 1)) { Object *ob; for (ob = main->object.first; ob; ob = ob->id.next) { @@ -12206,8 +12177,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if (md->type == eModifierType_Smoke) { SmokeModifierData *smd = (SmokeModifierData *)md; - if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) - { + if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) { smd->domain->vorticity = 2.0f; smd->domain->time_scale = 1.0f; @@ -12226,8 +12196,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if (md2->type == eModifierType_Smoke) { SmokeModifierData *smd2 = (SmokeModifierData *)md2; - if ((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) - { + if ((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) { smd2->flow->flags |= MOD_SMOKE_FLOW_INITVELOCITY; } } @@ -12313,8 +12282,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) for (act= ob->actuators.first; act; act= act->next) { if (act->type==ACT_STEERING) { bSteeringActuator* stact = act->data; - if (stact->facingaxis==0) - { + if (stact->facingaxis==0) { stact->facingaxis=1; } } @@ -12574,8 +12542,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) Scene *scene; Sequence *seq; - for (scene=main->scene.first; scene; scene=scene->id.next) - { + for (scene=main->scene.first; scene; scene=scene->id.next) { scene->r.ffcodecdata.audio_channels = 2; scene->audio.volume = 1.0f; SEQ_BEGIN(scene->ed, seq) { @@ -12749,8 +12716,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) { /* set defaults for obstacle avoidance, recast data */ Scene *sce; - for (sce = main->scene.first; sce; sce = sce->id.next) - { + for (sce = main->scene.first; sce; sce = sce->id.next) { if (sce->gm.levelHeight == 0.f) sce->gm.levelHeight = 2.f; @@ -12930,8 +12896,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 260 || (main->versionfile == 260 && main->subversionfile < 6)) - { + if (main->versionfile < 260 || (main->versionfile == 260 && main->subversionfile < 6)) { Scene *sce; MovieClip *clip; bScreen *sc; @@ -12995,8 +12960,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 260 || (main->versionfile == 260 && main->subversionfile < 8)) - { + if (main->versionfile < 260 || (main->versionfile == 260 && main->subversionfile < 8)) { Brush *brush; for (brush= main->brush.first; brush; brush= brush->id.next) { @@ -13005,8 +12969,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 261 || (main->versionfile == 261 && main->subversionfile < 1)) - { + if (main->versionfile < 261 || (main->versionfile == 261 && main->subversionfile < 1)) { { /* update use flags for node sockets (was only temporary before) */ Scene *sce; @@ -13107,8 +13070,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 261 || (main->versionfile == 261 && main->subversionfile < 2)) - { + if (main->versionfile < 261 || (main->versionfile == 261 && main->subversionfile < 2)) { { /* convert Camera Actuator values to defines */ Object *ob; @@ -13142,8 +13104,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 261 || (main->versionfile == 261 && main->subversionfile < 3)) - { + if (main->versionfile < 261 || (main->versionfile == 261 && main->subversionfile < 3)) { { /* convert extended ascii to utf-8 for text editor */ Text *text; @@ -13169,8 +13130,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) for (md= ob->modifiers.first; md; md= md->next) { if (md->type == eModifierType_DynamicPaint) { DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md; - if (pmd->canvas) - { + if (pmd->canvas) { DynamicPaintSurface *surface = pmd->canvas->surfaces.first; for (; surface; surface=surface->next) { surface->color_dry_threshold = 1.0f; @@ -13185,8 +13145,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 262) - { + if (main->versionfile < 262) { Object *ob; for (ob=main->object.first; ob; ob= ob->id.next) { ModifierData *md; @@ -13201,8 +13160,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 263) - { + if (main->versionfile < 263) { /* set fluidsim rate. the version patch for this in 2.62 was wrong, so * try to correct it, if rate is 0.0 that's likely not intentional */ Object *ob; @@ -13219,8 +13177,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 1)) - { + if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 1)) { /* update use flags for node sockets (was only temporary before) */ Scene *sce; bNodeTree *ntree; @@ -13235,8 +13192,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } /* only swap for pre-release bmesh merge which had MLoopCol red/blue swap */ - if (main->versionfile == 262 && main->subversionfile == 1) - { + if (main->versionfile == 262 && main->subversionfile == 1) { { Mesh *me; for (me = main->mesh.first; me; me = me->id.next) { @@ -13246,8 +13202,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } - if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 2)) - { + if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 2)) { { /* Set new idname of keyingsets from their now "label-only" name. */ Scene *scene; @@ -13261,8 +13216,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 3)) - { + if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 3)) { Object *ob; ModifierData *md; @@ -13276,8 +13230,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } - if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 4)) - { + if (main->versionfile < 262 || (main->versionfile == 262 && main->subversionfile < 4)) { /* Read Viscosity presets from older files */ Object *ob; @@ -13301,8 +13254,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) - if (main->versionfile < 263) - { + if (main->versionfile < 263) { /* Default for old files is to save particle rotations to pointcache */ ParticleSettings *part; for (part = main->particle.first; part; part = part->id.next) @@ -13440,7 +13392,7 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath) BLI_strncpy(bfd->main->name, filepath, sizeof(bfd->main->name)); while (bhead) { - switch(bhead->code) { + switch (bhead->code) { case DATA: case DNA1: case TEST: /* used as preview since 2.5x */ @@ -14336,7 +14288,7 @@ static void expand_main(FileData *fd, Main *mainvar) while (id) { if (id->flag & LIB_TEST) { - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_OB: expand_object(fd, mainvar, (Object *)id); diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 61969c7878a..ab620e983d5 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -837,7 +837,7 @@ static void write_boid_state(WriteData *wd, BoidState *state) writestruct(wd, DATA, "BoidState", 1, state); for (; rule; rule=rule->next) { - switch(rule->type) { + switch (rule->type) { case eBoidRuleType_Goal: case eBoidRuleType_Avoid: writestruct(wd, DATA, "BoidRuleGoalAvoid", 1, rule); @@ -1030,7 +1030,7 @@ static void write_sensors(WriteData *wd, ListBase *lb) writedata(wd, DATA, sizeof(void *)*sens->totlinks, sens->links); - switch(sens->type) { + switch (sens->type) { case SENS_NEAR: writestruct(wd, DATA, "bNearSensor", 1, sens->data); break; @@ -1091,7 +1091,7 @@ static void write_controllers(WriteData *wd, ListBase *lb) writedata(wd, DATA, sizeof(void *)*cont->totlinks, cont->links); - switch(cont->type) { + switch (cont->type) { case CONT_EXPRESSION: writestruct(wd, DATA, "bExpressionCont", 1, cont->data); break; @@ -1114,7 +1114,7 @@ static void write_actuators(WriteData *wd, ListBase *lb) while (act) { writestruct(wd, DATA, "bActuator", 1, act); - switch(act->type) { + switch (act->type) { case ACT_ACTION: case ACT_SHAPEACTION: writestruct(wd, DATA, "bActionActuator", 1, act->data); @@ -1316,10 +1316,8 @@ static void write_modifiers(WriteData *wd, ListBase *modbase) else if (md->type==eModifierType_Smoke) { SmokeModifierData *smd = (SmokeModifierData*) md; - if (smd->type & MOD_SMOKE_TYPE_DOMAIN) - { - if (smd->domain) - { + if (smd->type & MOD_SMOKE_TYPE_DOMAIN) { + if (smd->domain) { write_pointcaches(wd, &(smd->domain->ptcaches[0])); /* create fake pointcache so that old blender versions can read it */ @@ -1353,8 +1351,7 @@ static void write_modifiers(WriteData *wd, ListBase *modbase) else if (md->type==eModifierType_DynamicPaint) { DynamicPaintModifierData *pmd = (DynamicPaintModifierData*) md; - if (pmd->canvas) - { + if (pmd->canvas) { DynamicPaintSurface *surface; writestruct(wd, DATA, "DynamicPaintCanvasSettings", 1, pmd->canvas); @@ -1368,8 +1365,7 @@ static void write_modifiers(WriteData *wd, ListBase *modbase) writestruct(wd, DATA, "EffectorWeights", 1, surface->effector_weights); } } - if (pmd->brush) - { + if (pmd->brush) { writestruct(wd, DATA, "DynamicPaintBrushSettings", 1, pmd->brush); writestruct(wd, DATA, "ColorBand", 1, pmd->brush->paint_ramp); writestruct(wd, DATA, "ColorBand", 1, pmd->brush->vel_ramp); @@ -2124,7 +2120,7 @@ static void write_scenes(WriteData *wd, ListBase *scebase) if (seq->plugin) writestruct(wd, DATA, "PluginSeq", 1, seq->plugin); if (seq->effectdata) { - switch(seq->type) { + switch (seq->type) { case SEQ_COLOR: writestruct(wd, DATA, "SolidColorVars", 1, seq->effectdata); break; @@ -2258,7 +2254,7 @@ static void write_region(WriteData *wd, ARegion *ar, int spacetype) writestruct(wd, DATA, "ARegion", 1, ar); if (ar->regiondata) { - switch(spacetype) { + switch (spacetype) { case SPACE_VIEW3D: if (ar->regiontype==RGN_TYPE_WINDOW) { RegionView3D *rv3d= ar->regiondata; diff --git a/source/blender/bmesh/intern/bmesh_walkers.c b/source/blender/bmesh/intern/bmesh_walkers.c index a3b5d94ba8e..ea29c149c1a 100644 --- a/source/blender/bmesh/intern/bmesh_walkers.c +++ b/source/blender/bmesh/intern/bmesh_walkers.c @@ -226,8 +226,7 @@ void *BMW_state_add(BMWalker *walker) BMwGenericWalker *newstate; newstate = BLI_mempool_alloc(walker->worklist); newstate->depth = walker->depth; - switch (walker->order) - { + switch (walker->order) { case BMW_DEPTH_FIRST: BLI_addhead(&walker->states, newstate); break; diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c index 113e1ddc164..ec4b97d59f3 100644 --- a/source/blender/bmesh/intern/bmesh_walkers_impl.c +++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c @@ -880,7 +880,7 @@ static void *bmw_EdgeringWalker_step(BMWalker *walker) } /* only walk to manifold edge */ if ((l->f->len % 2 == 0) && EDGE_CHECK(l->e) && - !BLI_ghash_haskey(walker->visithash, l->e)) + !BLI_ghash_haskey(walker->visithash, l->e)) #else diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp index 778e3029266..c93ee832fe6 100644 --- a/source/blender/collada/AnimationExporter.cpp +++ b/source/blender/collada/AnimationExporter.cpp @@ -29,7 +29,7 @@ void forEachObjectInScene(Scene *sce, Functor &f) { Base *base= (Base*) sce->base.first; - while(base) { + while (base) { Object *ob = base->object; f(ob); @@ -59,13 +59,11 @@ void AnimationExporter::operator() (Object *ob) /* bool isMatAnim = false; */ /* UNUSED */ //Export transform animations - if (ob->adt && ob->adt->action) - { + if (ob->adt && ob->adt->action) { fcu = (FCurve*)ob->adt->action->curves.first; //transform matrix export for bones are temporarily disabled here. - if ( ob->type == OB_ARMATURE ) - { + if ( ob->type == OB_ARMATURE ) { bArmature *arm = (bArmature*)ob->data; for (Bone *bone = (Bone*)arm->bonebase.first; bone; bone = bone->next) write_bone_animation_matrix(ob, bone); @@ -79,59 +77,63 @@ void AnimationExporter::operator() (Object *ob) transformName = extract_transform_name( fcu->rna_path ); if ((!strcmp(transformName, "location") || !strcmp(transformName, "scale")) || - (!strcmp(transformName, "rotation_euler") && ob->rotmode == ROT_MODE_EUL)|| - (!strcmp(transformName, "rotation_quaternion"))) + (!strcmp(transformName, "rotation_euler") && ob->rotmode == ROT_MODE_EUL)|| + (!strcmp(transformName, "rotation_quaternion"))) + { dae_animation(ob ,fcu, transformName, false); + } fcu = fcu->next; } } //Export Lamp parameter animations - if ( (ob->type == OB_LAMP ) && ((Lamp*)ob ->data)->adt && ((Lamp*)ob ->data)->adt->action ) - { + if ( (ob->type == OB_LAMP ) && ((Lamp*)ob ->data)->adt && ((Lamp*)ob ->data)->adt->action ) { fcu = (FCurve*)(((Lamp*)ob ->data)->adt->action->curves.first); while (fcu) { transformName = extract_transform_name( fcu->rna_path ); - if ((!strcmp(transformName, "color")) || (!strcmp(transformName, "spot_size"))|| (!strcmp(transformName, "spot_blend"))|| - (!strcmp(transformName, "distance")) ) - dae_animation(ob , fcu, transformName, true ); + if ((!strcmp(transformName, "color")) || (!strcmp(transformName, "spot_size"))|| + (!strcmp(transformName, "spot_blend")) || (!strcmp(transformName, "distance"))) + { + dae_animation(ob , fcu, transformName, true); + } fcu = fcu->next; } } //Export Camera parameter animations - if ( (ob->type == OB_CAMERA ) && ((Camera*)ob ->data)->adt && ((Camera*)ob ->data)->adt->action ) - { + if ( (ob->type == OB_CAMERA ) && ((Camera*)ob ->data)->adt && ((Camera*)ob ->data)->adt->action ) { fcu = (FCurve*)(((Camera*)ob ->data)->adt->action->curves.first); while (fcu) { transformName = extract_transform_name( fcu->rna_path ); if ((!strcmp(transformName, "lens"))|| - (!strcmp(transformName, "ortho_scale"))|| - (!strcmp(transformName, "clip_end"))||(!strcmp(transformName, "clip_start"))) - dae_animation(ob , fcu, transformName, true ); + (!strcmp(transformName, "ortho_scale"))|| + (!strcmp(transformName, "clip_end"))||(!strcmp(transformName, "clip_start"))) + { + dae_animation(ob , fcu, transformName, true); + } fcu = fcu->next; } } //Export Material parameter animations. - for (int a = 0; a < ob->totcol; a++) - { + for (int a = 0; a < ob->totcol; a++) { Material *ma = give_current_material(ob, a+1); if (!ma) continue; - if (ma->adt && ma->adt->action) - { + if (ma->adt && ma->adt->action) { /* isMatAnim = true; */ fcu = (FCurve*)ma->adt->action->curves.first; while (fcu) { transformName = extract_transform_name( fcu->rna_path ); - if ((!strcmp(transformName, "specular_hardness"))||(!strcmp(transformName, "specular_color")) - ||(!strcmp(transformName, "diffuse_color"))||(!strcmp(transformName, "alpha"))|| - (!strcmp(transformName, "ior"))) + if ((!strcmp(transformName, "specular_hardness"))||(!strcmp(transformName, "specular_color")) || + (!strcmp(transformName, "diffuse_color"))||(!strcmp(transformName, "alpha")) || + (!strcmp(transformName, "ior"))) + { dae_animation(ob ,fcu, transformName, true, ma ); + } fcu = fcu->next; } } @@ -148,8 +150,7 @@ float * AnimationExporter::get_eul_source_for_quat(Object *ob ) float *eul = (float*)MEM_callocN(sizeof(float) * fcu->totvert * 3, "quat output source values"); float temp_quat[4]; float temp_eul[3]; - while(fcu) - { + while (fcu) { char * transformName = extract_transform_name( fcu->rna_path ); if ( !strcmp(transformName, "rotation_quaternion") ) { @@ -199,8 +200,7 @@ void AnimationExporter::dae_animation(Object* ob, FCurve *fcu, char* transformNa bool has_tangents = false; bool quatRotation = false; - if ( !strcmp(transformName, "rotation_quaternion") ) - { + if ( !strcmp(transformName, "rotation_quaternion") ) { fprintf(stderr, "quaternion rotation curves are not supported. rotation curve will not be exported\n"); quatRotation = true; return; @@ -223,23 +223,20 @@ void AnimationExporter::dae_animation(Object* ob, FCurve *fcu, char* transformNa if (fcu->array_index < 3) axis_name = axis_names[fcu->array_index]; } - - //no axis name. single parameter. - else{ + else { + /* no axis name. single parameter */ axis_name = ""; } std::string ob_name = std::string("null"); //Create anim Id - if (ob->type == OB_ARMATURE) - { + if (ob->type == OB_ARMATURE) { ob_name = getObjectBoneName( ob , fcu); BLI_snprintf(anim_id, sizeof(anim_id), "%s_%s.%s", (char*)translate_id(ob_name).c_str(), transformName, axis_name); } - else - { + else { if (ma) ob_name = id_name(ob) + "_material"; else @@ -257,18 +254,17 @@ void AnimationExporter::dae_animation(Object* ob, FCurve *fcu, char* transformNa std::string output_id; //quat rotations are skipped for now, because of complications with determining axis. - if (quatRotation) - { - float * eul = get_eul_source_for_quat(ob); - float * eul_axis = (float*)MEM_callocN(sizeof(float) * fcu->totvert, "quat output source values"); - for ( int i = 0 ; i< fcu->totvert ; i++) + if (quatRotation) { + float *eul = get_eul_source_for_quat(ob); + float *eul_axis = (float*)MEM_callocN(sizeof(float) * fcu->totvert, "quat output source values"); + for (int i = 0 ; i< fcu->totvert ; i++) { eul_axis[i] = eul[i*3 + fcu->array_index]; + } output_id= create_source_from_array(COLLADASW::InputSemantic::OUTPUT, eul_axis , fcu->totvert, quatRotation, anim_id, axis_name); MEM_freeN(eul); MEM_freeN(eul_axis); } - else - { + else { output_id= create_source_from_fcurve(COLLADASW::InputSemantic::OUTPUT, fcu, anim_id, axis_name); } // create interpolations source @@ -307,8 +303,7 @@ void AnimationExporter::dae_animation(Object* ob, FCurve *fcu, char* transformNa if ( !is_param ) target = translate_id(ob_name) + "/" + get_transform_sid(fcu->rna_path, -1, axis_name, true); - else - { + else { if ( ob->type == OB_LAMP ) target = get_light_id(ob) + "/" + get_light_param_sid(fcu->rna_path, -1, axis_name, true); @@ -349,8 +344,7 @@ bool AnimationExporter::is_bone_deform_group(Bone * bone) //Check if current bone is deform if ((bone->flag & BONE_NO_DEFORM) == 0 ) return true; //Check child bones - else - { + else { for (Bone *child = (Bone*)bone->childbase.first; child; child = child->next) { //loop through all the children until deform bone is found, and then return is_def = is_bone_deform_group(child); @@ -369,8 +363,7 @@ void AnimationExporter::sample_and_write_bone_animation_matrix(Object *ob_arm, B //char prefix[256]; FCurve* fcu = (FCurve*)ob_arm->adt->action->curves.first; - while(fcu) - { + while (fcu) { std::string bone_name = getObjectBoneName(ob_arm,fcu); int val = BLI_strcasecmp((char*)bone_name.c_str(),bone->name); if (val==0) break; @@ -511,7 +504,7 @@ float AnimationExporter::convert_angle(float angle) std::string AnimationExporter::get_semantic_suffix(COLLADASW::InputSemantic::Semantics semantic) { - switch(semantic) { + switch (semantic) { case COLLADASW::InputSemantic::INPUT: return INPUT_SOURCE_ID_SUFFIX; case COLLADASW::InputSemantic::OUTPUT: @@ -531,7 +524,7 @@ std::string AnimationExporter::get_semantic_suffix(COLLADASW::InputSemantic::Sem void AnimationExporter::add_source_parameters(COLLADASW::SourceBase::ParameterNameList& param, COLLADASW::InputSemantic::Semantics semantic, bool is_rot, const char *axis, bool transform) { - switch(semantic) { + switch (semantic) { case COLLADASW::InputSemantic::INPUT: param.push_back("TIME"); break; @@ -544,8 +537,7 @@ void AnimationExporter::add_source_parameters(COLLADASW::SourceBase::ParameterNa param.push_back(axis); } else - if ( transform ) - { + if ( transform ) { param.push_back("TRANSFORM"); } else { //assumes if axis isn't specified all axises are added @@ -778,8 +770,7 @@ std::string AnimationExporter::create_4x4_source(std::vector &frames , Ob // SECOND_LIFE_COMPATIBILITY // AFAIK animation to second life is via BVH, but no // reason to not have the collada-animation be correct - if (export_settings->second_life) - { + if (export_settings->second_life) { float temp[4][4]; copy_m4_m4(temp, bone->arm_mat); temp[3][0] = temp[3][1] = temp[3][2] = 0.0f; @@ -787,8 +778,7 @@ std::string AnimationExporter::create_4x4_source(std::vector &frames , Ob mult_m4_m4m4(mat, mat, temp); - if (bone->parent) - { + if (bone->parent) { copy_m4_m4(temp, bone->parent->arm_mat); temp[3][0] = temp[3][1] = temp[3][2] = 0.0f; @@ -1128,7 +1118,7 @@ bool AnimationExporter::hasAnimations(Scene *sce) { Base *base= (Base*) sce->base.first; - while(base) { + while (base) { Object *ob = base->object; FCurve *fcu = 0; @@ -1143,12 +1133,10 @@ bool AnimationExporter::hasAnimations(Scene *sce) fcu = (FCurve*)(((Camera*)ob ->data)->adt->action->curves.first); //Check Material Effect parameter animations. - for (int a = 0; a < ob->totcol; a++) - { + for (int a = 0; a < ob->totcol; a++) { Material *ma = give_current_material(ob, a+1); if (!ma) continue; - if (ma->adt && ma->adt->action) - { + if (ma->adt && ma->adt->action) { fcu = (FCurve*)ma->adt->action->curves.first; } } diff --git a/source/blender/collada/AnimationImporter.cpp b/source/blender/collada/AnimationImporter.cpp index e0079fbb8a0..8ef2235b6fb 100644 --- a/source/blender/collada/AnimationImporter.cpp +++ b/source/blender/collada/AnimationImporter.cpp @@ -138,8 +138,7 @@ void AnimationImporter::animation_to_fcurves(COLLADAFW::AnimationCurve *curve) bez.ipo = BEZT_IPO_CONST; //bez.h1 = bez.h2 = HD_AUTO; } - else - { + else { bez.h1 = bez.h2 = HD_AUTO; bez.ipo = BEZT_IPO_LIN; } @@ -789,17 +788,15 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node , bool is_joint = node->getType() == COLLADAFW::Node::JOINT; COLLADAFW::Node *root = root_map.find(node->getUniqueId()) == root_map.end() ? node : root_map[node->getUniqueId()]; Object *ob = is_joint ? armature_importer->get_armature_for_joint(root) : object_map[node->getUniqueId()]; - if (!ob) - { + if (!ob) { fprintf(stderr, "cannot find Object for Node with id=\"%s\"\n", node->getOriginalId().c_str()); return; } bAction * act; - if ( (animType->transform) != 0 ) - { - const char *bone_name = is_joint ? bc_get_joint_name(node) : NULL; + if ( (animType->transform) != 0 ) { + /* const char *bone_name = is_joint ? bc_get_joint_name(node) : NULL; */ /* UNUSED */ char joint_path[200]; if ( is_joint ) @@ -867,8 +864,7 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node , } } - if ((animType->light) != 0) - { + if ((animType->light) != 0) { Lamp * lamp = (Lamp*) ob->data; if (!lamp->adt || !lamp->adt->action) act = verify_adt_action((ID*)&lamp->id, 1); @@ -880,22 +876,19 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node , for (unsigned int i = 0; i < nodeLights.getCount(); i++) { const COLLADAFW::Light *light = (COLLADAFW::Light *) FW_object_map[nodeLights[i]->getInstanciatedObjectId()]; - if ((animType->light & LIGHT_COLOR) != 0) - { + if ((animType->light & LIGHT_COLOR) != 0) { const COLLADAFW::Color *col = &(light->getColor()); const COLLADAFW::UniqueId& listid = col->getAnimationList(); Assign_color_animations(listid, AnimCurves, "color"); } - if ((animType->light & LIGHT_FOA) != 0 ) - { + if ((animType->light & LIGHT_FOA) != 0 ) { const COLLADAFW::AnimatableFloat *foa = &(light->getFallOffAngle()); const COLLADAFW::UniqueId& listid = foa->getAnimationList(); Assign_float_animations( listid ,AnimCurves, "spot_size"); } - if ( (animType->light & LIGHT_FOE) != 0 ) - { + if ( (animType->light & LIGHT_FOE) != 0 ) { const COLLADAFW::AnimatableFloat *foe = &(light->getFallOffExponent()); const COLLADAFW::UniqueId& listid = foe->getAnimationList(); @@ -905,8 +898,7 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node , } } - if ( (animType->camera) != 0) - { + if ( (animType->camera) != 0) { Camera * camera = (Camera*) ob->data; if (!camera->adt || !camera->adt->action) act = verify_adt_action((ID*)&camera->id, 1); @@ -918,29 +910,25 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node , for (unsigned int i = 0; i < nodeCameras.getCount(); i++) { const COLLADAFW::Camera *camera = (COLLADAFW::Camera *) FW_object_map[nodeCameras[i]->getInstanciatedObjectId()]; - if ((animType->camera & CAMERA_XFOV) != 0 ) - { + if ((animType->camera & CAMERA_XFOV) != 0 ) { const COLLADAFW::AnimatableFloat *xfov = &(camera->getXFov()); const COLLADAFW::UniqueId& listid = xfov->getAnimationList(); Assign_float_animations( listid ,AnimCurves, "lens"); } - else if ((animType->camera & CAMERA_XMAG) != 0 ) - { + else if ((animType->camera & CAMERA_XMAG) != 0 ) { const COLLADAFW::AnimatableFloat *xmag = &(camera->getXMag()); const COLLADAFW::UniqueId& listid = xmag->getAnimationList(); Assign_float_animations( listid ,AnimCurves, "ortho_scale"); } - if ((animType->camera & CAMERA_ZFAR) != 0 ) - { + if ((animType->camera & CAMERA_ZFAR) != 0 ) { const COLLADAFW::AnimatableFloat *zfar = &(camera->getFarClippingPlane()); const COLLADAFW::UniqueId& listid = zfar->getAnimationList(); Assign_float_animations( listid ,AnimCurves, "clip_end"); } - if ((animType->camera & CAMERA_ZNEAR) != 0 ) - { + if ((animType->camera & CAMERA_ZNEAR) != 0 ) { const COLLADAFW::AnimatableFloat *znear = &(camera->getNearClippingPlane()); const COLLADAFW::UniqueId& listid = znear->getAnimationList(); Assign_float_animations( listid ,AnimCurves, "clip_start"); @@ -1162,12 +1150,10 @@ AnimationImporter::AnimMix* AnimationImporter::get_animation_type ( const COLLAD for (unsigned int i = 0; i < nodeCameras.getCount(); i++) { const COLLADAFW::Camera *camera = (COLLADAFW::Camera *) FW_object_map[nodeCameras[i]->getInstanciatedObjectId()]; - if ( camera->getCameraType() == COLLADAFW::Camera::PERSPECTIVE ) - { + if ( camera->getCameraType() == COLLADAFW::Camera::PERSPECTIVE ) { types->camera = setAnimType(&(camera->getXMag()),(types->camera), CAMERA_XFOV); } - else - { + else { types->camera = setAnimType(&(camera->getXMag()),(types->camera), CAMERA_XMAG); } types->camera = setAnimType(&(camera->getFarClippingPlane()),(types->camera), CAMERA_ZFAR); @@ -1641,7 +1627,7 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float COLLADABU::Math::Vector3& axis = ((COLLADAFW::Rotate*)tm)->getRotationAxis(); - float ax[3] = {axis[0], axis[1], axis[2]}; + float ax[3] = {(float)axis[0], (float)axis[1], (float)axis[2]}; float angle = evaluate_fcurve(curves[0], fra); axis_angle_to_mat4(mat, ax, angle); diff --git a/source/blender/collada/ArmatureExporter.cpp b/source/blender/collada/ArmatureExporter.cpp index 743d3c2a158..0d45df37796 100644 --- a/source/blender/collada/ArmatureExporter.cpp +++ b/source/blender/collada/ArmatureExporter.cpp @@ -127,7 +127,7 @@ void ArmatureExporter::find_objects_using_armature(Object *ob_arm, std::vectorbase.first; - while(base) { + while (base) { Object *ob = base->object; if (ob->type == OB_MESH && get_assigned_armature(ob) == ob_arm) { @@ -191,10 +191,8 @@ void ArmatureExporter::add_bone_node(Bone *bone, Object *ob_arm, Scene* sce, // Write nodes of childobjects, remove written objects from list std::list::iterator i = child_objects.begin(); - while( i != child_objects.end() ) - { - if ((*i)->partype == PARBONE && (0 == strcmp((*i)->parsubstr, bone->name))) - { + while (i != child_objects.end()) { + if ((*i)->partype == PARBONE && (0 == strcmp((*i)->parsubstr, bone->name))) { float backup_parinv[4][4]; copy_m4_m4(backup_parinv, (*i)->parentinv); @@ -210,8 +208,7 @@ void ArmatureExporter::add_bone_node(Bone *bone, Object *ob_arm, Scene* sce, // TODO: when such objects are animated as // single matrix the tweak must be applied // to the result. - if (export_settings->second_life) - { + if (export_settings->second_life) { // tweak objects parentinverse to match compatibility float temp[4][4]; @@ -274,8 +271,7 @@ void ArmatureExporter::add_bone_transform(Object *ob_arm, Bone *bone, COLLADASW: } // SECOND_LIFE_COMPATIBILITY - if (export_settings->second_life) - { + if (export_settings->second_life) { // Remove rotations vs armature from transform // parent_rest_rot * mat * irest_rot float temp[4][4]; @@ -285,8 +281,7 @@ void ArmatureExporter::add_bone_transform(Object *ob_arm, Bone *bone, COLLADASW: mult_m4_m4m4(mat, mat, temp); - if (bone->parent) - { + if (bone->parent) { copy_m4_m4(temp, bone->parent->arm_mat); temp[3][0] = temp[3][1] = temp[3][2] = 0.0f; @@ -370,25 +365,21 @@ void ArmatureExporter::export_controller(Object* ob, Object *ob_arm) for (j = 0; j < vert->totweight; j++) { int joint_index = joint_index_by_def_index[vert->dw[j].def_nr]; - if (joint_index != -1 && vert->dw[j].weight > 0.0f) - { + if (joint_index != -1 && vert->dw[j].weight > 0.0f) { jw[joint_index] += vert->dw[j].weight; sumw += vert->dw[j].weight; } } - if (sumw > 0.0f) - { + if (sumw > 0.0f) { float invsumw = 1.0f/sumw; vcounts.push_back(jw.size()); - for (std::map::iterator m = jw.begin(); m != jw.end(); ++m) - { + for (std::map::iterator m = jw.begin(); m != jw.end(); ++m) { joints.push_back((*m).first); weights.push_back(invsumw*(*m).second); } } - else - { + else { vcounts.push_back(0); /*vcounts.push_back(1); joints.push_back(-1); @@ -502,16 +493,14 @@ std::string ArmatureExporter::add_inv_bind_mats_source(Object *ob_arm, ListBase float inv_bind_mat[4][4]; // SECOND_LIFE_COMPATIBILITY - if (export_settings->second_life) - { + if (export_settings->second_life) { // Only translations, no rotation vs armature float temp[4][4]; unit_m4(temp); copy_v3_v3(temp[3], pchan->bone->arm_mat[3]); mult_m4_m4m4(world, ob_arm->obmat, temp); } - else - { + else { // make world-space matrix, arm_mat is armature-space mult_m4_m4m4(world, ob_arm->obmat, pchan->bone->arm_mat); } @@ -597,8 +586,7 @@ void ArmatureExporter::add_vertex_weights_element(const std::string& weights_sou // write deformer index - weight index pairs int weight_index = 0; - for (std::list::const_iterator i = joints.begin(); i != joints.end(); ++i) - { + for (std::list::const_iterator i = joints.begin(); i != joints.end(); ++i) { weightselem.appendValues(*i, weight_index++); } diff --git a/source/blender/collada/ArmatureImporter.cpp b/source/blender/collada/ArmatureImporter.cpp index a978a4757a7..05a2e5643f2 100644 --- a/source/blender/collada/ArmatureImporter.cpp +++ b/source/blender/collada/ArmatureImporter.cpp @@ -278,8 +278,7 @@ void ArmatureImporter::add_leaf_bone(float mat[][4], EditBone *bone, COLLADAFW: TagsMap::iterator etit; ExtraTags *et = 0; etit = uid_tags_map.find(node->getUniqueId().toAscii()); - if (etit != uid_tags_map.end()) - { + if (etit != uid_tags_map.end()) { et = etit->second; //else return; diff --git a/source/blender/collada/CameraExporter.cpp b/source/blender/collada/CameraExporter.cpp index fcb98cc7c32..8640e544dbf 100644 --- a/source/blender/collada/CameraExporter.cpp +++ b/source/blender/collada/CameraExporter.cpp @@ -42,15 +42,14 @@ CamerasExporter::CamerasExporter(COLLADASW::StreamWriter *sw, const ExportSettin template void forEachCameraObjectInScene(Scene *sce, Functor &f, bool export_selected) { - Base *base= (Base*) sce->base.first; - while(base) { + Base *base = (Base*) sce->base.first; + while (base) { Object *ob = base->object; - - if (ob->type == OB_CAMERA && ob->data - && !(export_selected && !(ob->flag & SELECT))) { + + if (ob->type == OB_CAMERA && ob->data && !(export_selected && !(ob->flag & SELECT))) { f(ob, sce); } - base= base->next; + base = base->next; } } diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp index 52261346acb..19fc30a2790 100644 --- a/source/blender/collada/DocumentExporter.cpp +++ b/source/blender/collada/DocumentExporter.cpp @@ -175,7 +175,7 @@ void DocumentExporter::exportCurrentScene(Scene *sce) std::string unitname = "meter"; float linearmeasure = RNA_float_get(&unit_settings, "scale_length"); - switch(RNA_property_enum_get(&unit_settings, system)) { + switch (RNA_property_enum_get(&unit_settings, system)) { case USER_UNIT_NONE: case USER_UNIT_METRIC: if (linearmeasure == 0.001f) { diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp index bc0606107ab..d81ffebae66 100644 --- a/source/blender/collada/DocumentImporter.cpp +++ b/source/blender/collada/DocumentImporter.cpp @@ -106,7 +106,7 @@ DocumentImporter::~DocumentImporter() { TagsMap::iterator etit; etit = uid_tags_map.begin(); - while(etit!=uid_tags_map.end()) { + while (etit!=uid_tags_map.end()) { delete etit->second; etit++; } @@ -178,7 +178,7 @@ void DocumentImporter::finish() system = RNA_struct_find_property(&unit_settings, "system"); scale = RNA_struct_find_property(&unit_settings, "scale_length"); - switch(unit_converter.isMetricSystem()) { + switch (unit_converter.isMetricSystem()) { case UnitConverter::Metric: RNA_property_enum_set(&unit_settings, system, USER_UNIT_METRIC); break; @@ -744,8 +744,7 @@ bool DocumentImporter::writeEffect( const COLLADAFW::Effect* effect ) Material *ma = uid_effect_map[uid]; std::map::iterator iter; - for (iter = uid_material_map.begin(); iter != uid_material_map.end() ; iter++ ) - { + for (iter = uid_material_map.begin(); iter != uid_material_map.end() ; iter++ ) { if ( iter->second == ma ) { this->FW_object_map[iter->first] = effect; break; @@ -789,7 +788,7 @@ bool DocumentImporter::writeCamera( const COLLADAFW::Camera* camera ) cam->clipend = camera->getFarClippingPlane().getValue(); COLLADAFW::Camera::CameraType type = camera->getCameraType(); - switch(type) { + switch (type) { case COLLADAFW::Camera::ORTHOGRAPHIC: { cam->type = CAM_ORTHO; @@ -808,10 +807,10 @@ bool DocumentImporter::writeCamera( const COLLADAFW::Camera* camera ) break; } - switch(camera->getDescriptionType()) { + switch (camera->getDescriptionType()) { case COLLADAFW::Camera::ASPECTRATIO_AND_Y: { - switch(cam->type) { + switch (cam->type) { case CAM_ORTHO: { double ymag = camera->getYMag().getValue(); @@ -839,7 +838,7 @@ bool DocumentImporter::writeCamera( const COLLADAFW::Camera* camera ) case COLLADAFW::Camera::SINGLE_X: case COLLADAFW::Camera::X_AND_Y: { - switch(cam->type) { + switch (cam->type) { case CAM_ORTHO: cam->ortho_scale = (float)camera->getXMag().getValue(); break; @@ -856,7 +855,7 @@ bool DocumentImporter::writeCamera( const COLLADAFW::Camera* camera ) break; case COLLADAFW::Camera::SINGLE_Y: { - switch(cam->type) { + switch (cam->type) { case CAM_ORTHO: cam->ortho_scale = (float)camera->getYMag().getValue(); break; @@ -1030,7 +1029,7 @@ bool DocumentImporter::writeLight( const COLLADAFW::Light* light ) lamp->dist = d; COLLADAFW::Light::LightType type = light->getLightType(); - switch(type) { + switch (type) { case COLLADAFW::Light::AMBIENT_LIGHT: { lamp->type = LA_HEMI; diff --git a/source/blender/collada/EffectExporter.cpp b/source/blender/collada/EffectExporter.cpp index 9720b92ffae..bbc7677c279 100644 --- a/source/blender/collada/EffectExporter.cpp +++ b/source/blender/collada/EffectExporter.cpp @@ -60,11 +60,10 @@ bool EffectsExporter::hasEffects(Scene *sce) { Base *base = (Base *)sce->base.first; - while(base) { + while (base) { Object *ob= base->object; int a; - for (a = 0; a < ob->totcol; a++) - { + for (a = 0; a < ob->totcol; a++) { Material *ma = give_current_material(ob, a+1); // no material, but check all of the slots diff --git a/source/blender/collada/ErrorHandler.cpp b/source/blender/collada/ErrorHandler.cpp index 1c0f40d2185..530158ed418 100644 --- a/source/blender/collada/ErrorHandler.cpp +++ b/source/blender/collada/ErrorHandler.cpp @@ -49,37 +49,31 @@ bool ErrorHandler::handleError( const COLLADASaxFWL::IError* error ) { mError = true; - if ( error->getErrorClass() == COLLADASaxFWL::IError::ERROR_SAXPARSER ) - { + if ( error->getErrorClass() == COLLADASaxFWL::IError::ERROR_SAXPARSER ) { COLLADASaxFWL::SaxParserError* saxParserError = (COLLADASaxFWL::SaxParserError*) error; const GeneratedSaxParser::ParserError& parserError = saxParserError->getError(); // Workaround to avoid wrong error - if ( parserError.getErrorType() == GeneratedSaxParser::ParserError::ERROR_VALIDATION_MIN_OCCURS_UNMATCHED) - { - if ( strcmp(parserError.getElement(), "effect") == 0 ) - { + if ( parserError.getErrorType() == GeneratedSaxParser::ParserError::ERROR_VALIDATION_MIN_OCCURS_UNMATCHED) { + if ( strcmp(parserError.getElement(), "effect") == 0 ) { mError = false; } } - if ( parserError.getErrorType() == GeneratedSaxParser::ParserError::ERROR_VALIDATION_SEQUENCE_PREVIOUS_SIBLING_NOT_PRESENT) - { - if ( !((strcmp(parserError.getElement(), "extra") == 0) - && (strcmp(parserError.getAdditionalText().c_str(), "sibling: fx_profile_abstract") == 0))) + if ( parserError.getErrorType() == GeneratedSaxParser::ParserError::ERROR_VALIDATION_SEQUENCE_PREVIOUS_SIBLING_NOT_PRESENT) { + if ( !((strcmp(parserError.getElement(), "extra") == 0) && + (strcmp(parserError.getAdditionalText().c_str(), "sibling: fx_profile_abstract") == 0))) { mError = false; } } - if ( parserError.getErrorType() == GeneratedSaxParser::ParserError::ERROR_COULD_NOT_OPEN_FILE) - { + if ( parserError.getErrorType() == GeneratedSaxParser::ParserError::ERROR_COULD_NOT_OPEN_FILE) { std::cout << "Couldn't open file" << std::endl; } std::cout << "Schema validation error: " << parserError.getErrorMessage() << std::endl; } - else if ( error->getErrorClass() == COLLADASaxFWL::IError::ERROR_SAXFWL ) - { + else if ( error->getErrorClass() == COLLADASaxFWL::IError::ERROR_SAXFWL ) { COLLADASaxFWL::SaxFWLError* saxFWLError = (COLLADASaxFWL::SaxFWLError*) error; std::cout << "Sax FWL Error: " << saxFWLError->getErrorMessage() << std::endl; } diff --git a/source/blender/collada/GeometryExporter.cpp b/source/blender/collada/GeometryExporter.cpp index ca112abc0af..8e4fa057daf 100644 --- a/source/blender/collada/GeometryExporter.cpp +++ b/source/blender/collada/GeometryExporter.cpp @@ -440,9 +440,9 @@ void GeometryExporter::create_normals(std::vector &nor, std::vectorbase.first; - while(base) { + while (base) { Object *ob = base->object; - if (ob->type == OB_MESH && ob->data - && !(export_selected && !(ob->flag && SELECT)) - && ((sce->lay & ob->lay)!=0)) { + if (ob->type == OB_MESH && ob->data && + !(export_selected && !(ob->flag && SELECT)) && + ((sce->lay & ob->lay)!=0)) + { f(ob); } base= base->next; diff --git a/source/blender/collada/ImageExporter.cpp b/source/blender/collada/ImageExporter.cpp index 946effda832..4d7c56ab419 100644 --- a/source/blender/collada/ImageExporter.cpp +++ b/source/blender/collada/ImageExporter.cpp @@ -48,11 +48,10 @@ bool ImagesExporter::hasImages(Scene *sce) { Base *base = (Base *)sce->base.first; - while(base) { + while (base) { Object *ob= base->object; int a; - for (a = 0; a < ob->totcol; a++) - { + for (a = 0; a < ob->totcol; a++) { Material *ma = give_current_material(ob, a+1); // no material, but check all of the slots diff --git a/source/blender/collada/LightExporter.cpp b/source/blender/collada/LightExporter.cpp index 51242b36b64..1d7afb9b1a1 100644 --- a/source/blender/collada/LightExporter.cpp +++ b/source/blender/collada/LightExporter.cpp @@ -39,11 +39,10 @@ template void forEachLampObjectInScene(Scene *sce, Functor &f, bool export_selected) { Base *base= (Base*) sce->base.first; - while(base) { + while (base) { Object *ob = base->object; - - if (ob->type == OB_LAMP && ob->data - && !(export_selected && !(ob->flag & SELECT))) { + + if (ob->type == OB_LAMP && ob->data && !(export_selected && !(ob->flag & SELECT))) { f(ob); } base= base->next; diff --git a/source/blender/collada/MaterialExporter.cpp b/source/blender/collada/MaterialExporter.cpp index 1e3358c9216..ac1a5d32a08 100644 --- a/source/blender/collada/MaterialExporter.cpp +++ b/source/blender/collada/MaterialExporter.cpp @@ -50,11 +50,10 @@ bool MaterialsExporter::hasMaterials(Scene *sce) { Base *base = (Base *)sce->base.first; - while(base) { + while (base) { Object *ob= base->object; int a; - for (a = 0; a < ob->totcol; a++) - { + for (a = 0; a < ob->totcol; a++) { Material *ma = give_current_material(ob, a+1); // no material, but check all of the slots diff --git a/source/blender/collada/MaterialExporter.h b/source/blender/collada/MaterialExporter.h index eb7886c23b9..4a5422184d4 100644 --- a/source/blender/collada/MaterialExporter.h +++ b/source/blender/collada/MaterialExporter.h @@ -68,7 +68,7 @@ public: void operator ()(Object *ob) { int a; - for(a = 0; a < ob->totcol; a++) { + for (a = 0; a < ob->totcol; a++) { Material *ma = give_current_material(ob, a+1); diff --git a/source/blender/collada/MeshImporter.cpp b/source/blender/collada/MeshImporter.cpp index 5c01c31bd0d..0bf33206fa7 100644 --- a/source/blender/collada/MeshImporter.cpp +++ b/source/blender/collada/MeshImporter.cpp @@ -116,7 +116,7 @@ UVDataWrapper::UVDataWrapper(COLLADAFW::MeshVertexData& vdata) : mVData(&vdata) void WVDataWrapper::print() { fprintf(stderr, "UVs:\n"); - switch(mVData->getType()) { + switch (mVData->getType()) { case COLLADAFW::MeshVertexData::DATA_TYPE_FLOAT: { COLLADAFW::ArrayPrimitiveType* values = mVData->getFloatValues(); @@ -147,7 +147,7 @@ void UVDataWrapper::getUV(int uv_index, float *uv) int stride = mVData->getStride(0); if (stride==0) stride = 2; - switch(mVData->getType()) { + switch (mVData->getType()) { case COLLADAFW::MeshVertexData::DATA_TYPE_FLOAT: { COLLADAFW::ArrayPrimitiveType* values = mVData->getFloatValues(); @@ -676,7 +676,7 @@ void MeshImporter::get_vector(float v[3], COLLADAFW::MeshVertexData& arr, int i, { i *= stride; - switch(arr.getType()) { + switch (arr.getType()) { case COLLADAFW::MeshVertexData::DATA_TYPE_FLOAT: { COLLADAFW::ArrayPrimitiveType* values = arr.getFloatValues(); @@ -797,7 +797,7 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri // what we already have handled. std::multimap::iterator it; it=materials_mapped_to_geom.find(*geom_uid); - while(it!=materials_mapped_to_geom.end()) { + while (it!=materials_mapped_to_geom.end()) { if (it->second == ma_uid && it->first == *geom_uid) return NULL; // do nothing if already found it++; } diff --git a/source/blender/collada/SceneExporter.cpp b/source/blender/collada/SceneExporter.cpp index 9010fd5062a..cd36267fd56 100644 --- a/source/blender/collada/SceneExporter.cpp +++ b/source/blender/collada/SceneExporter.cpp @@ -43,12 +43,12 @@ void SceneExporter::exportScene(Scene *sce) void SceneExporter::exportHierarchy(Scene *sce) { Base *base= (Base*) sce->base.first; - while(base) { + while (base) { Object *ob = base->object; if (!ob->parent) { if (sce->lay & ob->lay) { - switch(ob->type) { + switch (ob->type) { case OB_MESH: case OB_CAMERA: case OB_LAMP: @@ -81,12 +81,12 @@ void SceneExporter::writeNodes(Object *ob, Scene *sce) // list child objects Base *b = (Base*) sce->base.first; - while(b) { + while (b) { // cob - child object Object *cob = b->object; if (cob->parent == ob) { - switch(cob->type) { + switch (cob->type) { case OB_MESH: case OB_CAMERA: case OB_LAMP: @@ -154,8 +154,7 @@ void SceneExporter::writeNodes(Object *ob, Scene *sce) } } - for (std::list::iterator i= child_objects.begin(); i != child_objects.end(); ++i) - { + for (std::list::iterator i= child_objects.begin(); i != child_objects.end(); ++i) { writeNodes(*i, sce); } diff --git a/source/blender/collada/TransformReader.cpp b/source/blender/collada/TransformReader.cpp index a73d5243624..4c7fde8ef17 100644 --- a/source/blender/collada/TransformReader.cpp +++ b/source/blender/collada/TransformReader.cpp @@ -43,7 +43,7 @@ void TransformReader::get_node_mat(float mat[][4], COLLADAFW::Node *node, std::m COLLADAFW::Transformation *tm = node->getTransformations()[i]; COLLADAFW::Transformation::TransformationType type = tm->getTransformationType(); - switch(type) { + switch (type) { case COLLADAFW::Transformation::TRANSLATE: dae_translate_to_mat4(tm, cur); break; diff --git a/source/blender/collada/TransformWriter.cpp b/source/blender/collada/TransformWriter.cpp index f441833233c..f96aff8aa90 100644 --- a/source/blender/collada/TransformWriter.cpp +++ b/source/blender/collada/TransformWriter.cpp @@ -95,19 +95,16 @@ void TransformWriter::add_node_transform_ob(COLLADASW::Node& node, Object *ob) */ /* Using parentinv should allow use of existing curves */ - if (ob->parent) - { + if (ob->parent) { // If parentinv is identity don't add it. bool add_parinv = false; - for (int i = 0; i < 16; ++i) - { + for (int i = 0; i < 16; ++i) { float f = (i % 4 == i / 4) ? 1.0f : 0.0f; add_parinv |= (ob->parentinv[i % 4][i / 4] != f); } - if (add_parinv) - { + if (add_parinv) { double dmat[4][4]; UnitConverter converter; converter.mat4_to_dae_double(dmat, ob->parentinv); diff --git a/source/blender/collada/collada_internal.cpp b/source/blender/collada/collada_internal.cpp index fc4093bd795..fa99d460184 100644 --- a/source/blender/collada/collada_internal.cpp +++ b/source/blender/collada/collada_internal.cpp @@ -40,7 +40,7 @@ void UnitConverter::read_asset(const COLLADAFW::FileInfo* asset) UnitConverter::UnitSystem UnitConverter::isMetricSystem() { - switch(unit.getLinearUnitUnit()) { + switch (unit.getLinearUnitUnit()) { case COLLADAFW::FileInfo::Unit::MILLIMETER: case COLLADAFW::FileInfo::Unit::CENTIMETER: case COLLADAFW::FileInfo::Unit::DECIMETER: @@ -198,44 +198,39 @@ void clear_global_id_map() /** Look at documentation of translate_map */ std::string translate_id(const std::string &id) { - if (id.size() == 0) - { return id; } + if (id.size() == 0) { + return id; + } + std::string id_translated = id; id_translated[0] = translate_start_name_map[(unsigned int)id_translated[0]]; - for (unsigned int i=1; i < id_translated.size(); i++) - { + for (unsigned int i=1; i < id_translated.size(); i++) { id_translated[i] = translate_name_map[(unsigned int)id_translated[i]]; } // It's so much workload now, the if () should speed up things. - if (id_translated != id) - { + if (id_translated != id) { // Search duplicates map_string_list::iterator iter = global_id_map.find(id_translated); - if (iter != global_id_map.end()) - { + if (iter != global_id_map.end()) { unsigned int i = 0; bool found = false; - for (i=0; i < iter->second.size(); i++) - { - if (id == iter->second[i]) - { + for (i=0; i < iter->second.size(); i++) { + if (id == iter->second[i]) { found = true; break; } } bool convert = false; - if (found) - { - if (i > 0) - { convert = true; } + if (found) { + if (i > 0) { + convert = true; + } } - else - { + else { convert = true; global_id_map[id_translated].push_back(id); } - if (convert) - { + if (convert) { std::stringstream out; out << ++i; id_translated += out.str(); @@ -279,7 +274,7 @@ std::string get_material_id(Material *mat) bool has_object_type(Scene *sce, short obtype) { Base *base= (Base*) sce->base.first; - while(base) { + while (base) { Object *ob = base->object; if (ob->type == obtype && ob->data) { diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index e5822c76fa1..922156ebb7a 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -992,8 +992,7 @@ static size_t animfilter_fcurves (ListBase *anim_data, bDopeSheet *ads, FCurve * * 4) the fcu pointer is set to the F-Curve after the one we just added, so that we can keep going through * the rest of the F-Curve list without an eternal loop. Back to step 2 :) */ - for (fcu=first; ( (fcu = animfilter_fcurve_next(ads, fcu, grp, filter_mode, owner_id)) ); fcu=fcu->next) - { + for (fcu = first; ( (fcu = animfilter_fcurve_next(ads, fcu, grp, filter_mode, owner_id)) ); fcu = fcu->next) { ANIMCHANNEL_NEW_CHANNEL(fcu, ANIMTYPE_FCURVE, owner_id); } diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index 73dba91207f..94d9d426932 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -745,7 +745,7 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt) float dx, fac; char str[256]; - switch(evt->type) { + switch (evt->type) { case ESCKEY: ed_marker_move_cancel(C, op); return OPERATOR_CANCELLED; diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index cc3d0c6e184..c529ad66d73 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -2458,8 +2458,7 @@ void preEditBoneDuplicate(ListBase *editbones) EditBone *eBone; /* clear temp */ - for (eBone = editbones->first; eBone; eBone = eBone->next) - { + for (eBone = editbones->first; eBone; eBone = eBone->next) { eBone->temp = NULL; } } @@ -5800,7 +5799,7 @@ void generateSkeletonFromReebGraph(Scene *scene, ReebGraph *rg) /* Loop over subdivision methods */ for (i = 0; lastBone == NULL && i < SKGEN_SUB_TOTAL; i++) { - switch(scene->toolsettings->skgen_subdivisions[i]) { + switch (scene->toolsettings->skgen_subdivisions[i]) { case SKGEN_SUB_LENGTH: lastBone = test_subdivideByLength(scene, obedit, arc, head, tail); break; diff --git a/source/blender/editors/armature/editarmature_generate.c b/source/blender/editors/armature/editarmature_generate.c index 37d095221c9..5b56f5fe7fe 100644 --- a/source/blender/editors/armature/editarmature_generate.c +++ b/source/blender/editors/armature/editarmature_generate.c @@ -52,8 +52,7 @@ void setBoneRollFromNormal(EditBone *bone, float *no, float UNUSED(invmat[][4]), float tmat[][3]) { - if (no != NULL && !is_zero_v3(no)) - { + if (no != NULL && !is_zero_v3(no)) { float normal[3]; copy_v3_v3(normal, no); @@ -67,16 +66,14 @@ float calcArcCorrelation(BArcIterator *iter, int start, int end, float v0[3], fl { int len = 2 + abs(end - start); - if (len > 2) - { + if (len > 2) { float avg_t = 0.0f; float s_t = 0.0f; float s_xyz = 0.0f; int i; /* First pass, calculate average */ - for (i = start; i <= end; i++) - { + for (i = start; i <= end; i++) { float v[3]; IT_peek(iter, i); @@ -89,8 +86,7 @@ float calcArcCorrelation(BArcIterator *iter, int start, int end, float v0[3], fl avg_t /= len; /* Second pass, calculate s_xyz and s_t */ - for (i = start; i <= end; i++) - { + for (i = start; i <= end; i++) { float v[3], d[3]; float dt; @@ -110,8 +106,7 @@ float calcArcCorrelation(BArcIterator *iter, int start, int end, float v0[3], fl return 1.0f - s_xyz / s_t; } - else - { + else { return 1.0f; } } @@ -125,15 +120,13 @@ int nextFixedSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int sta float length_threshold; int i; - if (stroke_length == 0) - { + if (stroke_length == 0) { current_length = 0; IT_peek(iter, start); v1 = iter->p; - for (i = start + 1; i <= end; i++) - { + for (i = start + 1; i <= end; i++) { IT_peek(iter, i); v2 = iter->p; @@ -154,8 +147,7 @@ int nextFixedSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int sta v1 = iter->p; /* < and not <= because we don't care about end, it is P_EXACT anyway */ - for (i = start + 1; i < end; i++) - { + for (i = start + 1; i < end; i++) { IT_peek(iter, i); v2 = iter->p; @@ -183,8 +175,7 @@ int nextAdaptativeSubdivision(ToolSettings *toolsettings, BArcIterator *iter, in IT_peek(iter, start); start_p = iter->p; - for (i = start + 2; i <= end; i++) - { + for (i = start + 2; i <= end; i++) { /* Calculate normal */ IT_peek(iter, i); sub_v3_v3v3(n, iter->p, head); @@ -206,8 +197,7 @@ int nextLengthSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int st int i; i = start + 1; - while (i <= end) - { + while (i <= end) { float *vec0; float *vec1; @@ -218,10 +208,8 @@ int nextLengthSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int st vec1 = iter->p; /* If lengthLimit hits the current segment */ - if (len_v3v3(vec1, head) > lengthLimit) - { - if (same == 0) - { + if (len_v3v3(vec1, head) > lengthLimit) { + if (same == 0) { float dv[3], off[3]; float a, b, c, f; @@ -260,8 +248,7 @@ int nextLengthSubdivision(ToolSettings *toolsettings, BArcIterator *iter, int st return i - 1; /* restart at lower bound */ } - else - { + else { i++; same = 0; // Reset same } @@ -286,16 +273,14 @@ EditBone * subdivideArcBy(ToolSettings *toolsettings, bArmature *arm, ListBase * parent = ED_armature_edit_bone_add(arm, "Bone"); copy_v3_v3(parent->head, iter->p); - if (iter->size > 0) - { + if (iter->size > 0) { parent->rad_head = iter->size * size_buffer; } normal = iter->no; index = next_subdividion(toolsettings, iter, bone_start, end, parent->head, parent->tail); - while (index != -1) - { + while (index != -1) { IT_peek(iter, index); child = ED_armature_edit_bone_add(arm, "Bone"); @@ -303,8 +288,7 @@ EditBone * subdivideArcBy(ToolSettings *toolsettings, bArmature *arm, ListBase * child->parent = parent; child->flag |= BONE_CONNECTED; - if (iter->size > 0) - { + if (iter->size > 0) { child->rad_head = iter->size * size_buffer; parent->rad_tail = iter->size * size_buffer; } diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c index f554b7b1c50..7e4d76cb794 100644 --- a/source/blender/editors/armature/editarmature_retarget.c +++ b/source/blender/editors/armature/editarmature_retarget.c @@ -119,10 +119,8 @@ static int countEditBoneChildren(ListBase *list, EditBone *parent) EditBone *ebone; int count = 0; - for (ebone = list->first; ebone; ebone = ebone->next) - { - if (ebone->parent == parent) - { + for (ebone = list->first; ebone; ebone = ebone->next) { + if (ebone->parent == parent) { count++; } } @@ -134,12 +132,9 @@ static EditBone* nextEditBoneChild(ListBase *list, EditBone *parent, int n) { EditBone *ebone; - for (ebone = list->first; ebone; ebone = ebone->next) - { - if (ebone->parent == parent) - { - if (n == 0) - { + for (ebone = list->first; ebone; ebone = ebone->next) { + if (ebone->parent == parent) { + if (n == 0) { return ebone; } n--; @@ -175,23 +170,19 @@ static float rollBoneByQuatAligned(EditBone *bone, float old_up_axis[3], float q normalize_v3(x_axis); normalize_v3(z_axis); - if (dot_v3v3(new_up_axis, x_axis) < 0) - { + if (dot_v3v3(new_up_axis, x_axis) < 0) { negate_v3(x_axis); } - if (dot_v3v3(new_up_axis, z_axis) < 0) - { + if (dot_v3v3(new_up_axis, z_axis) < 0) { negate_v3(z_axis); } - if (angle_normalized_v3v3(x_axis, new_up_axis) < angle_normalized_v3v3(z_axis, new_up_axis)) - { + if (angle_normalized_v3v3(x_axis, new_up_axis) < angle_normalized_v3v3(z_axis, new_up_axis)) { rotation_between_vecs_to_quat(qroll, new_up_axis, x_axis); /* set roll rotation quat */ return ED_rollBoneToVector(bone, x_axis, FALSE); } - else - { + else { rotation_between_vecs_to_quat(qroll, new_up_axis, z_axis); /* set roll rotation quat */ return ED_rollBoneToVector(bone, z_axis, FALSE); } @@ -199,26 +190,21 @@ static float rollBoneByQuatAligned(EditBone *bone, float old_up_axis[3], float q static float rollBoneByQuatJoint(RigEdge *edge, RigEdge *previous, float qrot[4], float qroll[4], float up_axis[3]) { - if (previous == NULL) - { + if (previous == NULL) { /* default to up_axis if no previous */ return rollBoneByQuatAligned(edge->bone, edge->up_axis, qrot, qroll, up_axis); } - else - { + else { float new_up_axis[3]; float vec_first[3], vec_second[3], normal[3]; - if (previous->bone) - { + if (previous->bone) { sub_v3_v3v3(vec_first, previous->bone->tail, previous->bone->head); } - else if (previous->prev->bone) - { + else if (previous->prev->bone) { sub_v3_v3v3(vec_first, edge->bone->head, previous->prev->bone->tail); } - else - { + else { /* default to up_axis if first bone in the chain is an offset */ return rollBoneByQuatAligned(edge->bone, edge->up_axis, qrot, qroll, up_axis); } @@ -274,19 +260,16 @@ void RIG_freeRigGraph(BGraph *rg) BLI_destroy_worker(rigg->worker); #endif - if (rigg->link_mesh) - { + if (rigg->link_mesh) { REEB_freeGraph(rigg->link_mesh); } - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { RIG_freeRigArc(arc); } BLI_freelistN(&rg->arcs); - for (node = rg->nodes.first; node; node = node->next) - { + for (node = rg->nodes.first; node; node = node->next) { BLI_freeNode(rg, (BNode*)node); } BLI_freelistN(&rg->nodes); @@ -296,8 +279,7 @@ void RIG_freeRigGraph(BGraph *rg) BLI_ghash_free(rigg->bones_map, NULL, NULL); BLI_ghash_free(rigg->controls_map, NULL, NULL); - if (rigg->flag & RIG_FREE_BONELIST) - { + if (rigg->flag & RIG_FREE_BONELIST) { BLI_freelistN(rigg->editbones); MEM_freeN(rigg->editbones); } @@ -409,12 +391,10 @@ static void RIG_appendEdgeToArc(RigArc *arc, RigEdge *edge) { BLI_addtail(&arc->edges, edge); - if (edge->prev == NULL) - { + if (edge->prev == NULL) { copy_v3_v3(edge->head, arc->head->p); } - else - { + else { RigEdge *last_edge = edge->prev; copy_v3_v3(edge->head, last_edge->tail); RIG_calculateEdgeAngles(last_edge, edge); @@ -436,8 +416,7 @@ static void RIG_addEdgeToArc(RigArc *arc, float tail[3], EditBone *bone) copy_v3_v3(edge->tail, tail); edge->bone = bone; - if (bone) - { + if (bone) { getEditBoneRollUpAxis(bone, bone->roll, edge->up_axis); } @@ -449,28 +428,22 @@ static void renameTemplateBone(char *name, char *template_name, ListBase *editbo { int i, j; - for (i = 0, j = 0; i < (MAXBONENAME-1) && j < (MAXBONENAME-1) && template_name[i] != '\0'; i++) - { - if (template_name[i] == '&') - { - if (template_name[i+1] == 'S' || template_name[i+1] == 's') - { + for (i = 0, j = 0; i < (MAXBONENAME-1) && j < (MAXBONENAME-1) && template_name[i] != '\0'; i++) { + if (template_name[i] == '&') { + if (template_name[i+1] == 'S' || template_name[i+1] == 's') { j += sprintf(name + j, "%s", side_string); i++; } - else if (template_name[i+1] == 'N' || template_name[i+1] == 'n') - { + else if (template_name[i+1] == 'N' || template_name[i+1] == 'n') { j += sprintf(name + j, "%s", num_string); i++; } - else - { + else { name[j] = template_name[i]; j++; } } - else - { + else { name[j] = template_name[i]; j++; } @@ -524,8 +497,7 @@ static RigArc *cloneArc(RigGraph *rg, RigGraph *src_rg, RigArc *src_arc, GHash * arc->count = src_arc->count; - for (src_edge = src_arc->edges.first; src_edge; src_edge = src_edge->next) - { + for (src_edge = src_arc->edges.first; src_edge; src_edge = src_edge->next) { RigEdge *edge; edge = MEM_callocN(sizeof(RigEdge), "rig edge"); @@ -538,8 +510,7 @@ static RigArc *cloneArc(RigGraph *rg, RigGraph *src_rg, RigArc *src_arc, GHash * edge->angle = src_edge->angle; edge->up_angle = src_edge->up_angle; - if (src_edge->bone != NULL) - { + if (src_edge->bone != NULL) { char name[MAXBONENAME]; renameTemplateBone(name, src_edge->bone->name, rg->editbones, side_string, num_string); edge->bone = duplicateEditBoneObjects(src_edge->bone, name, rg->editbones, src_rg->ob, rg->ob); @@ -572,8 +543,7 @@ static RigGraph *cloneRigGraph(RigGraph *src, ListBase *editbones, Object *ob, c preEditBoneDuplicate(src->editbones); /* prime bones for duplication */ /* Clone nodes */ - for (node = src->nodes.first; node; node = node->next) - { + for (node = src->nodes.first; node; node = node->next) { RigNode *cloned_node = newRigNode(rg, node->p); BLI_ghash_insert(ptr_hash, node, cloned_node); } @@ -581,40 +551,32 @@ static RigGraph *cloneRigGraph(RigGraph *src, ListBase *editbones, Object *ob, c rg->head = BLI_ghash_lookup(ptr_hash, src->head); /* Clone arcs */ - for (arc = src->arcs.first; arc; arc = arc->next) - { + for (arc = src->arcs.first; arc; arc = arc->next) { cloneArc(rg, src, arc, ptr_hash, side_string, num_string); } /* Clone controls */ - for (ctrl = src->controls.first; ctrl; ctrl = ctrl->next) - { + for (ctrl = src->controls.first; ctrl; ctrl = ctrl->next) { cloneControl(rg, src, ctrl, ptr_hash, side_string, num_string); } /* Relink bones properly */ - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { RigEdge *edge; - for (edge = arc->edges.first; edge; edge = edge->next) - { - if (edge->bone != NULL) - { + for (edge = arc->edges.first; edge; edge = edge->next) { + if (edge->bone != NULL) { EditBone *bone; updateDuplicateSubtargetObjects(edge->bone, src->editbones, src->ob, rg->ob); - if (edge->bone->parent) - { + if (edge->bone->parent) { bone = BLI_ghash_lookup(ptr_hash, edge->bone->parent); - if (bone != NULL) - { + if (bone != NULL) { edge->bone->parent = bone; } - else - { + else { /* disconnect since parent isn't cloned * this will only happen when cloning from selected bones * */ @@ -625,22 +587,18 @@ static RigGraph *cloneRigGraph(RigGraph *src, ListBase *editbones, Object *ob, c } } - for (ctrl = rg->controls.first; ctrl; ctrl = ctrl->next) - { + for (ctrl = rg->controls.first; ctrl; ctrl = ctrl->next) { EditBone *bone; updateDuplicateSubtargetObjects(ctrl->bone, src->editbones, src->ob, rg->ob); - if (ctrl->bone->parent) - { + if (ctrl->bone->parent) { bone = BLI_ghash_lookup(ptr_hash, ctrl->bone->parent); - if (bone != NULL) - { + if (bone != NULL) { ctrl->bone->parent = bone; } - else - { + else { /* disconnect since parent isn't cloned * this will only happen when cloning from selected bones * */ @@ -672,8 +630,7 @@ static void RIG_calculateEdgeAngles(RigEdge *edge_first, RigEdge *edge_second) edge_first->angle = angle_normalized_v3v3(vec_first, vec_second); - if (edge_second->bone != NULL) - { + if (edge_second->bone != NULL) { float normal[3]; cross_v3_v3v3(normal, vec_first, vec_second); @@ -699,16 +656,14 @@ static void RIG_addControlBone(RigGraph *rg, EditBone *bone) static int RIG_parentControl(RigControl *ctrl, EditBone *link) { - if (link) - { + if (link) { float offset[3]; int flag = 0; sub_v3_v3v3(offset, ctrl->bone->head, link->head); /* if root matches, check for direction too */ - if (dot_v3v3(offset, offset) < 0.0001f) - { + if (dot_v3v3(offset, offset) < 0.0001f) { float vbone[3], vparent[3]; flag |= RIG_CTRL_FIT_ROOT; @@ -717,45 +672,38 @@ static int RIG_parentControl(RigControl *ctrl, EditBone *link) sub_v3_v3v3(vparent, link->tail, link->head); /* test for opposite direction */ - if (dot_v3v3(vbone, vparent) > 0) - { + if (dot_v3v3(vbone, vparent) > 0) { float nor[3]; float len; cross_v3_v3v3(nor, vbone, vparent); len = dot_v3v3(nor, nor); - if (len < 0.0001f) - { + if (len < 0.0001f) { flag |= RIG_CTRL_FIT_BONE; } } } /* Bail out if old one is automatically better */ - if (flag < ctrl->flag) - { + if (flag < ctrl->flag) { return 0; } /* if there's already a link * overwrite only if new link is higher in the chain */ - if (ctrl->link && flag == ctrl->flag) - { + if (ctrl->link && flag == ctrl->flag) { EditBone *bone = NULL; - for (bone = ctrl->link; bone; bone = bone->parent) - { + for (bone = ctrl->link; bone; bone = bone->parent) { /* if link is in the chain, break and use that one */ - if (bone == link) - { + if (bone == link) { break; } } /* not in chain, don't update link */ - if (bone == NULL) - { + if (bone == NULL) { return 0; } } @@ -778,43 +726,34 @@ static void RIG_reconnectControlBones(RigGraph *rg) int change = 1; /* first pass, link to deform bones */ - for (ctrl = rg->controls.first; ctrl; ctrl = ctrl->next) - { + for (ctrl = rg->controls.first; ctrl; ctrl = ctrl->next) { bPoseChannel *pchan; bConstraint *con; int found = 0; /* DO SOME MAGIC HERE */ - for (pchan= rg->ob->pose->chanbase.first; pchan; pchan= pchan->next) - { - for (con= pchan->constraints.first; con; con= con->next) - { + for (pchan= rg->ob->pose->chanbase.first; pchan; pchan= pchan->next) { + for (con= pchan->constraints.first; con; con= con->next) { bConstraintTypeInfo *cti= constraint_get_typeinfo(con); ListBase targets = {NULL, NULL}; bConstraintTarget *ct; /* constraint targets */ - if (cti && cti->get_constraint_targets) - { + if (cti && cti->get_constraint_targets) { int target_index; cti->get_constraint_targets(con, &targets); - for (target_index = 0, ct= targets.first; ct; target_index++, ct= ct->next) - { - if ((ct->tar == rg->ob) && strcmp(ct->subtarget, ctrl->bone->name) == 0) - { + for (target_index = 0, ct= targets.first; ct; target_index++, ct= ct->next) { + if ((ct->tar == rg->ob) && strcmp(ct->subtarget, ctrl->bone->name) == 0) { /* SET bone link to bone corresponding to pchan */ EditBone *link = BLI_ghash_lookup(rg->bones_map, pchan->name); /* Making sure bone is in this armature */ - if (link != NULL) - { + if (link != NULL) { /* for pole targets, link to parent bone instead, if possible */ - if (con->type == CONSTRAINT_TYPE_KINEMATIC && target_index == 1) - { - if (link->parent && BLI_ghash_haskey(rg->bones_map, link->parent->name)) - { + if (con->type == CONSTRAINT_TYPE_KINEMATIC && target_index == 1) { + if (link->parent && BLI_ghash_haskey(rg->bones_map, link->parent->name)) { link = link->parent; } } @@ -831,10 +770,8 @@ static void RIG_reconnectControlBones(RigGraph *rg) } /* if not found yet, check parent */ - if (found == 0) - { - if (ctrl->bone->parent) - { + if (found == 0) { + if (ctrl->bone->parent) { /* make sure parent is a deforming bone * NULL if not * */ @@ -849,24 +786,19 @@ static void RIG_reconnectControlBones(RigGraph *rg) RigArc *best_arc = NULL; EditBone *link = NULL; - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { RigEdge *edge; - for (edge = arc->edges.first; edge; edge = edge->next) - { - if (edge->bone) - { + for (edge = arc->edges.first; edge; edge = edge->next) { + if (edge->bone) { int fit = 0; fit = len_v3v3(ctrl->bone->head, edge->bone->head) < 0.0001f; fit = fit || len_v3v3(ctrl->bone->tail, edge->bone->tail) < 0.0001f; - if (fit) - { + if (fit) { /* pick the bone on the arc with the lowest symmetry level * means you connect control to the trunk of the skeleton */ - if (best_arc == NULL || arc->symmetry_level < best_arc->symmetry_level) - { + if (best_arc == NULL || arc->symmetry_level < best_arc->symmetry_level) { best_arc = arc; link = edge->bone; } @@ -880,23 +812,18 @@ static void RIG_reconnectControlBones(RigGraph *rg) } /* if not found yet, check child */ - if (found == 0) - { + if (found == 0) { RigArc *arc; RigArc *best_arc = NULL; EditBone *link = NULL; - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { RigEdge *edge; - for (edge = arc->edges.first; edge; edge = edge->next) - { - if (edge->bone && edge->bone->parent == ctrl->bone) - { + for (edge = arc->edges.first; edge; edge = edge->next) { + if (edge->bone && edge->bone->parent == ctrl->bone) { /* pick the bone on the arc with the lowest symmetry level * means you connect control to the trunk of the skeleton */ - if (best_arc == NULL || arc->symmetry_level < best_arc->symmetry_level) - { + if (best_arc == NULL || arc->symmetry_level < best_arc->symmetry_level) { best_arc = arc; link = edge->bone; } @@ -911,52 +838,42 @@ static void RIG_reconnectControlBones(RigGraph *rg) /* second pass, make chains in control bones */ - while (change) - { + while (change) { change = 0; - for (ctrl = rg->controls.first; ctrl; ctrl = ctrl->next) - { + for (ctrl = rg->controls.first; ctrl; ctrl = ctrl->next) { /* if control is not linked yet */ - if (ctrl->link == NULL) - { + if (ctrl->link == NULL) { bPoseChannel *pchan; bConstraint *con; RigControl *ctrl_parent = NULL; RigControl *ctrl_child; int found = 0; - if (ctrl->bone->parent) - { + if (ctrl->bone->parent) { ctrl_parent = BLI_ghash_lookup(rg->controls_map, ctrl->bone->parent->name); } /* check constraints first */ /* DO SOME MAGIC HERE */ - for (pchan= rg->ob->pose->chanbase.first; pchan; pchan= pchan->next) - { - for (con= pchan->constraints.first; con; con= con->next) - { + for (pchan= rg->ob->pose->chanbase.first; pchan; pchan= pchan->next) { + for (con= pchan->constraints.first; con; con= con->next) { bConstraintTypeInfo *cti= constraint_get_typeinfo(con); ListBase targets = {NULL, NULL}; bConstraintTarget *ct; /* constraint targets */ - if (cti && cti->get_constraint_targets) - { + if (cti && cti->get_constraint_targets) { cti->get_constraint_targets(con, &targets); - for (ct= targets.first; ct; ct= ct->next) - { - if ((ct->tar == rg->ob) && strcmp(ct->subtarget, ctrl->bone->name) == 0) - { + for (ct= targets.first; ct; ct= ct->next) { + if ((ct->tar == rg->ob) && strcmp(ct->subtarget, ctrl->bone->name) == 0) { /* SET bone link to ctrl corresponding to pchan */ RigControl *link = BLI_ghash_lookup(rg->controls_map, pchan->name); /* if owner is a control bone, link with it */ - if (link && link->link) - { + if (link && link->link) { RIG_parentControl(ctrl, link->bone); found = 1; break; @@ -970,22 +887,17 @@ static void RIG_reconnectControlBones(RigGraph *rg) } } - if (found == 0) - { + if (found == 0) { /* check if parent is already linked */ - if (ctrl_parent && ctrl_parent->link) - { + if (ctrl_parent && ctrl_parent->link) { RIG_parentControl(ctrl, ctrl_parent->bone); change = 1; } - else - { + else { /* check childs */ - for (ctrl_child = rg->controls.first; ctrl_child; ctrl_child = ctrl_child->next) - { + for (ctrl_child = rg->controls.first; ctrl_child; ctrl_child = ctrl_child->next) { /* if a child is linked, link to that one */ - if (ctrl_child->link && ctrl_child->bone->parent == ctrl->bone) - { + if (ctrl_child->link && ctrl_child->bone->parent == ctrl->bone) { RIG_parentControl(ctrl, ctrl_child->bone); change = 1; break; @@ -998,31 +910,25 @@ static void RIG_reconnectControlBones(RigGraph *rg) } /* third pass, link control tails */ - for (ctrl = rg->controls.first; ctrl; ctrl = ctrl->next) - { + for (ctrl = rg->controls.first; ctrl; ctrl = ctrl->next) { /* fit bone already means full match, so skip those */ - if ((ctrl->flag & RIG_CTRL_FIT_BONE) == 0) - { + if ((ctrl->flag & RIG_CTRL_FIT_BONE) == 0) { GHashIterator ghi; /* look on deform bones first */ BLI_ghashIterator_init(&ghi, rg->bones_map); - for ( ; !BLI_ghashIterator_isDone(&ghi); BLI_ghashIterator_step(&ghi)) - { + for ( ; !BLI_ghashIterator_isDone(&ghi); BLI_ghashIterator_step(&ghi)) { EditBone *bone = (EditBone*)BLI_ghashIterator_getValue(&ghi); /* don't link with parent */ - if (bone->parent != ctrl->bone) - { - if (len_v3v3(ctrl->bone->tail, bone->head) < 0.01f) - { + if (bone->parent != ctrl->bone) { + if (len_v3v3(ctrl->bone->tail, bone->head) < 0.01f) { ctrl->tail_mode = TL_HEAD; ctrl->link_tail = bone; break; } - else if (len_v3v3(ctrl->bone->tail, bone->tail) < 0.01f) - { + else if (len_v3v3(ctrl->bone->tail, bone->tail) < 0.01f) { ctrl->tail_mode = TL_TAIL; ctrl->link_tail = bone; break; @@ -1031,8 +937,7 @@ static void RIG_reconnectControlBones(RigGraph *rg) } /* if we haven't found one yet, look in control bones */ - if (ctrl->tail_mode == TL_NONE) - { + if (ctrl->tail_mode == TL_NONE) { } } } @@ -1046,21 +951,18 @@ static void RIG_joinArcs(RigGraph *rg, RigNode *node, RigArc *joined_arc1, RigAr RigEdge *edge, *next_edge; /* ignore cases where joint is at start or end */ - if (joined_arc1->head == joined_arc2->head || joined_arc1->tail == joined_arc2->tail) - { + if (joined_arc1->head == joined_arc2->head || joined_arc1->tail == joined_arc2->tail) { return; } /* swap arcs to make sure arc1 is before arc2 */ - if (joined_arc1->head == joined_arc2->tail) - { + if (joined_arc1->head == joined_arc2->tail) { RigArc *tmp = joined_arc1; joined_arc1 = joined_arc2; joined_arc2 = tmp; } - for (edge = joined_arc2->edges.first; edge; edge = next_edge) - { + for (edge = joined_arc2->edges.first; edge; edge = next_edge) { next_edge = edge->next; RIG_appendEdgeToArc(joined_arc1, edge); @@ -1079,24 +981,18 @@ static void RIG_removeNormalNodes(RigGraph *rg) { RigNode *node, *next_node; - for (node = rg->nodes.first; node; node = next_node) - { + for (node = rg->nodes.first; node; node = next_node) { next_node = node->next; - if (node->degree == 2) - { + if (node->degree == 2) { RigArc *arc, *joined_arc1 = NULL, *joined_arc2 = NULL; - for (arc = rg->arcs.first; arc; arc = arc->next) - { - if (arc->head == node || arc->tail == node) - { - if (joined_arc1 == NULL) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { + if (arc->head == node || arc->tail == node) { + if (joined_arc1 == NULL) { joined_arc1 = arc; } - else - { + else { joined_arc2 = arc; break; } @@ -1112,36 +1008,29 @@ static void RIG_removeUneededOffsets(RigGraph *rg) { RigArc *arc; - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { RigEdge *first_edge, *last_edge; first_edge = arc->edges.first; last_edge = arc->edges.last; - if (first_edge->bone == NULL) - { - if (first_edge->bone == NULL && len_v3v3(first_edge->tail, arc->head->p) <= 0.001f) - { + if (first_edge->bone == NULL) { + if (first_edge->bone == NULL && len_v3v3(first_edge->tail, arc->head->p) <= 0.001f) { BLI_remlink(&arc->edges, first_edge); MEM_freeN(first_edge); } - else if (arc->head->degree == 1) - { + else if (arc->head->degree == 1) { RigNode *new_node = (RigNode*)BLI_FindNodeByPosition((BGraph*)rg, first_edge->tail, 0.001f); - if (new_node) - { + if (new_node) { BLI_remlink(&arc->edges, first_edge); MEM_freeN(first_edge); BLI_replaceNodeInArc((BGraph*)rg, (BArc*)arc, (BNode*)new_node, (BNode*)arc->head); } - else - { + else { RigEdge *next_edge = first_edge->next; - if (next_edge) - { + if (next_edge) { BLI_remlink(&arc->edges, first_edge); MEM_freeN(first_edge); @@ -1149,57 +1038,44 @@ static void RIG_removeUneededOffsets(RigGraph *rg) } } } - else - { + else { /* check if all arc connected start with a null edge */ RigArc *other_arc; - for (other_arc = rg->arcs.first; other_arc; other_arc = other_arc->next) - { - if (other_arc != arc) - { + for (other_arc = rg->arcs.first; other_arc; other_arc = other_arc->next) { + if (other_arc != arc) { RigEdge *test_edge; - if (other_arc->head == arc->head) - { + if (other_arc->head == arc->head) { test_edge = other_arc->edges.first; - if (test_edge->bone != NULL) - { + if (test_edge->bone != NULL) { break; } } - else if (other_arc->tail == arc->head) - { + else if (other_arc->tail == arc->head) { test_edge = other_arc->edges.last; - if (test_edge->bone != NULL) - { + if (test_edge->bone != NULL) { break; } } } } - if (other_arc == NULL) - { + if (other_arc == NULL) { RigNode *new_node = (RigNode*)BLI_FindNodeByPosition((BGraph*)rg, first_edge->tail, 0.001); - if (new_node) - { + if (new_node) { /* remove null edge in other arcs too */ - for (other_arc = rg->arcs.first; other_arc; other_arc = other_arc->next) - { - if (other_arc != arc) - { + for (other_arc = rg->arcs.first; other_arc; other_arc = other_arc->next) { + if (other_arc != arc) { RigEdge *test_edge; - if (other_arc->head == arc->head) - { + if (other_arc->head == arc->head) { BLI_replaceNodeInArc((BGraph*)rg, (BArc*)other_arc, (BNode*)new_node, (BNode*)other_arc->head); test_edge = other_arc->edges.first; BLI_remlink(&other_arc->edges, test_edge); MEM_freeN(test_edge); } - else if (other_arc->tail == arc->head) - { + else if (other_arc->tail == arc->head) { BLI_replaceNodeInArc((BGraph*)rg, (BArc*)other_arc, (BNode*)new_node, (BNode*)other_arc->tail); test_edge = other_arc->edges.last; BLI_remlink(&other_arc->edges, test_edge); @@ -1212,31 +1088,25 @@ static void RIG_removeUneededOffsets(RigGraph *rg) MEM_freeN(first_edge); BLI_replaceNodeInArc((BGraph*)rg, (BArc*)arc, (BNode*)new_node, (BNode*)arc->head); } - else - { + else { RigEdge *next_edge = first_edge->next; - if (next_edge) - { + if (next_edge) { BLI_remlink(&arc->edges, first_edge); MEM_freeN(first_edge); copy_v3_v3(arc->head->p, next_edge->head); /* remove null edge in other arcs too */ - for (other_arc = rg->arcs.first; other_arc; other_arc = other_arc->next) - { - if (other_arc != arc) - { + for (other_arc = rg->arcs.first; other_arc; other_arc = other_arc->next) { + if (other_arc != arc) { RigEdge *test_edge; - if (other_arc->head == arc->head) - { + if (other_arc->head == arc->head) { test_edge = other_arc->edges.first; BLI_remlink(&other_arc->edges, test_edge); MEM_freeN(test_edge); } - else if (other_arc->tail == arc->head) - { + else if (other_arc->tail == arc->head) { test_edge = other_arc->edges.last; BLI_remlink(&other_arc->edges, test_edge); MEM_freeN(test_edge); @@ -1249,19 +1119,15 @@ static void RIG_removeUneededOffsets(RigGraph *rg) } } - if (last_edge->bone == NULL) - { - if (len_v3v3(last_edge->head, arc->tail->p) <= 0.001f) - { + if (last_edge->bone == NULL) { + if (len_v3v3(last_edge->head, arc->tail->p) <= 0.001f) { BLI_remlink(&arc->edges, last_edge); MEM_freeN(last_edge); } - else if (arc->tail->degree == 1) - { + else if (arc->tail->degree == 1) { RigNode *new_node = (RigNode*)BLI_FindNodeByPosition((BGraph*)rg, last_edge->head, 0.001f); - if (new_node) - { + if (new_node) { RigEdge *previous_edge = last_edge->prev; BLI_remlink(&arc->edges, last_edge); @@ -1269,17 +1135,14 @@ static void RIG_removeUneededOffsets(RigGraph *rg) BLI_replaceNodeInArc((BGraph*)rg, (BArc*)arc, (BNode*)new_node, (BNode*)arc->tail); /* set previous angle to 0, since there's no following edges */ - if (previous_edge) - { + if (previous_edge) { previous_edge->angle = 0; } } - else - { + else { RigEdge *previous_edge = last_edge->prev; - if (previous_edge) - { + if (previous_edge) { BLI_remlink(&arc->edges, last_edge); MEM_freeN(last_edge); @@ -1298,32 +1161,25 @@ static void RIG_arcFromBoneChain(RigGraph *rg, ListBase *list, EditBone *root_bo RigArc *arc = NULL; int contain_head = 0; - for (bone = root_bone; bone; bone = nextEditBoneChild(list, bone, 0)) - { + for (bone = root_bone; bone; bone = nextEditBoneChild(list, bone, 0)) { int nb_children; - if (selected == 0 || (bone->flag & BONE_SELECTED)) - { - if ((bone->flag & BONE_NO_DEFORM) == 0) - { + if (selected == 0 || (bone->flag & BONE_SELECTED)) { + if ((bone->flag & BONE_NO_DEFORM) == 0) { BLI_ghash_insert(rg->bones_map, bone->name, bone); - if (arc == NULL) - { + if (arc == NULL) { arc = newRigArc(rg); - if (starting_node == NULL) - { + if (starting_node == NULL) { starting_node = newRigNodeHead(rg, arc, root_bone->head); } - else - { + else { addRigNodeHead(rg, arc, starting_node); } } - if (bone->parent && (bone->flag & BONE_CONNECTED) == 0) - { + if (bone->parent && (bone->flag & BONE_CONNECTED) == 0) { RIG_addEdgeToArc(arc, bone->head, NULL); } @@ -1331,34 +1187,28 @@ static void RIG_arcFromBoneChain(RigGraph *rg, ListBase *list, EditBone *root_bo last_bone = bone; - if (strcmp(bone->name, "head") == 0) - { + if (strcmp(bone->name, "head") == 0) { contain_head = 1; } } - else if ((bone->flag & BONE_EDITMODE_LOCKED) == 0) /* ignore locked bones */ - { + else if ((bone->flag & BONE_EDITMODE_LOCKED) == 0) { /* ignore locked bones */ RIG_addControlBone(rg, bone); } } nb_children = countEditBoneChildren(list, bone); - if (nb_children > 1) - { + if (nb_children > 1) { RigNode *end_node = NULL; int i; - if (arc != NULL) - { + if (arc != NULL) { end_node = newRigNodeTail(rg, arc, bone->tail); } - else - { + else { end_node = newRigNode(rg, bone->tail); } - for (i = 0; i < nb_children; i++) - { + for (i = 0; i < nb_children; i++) { root_bone = nextEditBoneChild(list, bone, i); RIG_arcFromBoneChain(rg, list, root_bone, end_node, selected); } @@ -1369,13 +1219,11 @@ static void RIG_arcFromBoneChain(RigGraph *rg, ListBase *list, EditBone *root_bo } /* If the loop exited without forking */ - if (arc != NULL && bone == NULL) - { + if (arc != NULL && bone == NULL) { newRigNodeTail(rg, arc, last_bone->tail); } - if (contain_head) - { + if (contain_head) { rg->head = arc->tail; } } @@ -1383,32 +1231,26 @@ static void RIG_arcFromBoneChain(RigGraph *rg, ListBase *list, EditBone *root_bo /*******************************************************************************************************/ static void RIG_findHead(RigGraph *rg) { - if (rg->head == NULL) - { - if (BLI_countlist(&rg->arcs) == 1) - { + if (rg->head == NULL) { + if (BLI_countlist(&rg->arcs) == 1) { RigArc *arc = rg->arcs.first; rg->head = (RigNode*)arc->head; } - else - { + else { RigArc *arc; - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { RigEdge *edge = arc->edges.last; - if (edge->bone->flag & (BONE_TIPSEL|BONE_SELECTED)) - { + if (edge->bone->flag & (BONE_TIPSEL|BONE_SELECTED)) { rg->head = arc->tail; break; } } } - if (rg->head == NULL) - { + if (rg->head == NULL) { rg->head = rg->nodes.first; } } @@ -1420,8 +1262,7 @@ static void RIG_printNode(RigNode *node, const char name[]) { printf("%s %p %i <%0.3f, %0.3f, %0.3f>\n", name, (void *)node, node->degree, node->p[0], node->p[1], node->p[2]); - if (node->symmetry_flag & SYM_TOPOLOGICAL) - { + if (node->symmetry_flag & SYM_TOPOLOGICAL) { if (node->symmetry_flag & SYM_AXIAL) printf("Symmetry AXIAL\n"); else if (node->symmetry_flag & SYM_RADIAL) @@ -1435,8 +1276,7 @@ void RIG_printArcBones(RigArc *arc) { RigEdge *edge; - for (edge = arc->edges.first; edge; edge = edge->next) - { + for (edge = arc->edges.first; edge; edge = edge->next) { if (edge->bone) printf("%s ", edge->bone->name); else @@ -1465,17 +1305,14 @@ static void RIG_printLinkedCtrl(RigGraph *rg, EditBone *bone, int tabs) char *s = indent; int i; - for (i = 0; i < tabs; i++) - { + for (i = 0; i < tabs; i++) { s[0] = '\t'; s++; } s[0] = 0; - for (ctrl = rg->controls.first; ctrl; ctrl = ctrl->next) - { - if (ctrl->link == bone) - { + for (ctrl = rg->controls.first; ctrl; ctrl = ctrl->next) { + if (ctrl->link == bone) { RIG_printCtrl(ctrl, indent); RIG_printLinkedCtrl(rg, ctrl->bone, tabs + 1); } @@ -1488,13 +1325,11 @@ void RIG_printArc(RigGraph *rg, RigArc *arc) RIG_printNode((RigNode*)arc->head, "head"); - for (edge = arc->edges.first; edge; edge = edge->next) - { + for (edge = arc->edges.first; edge; edge = edge->next) { printf("\tinner joints %0.3f %0.3f %0.3f\n", edge->tail[0], edge->tail[1], edge->tail[2]); printf("\t\tlength %f\n", edge->length); printf("\t\tangle %f\n", edge->angle * 180 / M_PI); - if (edge->bone) - { + if (edge->bone) { printf("\t\t%s\n", edge->bone->name); RIG_printLinkedCtrl(rg, edge->bone, 3); } @@ -1509,18 +1344,15 @@ void RIG_printGraph(RigGraph *rg) RigArc *arc; printf("---- ARCS ----\n"); - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { RIG_printArc(rg, arc); printf("\n"); } - if (rg->head) - { + if (rg->head) { RIG_printNode(rg->head, "HEAD NODE:"); } - else - { + else { printf("HEAD NODE: NONE\n"); } } @@ -1536,12 +1368,10 @@ RigGraph *RIG_graphFromArmature(const bContext *C, Object *ob, bArmature *arm) rg = newRigGraph(); - if (obedit == ob) - { + if (obedit == ob) { rg->editbones = ((bArmature *)obedit->data)->edbo; } - else - { + else { rg->editbones = MEM_callocN(sizeof(ListBase), "EditBones"); make_boneList(rg->editbones, &arm->bonebase, NULL, NULL); rg->flag |= RIG_FREE_BONELIST; @@ -1551,8 +1381,7 @@ RigGraph *RIG_graphFromArmature(const bContext *C, Object *ob, bArmature *arm) /* Do the rotations */ for (ebone = rg->editbones->first; ebone; ebone=ebone->next) { - if (ebone->parent == NULL) - { + if (ebone->parent == NULL) { RIG_arcFromBoneChain(rg, rg->editbones, ebone, NULL, 0); } } @@ -1571,8 +1400,7 @@ RigGraph *RIG_graphFromArmature(const bContext *C, Object *ob, bArmature *arm) RIG_reconnectControlBones(rg); /* after symmetry, because we use levels to find best match */ - if (BLI_isGraphCyclic((BGraph*)rg)) - { + if (BLI_isGraphCyclic((BGraph*)rg)) { printf("armature cyclic\n"); } @@ -1588,12 +1416,10 @@ static RigGraph *armatureSelectedToGraph(bContext *C, Object *ob, bArmature *arm rg = newRigGraph(); - if (obedit == ob) - { + if (obedit == ob) { rg->editbones = arm->edbo; } - else - { + else { rg->editbones = MEM_callocN(sizeof(ListBase), "EditBones"); make_boneList(rg->editbones, &arm->bonebase, NULL, NULL); rg->flag |= RIG_FREE_BONELIST; @@ -1603,8 +1429,7 @@ static RigGraph *armatureSelectedToGraph(bContext *C, Object *ob, bArmature *arm /* Do the rotations */ for (ebone = rg->editbones->first; ebone; ebone=ebone->next) { - if (ebone->parent == NULL) - { + if (ebone->parent == NULL) { RIG_arcFromBoneChain(rg, rg->editbones, ebone, NULL, 1); } } @@ -1623,8 +1448,7 @@ static RigGraph *armatureSelectedToGraph(bContext *C, Object *ob, bArmature *arm RIG_reconnectControlBones(rg); /* after symmetry, because we use levels to find best match */ - if (BLI_isGraphCyclic((BGraph*)rg)) - { + if (BLI_isGraphCyclic((BGraph*)rg)) { printf("armature cyclic\n"); } @@ -1721,8 +1545,7 @@ static void repositionTailControl(RigGraph *rigg, RigControl *ctrl); static void finalizeControl(RigGraph *rigg, RigControl *ctrl, float resize) { - if ((ctrl->flag & RIG_CTRL_DONE) == RIG_CTRL_DONE) - { + if ((ctrl->flag & RIG_CTRL_DONE) == RIG_CTRL_DONE) { RigControl *ctrl_child; #if 0 @@ -1737,17 +1560,14 @@ static void finalizeControl(RigGraph *rigg, RigControl *ctrl, float resize) #endif /* if there was a tail link: apply link, recalc resize factor and qrot */ - if (ctrl->tail_mode != TL_NONE) - { + if (ctrl->tail_mode != TL_NONE) { float *tail_vec = NULL; float v1[3], v2[3], qtail[4]; - if (ctrl->tail_mode == TL_TAIL) - { + if (ctrl->tail_mode == TL_TAIL) { tail_vec = ctrl->link_tail->tail; } - else if (ctrl->tail_mode == TL_HEAD) - { + else if (ctrl->tail_mode == TL_HEAD) { tail_vec = ctrl->link_tail->head; } @@ -1765,14 +1585,11 @@ static void finalizeControl(RigGraph *rigg, RigControl *ctrl, float resize) ctrl->bone->roll = rollBoneByQuat(ctrl->bone, ctrl->up_axis, ctrl->qrot); /* Cascade to connected control bones */ - for (ctrl_child = rigg->controls.first; ctrl_child; ctrl_child = ctrl_child->next) - { - if (ctrl_child->link == ctrl->bone) - { + for (ctrl_child = rigg->controls.first; ctrl_child; ctrl_child = ctrl_child->next) { + if (ctrl_child->link == ctrl->bone) { repositionControl(rigg, ctrl_child, ctrl->bone->head, ctrl->bone->tail, ctrl->qrot, resize); } - if (ctrl_child->link_tail == ctrl->bone) - { + if (ctrl_child->link_tail == ctrl->bone) { repositionTailControl(rigg, ctrl_child); } } @@ -1800,8 +1617,7 @@ static void repositionControl(RigGraph *rigg, RigControl *ctrl, float head[3], f copy_qt_qt(ctrl->qrot, qrot); - if (ctrl->tail_mode == TL_NONE) - { + if (ctrl->tail_mode == TL_NONE) { sub_v3_v3v3(tail_offset, ctrl->tail, ctrl->head); mul_v3_fl(tail_offset, resize); mul_qt_v3(qrot, tail_offset); @@ -1838,38 +1654,30 @@ static void repositionBone(bContext *C, RigGraph *rigg, RigEdge *edge, float vec copy_v3_v3(bone->head, vec0); copy_v3_v3(bone->tail, vec1); - if (!is_zero_v3(up_axis)) - { + if (!is_zero_v3(up_axis)) { float qroll[4]; - if (scene->toolsettings->skgen_retarget_roll == SK_RETARGET_ROLL_VIEW) - { + if (scene->toolsettings->skgen_retarget_roll == SK_RETARGET_ROLL_VIEW) { bone->roll = rollBoneByQuatAligned(bone, edge->up_axis, qrot, qroll, up_axis); } - else if (scene->toolsettings->skgen_retarget_roll == SK_RETARGET_ROLL_JOINT) - { + else if (scene->toolsettings->skgen_retarget_roll == SK_RETARGET_ROLL_JOINT) { bone->roll = rollBoneByQuatJoint(edge, edge->prev, qrot, qroll, up_axis); } - else - { + else { unit_qt(qroll); } mul_qt_qtqt(qrot, qroll, qrot); } - else - { + else { bone->roll = rollBoneByQuat(bone, edge->up_axis, qrot); } - for (ctrl = rigg->controls.first; ctrl; ctrl = ctrl->next) - { - if (ctrl->link == bone) - { + for (ctrl = rigg->controls.first; ctrl; ctrl = ctrl->next) { + if (ctrl->link == bone) { repositionControl(rigg, ctrl, vec0, vec1, qrot, resize); } - if (ctrl->link_tail == bone) - { + if (ctrl->link_tail == bone) { repositionTailControl(rigg, ctrl); } } @@ -1890,8 +1698,7 @@ static RetargetMode detectArcRetargetMode(RigArc *iarc) int nb_edges = 0; - for (edge = iarc->edges.first; edge; edge = edge->next) - { + for (edge = iarc->edges.first; edge; edge = edge->next) { avg_angle += edge->angle; nb_edges++; } @@ -1901,29 +1708,23 @@ static RetargetMode detectArcRetargetMode(RigArc *iarc) /* avg_length = iarc->length / nb_edges; */ /* UNUSED */ - if (nb_edges > 2) - { - for (edge = iarc->edges.first; edge; edge = edge->next) - { - if (fabs(edge->angle - avg_angle) > M_PI / 6) - { + if (nb_edges > 2) { + for (edge = iarc->edges.first; edge; edge = edge->next) { + if (fabs(edge->angle - avg_angle) > M_PI / 6) { large_angle = 1; } } } - else if (nb_edges == 2 && avg_angle > 0) - { + else if (nb_edges == 2 && avg_angle > 0) { large_angle = 1; } - if (large_angle == 0) - { + if (large_angle == 0) { mode = RETARGET_LENGTH; } - if (earc->bcount <= (iarc->count - 1)) - { + if (earc->bcount <= (iarc->count - 1)) { mode = RETARGET_LENGTH; } @@ -1936,8 +1737,7 @@ static void printMovesNeeded(int *positions, int nb_positions) int moves = 0; int i; - for (i = 0; i < nb_positions; i++) - { + for (i = 0; i < nb_positions; i++) { moves += positions[i] - (i + 1); } @@ -1948,8 +1748,7 @@ static void printPositions(int *positions, int nb_positions) { int i; - for (i = 0; i < nb_positions; i++) - { + for (i = 0; i < nb_positions; i++) { printf("%i ", positions[i]); } printf("\n"); @@ -1965,17 +1764,14 @@ static float costDistance(BArcIterator *iter, float *vec0, float *vec1, int i0, float v1[3], v2[3], c[3]; float v1_inpf; - if (distance_weight > 0) - { + if (distance_weight > 0) { sub_v3_v3v3(v1, vec0, vec1); v1_inpf = dot_v3v3(v1, v1); - if (v1_inpf > 0) - { + if (v1_inpf > 0) { int j; - for (j = i0 + 1; j < i1 - 1; j++) - { + for (j = i0 + 1; j < i1 - 1; j++) { float dist; bucket = IT_peek(iter, j); @@ -1991,48 +1787,40 @@ static float costDistance(BArcIterator *iter, float *vec0, float *vec1, int i0, return distance_weight * max_dist; } - else - { + else { return MAX_COST; } } - else - { + else { return 0; } } static float costAngle(float original_angle, float vec_first[3], float vec_second[3], float angle_weight) { - if (angle_weight > 0) - { + if (angle_weight > 0) { float current_angle; - if (!is_zero_v3(vec_first) && !is_zero_v3(vec_second)) - { + if (!is_zero_v3(vec_first) && !is_zero_v3(vec_second)) { current_angle = saacos(dot_v3v3(vec_first, vec_second)); return angle_weight * fabsf(current_angle - original_angle); } - else - { + else { return angle_weight * (float)M_PI; } } - else - { + else { return 0; } } static float costLength(float original_length, float current_length, float length_weight) { - if (current_length == 0) - { + if (current_length == 0) { return MAX_COST; } - else - { + else { float length_ratio = fabs((current_length - original_length) / original_length); return length_weight * length_ratio * length_ratio; } @@ -2062,8 +1850,7 @@ static float calcCostAngleLengthDistance(BArcIterator *iter, float **UNUSED(vec_ /* Angle cost */ - if (edge->prev) - { + if (edge->prev) { sub_v3_v3v3(vec_first, vec1, vec0); normalize_v3(vec_first); @@ -2089,8 +1876,7 @@ static void copyMemoPositions(int *positions, MemoNode *table, int nb_positions, int previous = 0, current = 0; int i = 0; - for (i = 0; joints_left > 0; joints_left--, i++) - { + for (i = 0; joints_left > 0; joints_left--, i++) { MemoNode *node; node = table + indexMemoNode(nb_positions, previous, current, joints_left); @@ -2108,12 +1894,10 @@ static MemoNode * solveJoints(MemoNode *table, BArcIterator *iter, float **vec_c node = table + index; - if (node->weight != 0) - { + if (node->weight != 0) { return node; } - else if (joints_left == 0) - { + else if (joints_left == 0) { float *vec0 = vec_cache[previous]; float *vec1 = vec_cache[current]; float *vec2 = vec_cache[nb_positions + 1]; @@ -2122,8 +1906,7 @@ static MemoNode * solveJoints(MemoNode *table, BArcIterator *iter, float **vec_c return node; } - else - { + else { MemoNode *min_node = NULL; float *vec0 = vec_cache[previous]; float *vec1 = vec_cache[current]; @@ -2131,8 +1914,7 @@ static MemoNode * solveJoints(MemoNode *table, BArcIterator *iter, float **vec_c int min_next= 0; int next; - for (next = current + 1; next <= nb_positions - (joints_left - 1); next++) - { + for (next = current + 1; next <= nb_positions - (joints_left - 1); next++) { MemoNode *next_node; float *vec2 = vec_cache[next]; float weight = 0.0f; @@ -2140,8 +1922,7 @@ static MemoNode * solveJoints(MemoNode *table, BArcIterator *iter, float **vec_c /* ADD WEIGHT OF PREVIOUS - CURRENT - NEXT triple */ weight = calcCostAngleLengthDistance(iter, vec_cache, edge, vec0, vec1, vec2, current, next, angle_weight, length_weight, distance_weight); - if (weight >= MAX_COST) - { + if (weight >= MAX_COST) { continue; } @@ -2149,22 +1930,19 @@ static MemoNode * solveJoints(MemoNode *table, BArcIterator *iter, float **vec_c next_node = solveJoints(table, iter, vec_cache, nb_joints, nb_positions, current, next, edge->next, joints_left - 1, angle_weight, length_weight, distance_weight); weight += next_node->weight; - if (min_node == NULL || weight < min_weight) - { + if (min_node == NULL || weight < min_weight) { min_weight = weight; min_node = next_node; min_next = next; } } - if (min_node) - { + if (min_node) { node->weight = min_weight; node->next = min_next; return node; } - else - { + else { node->weight = MAX_COST; return node; } @@ -2178,12 +1956,12 @@ static int testFlipArc(RigArc *iarc, RigNode *inode_start) ReebNode *enode_start = BIF_NodeFromIndex(earc, inode_start->link_mesh); /* no flip needed if both nodes are the same */ - if ((enode_start == earc->head && inode_start == iarc->head) || (enode_start == earc->tail && inode_start == iarc->tail)) + if ((enode_start == earc->head && inode_start == iarc->head) || + (enode_start == earc->tail && inode_start == iarc->tail)) { return 0; } - else - { + else { return 1; } } @@ -2209,38 +1987,32 @@ static void retargetArctoArcAggresive(bContext *C, RigGraph *rigg, RigArc *iarc, RetargetMethod method = METHOD_MEMOIZE; int i; - if (nb_joints > earc->bcount) - { + if (nb_joints > earc->bcount) { printf("NOT ENOUGH BUCKETS!\n"); return; } best_positions = MEM_callocN(sizeof(int) * nb_joints, "Best positions"); - if (testFlipArc(iarc, inode_start)) - { + if (testFlipArc(iarc, inode_start)) { node_start = earc->tail; node_end = earc->head; } - else - { + else { node_start = earc->head; node_end = earc->tail; } /* equal number of joints and potential position, just fill them in */ - if (nb_joints == earc->bcount) - { + if (nb_joints == earc->bcount) { int i; /* init with first values */ - for (i = 0; i < nb_joints; i++) - { + for (i = 0; i < nb_joints; i++) { best_positions[i] = i + 1; } } - if (method == METHOD_MEMOIZE) - { + if (method == METHOD_MEMOIZE) { int nb_positions = earc->bcount; int nb_memo_nodes = nb_positions * nb_positions * (nb_joints + 1); MemoNode *table = MEM_callocN(nb_memo_nodes * sizeof(MemoNode), "memoization table"); @@ -2255,8 +2027,7 @@ static void retargetArctoArcAggresive(bContext *C, RigGraph *rigg, RigArc *iarc, initArcIterator(iter, earc, node_start); - for (i = 1; i <= nb_positions; i++) - { + for (i = 1; i <= nb_positions; i++) { EmbedBucket *bucket = IT_peek(iter, i); positions_cache[i] = bucket->p; } @@ -2290,20 +2061,17 @@ static void retargetArctoArcAggresive(bContext *C, RigGraph *rigg, RigArc *iarc, edge = edge->next, i++) { float *no = NULL; - if (i < nb_joints) - { + if (i < nb_joints) { bucket = IT_peek(iter, best_positions[i]); vec1 = bucket->p; no = bucket->no; } - else - { + else { vec1 = node_end->p; no = node_end->no; } - if (edge->bone) - { + if (edge->bone) { repositionBone(C, rigg, edge, vec0, vec1, no); } @@ -2327,13 +2095,11 @@ static void retargetArctoArcLength(bContext *C, RigGraph *rigg, RigArc *iarc, Ri float *previous_vec = NULL; - if (testFlipArc(iarc, inode_start)) - { + if (testFlipArc(iarc, inode_start)) { node_start = (ReebNode*)earc->tail; node_end = (ReebNode*)earc->head; } - else - { + else { node_start = (ReebNode*)earc->head; node_end = (ReebNode*)earc->tail; } @@ -2344,8 +2110,7 @@ static void retargetArctoArcLength(bContext *C, RigGraph *rigg, RigArc *iarc, Ri vec0 = node_start->p; - while (bucket != NULL) - { + while (bucket != NULL) { vec1 = bucket->p; embedding_length += len_v3v3(vec0, vec1); @@ -2365,14 +2130,12 @@ static void retargetArctoArcLength(bContext *C, RigGraph *rigg, RigArc *iarc, Ri previous_vec = vec0; vec1 = bucket->p; - for (edge = iarc->edges.first; edge; edge = edge->next) - { + for (edge = iarc->edges.first; edge; edge = edge->next) { float new_bone_length = edge->length / iarc->length * embedding_length; float *no = NULL; float length = 0; - while (bucket && new_bone_length > length) - { + while (bucket && new_bone_length > length) { length += len_v3v3(previous_vec, vec1); bucket = IT_next(iter); previous_vec = vec1; @@ -2380,15 +2143,13 @@ static void retargetArctoArcLength(bContext *C, RigGraph *rigg, RigArc *iarc, Ri no = bucket->no; } - if (bucket == NULL) - { + if (bucket == NULL) { vec1 = node_end->p; no = node_end->no; } /* no need to move virtual edges (space between unconnected bones) */ - if (edge->bone) - { + if (edge->bone) { repositionBone(C, rigg, edge, vec0, vec1, no); } @@ -2429,29 +2190,23 @@ void *exec_retargetArctoArc(void *param) RigNode *inode_start = p->inode_start; ReebArc *earc = iarc->link_mesh; - if (BLI_countlist(&iarc->edges) == 1) - { + if (BLI_countlist(&iarc->edges) == 1) { RigEdge *edge = iarc->edges.first; - if (testFlipArc(iarc, inode_start)) - { + if (testFlipArc(iarc, inode_start)) { repositionBone(C, rigg, edge, earc->tail->p, earc->head->p, earc->head->no); } - else - { + else { repositionBone(C, rigg, edge, earc->head->p, earc->tail->p, earc->tail->no); } } - else - { + else { RetargetMode mode = detectArcRetargetMode(iarc); - if (mode == RETARGET_AGGRESSIVE) - { + if (mode == RETARGET_AGGRESSIVE) { retargetArctoArcAggresive(C, rigg, iarc, inode_start); } - else - { + else { retargetArctoArcLength(C, rigg, iarc, inode_start); } } @@ -2474,8 +2229,7 @@ static void matchMultiResolutionNode(RigGraph *rigg, RigNode *inode, ReebNode *t inode->link_mesh = enode; - while (ishape == eshape && enode->link_down) - { + while (ishape == eshape && enode->link_down) { inode->link_mesh = enode; enode = enode->link_down; @@ -2488,16 +2242,13 @@ static void markMultiResolutionChildArc(ReebNode *end_enode, ReebNode *enode) { int i; - for (i = 0; i < enode->degree; i++) - { + for (i = 0; i < enode->degree; i++) { ReebArc *earc = (ReebArc*)enode->arcs[i]; - if (earc->flag == ARC_FREE) - { + if (earc->flag == ARC_FREE) { earc->flag = ARC_TAKEN; - if (earc->tail->degree > 1 && earc->tail != end_enode) - { + if (earc->tail->degree > 1 && earc->tail != end_enode) { markMultiResolutionChildArc(end_enode, earc->tail); } break; @@ -2507,15 +2258,12 @@ static void markMultiResolutionChildArc(ReebNode *end_enode, ReebNode *enode) static void markMultiResolutionArc(ReebArc *start_earc) { - if (start_earc->link_up) - { + if (start_earc->link_up) { ReebArc *earc; - for (earc = start_earc->link_up ; earc; earc = earc->link_up) - { + for (earc = start_earc->link_up ; earc; earc = earc->link_up) { earc->flag = ARC_TAKEN; - if (earc->tail->index != start_earc->tail->index) - { + if (earc->tail->index != start_earc->tail->index) { markMultiResolutionChildArc(earc->tail, earc->tail); } } @@ -2531,8 +2279,7 @@ static void matchMultiResolutionArc(RigGraph *rigg, RigNode *start_node, RigArc ishape = BLI_subtreeShape((BGraph*)rigg, (BNode*)start_node, (BArc*)next_iarc, 1) % SHAPE_LEVELS; eshape = BLI_subtreeShape((BGraph*)reebg, (BNode*)enode, (BArc*)next_earc, 1) % SHAPE_LEVELS; - while (ishape != eshape && next_earc->link_up) - { + while (ishape != eshape && next_earc->link_up) { next_earc->flag = ARC_TAKEN; // mark previous as taken, to prevent backtrack on lower levels next_earc = next_earc->link_up; @@ -2563,8 +2310,7 @@ static void matchMultiResolutionStartingNode(RigGraph *rigg, ReebGraph *reebg, R ishape = BLI_subtreeShape((BGraph*)rigg, (BNode*)inode, NULL, 0) % SHAPE_LEVELS; eshape = BLI_subtreeShape((BGraph*)rigg->link_mesh, (BNode*)enode, NULL, 0) % SHAPE_LEVELS; - while (ishape != eshape && reebg->link_up) - { + while (ishape != eshape && reebg->link_up) { reebg = reebg->link_up; enode = reebg->nodes.first; @@ -2593,8 +2339,7 @@ static void findCorrespondingArc(RigGraph *rigg, RigArc *start_arc, RigNode *sta // RIG_printArcBones(next_iarc); // } - for (i = 0; i < enode->degree; i++) - { + for (i = 0; i < enode->degree; i++) { next_earc = (ReebArc*)enode->arcs[i]; // if (next_earc->flag == ARC_FREE) @@ -2619,20 +2364,17 @@ static void findCorrespondingArc(RigGraph *rigg, RigArc *start_arc, RigNode *sta } /* not found, try at higher nodes (lower node might have filtered internal arcs, messing shape of tree */ - if (next_iarc->link_mesh == NULL) - { + if (next_iarc->link_mesh == NULL) { // printf("NO CORRESPONDING ARC FOUND - GOING TO HIGHER LEVELS\n"); - if (enode->link_up) - { + if (enode->link_up) { start_node->link_mesh = enode->link_up; findCorrespondingArc(rigg, start_arc, start_node, next_iarc, 0); } } /* still not found, print debug info */ - if (root && next_iarc->link_mesh == NULL) - { + if (root && next_iarc->link_mesh == NULL) { start_node->link_mesh = enode; /* linking back with root node */ // printf("NO CORRESPONDING ARC FOUND\n"); @@ -2651,12 +2393,10 @@ static void findCorrespondingArc(RigGraph *rigg, RigArc *start_arc, RigNode *sta // } /* Emergency matching */ - for (i = 0; i < enode->degree; i++) - { + for (i = 0; i < enode->degree; i++) { next_earc = (ReebArc*)enode->arcs[i]; - if (next_earc->flag == ARC_FREE && next_earc->symmetry_level == symmetry_level) - { + if (next_earc->flag == ARC_FREE && next_earc->symmetry_level == symmetry_level) { // printf("USING:\n"); // printf("flag %i -- level %i -- flag %i -- group %i\n", next_earc->flag, next_earc->symmetry_level, next_earc->symmetry_flag, next_earc->symmetry_group); matchMultiResolutionArc(rigg, start_node, next_iarc, next_earc); @@ -2673,8 +2413,7 @@ static void retargetSubgraph(bContext *C, RigGraph *rigg, RigArc *start_arc, Rig int i; /* no start arc on first node */ - if (start_arc) - { + if (start_arc) { ReebNode *enode = start_node->link_mesh; ReebArc *earc = start_arc->link_mesh; @@ -2687,16 +2426,13 @@ static void retargetSubgraph(bContext *C, RigGraph *rigg, RigArc *start_arc, Rig matchMultiResolutionNode(rigg, inode, enode); } - for (i = 0; i < inode->degree; i++) - { + for (i = 0; i < inode->degree; i++) { RigArc *next_iarc = (RigArc*)inode->arcs[i]; /* no back tracking */ - if (next_iarc != start_arc) - { + if (next_iarc != start_arc) { findCorrespondingArc(rigg, start_arc, inode, next_iarc, 1); - if (next_iarc->link_mesh) - { + if (next_iarc->link_mesh) { retargetSubgraph(C, rigg, next_iarc, inode); } } @@ -2715,10 +2451,8 @@ static void adjustGraphs(bContext *C, RigGraph *rigg) bArmature *arm= rigg->ob->data; RigArc *arc; - for (arc = rigg->arcs.first; arc; arc = arc->next) - { - if (arc->link_mesh) - { + for (arc = rigg->arcs.first; arc; arc = arc->next) { + if (arc->link_mesh) { retargetArctoArc(C, rigg, arc, arc->head); } } @@ -2762,25 +2496,21 @@ const char *RIG_nameBone(RigGraph *rg, int arc_index, int bone_index) RigArc *arc = BLI_findlink(&rg->arcs, arc_index); RigEdge *iedge; - if (arc == NULL) - { + if (arc == NULL) { return "None"; } - if (bone_index == BLI_countlist(&arc->edges)) - { + if (bone_index == BLI_countlist(&arc->edges)) { return "Last joint"; } iedge = BLI_findlink(&arc->edges, bone_index); - if (iedge == NULL) - { + if (iedge == NULL) { return "Done"; } - if (iedge->bone == NULL) - { + if (iedge->bone == NULL) { return "Bone offset"; } @@ -2794,8 +2524,7 @@ int RIG_nbJoints(RigGraph *rg) total += BLI_countlist(&rg->nodes); - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { total += BLI_countlist(&arc->edges) - 1; /* -1 because end nodes are already counted */ } @@ -2804,8 +2533,7 @@ int RIG_nbJoints(RigGraph *rg) static void BIF_freeRetarget(void) { - if (GLOBAL_RIGG) - { + if (GLOBAL_RIGG) { RIG_freeRigGraph((BGraph*)GLOBAL_RIGG); GLOBAL_RIGG = NULL; } @@ -2830,8 +2558,7 @@ void BIF_retargetArmature(bContext *C) CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { Object *ob = base->object; - if (ob->type==OB_ARMATURE) - { + if (ob->type==OB_ARMATURE) { RigGraph *rigg; bArmature *arm; @@ -2910,8 +2637,7 @@ void BIF_retargetArc(bContext *C, ReebArc *earc, RigGraph *template_rigg) template_rigg = armatureSelectedToGraph(C, ob, ob->data); } - if (template_rigg->arcs.first == NULL) - { + if (template_rigg->arcs.first == NULL) { // XXX // error("No Template and no deforming bones selected"); return; @@ -2930,8 +2656,7 @@ void BIF_retargetArc(bContext *C, ReebArc *earc, RigGraph *template_rigg) finishRetarget(rigg); /* free template if it comes from the edit armature */ - if (free_template) - { + if (free_template) { RIG_freeRigGraph((BGraph*)template_rigg); } RIG_freeRigGraph((BGraph*)rigg); @@ -2944,8 +2669,7 @@ void BIF_retargetArc(bContext *C, ReebArc *earc, RigGraph *template_rigg) void BIF_adjustRetarget(bContext *C) { - if (GLOBAL_RIGG) - { + if (GLOBAL_RIGG) { adjustGraphs(C, GLOBAL_RIGG); } } diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c index 81b020a4cf9..4c7ab833e69 100644 --- a/source/blender/editors/armature/editarmature_sketch.c +++ b/source/blender/editors/armature/editarmature_sketch.c @@ -162,25 +162,21 @@ void BIF_makeListTemplates(const bContext *C) Base *base; int index = 0; - if (TEMPLATES_HASH != NULL) - { + if (TEMPLATES_HASH != NULL) { BLI_ghash_free(TEMPLATES_HASH, NULL, NULL); } TEMPLATES_HASH = BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp, "makeListTemplates gh"); TEMPLATES_CURRENT = 0; - for ( base = FIRSTBASE; base; base = base->next ) - { + for ( base = FIRSTBASE; base; base = base->next ) { Object *ob = base->object; - if (ob != obedit && ob->type == OB_ARMATURE) - { + if (ob != obedit && ob->type == OB_ARMATURE) { index++; BLI_ghash_insert(TEMPLATES_HASH, SET_INT_IN_POINTER(index), ob); - if (ob == ts->skgen_template) - { + if (ob == ts->skgen_template) { TEMPLATES_CURRENT = index; } } @@ -193,8 +189,7 @@ const char *BIF_listTemplates(const bContext *UNUSED(C)) char menu_header[] = "Template%t|None%x0|"; char *p; - if (TEMPLATES_MENU != NULL) - { + if (TEMPLATES_MENU != NULL) { MEM_freeN(TEMPLATES_MENU); } @@ -206,8 +201,7 @@ const char *BIF_listTemplates(const bContext *UNUSED(C)) BLI_ghashIterator_init(&ghi, TEMPLATES_HASH); - while (!BLI_ghashIterator_isDone(&ghi)) - { + while (!BLI_ghashIterator_isDone(&ghi)) { Object *ob = BLI_ghashIterator_getValue(&ghi); int key = GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(&ghi)); @@ -223,18 +217,15 @@ int BIF_currentTemplate(const bContext *C) { ToolSettings *ts = CTX_data_tool_settings(C); - if (TEMPLATES_CURRENT == 0 && ts->skgen_template != NULL) - { + if (TEMPLATES_CURRENT == 0 && ts->skgen_template != NULL) { GHashIterator ghi; BLI_ghashIterator_init(&ghi, TEMPLATES_HASH); - while (!BLI_ghashIterator_isDone(&ghi)) - { + while (!BLI_ghashIterator_isDone(&ghi)) { Object *ob = BLI_ghashIterator_getValue(&ghi); int key = GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(&ghi)); - if (ob == ts->skgen_template) - { + if (ob == ts->skgen_template) { TEMPLATES_CURRENT = key; break; } @@ -249,21 +240,17 @@ int BIF_currentTemplate(const bContext *C) static RigGraph* sk_makeTemplateGraph(const bContext *C, Object *ob) { Object *obedit = CTX_data_edit_object(C); - if (ob == obedit) - { + if (ob == obedit) { return NULL; } - if (ob != NULL) - { - if (TEMPLATE_RIGG && TEMPLATE_RIGG->ob != ob) - { + if (ob != NULL) { + if (TEMPLATE_RIGG && TEMPLATE_RIGG->ob != ob) { RIG_freeRigGraph((BGraph*)TEMPLATE_RIGG); TEMPLATE_RIGG = NULL; } - if (TEMPLATE_RIGG == NULL) - { + if (TEMPLATE_RIGG == NULL) { bArmature *arm; arm = ob->data; @@ -280,12 +267,10 @@ int BIF_nbJointsTemplate(const bContext *C) ToolSettings *ts = CTX_data_tool_settings(C); RigGraph *rg = sk_makeTemplateGraph(C, ts->skgen_template); - if (rg) - { + if (rg) { return RIG_nbJoints(rg); } - else - { + else { return -1; } } @@ -297,15 +282,13 @@ const char * BIF_nameBoneTemplate(const bContext *C) RigGraph *rg; int index = 0; - if (stk && stk->active_stroke != NULL) - { + if (stk && stk->active_stroke != NULL) { index = stk->active_stroke->nb_points; } rg = sk_makeTemplateGraph(C, ts->skgen_template); - if (rg == NULL) - { + if (rg == NULL) { return ""; } @@ -314,20 +297,17 @@ const char * BIF_nameBoneTemplate(const bContext *C) void BIF_freeTemplates(bContext *UNUSED(C)) { - if (TEMPLATES_MENU != NULL) - { + if (TEMPLATES_MENU != NULL) { MEM_freeN(TEMPLATES_MENU); TEMPLATES_MENU = NULL; } - if (TEMPLATES_HASH != NULL) - { + if (TEMPLATES_HASH != NULL) { BLI_ghash_free(TEMPLATES_HASH, NULL, NULL); TEMPLATES_HASH = NULL; } - if (TEMPLATE_RIGG != NULL) - { + if (TEMPLATE_RIGG != NULL) { RIG_freeRigGraph((BGraph*)TEMPLATE_RIGG); TEMPLATE_RIGG = NULL; } @@ -336,16 +316,13 @@ void BIF_freeTemplates(bContext *UNUSED(C)) void BIF_setTemplate(bContext *C, int index) { ToolSettings *ts = CTX_data_tool_settings(C); - if (index > 0) - { + if (index > 0) { ts->skgen_template = BLI_ghash_lookup(TEMPLATES_HASH, SET_INT_IN_POINTER(index)); } - else - { + else { ts->skgen_template = NULL; - if (TEMPLATE_RIGG != NULL) - { + if (TEMPLATE_RIGG != NULL) { RIG_freeRigGraph((BGraph*)TEMPLATE_RIGG); } TEMPLATE_RIGG = NULL; @@ -357,44 +334,35 @@ void BIF_setTemplate(bContext *C, int index) static void sk_autoname(bContext *C, ReebArc *arc) { ToolSettings *ts = CTX_data_tool_settings(C); - if (ts->skgen_retarget_options & SK_RETARGET_AUTONAME) - { - if (arc == NULL) - { + if (ts->skgen_retarget_options & SK_RETARGET_AUTONAME) { + if (arc == NULL) { char *num = ts->skgen_num_string; int i = atoi(num); i++; BLI_snprintf(num, 8, "%i", i); } - else - { + else { char *side = ts->skgen_side_string; int valid = 0; int caps = 0; - if (side[0] == '\0') - { + if (side[0] == '\0') { valid = 1; } - else if (strcmp(side, "R")==0 || strcmp(side, "L")==0) - { + else if (strcmp(side, "R")==0 || strcmp(side, "L")==0) { valid = 1; caps = 1; } - else if (strcmp(side, "r")==0 || strcmp(side, "l")==0) - { + else if (strcmp(side, "r")==0 || strcmp(side, "l")==0) { valid = 1; caps = 0; } - if (valid) - { - if (arc->head->p[0] < 0) - { + if (valid) { + if (arc->head->p[0] < 0) { BLI_snprintf(side, 8, caps?"R":"r"); } - else - { + else { BLI_snprintf(side, 8, caps?"L":"l"); } } @@ -428,8 +396,7 @@ static ReebArc *sk_strokeToArc(SK_Stroke *stk, float imat[][4], float tmat[][3]) arc->bcount = stk->nb_points - 2; /* first and last are nodes, don't count */ arc->buckets = MEM_callocN(sizeof(EmbedBucket) * arc->bcount, "Buckets"); - for (i = 0; i < arc->bcount; i++) - { + for (i = 0; i < arc->bcount; i++) { copy_v3_v3(arc->buckets[i].p, stk->points[i + 1].p); mul_m4_v3(imat, arc->buckets[i].p); @@ -473,8 +440,7 @@ static void sk_retargetStroke(bContext *C, SK_Stroke *stk) static void sk_cancelStroke(SK_Sketch *sketch) { - if (sketch->active_stroke != NULL) - { + if (sketch->active_stroke != NULL) { sk_resetOverdraw(sketch); sk_removeStroke(sketch, sketch->active_stroke); } @@ -501,8 +467,7 @@ static void sk_drawEdge(GLUquadric *quad, SK_Point *pt0, SK_Point *pt1, float si length = normalize_v3(vec1); cross_v3_v3v3(axis, vec2, vec1); - if (is_zero_v3(axis)) - { + if (is_zero_v3(axis)) { axis[1] = 1; } @@ -522,8 +487,7 @@ static void sk_drawNormal(GLUquadric *quad, SK_Point *pt, float size, float heig cross_v3_v3v3(axis, vec2, pt->no); - if (is_zero_v3(axis)) - { + if (is_zero_v3(axis)) { axis[1] = 1; } @@ -544,18 +508,15 @@ static void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int GLUquadric *quad = gluNewQuadric(); gluQuadricNormals(quad, GLU_SMOOTH); - if (id != -1) - { + if (id != -1) { glLoadName(id); - for (i = 0; i < stk->nb_points; i++) - { + for (i = 0; i < stk->nb_points; i++) { glPushMatrix(); sk_drawPoint(quad, stk->points + i, 0.1); - if (i > 0) - { + if (i > 0) { sk_drawEdge(quad, stk->points + i - 1, stk->points + i, 0.1); } @@ -563,44 +524,37 @@ static void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int } } - else - { + else { float d_rgb[3] = {1, 1, 1}; copy_v3_v3(rgb, color); sub_v3_v3(d_rgb, rgb); mul_v3_fl(d_rgb, 1.0f / (float)stk->nb_points); - for (i = 0; i < stk->nb_points; i++) - { + for (i = 0; i < stk->nb_points; i++) { SK_Point *pt = stk->points + i; glPushMatrix(); - if (pt->type == PT_EXACT) - { + if (pt->type == PT_EXACT) { glColor3f(0, 0, 0); sk_drawPoint(quad, pt, 0.15); sk_drawNormal(quad, pt, 0.05, 0.9); } - if (i >= start && i <= end) - { + if (i >= start && i <= end) { glColor3f(0.3, 0.3, 0.3); } - else - { + else { glColor3fv(rgb); } - if (pt->type != PT_EXACT) - { + if (pt->type != PT_EXACT) { sk_drawPoint(quad, pt, 0.1); } - if (i > 0) - { + if (i > 0) { sk_drawEdge(quad, pt - 1, pt, 0.1); } @@ -627,8 +581,7 @@ static void drawSubdividedStrokeBy(ToolSettings *toolsettings, BArcIterator *ite copy_v3_v3(head, iter->p); index = next_subdividion(toolsettings, iter, bone_start, end, head, tail); - while (index != -1) - { + while (index != -1) { SK_Point *pt = stk->points + index; glPushMatrix(); @@ -654,41 +607,32 @@ static void sk_drawStrokeSubdivision(ToolSettings *toolsettings, SK_Stroke *stk) int head_index = -1; int i; - if (toolsettings->bone_sketching_convert == SK_CONVERT_RETARGET) - { + if (toolsettings->bone_sketching_convert == SK_CONVERT_RETARGET) { return; } - for (i = 0; i < stk->nb_points; i++) - { + for (i = 0; i < stk->nb_points; i++) { SK_Point *pt = stk->points + i; - if (pt->type == PT_EXACT || i == stk->nb_points - 1) /* stop on exact or on last point */ - { - if (head_index == -1) - { + if (pt->type == PT_EXACT || i == stk->nb_points - 1) /* stop on exact or on last point */ { + if (head_index == -1) { head_index = i; } - else - { - if (i - head_index > 1) - { + else { + if (i - head_index > 1) { SK_StrokeIterator sk_iter; BArcIterator *iter = (BArcIterator*)&sk_iter; initStrokeIterator(iter, stk, head_index, i); - if (toolsettings->bone_sketching_convert == SK_CONVERT_CUT_ADAPTATIVE) - { + if (toolsettings->bone_sketching_convert == SK_CONVERT_CUT_ADAPTATIVE) { drawSubdividedStrokeBy(toolsettings, iter, nextAdaptativeSubdivision); } - else if (toolsettings->bone_sketching_convert == SK_CONVERT_CUT_LENGTH) - { + else if (toolsettings->bone_sketching_convert == SK_CONVERT_CUT_LENGTH) { drawSubdividedStrokeBy(toolsettings, iter, nextLengthSubdivision); } - else if (toolsettings->bone_sketching_convert == SK_CONVERT_CUT_FIXED) - { + else if (toolsettings->bone_sketching_convert == SK_CONVERT_CUT_FIXED) { drawSubdividedStrokeBy(toolsettings, iter, nextFixedSubdivision); } @@ -706,10 +650,8 @@ static SK_Point *sk_snapPointStroke(bContext *C, SK_Stroke *stk, int mval[2], in SK_Point *pt = NULL; int i; - for (i = 0; i < stk->nb_points; i++) - { - if (all_pts || stk->points[i].type == PT_EXACT) - { + for (i = 0; i < stk->nb_points; i++) { + if (all_pts || stk->points[i].type == PT_EXACT) { short pval[2]; int pdist; @@ -717,13 +659,11 @@ static SK_Point *sk_snapPointStroke(bContext *C, SK_Stroke *stk, int mval[2], in pdist = ABS(pval[0] - mval[0]) + ABS(pval[1] - mval[1]); - if (pdist < *dist) - { + if (pdist < *dist) { *dist = pdist; pt = stk->points + i; - if (index != NULL) - { + if (index != NULL) { *index = i; } } @@ -801,75 +741,60 @@ int sk_hasOverdraw(SK_Sketch *sketch, SK_Stroke *stk) static void sk_updateOverdraw(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd) { - if (sketch->over.target == NULL) - { + if (sketch->over.target == NULL) { SK_Stroke *target; int closest_index = -1; int dist = SNAP_MIN_DISTANCE * 2; - for (target = sketch->strokes.first; target; target = target->next) - { - if (target != stk) - { + for (target = sketch->strokes.first; target; target = target->next) { + if (target != stk) { int index; SK_Point *spt = sk_snapPointStroke(C, target, dd->mval, &dist, &index, 1); - if (spt != NULL) - { + if (spt != NULL) { sketch->over.target = target; closest_index = index; } } } - if (sketch->over.target != NULL) - { - if (closest_index > -1) - { - if (sk_lastStrokePoint(stk)->type == PT_EXACT) - { + if (sketch->over.target != NULL) { + if (closest_index > -1) { + if (sk_lastStrokePoint(stk)->type == PT_EXACT) { sketch->over.count = SK_OVERDRAW_LIMIT; } - else - { + else { sketch->over.count++; } } - if (stk->nb_points == 1) - { + if (stk->nb_points == 1) { sketch->over.start = closest_index; } - else - { + else { sketch->over.end = closest_index; } } } - else if (sketch->over.target != NULL) - { + else if (sketch->over.target != NULL) { SK_Point *closest_pt = NULL; int dist = SNAP_MIN_DISTANCE * 2; int index; closest_pt = sk_snapPointStroke(C, sketch->over.target, dd->mval, &dist, &index, 1); - if (closest_pt != NULL) - { - if (sk_lastStrokePoint(stk)->type == PT_EXACT) - { + if (closest_pt != NULL) { + if (sk_lastStrokePoint(stk)->type == PT_EXACT) { sketch->over.count = SK_OVERDRAW_LIMIT; } - else - { + else { sketch->over.count++; } sketch->over.end = index; } - else - { + else { sketch->over.end = -1; } } @@ -883,18 +808,15 @@ static int sk_adjustIndexes(SK_Sketch *sketch, int *start, int *end) *start = sketch->over.start; *end = sketch->over.end; - if (*start == -1) - { + if (*start == -1) { *start = 0; } - if (*end == -1) - { + if (*end == -1) { *end = sketch->over.target->nb_points - 1; } - if (*end < *start) - { + if (*end < *start) { int tmp = *start; *start = *end; *end = tmp; @@ -908,18 +830,15 @@ static void sk_endOverdraw(SK_Sketch *sketch) { SK_Stroke *stk = sketch->active_stroke; - if (sk_hasOverdraw(sketch, NULL)) - { + if (sk_hasOverdraw(sketch, NULL)) { int start; int end; - if (sk_adjustIndexes(sketch, &start, &end)) - { + if (sk_adjustIndexes(sketch, &start, &end)) { sk_reverseStroke(stk); } - if (stk->nb_points > 1) - { + if (stk->nb_points > 1) { stk->points->type = sketch->over.target->points[start].type; sk_lastStrokePoint(stk)->type = sketch->over.target->points[end].type; } @@ -948,8 +867,7 @@ static void sk_endStroke(bContext *C, SK_Sketch *sketch) ToolSettings *ts = CTX_data_tool_settings(C); sk_shrinkStrokeBuffer(sketch->active_stroke); - if (ts->bone_sketching & BONE_SKETCHING_ADJUST) - { + if (ts->bone_sketching & BONE_SKETCHING_ADJUST) { sk_endOverdraw(sketch); } @@ -977,8 +895,7 @@ static float sk_distanceDepth(bContext *C, float p1[3], float p2[3]) distance = len_v3(vec); - if (dot_v3v3(rv3d->viewinv[2], vec) > 0) - { + if (dot_v3v3(rv3d->viewinv[2], vec) > 0) { distance *= -1; } @@ -996,8 +913,7 @@ static void sk_interpolateDepth(bContext *C, SK_Stroke *stk, int start, int end, progress = len_v3v3(stk->points[start].p, stk->points[start - 1].p); - for (i = start; i <= end; i++) - { + for (i = start; i <= end; i++) { float ray_start[3], ray_normal[3]; float delta = len_v3v3(stk->points[i].p, stk->points[i + 1].p); float pval[2]; @@ -1022,8 +938,7 @@ static void sk_projectDrawPoint(bContext *C, float vec[3], SK_Stroke *stk, SK_Dr float dvec[3]; float mval_f[2]; - if (last != NULL) - { + if (last != NULL) { copy_v3_v3(fp, last->p); } @@ -1065,8 +980,7 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S ToolSettings *ts = CTX_data_tool_settings(C); int point_added = 0; - if (ts->snap_mode == SCE_SNAP_MODE_VOLUME) - { + if (ts->snap_mode == SCE_SNAP_MODE_VOLUME) { DepthPeel *p1, *p2; float *last_p = NULL; float dist = FLT_MAX; @@ -1081,20 +995,16 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S mvalf[1]= dd->mval[1]; peelObjectsContext(C, &sketch->depth_peels, mvalf, SNAP_ALL); - if (stk->nb_points > 0 && stk->points[stk->nb_points - 1].type == PT_CONTINUOUS) - { + if (stk->nb_points > 0 && stk->points[stk->nb_points - 1].type == PT_CONTINUOUS) { last_p = stk->points[stk->nb_points - 1].p; } - else if (LAST_SNAP_POINT_VALID) - { + else if (LAST_SNAP_POINT_VALID) { last_p = LAST_SNAP_POINT; } - for (p1 = sketch->depth_peels.first; p1; p1 = p1->next) - { - if (p1->flag == 0) - { + for (p1 = sketch->depth_peels.first; p1; p1 = p1->next) { + if (p1->flag == 0) { float vec[3]; float new_dist; float new_size = 0; @@ -1103,42 +1013,34 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S p1->flag = 1; /* if peeling objects, take the first and last from each object */ - if (ts->snap_flag & SCE_SNAP_PEEL_OBJECT) - { + if (ts->snap_flag & SCE_SNAP_PEEL_OBJECT) { DepthPeel *peel; - for (peel = p1->next; peel; peel = peel->next) - { - if (peel->ob == p1->ob) - { + for (peel = p1->next; peel; peel = peel->next) { + if (peel->ob == p1->ob) { peel->flag = 1; p2 = peel; } } } /* otherwise, pair first with second and so on */ - else - { - for (p2 = p1->next; p2 && p2->ob != p1->ob; p2 = p2->next) - { + else { + for (p2 = p1->next; p2 && p2->ob != p1->ob; p2 = p2->next) { /* nothing to do here */ } } - if (p2) - { + if (p2) { p2->flag = 1; add_v3_v3v3(vec, p1->p, p2->p); mul_v3_fl(vec, 0.5f); new_size = len_v3v3(p1->p, p2->p); } - else - { + else { copy_v3_v3(vec, p1->p); } - if (last_p == NULL) - { + if (last_p == NULL) { copy_v3_v3(p, vec); size = new_size; dist = 0; @@ -1147,8 +1049,7 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S new_dist = len_v3v3(last_p, vec); - if (new_dist < dist) - { + if (new_dist < dist) { copy_v3_v3(p, vec); dist = new_dist; size = new_size; @@ -1156,8 +1057,7 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S } } - if (dist != FLT_MAX) - { + if (dist != FLT_MAX) { pt->type = dd->type; pt->mode = PT_SNAP; pt->size = size / 2; @@ -1168,8 +1068,7 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S //BLI_freelistN(&depth_peels); } - else - { + else { SK_Stroke *snap_stk; float vec[3]; float no[3]; @@ -1179,20 +1078,16 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S /* snap to strokes */ // if (ts->snap_mode == SCE_SNAP_MODE_VERTEX) /* snap all the time to strokes */ - for (snap_stk = sketch->strokes.first; snap_stk; snap_stk = snap_stk->next) - { + for (snap_stk = sketch->strokes.first; snap_stk; snap_stk = snap_stk->next) { SK_Point *spt = NULL; - if (snap_stk == stk) - { + if (snap_stk == stk) { spt = sk_snapPointStroke(C, snap_stk, dd->mval, &dist, NULL, 0); } - else - { + else { spt = sk_snapPointStroke(C, snap_stk, dd->mval, &dist, NULL, 1); } - if (spt != NULL) - { + if (spt != NULL) { copy_v3_v3(pt->p, spt->p); point_added = 1; } @@ -1203,8 +1098,7 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S /* try to snap to closer object */ found = snapObjectsContext(C, mval, &dist, vec, no, SNAP_NOT_SELECTED); - if (found == 1) - { + if (found == 1) { pt->type = dd->type; pt->mode = PT_SNAP; copy_v3_v3(pt->p, vec); @@ -1227,8 +1121,7 @@ static int sk_addStrokeSnapPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, point_added = sk_getStrokeSnapPoint(C, &pt, sketch, stk, dd); - if (point_added) - { + if (point_added) { float final_p[3]; float length, distance; int total; @@ -1242,18 +1135,15 @@ static int sk_addStrokeSnapPoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, /* update all previous point to give smooth Z progresion */ total = 0; length = 0; - for (i = stk->nb_points - 2; i > 0; i--) - { + for (i = stk->nb_points - 2; i > 0; i--) { length += len_v3v3(stk->points[i].p, stk->points[i + 1].p); total++; - if (stk->points[i].mode == PT_SNAP || stk->points[i].type == PT_EXACT) - { + if (stk->points[i].mode == PT_SNAP || stk->points[i].type == PT_EXACT) { break; } } - if (total > 1) - { + if (total > 1) { distance = sk_distanceDepth(C, final_p, stk->points[i].p); sk_interpolateDepth(C, stk, i + 1, stk->nb_points - 2, length, distance); @@ -1272,18 +1162,15 @@ static void sk_addStrokePoint(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK ToolSettings *ts = CTX_data_tool_settings(C); int point_added = 0; - if (snap) - { + if (snap) { point_added = sk_addStrokeSnapPoint(C, sketch, stk, dd); } - if (point_added == 0) - { + if (point_added == 0) { point_added = sk_addStrokeDrawPoint(C, sketch, stk, dd); } - if (stk == sketch->active_stroke && ts->bone_sketching & BONE_SKETCHING_ADJUST) - { + if (stk == sketch->active_stroke && ts->bone_sketching & BONE_SKETCHING_ADJUST) { sk_updateOverdraw(C, sketch, stk, dd); } } @@ -1292,19 +1179,16 @@ static void sk_getStrokePoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_S { int point_added = 0; - if (snap) - { + if (snap) { point_added = sk_getStrokeSnapPoint(C, pt, sketch, stk, dd); LAST_SNAP_POINT_VALID = 1; copy_v3_v3(LAST_SNAP_POINT, pt->p); } - else - { + else { LAST_SNAP_POINT_VALID = 0; } - if (point_added == 0) - { + if (point_added == 0) { point_added = sk_getStrokeDrawPoint(C, pt, sketch, stk, dd); } } @@ -1334,15 +1218,13 @@ static SK_Point* setIteratorValues(SK_StrokeIterator *iter, int index) { SK_Point *pt = NULL; - if (index >= 0 && index < iter->length) - { + if (index >= 0 && index < iter->length) { pt = &(iter->stroke->points[iter->start + (iter->stride * index)]); iter->p = pt->p; iter->no = pt->no; iter->size = pt->size; } - else - { + else { iter->p = NULL; iter->no = NULL; iter->size = 0; @@ -1358,14 +1240,12 @@ void initStrokeIterator(BArcIterator *arg, SK_Stroke *stk, int start, int end) initIteratorFct(iter); iter->stroke = stk; - if (start < end) - { + if (start < end) { iter->start = start + 1; iter->end = end - 1; iter->stride = 1; } - else - { + else { iter->start = start - 1; iter->end = end + 1; iter->stride = -1; @@ -1409,8 +1289,7 @@ static void* nextPoint(void *arg) SK_Point *result = NULL; iter->index++; - if (iter->index < iter->length) - { + if (iter->index < iter->length) { result = setIteratorValues(iter, iter->index); } @@ -1425,8 +1304,7 @@ static void* nextNPoint(void *arg, int n) iter->index += n; /* check if passed end */ - if (iter->index < iter->length) - { + if (iter->index < iter->length) { result = setIteratorValues(iter, iter->index); } @@ -1440,8 +1318,7 @@ static void* peekPoint(void *arg, int n) int index = iter->index + n; /* check if passed end */ - if (index < iter->length) - { + if (index < iter->length) { result = setIteratorValues(iter, index); } @@ -1453,8 +1330,7 @@ static void* previousPoint(void *arg) SK_StrokeIterator *iter = (SK_StrokeIterator*)arg; SK_Point *result = NULL; - if (iter->index > 0) - { + if (iter->index > 0) { iter->index--; result = setIteratorValues(iter, iter->index); } @@ -1466,12 +1342,10 @@ static int iteratorStopped(void *arg) { SK_StrokeIterator *iter = (SK_StrokeIterator*)arg; - if (iter->index >= iter->length) - { + if (iter->index >= iter->length) { return 1; } - else - { + else { return 0; } } @@ -1495,45 +1369,36 @@ static void sk_convertStroke(bContext *C, SK_Stroke *stk) copy_m3_m4(tmat, obedit->obmat); transpose_m3(tmat); - for (i = 0; i < stk->nb_points; i++) - { + for (i = 0; i < stk->nb_points; i++) { SK_Point *pt = stk->points + i; - if (pt->type == PT_EXACT) - { - if (head == NULL) - { + if (pt->type == PT_EXACT) { + if (head == NULL) { head_index = i; head = pt; } - else - { + else { EditBone *bone = NULL; EditBone *new_parent; - if (i - head_index > 1) - { + if (i - head_index > 1) { SK_StrokeIterator sk_iter; BArcIterator *iter = (BArcIterator*)&sk_iter; initStrokeIterator(iter, stk, head_index, i); - if (ts->bone_sketching_convert == SK_CONVERT_CUT_ADAPTATIVE) - { + if (ts->bone_sketching_convert == SK_CONVERT_CUT_ADAPTATIVE) { bone = subdivideArcBy(ts, arm, arm->edbo, iter, invmat, tmat, nextAdaptativeSubdivision); } - else if (ts->bone_sketching_convert == SK_CONVERT_CUT_LENGTH) - { + else if (ts->bone_sketching_convert == SK_CONVERT_CUT_LENGTH) { bone = subdivideArcBy(ts, arm, arm->edbo, iter, invmat, tmat, nextLengthSubdivision); } - else if (ts->bone_sketching_convert == SK_CONVERT_CUT_FIXED) - { + else if (ts->bone_sketching_convert == SK_CONVERT_CUT_FIXED) { bone = subdivideArcBy(ts, arm, arm->edbo, iter, invmat, tmat, nextFixedSubdivision); } } - if (bone == NULL) - { + if (bone == NULL) { bone = ED_armature_edit_bone_add(arm, "Bone"); copy_v3_v3(bone->head, head->p); @@ -1548,14 +1413,12 @@ static void sk_convertStroke(bContext *C, SK_Stroke *stk) bone->flag |= BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL; /* move to end of chain */ - while (bone->parent != NULL) - { + while (bone->parent != NULL) { bone = bone->parent; bone->flag |= BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL; } - if (parent != NULL) - { + if (parent != NULL) { bone->parent = parent; bone->flag |= BONE_CONNECTED; } @@ -1573,16 +1436,12 @@ static void sk_convert(bContext *C, SK_Sketch *sketch) ToolSettings *ts = CTX_data_tool_settings(C); SK_Stroke *stk; - for (stk = sketch->strokes.first; stk; stk = stk->next) - { - if (stk->selected == 1) - { - if (ts->bone_sketching_convert == SK_CONVERT_RETARGET) - { + for (stk = sketch->strokes.first; stk; stk = stk->next) { + if (stk->selected == 1) { + if (ts->bone_sketching_convert == SK_CONVERT_RETARGET) { sk_retargetStroke(C, stk); } - else - { + else { sk_convertStroke(C, stk); } // XXX @@ -1600,8 +1459,7 @@ static int sk_getSelfIntersections(bContext *C, ListBase *list, SK_Stroke *gestu int added = 0; int s_i; - for (s_i = 0; s_i < gesture->nb_points - 1; s_i++) - { + for (s_i = 0; s_i < gesture->nb_points - 1; s_i++) { float s_p1[3] = {0, 0, 0}; float s_p2[3] = {0, 0, 0}; int g_i; @@ -1610,8 +1468,7 @@ static int sk_getSelfIntersections(bContext *C, ListBase *list, SK_Stroke *gestu project_float(ar, gesture->points[s_i + 1].p, s_p2); /* start checking from second next, because two consecutive cannot intersect */ - for (g_i = s_i + 2; g_i < gesture->nb_points - 1; g_i++) - { + for (g_i = s_i + 2; g_i < gesture->nb_points - 1; g_i++) { float g_p1[3] = {0, 0, 0}; float g_p2[3] = {0, 0, 0}; float vi[3]; @@ -1620,8 +1477,7 @@ static int sk_getSelfIntersections(bContext *C, ListBase *list, SK_Stroke *gestu project_float(ar, gesture->points[g_i].p, g_p1); project_float(ar, gesture->points[g_i + 1].p, g_p2); - if (isect_line_line_strict_v3(s_p1, s_p2, g_p1, g_p2, vi, &lambda)) - { + if (isect_line_line_strict_v3(s_p1, s_p2, g_p1, g_p2, vi, &lambda)) { SK_Intersection *isect = MEM_callocN(sizeof(SK_Intersection), "Intersection"); isect->gesture_index = g_i; @@ -1647,24 +1503,18 @@ static int cmpIntersections(void *i1, void *i2) { SK_Intersection *isect1 = i1, *isect2 = i2; - if (isect1->stroke == isect2->stroke) - { - if (isect1->before < isect2->before) - { + if (isect1->stroke == isect2->stroke) { + if (isect1->before < isect2->before) { return -1; } - else if (isect1->before > isect2->before) - { + else if (isect1->before > isect2->before) { return 1; } - else - { - if (isect1->lambda < isect2->lambda) - { + else { + if (isect1->lambda < isect2->lambda) { return -1; } - else if (isect1->lambda > isect2->lambda) - { + else if (isect1->lambda > isect2->lambda) { return 1; } } @@ -1683,13 +1533,11 @@ static int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, S SK_Stroke *stk; int added = 0; - for (stk = sketch->strokes.first; stk; stk = stk->next) - { + for (stk = sketch->strokes.first; stk; stk = stk->next) { int s_added = 0; int s_i; - for (s_i = 0; s_i < stk->nb_points - 1; s_i++) - { + for (s_i = 0; s_i < stk->nb_points - 1; s_i++) { float s_p1[3] = {0, 0, 0}; float s_p2[3] = {0, 0, 0}; int g_i; @@ -1697,8 +1545,7 @@ static int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, S project_float(ar, stk->points[s_i].p, s_p1); project_float(ar, stk->points[s_i + 1].p, s_p2); - for (g_i = 0; g_i < gesture->nb_points - 1; g_i++) - { + for (g_i = 0; g_i < gesture->nb_points - 1; g_i++) { float g_p1[3] = {0, 0, 0}; float g_p2[3] = {0, 0, 0}; float vi[3]; @@ -1707,8 +1554,7 @@ static int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, S project_float(ar, gesture->points[g_i].p, g_p1); project_float(ar, gesture->points[g_i + 1].p, g_p2); - if (isect_line_line_strict_v3(s_p1, s_p2, g_p1, g_p2, vi, &lambda)) - { + if (isect_line_line_strict_v3(s_p1, s_p2, g_p1, g_p2, vi, &lambda)) { SK_Intersection *isect = MEM_callocN(sizeof(SK_Intersection), "Intersection"); float ray_start[3], ray_end[3]; float mval[2]; @@ -1759,15 +1605,13 @@ static int sk_getSegments(SK_Stroke *segments, SK_Stroke *gesture) initStrokeIterator(iter, gesture, 0, gesture->nb_points - 1); - for (i = 1, j = 0; i < gesture->nb_points; i++) - { + for (i = 1, j = 0; i < gesture->nb_points; i++) { float n[3]; /* Calculate normal */ sub_v3_v3v3(n, gesture->points[i].p, vec); - if (calcArcCorrelation(iter, j, i, vec, n) < CORRELATION_THRESHOLD) - { + if (calcArcCorrelation(iter, j, i, vec, n) < CORRELATION_THRESHOLD) { j = i - 1; sk_appendStrokePoint(segments, &gesture->points[j]); vec = segments->points[segments->nb_points - 1].p; @@ -1782,8 +1626,7 @@ static int sk_getSegments(SK_Stroke *segments, SK_Stroke *gesture) int sk_detectCutGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSED(sketch)) { - if (gest->nb_segments == 1 && gest->nb_intersections == 1) - { + if (gest->nb_segments == 1 && gest->nb_intersections == 1) { return 1; } @@ -1794,8 +1637,7 @@ void sk_applyCutGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSED { SK_Intersection *isect; - for (isect = gest->intersections.first; isect; isect = isect->next) - { + for (isect = gest->intersections.first; isect; isect = isect->next) { SK_Point pt; pt.type = PT_EXACT; @@ -1809,8 +1651,7 @@ void sk_applyCutGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSED int sk_detectTrimGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSED(sketch)) { - if (gest->nb_segments == 2 && gest->nb_intersections == 1 && gest->nb_self_intersections == 0) - { + if (gest->nb_segments == 2 && gest->nb_intersections == 1 && gest->nb_self_intersections == 0) { float s1[3], s2[3]; float angle; @@ -1819,8 +1660,7 @@ int sk_detectTrimGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSE angle = RAD2DEGF(angle_v2v2(s1, s2)); - if (angle > 60 && angle < 120) - { + if (angle > 60 && angle < 120) { return 1; } } @@ -1835,8 +1675,7 @@ void sk_applyTrimGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSE sub_v3_v3v3(trim_dir, gest->segments->points[2].p, gest->segments->points[1].p); - for (isect = gest->intersections.first; isect; isect = isect->next) - { + for (isect = gest->intersections.first; isect; isect = isect->next) { SK_Point pt; float stroke_dir[3]; @@ -1848,14 +1687,12 @@ void sk_applyTrimGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSE sub_v3_v3v3(stroke_dir, isect->stroke->points[isect->after].p, isect->stroke->points[isect->before].p); /* same direction, trim end */ - if (dot_v3v3(stroke_dir, trim_dir) > 0) - { + if (dot_v3v3(stroke_dir, trim_dir) > 0) { sk_replaceStrokePoint(isect->stroke, &pt, isect->after); sk_trimStroke(isect->stroke, 0, isect->after); } /* else, trim start */ - else - { + else { sk_replaceStrokePoint(isect->stroke, &pt, isect->before); sk_trimStroke(isect->stroke, isect->before, isect->stroke->nb_points - 1); } @@ -1865,15 +1702,12 @@ void sk_applyTrimGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSE int sk_detectCommandGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSED(sketch)) { - if (gest->nb_segments > 2 && gest->nb_intersections == 2 && gest->nb_self_intersections == 1) - { + if (gest->nb_segments > 2 && gest->nb_intersections == 2 && gest->nb_self_intersections == 1) { SK_Intersection *isect, *self_isect; /* get the the last intersection of the first pair */ - for ( isect = gest->intersections.first; isect; isect = isect->next ) - { - if (isect->stroke == isect->next->stroke) - { + for ( isect = gest->intersections.first; isect; isect = isect->next ) { + if (isect->stroke == isect->next->stroke) { isect = isect->next; break; } @@ -1881,8 +1715,7 @@ int sk_detectCommandGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UN self_isect = gest->self_intersections.first; - if (isect && isect->gesture_index < self_isect->gesture_index) - { + if (isect && isect->gesture_index < self_isect->gesture_index) { return 1; } } @@ -1899,16 +1732,13 @@ void sk_applyCommandGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UN // command = pupmenu("Action %t|Flatten %x1|Straighten %x2|Polygonize %x3"); if (command < 1) return; - for (isect = gest->intersections.first; isect; isect = isect->next) - { + for (isect = gest->intersections.first; isect; isect = isect->next) { SK_Intersection *i2; i2 = isect->next; - if (i2 && i2->stroke == isect->stroke) - { - switch (command) - { + if (i2 && i2->stroke == isect->stroke) { + switch (command) { case 1: sk_flattenStroke(isect->stroke, isect->before, i2->after); break; @@ -1927,8 +1757,7 @@ void sk_applyCommandGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UN int sk_detectDeleteGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSED(sketch)) { - if (gest->nb_segments == 2 && gest->nb_intersections == 2) - { + if (gest->nb_segments == 2 && gest->nb_intersections == 2) { float s1[3], s2[3]; float angle; @@ -1937,8 +1766,7 @@ int sk_detectDeleteGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNU angle = RAD2DEGF(angle_v2v2(s1, s2)); - if (angle > 120) - { + if (angle > 120) { return 1; } } @@ -1950,11 +1778,9 @@ void sk_applyDeleteGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *ske { SK_Intersection *isect; - for (isect = gest->intersections.first; isect; isect = isect->next) - { + for (isect = gest->intersections.first; isect; isect = isect->next) { /* only delete strokes that are crossed twice */ - if (isect->next && isect->next->stroke == isect->stroke) - { + if (isect->next && isect->next->stroke == isect->stroke) { isect = isect->next; sk_removeStroke(sketch, isect->stroke); @@ -1965,8 +1791,7 @@ void sk_applyDeleteGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *ske int sk_detectMergeGesture(bContext *C, SK_Gesture *gest, SK_Sketch *UNUSED(sketch)) { ARegion *ar = CTX_wm_region(C); - if (gest->nb_segments > 2 && gest->nb_intersections == 2) - { + if (gest->nb_segments > 2 && gest->nb_intersections == 2) { short start_val[2], end_val[2]; short dist; @@ -1976,26 +1801,21 @@ int sk_detectMergeGesture(bContext *C, SK_Gesture *gest, SK_Sketch *UNUSED(sketc dist = MAX2(ABS(start_val[0] - end_val[0]), ABS(start_val[1] - end_val[1])); /* if gesture is a circle */ - if ( dist <= 20 ) - { + if ( dist <= 20 ) { SK_Intersection *isect; /* check if it circled around an exact point */ - for (isect = gest->intersections.first; isect; isect = isect->next) - { + for (isect = gest->intersections.first; isect; isect = isect->next) { /* only delete strokes that are crossed twice */ - if (isect->next && isect->next->stroke == isect->stroke) - { + if (isect->next && isect->next->stroke == isect->stroke) { int start_index, end_index; int i; start_index = MIN2(isect->after, isect->next->after); end_index = MAX2(isect->before, isect->next->before); - for (i = start_index; i <= end_index; i++) - { - if (isect->stroke->points[i].type == PT_EXACT) - { + for (i = start_index; i <= end_index; i++) { + if (isect->stroke->points[i].type == PT_EXACT) { return 1; /* at least one exact point found, stop detect here */ } } @@ -2015,22 +1835,18 @@ void sk_applyMergeGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUS SK_Intersection *isect; /* check if it circled around an exact point */ - for (isect = gest->intersections.first; isect; isect = isect->next) - { + for (isect = gest->intersections.first; isect; isect = isect->next) { /* only merge strokes that are crossed twice */ - if (isect->next && isect->next->stroke == isect->stroke) - { + if (isect->next && isect->next->stroke == isect->stroke) { int start_index, end_index; int i; start_index = MIN2(isect->after, isect->next->after); end_index = MAX2(isect->before, isect->next->before); - for (i = start_index; i <= end_index; i++) - { + for (i = start_index; i <= end_index; i++) { /* if exact, switch to continuous */ - if (isect->stroke->points[i].type == PT_EXACT) - { + if (isect->stroke->points[i].type == PT_EXACT) { isect->stroke->points[i].type = PT_CONTINUOUS; } } @@ -2043,34 +1859,28 @@ void sk_applyMergeGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUS int sk_detectReverseGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSED(sketch)) { - if (gest->nb_segments > 2 && gest->nb_intersections == 2 && gest->nb_self_intersections == 0) - { + if (gest->nb_segments > 2 && gest->nb_intersections == 2 && gest->nb_self_intersections == 0) { SK_Intersection *isect; /* check if it circled around an exact point */ - for (isect = gest->intersections.first; isect; isect = isect->next) - { + for (isect = gest->intersections.first; isect; isect = isect->next) { /* only delete strokes that are crossed twice */ - if (isect->next && isect->next->stroke == isect->stroke) - { + if (isect->next && isect->next->stroke == isect->stroke) { float start_v[3], end_v[3]; float angle; - if (isect->gesture_index < isect->next->gesture_index) - { + if (isect->gesture_index < isect->next->gesture_index) { sub_v3_v3v3(start_v, isect->p, gest->stk->points[0].p); sub_v3_v3v3(end_v, sk_lastStrokePoint(gest->stk)->p, isect->next->p); } - else - { + else { sub_v3_v3v3(start_v, isect->next->p, gest->stk->points[0].p); sub_v3_v3v3(end_v, sk_lastStrokePoint(gest->stk)->p, isect->p); } angle = RAD2DEGF(angle_v2v2(start_v, end_v)); - if (angle > 120) - { + if (angle > 120) { return 1; } @@ -2087,11 +1897,9 @@ void sk_applyReverseGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UN { SK_Intersection *isect; - for (isect = gest->intersections.first; isect; isect = isect->next) - { + for (isect = gest->intersections.first; isect; isect = isect->next) { /* only reverse strokes that are crossed twice */ - if (isect->next && isect->next->stroke == isect->stroke) - { + if (isect->next && isect->next->stroke == isect->stroke) { sk_reverseStroke(isect->stroke); /* skip next */ @@ -2102,8 +1910,7 @@ void sk_applyReverseGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UN int sk_detectConvertGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSED(sketch)) { - if (gest->nb_segments == 3 && gest->nb_self_intersections == 1) - { + if (gest->nb_segments == 3 && gest->nb_self_intersections == 1) { return 1; } return 0; @@ -2142,10 +1949,8 @@ static void sk_applyGesture(bContext *C, SK_Sketch *sketch) sk_initGesture(C, &gest, sketch); /* detect and apply */ - for (act = GESTURE_ACTIONS; act->apply != NULL; act++) - { - if (act->detect(C, &gest, sketch)) - { + for (act = GESTURE_ACTIONS; act->apply != NULL; act++) { + if (act->detect(C, &gest, sketch)) { act->apply(C, &gest, sketch); break; } @@ -2173,8 +1978,7 @@ static int sk_selectStroke(bContext *C, SK_Sketch *sketch, const int mval[2], in hits = view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect); - if (hits>0) - { + if (hits>0) { int besthitresult = -1; if (hits == 1) { @@ -2185,18 +1989,15 @@ static int sk_selectStroke(bContext *C, SK_Sketch *sketch, const int mval[2], in /* loop and get best hit */ } - if (besthitresult > 0) - { + if (besthitresult > 0) { SK_Stroke *selected_stk = BLI_findlink(&sketch->strokes, besthitresult - 1); - if (extend == 0) - { + if (extend == 0) { sk_selectAllSketch(sketch, -1); selected_stk->selected = 1; } - else - { + else { selected_stk->selected ^= 1; } @@ -2232,50 +2033,41 @@ static void sk_drawSketch(Scene *scene, View3D *UNUSED(v3d), SK_Sketch *sketch, glClear(GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); - if (with_names) - { + if (with_names) { int id; - for (id = 1, stk = sketch->strokes.first; stk; id++, stk = stk->next) - { + for (id = 1, stk = sketch->strokes.first; stk; id++, stk = stk->next) { sk_drawStroke(stk, id, NULL, -1, -1); } glLoadName(-1); } - else - { + else { float selected_rgb[3] = {1, 0, 0}; float unselected_rgb[3] = {1, 0.5, 0}; - for (stk = sketch->strokes.first; stk; stk = stk->next) - { + for (stk = sketch->strokes.first; stk; stk = stk->next) { int start = -1; int end = -1; - if (sk_hasOverdraw(sketch, stk)) - { + if (sk_hasOverdraw(sketch, stk)) { sk_adjustIndexes(sketch, &start, &end); } sk_drawStroke(stk, -1, (stk->selected==1?selected_rgb:unselected_rgb), start, end); - if (stk->selected == 1) - { + if (stk->selected == 1) { sk_drawStrokeSubdivision(ts, stk); } } - if (sketch->active_stroke != NULL) - { + if (sketch->active_stroke != NULL) { SK_Point *last = sk_lastStrokePoint(sketch->active_stroke); - if (ts->bone_sketching & BONE_SKETCHING_QUICK) - { + if (ts->bone_sketching & BONE_SKETCHING_QUICK) { sk_drawStrokeSubdivision(ts, sketch->active_stroke); } - if (last != NULL) - { + if (last != NULL) { GLUquadric *quad = gluNewQuadric(); gluQuadricNormals(quad, GLU_SMOOTH); @@ -2284,8 +2076,7 @@ static void sk_drawSketch(Scene *scene, View3D *UNUSED(v3d), SK_Sketch *sketch, glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - switch (sketch->next_point.mode) - { + switch (sketch->next_point.mode) { case PT_SNAP: glColor3f(0, 1, 0); break; @@ -2345,8 +2136,7 @@ static void sk_drawSketch(Scene *scene, View3D *UNUSED(v3d), SK_Sketch *sketch, glDisable(GL_DEPTH_TEST); /* only draw gesture in active area */ - if (sketch->gesture != NULL /*&& area_is_active_area(G.vd->area)*/) - { + if (sketch->gesture != NULL /* && area_is_active_area(G.vd->area) */) { float gesture_rgb[3] = {0, 0.5, 1}; sk_drawStroke(sketch->gesture, -1, gesture_rgb, -1, -1); } @@ -2356,20 +2146,16 @@ static int sk_finish_stroke(bContext *C, SK_Sketch *sketch) { ToolSettings *ts = CTX_data_tool_settings(C); - if (sketch->active_stroke != NULL) - { + if (sketch->active_stroke != NULL) { SK_Stroke *stk = sketch->active_stroke; sk_endStroke(C, sketch); - if (ts->bone_sketching & BONE_SKETCHING_QUICK) - { - if (ts->bone_sketching_convert == SK_CONVERT_RETARGET) - { + if (ts->bone_sketching & BONE_SKETCHING_QUICK) { + if (ts->bone_sketching_convert == SK_CONVERT_RETARGET) { sk_retargetStroke(C, stk); } - else - { + else { sk_convertStroke(C, stk); } // XXX @@ -2389,8 +2175,7 @@ static int sk_finish_stroke(bContext *C, SK_Sketch *sketch) static void sk_start_draw_stroke(SK_Sketch *sketch) { - if (sketch->active_stroke == NULL) - { + if (sketch->active_stroke == NULL) { sk_startStroke(sketch); sk_selectAllSketch(sketch, -1); @@ -2405,8 +2190,7 @@ static void sk_start_draw_gesture(SK_Sketch *sketch) static int sk_draw_stroke(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd, short snap) { - if (sk_stroke_filtermval(dd)) - { + if (sk_stroke_filtermval(dd)) { sk_addStrokePoint(C, sketch, stk, dd, snap); sk_updateDrawData(dd); sk_updateNextPoint(sketch, stk); @@ -2428,19 +2212,16 @@ static int ValidSketchViewContext(ViewContext *vc) { return 1; } - else - { + else { return 0; } } int BDR_drawSketchNames(ViewContext *vc) { - if (ValidSketchViewContext(vc)) - { + if (ValidSketchViewContext(vc)) { SK_Sketch *sketch = viewcontextSketch(vc, 0); - if (sketch) - { + if (sketch) { sk_drawSketch(vc->scene, vc->v3d, sketch, 1); return 1; } @@ -2451,11 +2232,9 @@ int BDR_drawSketchNames(ViewContext *vc) void BDR_drawSketch(const bContext *C) { - if (ED_operator_sketch_mode(C)) - { + if (ED_operator_sketch_mode(C)) { SK_Sketch *sketch = contextSketch(C, 0); - if (sketch) - { + if (sketch) { sk_drawSketch(CTX_data_scene(C), CTX_wm_view3d(C), sketch, 0); } } @@ -2464,8 +2243,7 @@ void BDR_drawSketch(const bContext *C) static int sketch_delete(bContext *C, wmOperator *UNUSED(op), wmEvent *UNUSED(event)) { SK_Sketch *sketch = contextSketch(C, 0); - if (sketch) - { + if (sketch) { sk_deleteSelectedStrokes(sketch); // allqueue(REDRAWVIEW3D, 0); } @@ -2478,8 +2256,7 @@ void BIF_sk_selectStroke(bContext *C, const int mval[2], short extend) ToolSettings *ts = CTX_data_tool_settings(C); SK_Sketch *sketch = contextSketch(C, 0); - if (sketch != NULL && ts->bone_sketching & BONE_SKETCHING) - { + if (sketch != NULL && ts->bone_sketching & BONE_SKETCHING) { if (sk_selectStroke(C, sketch, mval, extend)) ED_area_tag_redraw(CTX_wm_area(C)); } @@ -2487,11 +2264,9 @@ void BIF_sk_selectStroke(bContext *C, const int mval[2], short extend) void BIF_convertSketch(bContext *C) { - if (ED_operator_sketch_full_mode(C)) - { + if (ED_operator_sketch_full_mode(C)) { SK_Sketch *sketch = contextSketch(C, 0); - if (sketch) - { + if (sketch) { sk_convert(C, sketch); // BIF_undo_push("Convert Sketch"); // allqueue(REDRAWVIEW3D, 0); @@ -2502,11 +2277,9 @@ void BIF_convertSketch(bContext *C) void BIF_deleteSketch(bContext *C) { - if (ED_operator_sketch_full_mode(C)) - { + if (ED_operator_sketch_full_mode(C)) { SK_Sketch *sketch = contextSketch(C, 0); - if (sketch) - { + if (sketch) { sk_deleteSelectedStrokes(sketch); // BIF_undo_push("Convert Sketch"); // allqueue(REDRAWVIEW3D, 0); @@ -2535,12 +2308,10 @@ SK_Sketch* contextSketch(const bContext *C, int create) Object *obedit = CTX_data_edit_object(C); SK_Sketch *sketch = NULL; - if (obedit && obedit->type == OB_ARMATURE) - { + if (obedit && obedit->type == OB_ARMATURE) { bArmature *arm = obedit->data; - if (arm->sketch == NULL && create) - { + if (arm->sketch == NULL && create) { arm->sketch = createSketch(); } sketch = arm->sketch; @@ -2554,12 +2325,10 @@ SK_Sketch* viewcontextSketch(ViewContext *vc, int create) Object *obedit = vc->obedit; SK_Sketch *sketch = NULL; - if (obedit && obedit->type == OB_ARMATURE) - { + if (obedit && obedit->type == OB_ARMATURE) { bArmature *arm = obedit->data; - if (arm->sketch == NULL && create) - { + if (arm->sketch == NULL && create) { arm->sketch = createSketch(); } sketch = arm->sketch; @@ -2571,8 +2340,7 @@ SK_Sketch* viewcontextSketch(ViewContext *vc, int create) static int sketch_convert(bContext *C, wmOperator *UNUSED(op), wmEvent *UNUSED(event)) { SK_Sketch *sketch = contextSketch(C, 0); - if (sketch != NULL) - { + if (sketch != NULL) { sk_convert(C, sketch); ED_area_tag_redraw(CTX_wm_area(C)); } @@ -2582,8 +2350,7 @@ static int sketch_convert(bContext *C, wmOperator *UNUSED(op), wmEvent *UNUSED(e static int sketch_cancel(bContext *C, wmOperator *UNUSED(op), wmEvent *UNUSED(event)) { SK_Sketch *sketch = contextSketch(C, 0); - if (sketch != NULL) - { + if (sketch != NULL) { sk_cancelStroke(sketch); ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; @@ -2594,10 +2361,8 @@ static int sketch_cancel(bContext *C, wmOperator *UNUSED(op), wmEvent *UNUSED(ev static int sketch_finish(bContext *C, wmOperator *UNUSED(op), wmEvent *UNUSED(event)) { SK_Sketch *sketch = contextSketch(C, 0); - if (sketch != NULL) - { - if (sk_finish_stroke(C, sketch)) - { + if (sketch != NULL) { + if (sk_finish_stroke(C, sketch)) { ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; } @@ -2608,8 +2373,7 @@ static int sketch_finish(bContext *C, wmOperator *UNUSED(op), wmEvent *UNUSED(ev static int sketch_select(bContext *C, wmOperator *UNUSED(op), wmEvent *event) { SK_Sketch *sketch = contextSketch(C, 0); - if (sketch) - { + if (sketch) { short extend = 0; if (sk_selectStroke(C, sketch, event->mval, extend)) ED_area_tag_redraw(CTX_wm_area(C)); @@ -2677,8 +2441,7 @@ static int sketch_draw_modal(bContext *C, wmOperator *op, wmEvent *event, short SK_Sketch *sketch = contextSketch(C, 1); /* create just to be sure */ int retval = OPERATOR_RUNNING_MODAL; - switch (event->type) - { + switch (event->type) { case LEFTCTRLKEY: case RIGHTCTRLKEY: snap = event->ctrl; @@ -2697,10 +2460,8 @@ static int sketch_draw_modal(bContext *C, wmOperator *op, wmEvent *event, short retval = OPERATOR_CANCELLED; break; case LEFTMOUSE: - if (event->val == KM_RELEASE) - { - if (gesture == 0) - { + if (event->val == KM_RELEASE) { + if (gesture == 0) { sk_endContinuousStroke(stk); sk_filterLastContinuousStroke(stk); sk_updateNextPoint(sketch, stk); @@ -2708,13 +2469,11 @@ static int sketch_draw_modal(bContext *C, wmOperator *op, wmEvent *event, short MEM_freeN(op->customdata); retval = OPERATOR_FINISHED; } - else - { + else { sk_endContinuousStroke(stk); sk_filterLastContinuousStroke(stk); - if (stk->nb_points > 1) - { + if (stk->nb_points > 1) { /* apply gesture here */ sk_applyGesture(C, sketch); } @@ -2750,8 +2509,7 @@ static int sketch_draw_preview(bContext *C, wmOperator *op, wmEvent *event) short snap = RNA_boolean_get(op->ptr, "snap"); SK_Sketch *sketch = contextSketch(C, 0); - if (sketch) - { + if (sketch) { SK_DrawData dd; sk_initDrawData(&dd, event->mval); @@ -2775,8 +2533,7 @@ int ED_operator_sketch_mode_active_stroke(bContext *C) { return 1; } - else - { + else { return 0; } } @@ -2793,8 +2550,7 @@ static int ED_operator_sketch_mode_gesture(bContext *C) { return 1; } - else - { + else { return 0; } } @@ -2811,8 +2567,7 @@ int ED_operator_sketch_full_mode(bContext *C) { return 1; } - else - { + else { return 0; } } @@ -2828,8 +2583,7 @@ int ED_operator_sketch_mode(const bContext *C) { return 1; } - else - { + else { return 0; } } diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index 2799d7994bc..ea2b28380e0 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -897,10 +897,12 @@ static void poselib_apply_pose (tPoseLib_PreviewData *pld) } else if (pchan->bone) { /* only ok if bone is visible and selected */ - if ( (pchan->bone->flag & BONE_SELECTED) && - (pchan->bone->flag & BONE_HIDDEN_P)==0 && - (pchan->bone->layer & arm->layer) ) + if ((pchan->bone->flag & BONE_SELECTED) && + (pchan->bone->flag & BONE_HIDDEN_P) == 0 && + (pchan->bone->layer & arm->layer)) + { ok = 1; + } } if (ok) diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c index 546bcb1f40f..f5e7770a7fc 100644 --- a/source/blender/editors/armature/reeb.c +++ b/source/blender/editors/armature/reeb.c @@ -183,16 +183,14 @@ void REEB_freeGraph(ReebGraph *rg) ReebNode *node; // free nodes - for ( node = rg->nodes.first; node; node = node->next ) - { + for (node = rg->nodes.first; node; node = node->next) { BLI_freeNode((BGraph*)rg, (BNode*)node); } BLI_freelistN(&rg->nodes); // free arcs arc = rg->arcs.first; - while ( arc ) - { + while ( arc ) { ReebArc *next = arc->next; REEB_freeArc((BArc*)arc); arc = next; @@ -202,8 +200,7 @@ void REEB_freeGraph(ReebGraph *rg) BLI_edgehash_free(rg->emap, NULL); /* free linked graph */ - if (rg->link_up) - { + if (rg->link_up) { REEB_freeGraph(rg->link_up); } @@ -229,8 +226,7 @@ ReebGraph * newReebGraph(void) void BIF_flagMultiArcs(ReebGraph *rg, int flag) { - for ( ; rg; rg = rg->link_up) - { + for ( ; rg; rg = rg->link_up) { BLI_flagArcs((BGraph*)rg, flag); } } @@ -318,8 +314,7 @@ ReebNode *BIF_NodeFromIndex(ReebArc *arc, ReebNode *node) ReebNode *BIF_lowestLevelNode(ReebNode *node) { - while (node->link_down) - { + while (node->link_down) { node = node->link_down; } @@ -407,8 +402,7 @@ ReebGraph *BIF_graphForMultiNode(ReebGraph *rg, ReebNode *node) { ReebGraph *multi_rg = rg; - while (multi_rg && multi_rg->multi_level != node->multi_level) - { + while (multi_rg && multi_rg->multi_level != node->multi_level) { multi_rg = multi_rg->link_up; } @@ -484,15 +478,12 @@ void repositionNodes(ReebGraph *rg) BNode *node = NULL; // Reset node positions - for (node = rg->nodes.first; node; node = node->next) - { + for (node = rg->nodes.first; node; node = node->next) { node->p[0] = node->p[1] = node->p[2] = 0; } - for (arc = rg->arcs.first; arc; arc = arc->next) - { - if (((ReebArc*)arc)->bcount > 0) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { + if (((ReebArc*)arc)->bcount > 0) { float p[3]; copy_v3_v3(p, ((ReebArc*)arc)->buckets[0].p); @@ -512,22 +503,17 @@ void verifyNodeDegree(ReebGraph *rg) ReebNode *node = NULL; ReebArc *arc = NULL; - for (node = rg->nodes.first; node; node = node->next) - { + for (node = rg->nodes.first; node; node = node->next) { int count = 0; - for (arc = rg->arcs.first; arc; arc = arc->next) - { - if (arc->head == node || arc->tail == node) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { + if (arc->head == node || arc->tail == node) { count++; } } - if (count != node->degree) - { + if (count != node->degree) { printf("degree error in node %i: expected %i got %i\n", node->index, count, node->degree); } - if (node->degree == 0) - { + if (node->degree == 0) { printf("zero degree node %i with weight %f\n", node->index, node->weight); } } @@ -539,25 +525,20 @@ static void verifyBucketsArc(ReebGraph *UNUSED(rg), ReebArc *arc) ReebNode *head = (ReebNode*)arc->head; ReebNode *tail = (ReebNode*)arc->tail; - if (arc->bcount > 0) - { + if (arc->bcount > 0) { int i; - for (i = 0; i < arc->bcount; i++) - { - if (arc->buckets[i].nv == 0) - { + for (i = 0; i < arc->bcount; i++) { + if (arc->buckets[i].nv == 0) { printArc(arc); printf("count error in bucket %i/%i\n", i+1, arc->bcount); } } - if (ceilf(head->weight) != arc->buckets[0].val) - { + if (ceilf(head->weight) != arc->buckets[0].val) { printArc(arc); printf("alloc error in first bucket: %f should be %f\n", arc->buckets[0].val, ceil(head->weight)); } - if (floorf(tail->weight) != arc->buckets[arc->bcount - 1].val) - { + if (floorf(tail->weight) != arc->buckets[arc->bcount - 1].val) { printArc(arc); printf("alloc error in last bucket: %f should be %f\n", arc->buckets[arc->bcount - 1].val, floor(tail->weight)); } @@ -568,8 +549,7 @@ void verifyBuckets(ReebGraph *rg) { #ifdef DEBUG_REEB ReebArc *arc = NULL; - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { verifyBucketsArc(rg, arc); } #endif @@ -580,8 +560,7 @@ void verifyFaces(ReebGraph *rg) #ifdef DEBUG_REEB int total = 0; ReebArc *arc = NULL; - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { total += BLI_ghash_size(arc->faces); } @@ -592,10 +571,8 @@ void verifyArcs(ReebGraph *rg) { ReebArc *arc; - for (arc = rg->arcs.first; arc; arc = arc->next) - { - if (arc->head->weight > arc->tail->weight) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { + if (arc->head->weight > arc->tail->weight) { printf("FLIPPED ARC!\n"); } } @@ -606,14 +583,11 @@ static void verifyMultiResolutionLinks(ReebGraph *rg, int level) #ifdef DEBUG_REEB ReebGraph *lower_rg = rg->link_up; - if (lower_rg) - { + if (lower_rg) { ReebArc *arc; - for (arc = rg->arcs.first; arc; arc = arc->next) - { - if (BLI_findindex(&lower_rg->arcs, arc->link_up) == -1) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { + if (BLI_findindex(&lower_rg->arcs, arc->link_up) == -1) { printf("missing arc %p for level %i\n", (void *)arc->link_up, level); printf("Source arc was ---\n"); printArc(arc); @@ -647,13 +621,11 @@ static void removeVertFromBucket(EmbedBucket *b, float co[3]) static void mergeBuckets(EmbedBucket *bDst, EmbedBucket *bSrc) { - if (bDst->nv > 0 && bSrc->nv > 0) - { + if (bDst->nv > 0 && bSrc->nv > 0) { bDst->nv += bSrc->nv; interp_v3_v3v3(bDst->p, bDst->p, bSrc->p, (float)bSrc->nv / (float)(bDst->nv)); } - else if (bSrc->nv > 0) - { + else if (bSrc->nv > 0) { bDst->nv = bSrc->nv; copy_v3_v3(bDst->p, bSrc->p); } @@ -661,19 +633,16 @@ static void mergeBuckets(EmbedBucket *bDst, EmbedBucket *bSrc) static void mergeArcBuckets(ReebArc *aDst, ReebArc *aSrc, float start, float end) { - if (aDst->bcount > 0 && aSrc->bcount > 0) - { + if (aDst->bcount > 0 && aSrc->bcount > 0) { int indexDst = 0, indexSrc = 0; start = MAX3(start, aDst->buckets[0].val, aSrc->buckets[0].val); - while (indexDst < aDst->bcount && aDst->buckets[indexDst].val < start) - { + while (indexDst < aDst->bcount && aDst->buckets[indexDst].val < start) { indexDst++; } - while (indexSrc < aSrc->bcount && aSrc->buckets[indexSrc].val < start) - { + while (indexSrc < aSrc->bcount && aSrc->buckets[indexSrc].val < start) { indexSrc++; } @@ -693,8 +662,7 @@ void flipArcBuckets(ReebArc *arc) { int i, j; - for (i = 0, j = arc->bcount - 1; i < j; i++, j--) - { + for (i = 0, j = arc->bcount - 1; i < j; i++, j--) { EmbedBucket tmp; tmp = arc->buckets[i]; @@ -714,20 +682,16 @@ static void allocArcBuckets(ReebArc *arc) float start = ceil(arc->head->weight); arc->bcount = countArcBuckets(arc); - if (arc->bcount > 0) - { + if (arc->bcount > 0) { arc->buckets = MEM_callocN(sizeof(EmbedBucket) * arc->bcount, "embed bucket"); - for (i = 0; i < arc->bcount; i++) - { + for (i = 0; i < arc->bcount; i++) { arc->buckets[i].val = start + i; } } - else - { + else { arc->buckets = NULL; } - } static void resizeArcBuckets(ReebArc *arc) @@ -735,15 +699,13 @@ static void resizeArcBuckets(ReebArc *arc) EmbedBucket *oldBuckets = arc->buckets; int oldBCount = arc->bcount; - if (countArcBuckets(arc) == oldBCount) - { + if (countArcBuckets(arc) == oldBCount) { return; } allocArcBuckets(arc); - if (oldBCount != 0 && arc->bcount != 0) - { + if (oldBCount != 0 && arc->bcount != 0) { int oldStart = (int)oldBuckets[0].val; int oldEnd = (int)oldBuckets[oldBCount - 1].val; int newStart = (int)arc->buckets[0].val; @@ -752,12 +714,10 @@ static void resizeArcBuckets(ReebArc *arc) int newOffset = 0; int len; - if (oldStart < newStart) - { + if (oldStart < newStart) { oldOffset = newStart - oldStart; } - else - { + else { newOffset = oldStart - newStart; } @@ -766,8 +726,7 @@ static void resizeArcBuckets(ReebArc *arc) memcpy(arc->buckets + newOffset, oldBuckets + oldOffset, len * sizeof(EmbedBucket)); } - if (oldBuckets != NULL) - { + if (oldBuckets != NULL) { MEM_freeN(oldBuckets); } } @@ -777,10 +736,8 @@ static void reweightBuckets(ReebArc *arc) int i; float start = ceil((arc->head)->weight); - if (arc->bcount > 0) - { - for (i = 0; i < arc->bcount; i++) - { + if (arc->bcount > 0) { + for (i = 0; i < arc->bcount; i++) { arc->buckets[i].val = start + i; } } @@ -793,8 +750,7 @@ static void interpolateBuckets(ReebArc *arc, float *start_p, float *end_p, int s total = end_index - start_index + 2; - for (j = start_index; j <= end_index; j++) - { + for (j = start_index; j <= end_index; j++) { EmbedBucket *empty = arc->buckets + j; empty->nv = 1; interp_v3_v3v3(empty->p, start_p, end_p, (float)(j - start_index + 1) / total); @@ -810,14 +766,11 @@ static void fillArcEmptyBuckets(ReebArc *arc) start_p = arc->head->p; - for (i = 0; i < arc->bcount; i++) - { + for (i = 0; i < arc->bcount; i++) { EmbedBucket *bucket = arc->buckets + i; - if (missing) - { - if (bucket->nv > 0) - { + if (missing) { + if (bucket->nv > 0) { missing = 0; end_p = bucket->p; @@ -826,14 +779,11 @@ static void fillArcEmptyBuckets(ReebArc *arc) interpolateBuckets(arc, start_p, end_p, start_index, end_index); } } - else - { - if (bucket->nv == 0) - { + else { + if (bucket->nv == 0) { missing = 1; - if (i > 0) - { + if (i > 0) { start_p = arc->buckets[i - 1].p; } start_index = i; @@ -841,8 +791,7 @@ static void fillArcEmptyBuckets(ReebArc *arc) } } - if (missing) - { + if (missing) { end_p = arc->tail->p; end_index = arc->bcount - 1; @@ -859,8 +808,7 @@ static void ExtendArcBuckets(ReebArc *arc) float average_length = 0, length; int padding_head = 0, padding_tail = 0; - if (arc->bcount == 0) - { + if (arc->bcount == 0) { return; /* failsafe, shouldn't happen */ } @@ -881,19 +829,16 @@ static void ExtendArcBuckets(ReebArc *arc) last_bucket = arc->buckets + (arc->bcount - 1); length = len_v3v3(first_bucket->p, arc->head->p); - if (length > 2 * average_length) - { + if (length > 2 * average_length) { padding_head = (int)floor(length / average_length); } length = len_v3v3(last_bucket->p, arc->tail->p); - if (length > 2 * average_length) - { + if (length > 2 * average_length) { padding_tail = (int)floor(length / average_length); } - if (padding_head + padding_tail > 0) - { + if (padding_head + padding_tail > 0) { EmbedBucket *old_buckets = arc->buckets; arc->buckets = MEM_callocN(sizeof(EmbedBucket) * (padding_head + arc->bcount + padding_tail), "embed bucket"); @@ -904,13 +849,11 @@ static void ExtendArcBuckets(ReebArc *arc) MEM_freeN(old_buckets); } - if (padding_head > 0) - { + if (padding_head > 0) { interpolateBuckets(arc, arc->head->p, first_bucket->p, 0, padding_head); } - if (padding_tail > 0) - { + if (padding_tail > 0) { interpolateBuckets(arc, last_bucket->p, arc->tail->p, arc->bcount - padding_tail, arc->bcount - 1); } } @@ -920,8 +863,7 @@ static void extendGraphBuckets(ReebGraph *rg) { ReebArc *arc; - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { ExtendArcBuckets(arc); } } @@ -941,8 +883,7 @@ static void calculateArcLength(ReebArc *arc) vec0 = arc->head->p; vec1 = arc->head->p; /* in case there's no embedding */ - while (IT_next(iter)) - { + while (IT_next(iter)) { vec1 = iter->p; arc->length += len_v3v3(vec0, vec1); @@ -957,8 +898,7 @@ static void calculateGraphLength(ReebGraph *rg) { ReebArc *arc; - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { calculateArcLength(arc); } } @@ -975,8 +915,7 @@ void REEB_RadialSymmetry(BNode* root_node, RadialArc* ring, int count) copy_v3_v3(axis, root_node->symmetry_axis); /* first pass, merge incrementally */ - for (i = 0; i < count - 1; i++) - { + for (i = 0; i < count - 1; i++) { ReebNode *node1, *node2; ReebArc *arc1, *arc2; float tangent[3]; @@ -999,8 +938,7 @@ void REEB_RadialSymmetry(BNode* root_node, RadialArc* ring, int count) /* Merge buckets * there shouldn't be any null arcs here, but just to be safe * */ - if (arc1->bcount > 0 && arc2->bcount > 0) - { + if (arc1->bcount > 0 && arc2->bcount > 0) { ReebArcIterator arc_iter1, arc_iter2; BArcIterator *iter1 = (BArcIterator*)&arc_iter1; BArcIterator *iter2 = (BArcIterator*)&arc_iter2; @@ -1013,19 +951,16 @@ void REEB_RadialSymmetry(BNode* root_node, RadialArc* ring, int count) bucket2 = IT_next(iter2); /* Make sure they both start at the same value */ - while (bucket1 && bucket2 && bucket1->val < bucket2->val) - { + while (bucket1 && bucket2 && bucket1->val < bucket2->val) { bucket1 = IT_next(iter1); } - while (bucket1 && bucket2 && bucket2->val < bucket1->val) - { + while (bucket1 && bucket2 && bucket2->val < bucket1->val) { bucket2 = IT_next(iter2); } - for ( ;bucket1 && bucket2; bucket1 = IT_next(iter1), bucket2 = IT_next(iter2)) - { + for ( ;bucket1 && bucket2; bucket1 = IT_next(iter1), bucket2 = IT_next(iter2)) { bucket2->nv += bucket1->nv; /* add counts */ /* mirror on axis */ @@ -1037,8 +972,7 @@ void REEB_RadialSymmetry(BNode* root_node, RadialArc* ring, int count) } /* second pass, mirror back on previous arcs */ - for (i = count - 1; i > 0; i--) - { + for (i = count - 1; i > 0; i--) { ReebNode *node1, *node2; ReebArc *arc1, *arc2; float tangent[3]; @@ -1061,8 +995,7 @@ void REEB_RadialSymmetry(BNode* root_node, RadialArc* ring, int count) /* Copy buckets * there shouldn't be any null arcs here, but just to be safe * */ - if (arc1->bcount > 0 && arc2->bcount > 0) - { + if (arc1->bcount > 0 && arc2->bcount > 0) { ReebArcIterator arc_iter1, arc_iter2; BArcIterator *iter1 = (BArcIterator*)&arc_iter1; BArcIterator *iter2 = (BArcIterator*)&arc_iter2; @@ -1075,19 +1008,16 @@ void REEB_RadialSymmetry(BNode* root_node, RadialArc* ring, int count) bucket2 = IT_next(iter2); /* Make sure they both start at the same value */ - while (bucket1 && bucket1->val < bucket2->val) - { + while (bucket1 && bucket1->val < bucket2->val) { bucket1 = IT_next(iter1); } - while (bucket2 && bucket2->val < bucket1->val) - { + while (bucket2 && bucket2->val < bucket1->val) { bucket2 = IT_next(iter2); } - for ( ;bucket1 && bucket2; bucket1 = IT_next(iter1), bucket2 = IT_next(iter2)) - { + for ( ;bucket1 && bucket2; bucket1 = IT_next(iter1), bucket2 = IT_next(iter2)) { /* copy and mirror back to bucket2 */ bucket2->nv = bucket1->nv; copy_v3_v3(bucket2->p, bucket1->p); @@ -1122,8 +1052,7 @@ void REEB_AxialSymmetry(BNode* root_node, BNode* node1, BNode* node2, struct BAr /* Merge buckets * there shouldn't be any null arcs here, but just to be safe * */ - if (arc1->bcount > 0 && arc2->bcount > 0) - { + if (arc1->bcount > 0 && arc2->bcount > 0) { ReebArcIterator arc_iter1, arc_iter2; BArcIterator *iter1 = (BArcIterator*)&arc_iter1; BArcIterator *iter2 = (BArcIterator*)&arc_iter2; @@ -1136,19 +1065,16 @@ void REEB_AxialSymmetry(BNode* root_node, BNode* node1, BNode* node2, struct BAr bucket2 = IT_next(iter2); /* Make sure they both start at the same value */ - while (bucket1 && bucket1->val < bucket2->val) - { + while (bucket1 && bucket1->val < bucket2->val) { bucket1 = IT_next(iter1); } - while (bucket2 && bucket2->val < bucket1->val) - { + while (bucket2 && bucket2->val < bucket1->val) { bucket2 = IT_next(iter2); } - for ( ;bucket1 && bucket2; bucket1 = IT_next(iter1), bucket2 = IT_next(iter2)) - { + for ( ; bucket1 && bucket2; bucket1 = IT_next(iter1), bucket2 = IT_next(iter2)) { bucket1->nv += bucket2->nv; /* add counts */ /* mirror on axis */ @@ -1175,7 +1101,7 @@ void postprocessGraph(ReebGraph *rg, char mode) ReebArc *arc; float fac1 = 0, fac2 = 1, fac3 = 0; - switch(mode) + switch (mode) { case SKGEN_AVERAGE: fac1 = fac2 = fac3 = 1.0f / 3.0f; @@ -1490,16 +1416,13 @@ static int compareArcs(void *varc1, void *varc2) float len1 = lengthArc(arc1); float len2 = lengthArc(arc2); - if (len1 < len2) - { + if (len1 < len2) { return -1; } - if (len1 > len2) - { + if (len1 > len2) { return 1; } - else - { + else { return 0; } } @@ -1508,13 +1431,10 @@ static void filterArc(ReebGraph *rg, ReebNode *newNode, ReebNode *removedNode, R { ReebArc *arc = NULL, *nextArc = NULL; - if (merging) - { + if (merging) { /* first pass, merge buckets for arcs that spawned the two nodes into the source arc*/ - for (arc = rg->arcs.first; arc; arc = arc->next) - { - if (arc->head == srcArc->head && arc->tail == srcArc->tail && arc != srcArc) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { + if (arc->head == srcArc->head && arc->tail == srcArc->tail && arc != srcArc) { ReebNode *head = srcArc->head; ReebNode *tail = srcArc->tail; mergeArcBuckets(srcArc, arc, head->weight, tail->weight); @@ -1524,47 +1444,38 @@ static void filterArc(ReebGraph *rg, ReebNode *newNode, ReebNode *removedNode, R /* second pass, replace removedNode by newNode, remove arcs that are collapsed in a loop */ arc = rg->arcs.first; - while (arc) - { + while (arc) { nextArc = arc->next; - if (arc->head == removedNode || arc->tail == removedNode) - { - if (arc->head == removedNode) - { + if (arc->head == removedNode || arc->tail == removedNode) { + if (arc->head == removedNode) { arc->head = newNode; } - else - { + else { arc->tail = newNode; } // Remove looped arcs - if (arc->head == arc->tail) - { + if (arc->head == arc->tail) { // v1 or v2 was already newNode, since we're removing an arc, decrement degree NodeDegreeDecrement(rg, newNode); // If it's srcArc, it'll be removed later, so keep it for now - if (arc != srcArc) - { + if (arc != srcArc) { BLI_remlink(&rg->arcs, arc); REEB_freeArc((BArc*)arc); } } - else - { + else { /* flip arcs that flipped, can happen on diamond shapes, mostly on null arcs */ - if (arc->head->weight > arc->tail->weight) - { + if (arc->head->weight > arc->tail->weight) { flipArc(arc); } //newNode->degree++; // incrementing degree since we're adding an arc NodeDegreeIncrement(rg, newNode); mergeArcFaces(rg, arc, srcArc); - if (merging) - { + if (merging) { ReebNode *head = arc->head; ReebNode *tail = arc->tail; @@ -1587,12 +1498,10 @@ void filterNullReebGraph(ReebGraph *rg) ReebArc *arc = NULL, *nextArc = NULL; arc = rg->arcs.first; - while (arc) - { + while (arc) { nextArc = arc->next; // Only collapse arcs too short to have any embed bucket - if (arc->bcount == 0) - { + if (arc->bcount == 0) { ReebNode *newNode = (ReebNode*)arc->head; ReebNode *removedNode = (ReebNode*)arc->tail; float blend; @@ -1623,12 +1532,14 @@ static int filterInternalExternalReebGraph(ReebGraph *rg, float threshold_intern BLI_sortlist(&rg->arcs, compareArcs); - for (arc = rg->arcs.first; arc; arc = nextArc) - { + for (arc = rg->arcs.first; arc; arc = nextArc) { nextArc = arc->next; - // Only collapse non-terminal arcs that are shorter than threshold - if (threshold_internal > 0 && arc->head->degree > 1 && arc->tail->degree > 1 && (lengthArc(arc) < threshold_internal)) + /* Only collapse non-terminal arcs that are shorter than threshold */ + if ((threshold_internal > 0) && + (arc->head->degree > 1) && + (arc->tail->degree > 1) && + (lengthArc(arc) < threshold_internal)) { ReebNode *newNode = NULL; ReebNode *removedNode = NULL; @@ -1650,26 +1561,25 @@ static int filterInternalExternalReebGraph(ReebGraph *rg, float threshold_intern } // Only collapse terminal arcs that are shorter than threshold - else if (threshold_external > 0 && (arc->head->degree == 1 || arc->tail->degree == 1) && (lengthArc(arc) < threshold_external)) + else if ((threshold_external > 0) && + (arc->head->degree == 1 || arc->tail->degree == 1) && + (lengthArc(arc) < threshold_external)) { ReebNode *terminalNode = NULL; ReebNode *middleNode = NULL; ReebNode *removedNode = NULL; // Assign terminal and middle nodes - if (arc->head->degree == 1) - { + if (arc->head->degree == 1) { terminalNode = arc->head; middleNode = arc->tail; } - else - { + else { terminalNode = arc->tail; middleNode = arc->head; } - if (middleNode->degree == 2 && middleNode != rg->nodes.first) - { + if (middleNode->degree == 2 && middleNode != rg->nodes.first) { #if 1 // If middle node is a normal node, it will be removed later // Only if middle node is not the root node @@ -1685,8 +1595,7 @@ static int filterInternalExternalReebGraph(ReebGraph *rg, float threshold_intern #endif } // Otherwise, just plain remove of the arc - else - { + else { removedNode = terminalNode; // removing arc, so we need to decrease the degree of the remaining node @@ -1713,13 +1622,10 @@ static int filterCyclesReebGraph(ReebGraph *rg, float UNUSED(distance_threshold) ReebArc *next2; int filtered = 0; - for (arc1 = rg->arcs.first; arc1; arc1 = arc1->next) - { - for (arc2 = arc1->next; arc2; arc2 = next2) - { + for (arc1 = rg->arcs.first; arc1; arc1 = arc1->next) { + for (arc2 = arc1->next; arc2; arc2 = next2) { next2 = arc2->next; - if (arc1 != arc2 && arc1->head == arc2->head && arc1->tail == arc2->tail) - { + if (arc1 != arc2 && arc1->head == arc2->head && arc1->tail == arc2->tail) { mergeArcEdges(rg, arc1, arc2, MERGE_APPEND); mergeArcFaces(rg, arc1, arc2); mergeArcBuckets(arc1, arc2, arc1->head->weight, arc1->tail->weight); @@ -1848,8 +1754,7 @@ int filterSmartReebGraph(ReebGraph *UNUSED(rg), float UNUSED(threshold)) if (avg_angle > threshold) merging = 1; - if (merging) - { + if (merging) { ReebNode *terminalNode = NULL; ReebNode *middleNode = NULL; ReebNode *newNode = NULL; @@ -1857,39 +1762,33 @@ int filterSmartReebGraph(ReebGraph *UNUSED(rg), float UNUSED(threshold)) int merging = 0; // Assign terminal and middle nodes - if (arc->head->degree == 1) - { + if (arc->head->degree == 1) { terminalNode = arc->head; middleNode = arc->tail; } - else - { + else { terminalNode = arc->tail; middleNode = arc->head; } // If middle node is a normal node, merge to terminal node - if (middleNode->degree == 2) - { + if (middleNode->degree == 2) { merging = 1; newNode = terminalNode; removedNode = middleNode; } // Otherwise, just plain remove of the arc - else - { + else { merging = 0; newNode = middleNode; removedNode = terminalNode; } // Merging arc - if (merging) - { + if (merging) { filterArc(rg, newNode, removedNode, arc, 1); } - else - { + else { // removing arc, so we need to decrease the degree of the remaining node //newNode->degree--; NodeDegreeDecrement(rg, newNode); @@ -1920,29 +1819,24 @@ static void filterGraph(ReebGraph *rg, short options, float threshold_internal, calculateGraphLength(rg); - if ((options & SKGEN_FILTER_EXTERNAL) == 0) - { + if ((options & SKGEN_FILTER_EXTERNAL) == 0) { threshold_external = 0; } - if ((options & SKGEN_FILTER_INTERNAL) == 0) - { + if ((options & SKGEN_FILTER_INTERNAL) == 0) { threshold_internal = 0; } - if (threshold_internal > 0 || threshold_external > 0) - { + if (threshold_internal > 0 || threshold_external > 0) { /* filter until there's nothing more to do */ - while (done == 1) - { + while (done == 1) { done = 0; /* no work done yet */ done = filterInternalExternalReebGraph(rg, threshold_internal, threshold_external); } } - if (options & SKGEN_FILTER_SMART) - { + if (options & SKGEN_FILTER_SMART) { filterSmartReebGraph(rg, 0.5); filterCyclesReebGraph(rg, 0.5); } @@ -1963,8 +1857,7 @@ static void finalizeGraph(ReebGraph *rg, char passes, char method) sortArcs(rg); - for (i = 0; i < passes; i++) - { + for (i = 0; i < passes; i++) { postprocessGraph(rg, method); } @@ -1979,12 +1872,10 @@ static int compareVerts( const void* a, const void* b ) EditVert *vb = *(EditVert**)b; int value = 0; - if (weightData(va) < weightData(vb)) - { + if (weightData(va) < weightData(vb)) { value = -1; } - else if (weightData(va) > weightData(vb)) - { + else if (weightData(va) > weightData(vb)) { value = 1; } @@ -2001,26 +1892,21 @@ static void spreadWeight(EditMesh *em) verts = MEM_callocN(sizeof(EditVert*) * totvert, "verts array"); - for (eve = em->verts.first, i = 0; eve; eve = eve->next, i++) - { + for (eve = em->verts.first, i = 0; eve; eve = eve->next, i++) { verts[i] = eve; } - while (work_needed == 1) - { + while (work_needed == 1) { work_needed = 0; qsort(verts, totvert, sizeof(EditVert*), compareVerts); - for (i = 0; i < totvert; i++) - { + for (i = 0; i < totvert; i++) { eve = verts[i]; - if (i == 0 || (weightData(eve) - lastWeight) > FLT_EPSILON) - { + if (i == 0 || (weightData(eve) - lastWeight) > FLT_EPSILON) { lastWeight = weightData(eve); } - else - { + else { work_needed = 1; weightSetData(eve, lastWeight + FLT_EPSILON * 2); lastWeight = weightData(eve); @@ -2044,8 +1930,7 @@ void REEB_exportGraph(ReebGraph *rg, int count) char filename[128]; FILE *f; - if (count == -1) - { + if (count == -1) { strcpy(filename, "test.txt"); } else { @@ -2053,15 +1938,13 @@ void REEB_exportGraph(ReebGraph *rg, int count) } f = BLI_fopen(filename, "w"); - for (arc = rg->arcs.first; arc; arc = arc->next) - { + for (arc = rg->arcs.first; arc; arc = arc->next) { int i; float p[3]; exportNode(f, "v1", arc->head); - for (i = 0; i < arc->bcount; i++) - { + for (i = 0; i < arc->bcount; i++) { fprintf(f, "b nv:%i %f %f %f\n", arc->buckets[i].nv, arc->buckets[i].p[0], arc->buckets[i].p[1], arc->buckets[i].p[2]); } @@ -2082,12 +1965,10 @@ static void removeZeroNodes(ReebGraph *rg) { ReebNode *node, *next_node; - for (node = rg->nodes.first; node; node = next_node) - { + for (node = rg->nodes.first; node; node = next_node) { next_node = node->next; - if (node->degree == 0) - { + if (node->degree == 0) { BLI_removeNode((BGraph*)rg, (BNode*)node); } } @@ -2098,63 +1979,51 @@ void removeNormalNodes(ReebGraph *rg) ReebArc *arc, *nextArc; // Merge degree 2 nodes - for (arc = rg->arcs.first; arc; arc = nextArc) - { + for (arc = rg->arcs.first; arc; arc = nextArc) { nextArc = arc->next; - while (arc->head->degree == 2 || arc->tail->degree == 2) - { + while (arc->head->degree == 2 || arc->tail->degree == 2) { // merge at v1 - if (arc->head->degree == 2) - { + if (arc->head->degree == 2) { ReebArc *connectedArc = (ReebArc*)BLI_findConnectedArc((BGraph*)rg, (BArc*)arc, (BNode*)arc->head); /* If arcs are one after the other */ - if (arc->head == connectedArc->tail) - { + if (arc->head == connectedArc->tail) { /* remove furthest arc */ - if (arc->tail->weight < connectedArc->head->weight) - { + if (arc->tail->weight < connectedArc->head->weight) { mergeConnectedArcs(rg, arc, connectedArc); nextArc = arc->next; } - else - { + else { mergeConnectedArcs(rg, connectedArc, arc); break; /* arc was removed, move to next */ } } /* Otherwise, arcs are side by side */ - else - { + else { /* Don't do anything, we need to keep the lowest node, even if degree 2 */ break; } } - // merge at v2 - if (arc->tail->degree == 2) - { + /* merge at v2 */ + if (arc->tail->degree == 2) { ReebArc *connectedArc = (ReebArc*)BLI_findConnectedArc((BGraph*)rg, (BArc*)arc, (BNode*)arc->tail); /* If arcs are one after the other */ - if (arc->tail == connectedArc->head) - { + if (arc->tail == connectedArc->head) { /* remove furthest arc */ - if (arc->head->weight < connectedArc->tail->weight) - { + if (arc->head->weight < connectedArc->tail->weight) { mergeConnectedArcs(rg, arc, connectedArc); nextArc = arc->next; } - else - { + else { mergeConnectedArcs(rg, connectedArc, arc); break; /* arc was removed, move to next */ } } /* Otherwise, arcs are side by side */ - else - { + else { /* Don't do anything, we need to keep the lowest node, even if degree 2 */ break; } @@ -2176,13 +2045,11 @@ static ReebArc *nextArcMappedToEdge(ReebArc *arc, ReebEdge *e) ReebArc *result = NULL; /* Find the ReebEdge in the edge list */ - for (edge = arc->edges.first; edge && !edgeEquals(edge, e); edge = edge->next) - { } + for (edge = arc->edges.first; edge && !edgeEquals(edge, e); edge = edge->next) { } nextEdge = edge->nextEdge; - if (nextEdge != NULL) - { + if (nextEdge != NULL) { result = nextEdge->arc; } @@ -2211,51 +2078,42 @@ void mergeArcEdges(ReebGraph *rg, ReebArc *aDst, ReebArc *aSrc, MergeDirection d { ReebEdge *e = NULL; - if (direction == MERGE_APPEND) - { - for (e = aSrc->edges.first; e; e = e->next) - { + if (direction == MERGE_APPEND) { + for (e = aSrc->edges.first; e; e = e->next) { e->arc = aDst; // Edge is stolen by new arc } BLI_movelisttolist(&aDst->edges , &aSrc->edges); } - else - { - for (e = aSrc->edges.first; e; e = e->next) - { + else { + for (e = aSrc->edges.first; e; e = e->next) { ReebEdge *newEdge = copyEdge(e); newEdge->arc = aDst; BLI_addtail(&aDst->edges, newEdge); - if (direction == MERGE_LOWER) - { + if (direction == MERGE_LOWER) { void **p = BLI_edgehash_lookup_p(rg->emap, e->v1->index, e->v2->index); newEdge->nextEdge = e; // if edge was the first in the list, point the edit edge to the new reeb edge instead. - if (*p == e) - { + if (*p == e) { *p = (void*)newEdge; } // otherwise, advance in the list until the predecessor is found then insert it there - else - { + else { ReebEdge *previous = (ReebEdge*)*p; - while (previous->nextEdge != e) - { + while (previous->nextEdge != e) { previous = previous->nextEdge; } previous->nextEdge = newEdge; } } - else - { + else { newEdge->nextEdge = e->nextEdge; e->nextEdge = newEdge; } @@ -2275,13 +2133,11 @@ int mergeConnectedArcs(ReebGraph *rg, ReebArc *a0, ReebArc *a1) mergeArcFaces(rg, a0, a1); // Bring a0 to the combine length of both arcs - if (a0->tail == a1->head) - { + if (a0->tail == a1->head) { removedNode = a0->tail; a0->tail = a1->tail; } - else if (a0->head == a1->tail) - { + else if (a0->head == a1->tail) { removedNode = a0->head; a0->head = a1->head; } @@ -2303,11 +2159,9 @@ int mergeConnectedArcs(ReebGraph *rg, ReebArc *a0, ReebArc *a1) int mergeArcs(ReebGraph *rg, ReebArc *a0, ReebArc *a1) { int result = 0; - // TRIANGLE POINTS DOWN - if (a0->head->weight == a1->head->weight) // heads are the same - { - if (a0->tail->weight == a1->tail->weight) // tails also the same, arcs can be totally merge together - { + /* TRIANGLE POINTS DOWN */ + if (a0->head->weight == a1->head->weight) { /* heads are the same */ + if (a0->tail->weight == a1->tail->weight) { /* tails also the same, arcs can be totally merge together */ mergeArcEdges(rg, a0, a1, MERGE_APPEND); mergeArcFaces(rg, a0, a1); @@ -2325,8 +2179,7 @@ int mergeArcs(ReebGraph *rg, ReebArc *a0, ReebArc *a1) REEB_freeArc((BArc*)a1); result = 1; } - else if (a0->tail->weight > a1->tail->weight) // a1->tail->weight is in the middle - { + else if (a0->tail->weight > a1->tail->weight) { /* a1->tail->weight is in the middle */ mergeArcEdges(rg, a1, a0, MERGE_LOWER); mergeArcFaces(rg, a1, a0); @@ -2340,8 +2193,7 @@ int mergeArcs(ReebGraph *rg, ReebArc *a0, ReebArc *a1) a0->head = a1->tail; resizeArcBuckets(a0); } - else // a0>n2 is in the middle - { + else { /* a0>n2 is in the middle */ mergeArcEdges(rg, a0, a1, MERGE_LOWER); mergeArcFaces(rg, a0, a1); @@ -2356,11 +2208,9 @@ int mergeArcs(ReebGraph *rg, ReebArc *a0, ReebArc *a1) resizeArcBuckets(a1); } } - // TRIANGLE POINTS UP - else if (a0->tail->weight == a1->tail->weight) // tails are the same - { - if (a0->head->weight > a1->head->weight) // a0->head->weight is in the middle - { + /* TRIANGLE POINTS UP */ + else if (a0->tail->weight == a1->tail->weight) { /* tails are the same */ + if (a0->head->weight > a1->head->weight) { /* a0->head->weight is in the middle */ mergeArcEdges(rg, a0, a1, MERGE_HIGHER); mergeArcFaces(rg, a0, a1); @@ -2374,8 +2224,7 @@ int mergeArcs(ReebGraph *rg, ReebArc *a0, ReebArc *a1) a1->tail = a0->head; resizeArcBuckets(a1); } - else // a1->head->weight is in the middle - { + else { /* a1->head->weight is in the middle */ mergeArcEdges(rg, a1, a0, MERGE_HIGHER); mergeArcFaces(rg, a1, a0); @@ -2390,9 +2239,8 @@ int mergeArcs(ReebGraph *rg, ReebArc *a0, ReebArc *a1) resizeArcBuckets(a0); } } - else - { - // Need something here (OR NOT) + else { + /* Need something here (OR NOT) */ } return result; @@ -2401,18 +2249,14 @@ int mergeArcs(ReebGraph *rg, ReebArc *a0, ReebArc *a1) static void glueByMergeSort(ReebGraph *rg, ReebArc *a0, ReebArc *a1, ReebEdge *e0, ReebEdge *e1) { int total = 0; - while (total == 0 && a0 != a1 && a0 != NULL && a1 != NULL) - { + while (total == 0 && a0 != a1 && a0 != NULL && a1 != NULL) { total = mergeArcs(rg, a0, a1); - if (total == 0) // if it wasn't a total merge, go forward - { - if (a0->tail->weight < a1->tail->weight) - { + if (total == 0) // if it wasn't a total merge, go forward { + if (a0->tail->weight < a1->tail->weight) { a0 = nextArcMappedToEdge(a0, e0); } - else - { + else { a1 = nextArcMappedToEdge(a1, e1); } } @@ -2437,8 +2281,7 @@ static ReebEdge * createArc(ReebGraph *rg, ReebNode *node1, ReebNode *node2) edge = BLI_edgehash_lookup(rg->emap, node1->index, node2->index); // Only add existing edges that haven't been added yet - if (edge == NULL) - { + if (edge == NULL) { ReebArc *arc; ReebNode *v1, *v2; float len, offset; @@ -2451,13 +2294,11 @@ static ReebEdge * createArc(ReebGraph *rg, ReebNode *node1, ReebNode *node2) arc->symmetry_level = 0; arc->faces = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "createArc gh"); - if (node1->weight <= node2->weight) - { + if (node1->weight <= node2->weight) { v1 = node1; v2 = node2; } - else - { + else { v1 = node2; v2 = node1; } @@ -2497,8 +2338,7 @@ static ReebEdge * createArc(ReebGraph *rg, ReebNode *node1, ReebNode *node2) addVertToBucket(&(arc->buckets[arc->bcount - 1]), arc->tail->co); } #else - for (i = 0; i < arc->bcount; i++) - { + for (i = 0; i < arc->bcount; i++) { float co[3]; float f = (arc->buckets[i].val - offset) / len; @@ -2532,20 +2372,17 @@ static void addTriangleToGraph(ReebGraph *rg, ReebNode * n1, ReebNode * n2, Reeb /* The rest of the algorithm assumes that e1 is the longest edge */ - if (len1 >= len2 && len1 >= len3) - { + if (len1 >= len2 && len1 >= len3) { e1 = re1; e2 = re2; e3 = re3; } - else if (len2 >= len1 && len2 >= len3) - { + else if (len2 >= len1 && len2 >= len3) { e1 = re2; e2 = re1; e3 = re3; } - else - { + else { e1 = re3; e2 = re2; e3 = re1; @@ -2554,8 +2391,7 @@ static void addTriangleToGraph(ReebGraph *rg, ReebNode * n1, ReebNode * n2, Reeb /* And e2 is the lowest edge * If e3 is lower than e2, swap them */ - if (e3->v1->weight < e2->v1->weight) - { + if (e3->v1->weight < e2->v1->weight) { ReebEdge *etmp = e2; e2 = e3; e3 = etmp; @@ -2595,10 +2431,8 @@ ReebGraph * generateReebGraph(EditMesh *em, int subdivisions) renormalizeWeight(em, (float)rg->resolution); /* Adding vertice */ - for (index = 0, eve = em->verts.first; eve; eve = eve->next) - { - if (eve->h == 0) - { + for (index = 0, eve = em->verts.first; eve; eve = eve->next) { + if (eve->h == 0) { addNode(rg, eve); eve->f2 = 0; index++; @@ -2606,10 +2440,8 @@ ReebGraph * generateReebGraph(EditMesh *em, int subdivisions) } /* Adding face, edge per edge */ - for (efa = em->faces.first; efa; efa = efa->next) - { - if (efa->h == 0) - { + for (efa = em->faces.first; efa; efa = efa->next) { + if (efa->h == 0) { ReebNode *n1, *n2, *n3; n1 = nodeData(efa->v1); @@ -2618,15 +2450,13 @@ ReebGraph * generateReebGraph(EditMesh *em, int subdivisions) addTriangleToGraph(rg, n1, n2, n3, efa); - if (efa->v4) - { + if (efa->v4) { ReebNode *n4 = nodeData(efa->v4); addTriangleToGraph(rg, n1, n3, n4, efa); } #ifdef DEBUG_REEB countfaces++; - if (countfaces % 100 == 0) - { + if (countfaces % 100 == 0) { printf("\rface %i of %i", countfaces, totfaces); } #endif @@ -2656,8 +2486,7 @@ void renormalizeWeight(EditMesh *em, float newmax) eve = em->verts.first; minimum = weightData(eve); maximum = minimum; - for (; eve; eve = eve->next) - { + for (; eve; eve = eve->next) { maximum = MAX2(maximum, weightData(eve)); minimum = MIN2(minimum, weightData(eve)); } @@ -2665,8 +2494,7 @@ void renormalizeWeight(EditMesh *em, float newmax) range = maximum - minimum; /* Normalize weights */ - for (eve = em->verts.first; eve; eve = eve->next) - { + for (eve = em->verts.first; eve; eve = eve->next) { float weight = (weightData(eve) - minimum) / range * newmax; weightSetData(eve, weight); } @@ -2681,8 +2509,7 @@ int weightFromLoc(EditMesh *em, int axis) return 0; /* Copy coordinate in weight */ - for (eve = em->verts.first; eve; eve = eve->next) - { + for (eve = em->verts.first; eve; eve = eve->next) { weightSetData(eve, eve->co[axis]); } @@ -2745,8 +2572,7 @@ int weightToHarmonic(EditMesh *em, EdgeIndex *indexed_edges) int rval; /* Find local extrema */ - for (eve = em->verts.first; eve; eve = eve->next) - { + for (eve = em->verts.first; eve; eve = eve->next) { totvert++; } @@ -2759,52 +2585,42 @@ int weightToHarmonic(EditMesh *em, EdgeIndex *indexed_edges) nlBegin(NL_SYSTEM); /* Find local extrema */ - for (index = 0, eve = em->verts.first; eve; index++, eve = eve->next) - { - if (eve->h == 0) - { + for (index = 0, eve = em->verts.first; eve; index++, eve = eve->next) { + if (eve->h == 0) { EditEdge *eed; int maximum = 1; int minimum = 1; NextEdgeForVert(indexed_edges, -1); /* Reset next edge */ - for (eed = NextEdgeForVert(indexed_edges, index); eed && (maximum || minimum); eed = NextEdgeForVert(indexed_edges, index)) - { + for (eed = NextEdgeForVert(indexed_edges, index); eed && (maximum || minimum); eed = NextEdgeForVert(indexed_edges, index)) { EditVert *eve2; - if (eed->v1 == eve) - { + if (eed->v1 == eve) { eve2 = eed->v2; } - else - { + else { eve2 = eed->v1; } - if (eve2->h == 0) - { + if (eve2->h == 0) { /* Adjacent vertex is bigger, not a local maximum */ - if (weightData(eve2) > weightData(eve)) - { + if (weightData(eve2) > weightData(eve)) { maximum = 0; } /* Adjacent vertex is smaller, not a local minimum */ - else if (weightData(eve2) < weightData(eve)) - { + else if (weightData(eve2) < weightData(eve)) { minimum = 0; } } } - if (maximum || minimum) - { + if (maximum || minimum) { float w = weightData(eve); eve->f1 = 0; nlSetVariable(0, index, w); nlLockVariable(index); } - else - { + else { eve->f1 = 1; } } @@ -2813,38 +2629,30 @@ int weightToHarmonic(EditMesh *em, EdgeIndex *indexed_edges) nlBegin(NL_MATRIX); /* Zero edge weight */ - for (eed = em->edges.first; eed; eed = eed->next) - { + for (eed = em->edges.first; eed; eed = eed->next) { eed->tmp.l = 0; } /* Add faces count to the edge weight */ - for (efa = em->faces.first; efa; efa = efa->next) - { - if (efa->h == 0) - { + for (efa = em->faces.first; efa; efa = efa->next) { + if (efa->h == 0) { efa->e1->tmp.l++; efa->e2->tmp.l++; efa->e3->tmp.l++; - if (efa->e4) - { + if (efa->e4) { efa->e4->tmp.l++; } } } /* Add faces angle to the edge weight */ - for (efa = em->faces.first; efa; efa = efa->next) - { - if (efa->h == 0) - { - if (efa->v4 == NULL) - { + for (efa = em->faces.first; efa; efa = efa->next) { + if (efa->h == 0) { + if (efa->v4 == NULL) { addTriangle(efa->v1, efa->v2, efa->v3, efa->e1->tmp.l, efa->e2->tmp.l, efa->e3->tmp.l); } - else - { + else { addTriangle(efa->v1, efa->v2, efa->v3, efa->e1->tmp.l, efa->e2->tmp.l, 2); addTriangle(efa->v3, efa->v4, efa->v1, efa->e3->tmp.l, efa->e4->tmp.l, 2); } @@ -2857,16 +2665,13 @@ int weightToHarmonic(EditMesh *em, EdgeIndex *indexed_edges) success = nlSolveAdvanced(NULL, NL_TRUE); - if (success) - { + if (success) { rval = 1; - for (index = 0, eve = em->verts.first; eve; index++, eve = eve->next) - { + for (index = 0, eve = em->verts.first; eve; index++, eve = eve->next) { weightSetData(eve, nlGetVariable(0, index)); } } - else - { + else { rval = 0; } @@ -2881,20 +2686,17 @@ EditEdge * NextEdgeForVert(EdgeIndex *indexed_edges, int index) static int offset = -1; /* Reset method, call with NULL mesh pointer */ - if (index == -1) - { + if (index == -1) { offset = -1; return NULL; } /* first pass, start at the head of the list */ - if (offset == -1) - { + if (offset == -1) { offset = indexed_edges->offset[index]; } /* subsequent passes, start on the next edge */ - else - { + else { offset++; } @@ -2916,23 +2718,19 @@ static void shortestPathsFromVert(EditMesh *em, EditVert *starting_vert, EdgeInd BLI_heap_insert(edge_heap, FLT_MAX, NULL); /* Initialize edge flag */ - for (eed= em->edges.first; eed; eed= eed->next) - { + for (eed= em->edges.first; eed; eed= eed->next) { eed->f1 = 0; } - while (BLI_heap_size(edge_heap) > 0) - { + while (BLI_heap_size(edge_heap) > 0) { float current_weight; current_eve->f1 = 1; /* mark vertex as selected */ /* Add all new edges connected to current_eve to the list */ NextEdgeForVert(indexed_edges, -1); // Reset next edge - for (eed = NextEdgeForVert(indexed_edges, indexData(current_eve)); eed; eed = NextEdgeForVert(indexed_edges, indexData(current_eve))) - { - if (eed->f1 == 0) - { + for (eed = NextEdgeForVert(indexed_edges, indexData(current_eve)); eed; eed = NextEdgeForVert(indexed_edges, indexData(current_eve))) { + if (eed->f1 == 0) { BLI_heap_insert(edge_heap, weightData(current_eve) + eed->tmp.fp, eed); eed->f1 = 1; } @@ -2945,16 +2743,13 @@ static void shortestPathsFromVert(EditMesh *em, EditVert *starting_vert, EdgeInd select_eed = BLI_heap_popmin(edge_heap); } while (select_eed != NULL && select_eed->v1->f1 != 0 && select_eed->v2->f1); - if (select_eed != NULL) - { + if (select_eed != NULL) { select_eed->f1 = 2; - if (select_eed->v1->f1 == 0) /* v1 is the new vertex */ - { + if (select_eed->v1->f1 == 0) /* v1 is the new vertex */ { current_eve = select_eed->v1; } - else /* otherwise, it's v2 */ - { + else { /* otherwise, it's v2 */ current_eve = select_eed->v2; } @@ -2983,10 +2778,8 @@ static void buildIndexedEdges(EditMesh *em, EdgeIndex *indexed_edges) indexed_edges->offset = MEM_callocN(totvert * sizeof(int), "EdgeIndex offset"); - for (eed = em->edges.first; eed; eed = eed->next) - { - if (eed->v1->h == 0 && eed->v2->h == 0) - { + for (eed = em->edges.first; eed; eed = eed->next) { + if (eed->v1->h == 0 && eed->v2->h == 0) { tot_indexed += 2; indexed_edges->offset[indexData(eed->v1)]++; indexed_edges->offset[indexData(eed->v2)]++; @@ -2998,10 +2791,8 @@ static void buildIndexedEdges(EditMesh *em, EdgeIndex *indexed_edges) indexed_edges->edges = MEM_callocN(tot_indexed * sizeof(EditEdge*), "EdgeIndex edges"); /* setting vert offsets */ - for (eve = em->verts.first; eve; eve = eve->next) - { - if (eve->h == 0) - { + for (eve = em->verts.first; eve; eve = eve->next) { + if (eve->h == 0) { int d = indexed_edges->offset[indexData(eve)]; indexed_edges->offset[indexData(eve)] = offset; offset += d + 1; @@ -3009,24 +2800,18 @@ static void buildIndexedEdges(EditMesh *em, EdgeIndex *indexed_edges) } /* adding edges in array */ - for (eed = em->edges.first; eed; eed= eed->next) - { - if (eed->v1->h == 0 && eed->v2->h == 0) - { + for (eed = em->edges.first; eed; eed= eed->next) { + if (eed->v1->h == 0 && eed->v2->h == 0) { int i; - for (i = indexed_edges->offset[indexData(eed->v1)]; i < tot_indexed; i++) - { - if (indexed_edges->edges[i] == NULL) - { + for (i = indexed_edges->offset[indexData(eed->v1)]; i < tot_indexed; i++) { + if (indexed_edges->edges[i] == NULL) { indexed_edges->edges[i] = eed; break; } } - for (i = indexed_edges->offset[indexData(eed->v2)]; i < tot_indexed; i++) - { - if (indexed_edges->edges[i] == NULL) - { + for (i = indexed_edges->offset[indexData(eed->v2)]; i < tot_indexed; i++) { + if (indexed_edges->edges[i] == NULL) { indexed_edges->edges[i] = eed; break; } @@ -3044,80 +2829,64 @@ int weightFromDistance(EditMesh *em, EdgeIndex *indexed_edges) totvert = BLI_countlist(&em->verts); - if (em == NULL || totvert == 0) - { + if (em == NULL || totvert == 0) { return 0; } totedge = BLI_countlist(&em->edges); - if (totedge == 0) - { + if (totedge == 0) { return 0; } /* Initialize vertice flag and find at least one selected vertex */ - for (eve = em->verts.first; eve; eve = eve->next) - { + for (eve = em->verts.first; eve; eve = eve->next) { eve->f1 = 0; - if (eve->f & SELECT) - { + if (eve->f & SELECT) { vCount = 1; } } - if (vCount == 0) - { + if (vCount == 0) { return 0; /* no selected vert, failure */ } - else - { + else { EditEdge *eed; int allDone = 0; /* Calculate edge weight */ - for (eed = em->edges.first; eed; eed= eed->next) - { - if (eed->v1->h == 0 && eed->v2->h == 0) - { + for (eed = em->edges.first; eed; eed= eed->next) { + if (eed->v1->h == 0 && eed->v2->h == 0) { eed->tmp.fp = len_v3v3(eed->v1->co, eed->v2->co); } } /* Apply dijkstra spf for each selected vert */ - for (eve = em->verts.first; eve; eve = eve->next) - { - if (eve->f & SELECT) - { + for (eve = em->verts.first; eve; eve = eve->next) { + if (eve->f & SELECT) { shortestPathsFromVert(em, eve, indexed_edges); } } /* connect unselected islands */ - while (allDone == 0) - { + while (allDone == 0) { EditVert *selected_eve = NULL; float selected_weight = 0; float min_distance = FLT_MAX; allDone = 1; - for (eve = em->verts.first; eve; eve = eve->next) - { + for (eve = em->verts.first; eve; eve = eve->next) { /* for every vertex visible that hasn't been processed yet */ - if (eve->h == 0 && eve->f1 != 1) - { + if (eve->h == 0 && eve->f1 != 1) { EditVert *closest_eve; /* find the closest processed vertex */ - for (closest_eve = em->verts.first; closest_eve; closest_eve = closest_eve->next) - { + for (closest_eve = em->verts.first; closest_eve; closest_eve = closest_eve->next) { /* vertex is already processed and distance is smaller than current minimum */ - if (closest_eve->f1 == 1) - { + if (closest_eve->f1 == 1) { float distance = len_v3v3(closest_eve->co, eve->co); - if (distance < min_distance) - { + if (distance < min_distance) { min_distance = distance; selected_eve = eve; selected_weight = weightData(closest_eve); @@ -3127,8 +2896,7 @@ int weightFromDistance(EditMesh *em, EdgeIndex *indexed_edges) } } - if (selected_eve) - { + if (selected_eve) { allDone = 0; weightSetData(selected_eve, selected_weight + min_distance); @@ -3137,10 +2905,8 @@ int weightFromDistance(EditMesh *em, EdgeIndex *indexed_edges) } } - for (eve = em->verts.first; eve && vCount == 0; eve = eve->next) - { - if (eve->f1 == 0) - { + for (eve = em->verts.first; eve && vCount == 0; eve = eve->next) { + if (eve->f1 == 0) { printf("vertex not reached\n"); break; } @@ -3173,13 +2939,11 @@ static void initIteratorFct(ReebArcIterator *iter) static void setIteratorValues(ReebArcIterator *iter, EmbedBucket *bucket) { - if (bucket) - { + if (bucket) { iter->p = bucket->p; iter->no = bucket->no; } - else - { + else { iter->p = NULL; iter->no = NULL; } @@ -3193,14 +2957,12 @@ void initArcIterator(BArcIterator *arg, ReebArc *arc, ReebNode *head) initIteratorFct(iter); iter->arc = arc; - if (head == arc->head) - { + if (head == arc->head) { iter->start = 0; iter->end = arc->bcount - 1; iter->stride = 1; } - else - { + else { iter->start = arc->bcount - 1; iter->end = 0; iter->stride = -1; @@ -3218,14 +2980,12 @@ void initArcIteratorStart(BArcIterator *arg, struct ReebArc *arc, struct ReebNod initIteratorFct(iter); iter->arc = arc; - if (head == arc->head) - { + if (head == arc->head) { iter->start = start; iter->end = arc->bcount - 1; iter->stride = 1; } - else - { + else { iter->start = arc->bcount - 1 - start; iter->end = 0; iter->stride = -1; @@ -3235,8 +2995,7 @@ void initArcIteratorStart(BArcIterator *arg, struct ReebArc *arc, struct ReebNod iter->length = arc->bcount - start; - if (start >= arc->bcount) - { + if (start >= arc->bcount) { iter->start = iter->end; /* stop iterator since it's past its end */ } } @@ -3251,12 +3010,10 @@ void initArcIterator2(BArcIterator *arg, ReebArc *arc, int start, int end) iter->start = start; iter->end = end; - if (end > start) - { + if (end > start) { iter->stride = 1; } - else - { + else { iter->stride = -1; } @@ -3270,12 +3027,10 @@ static void* headNode(void *arg) ReebArcIterator *iter = (ReebArcIterator*)arg; ReebNode *node; - if (iter->start < iter->end) - { + if (iter->start < iter->end) { node = iter->arc->head; } - else - { + else { node = iter->arc->tail; } @@ -3291,12 +3046,10 @@ static void* tailNode(void *arg) ReebArcIterator *iter = (ReebArcIterator*)arg; ReebNode *node; - if (iter->start < iter->end) - { + if (iter->start < iter->end) { node = iter->arc->tail; } - else - { + else { node = iter->arc->head; } @@ -3314,8 +3067,7 @@ static void* nextBucket(void *arg) iter->index++; - if (iter->index < iter->length) - { + if (iter->index < iter->length) { result = &(iter->arc->buckets[iter->start + (iter->stride * iter->index)]); } @@ -3331,8 +3083,7 @@ static void* nextNBucket(void *arg, int n) iter->index += n; /* check if passed end */ - if (iter->index < iter->length) - { + if (iter->index < iter->length) { result = &(iter->arc->buckets[iter->start + (iter->stride * iter->index)]); } @@ -3347,8 +3098,7 @@ static void* peekBucket(void *arg, int n) int index = iter->index + n; /* check if passed end */ - if (index < iter->length) - { + if (index < iter->length) { result = &(iter->arc->buckets[iter->start + (iter->stride * index)]); } @@ -3361,8 +3111,7 @@ static void* previousBucket(void *arg) ReebArcIterator *iter = (ReebArcIterator*)arg; EmbedBucket *result = NULL; - if (iter->index > 0) - { + if (iter->index > 0) { iter->index--; result = &(iter->arc->buckets[iter->start + (iter->stride * iter->index)]); } @@ -3375,12 +3124,10 @@ static int iteratorStopped(void *arg) { ReebArcIterator *iter = (ReebArcIterator*)arg; - if (iter->index >= iter->length) - { + if (iter->index >= iter->length) { return 1; } - else - { + else { return 0; } } diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index c19041b817e..0b21e514f0e 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -6207,7 +6207,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) nu->resolv= cu->resolv; } - switch(stype) { + switch (stype) { case CU_PRIM_CURVE: /* curve */ nu->resolu= cu->resolu; if (cutype==CU_BEZIER) { diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c index 1f1d1495276..29bebfab9e0 100644 --- a/source/blender/editors/curve/editfont.c +++ b/source/blender/editors/curve/editfont.c @@ -520,13 +520,17 @@ void ED_text_to_object(bContext *C, Text *text, int split_lines) } /********************** utilities ***************************/ - static short next_word(Curve *cu) { short s; - for (s=cu->pos; (cu->str[s]) && (cu->str[s]!=' ') && (cu->str[s]!='\n') && - (cu->str[s]!=1) && (cu->str[s]!='\r'); s++); - if (cu->str[s]) return(s+1); else return(s); + for (s=cu->pos; ((cu->str[s]) && (cu->str[s] != ' ') && (cu->str[s] != '\n') && + (cu->str[s] != 1) && (cu->str[s] != '\r')); + s++) + { + /* pass */ + } + + return cu->str[s] ? (s + 1) : s; } static short prev_word(Curve *cu) @@ -534,9 +538,14 @@ static short prev_word(Curve *cu) short s; if (cu->pos==0) return(0); - for (s=cu->pos-2; (cu->str[s]) && (cu->str[s]!=' ') && (cu->str[s]!='\n') && - (cu->str[s]!=1) && (cu->str[s]!='\r'); s--); - if (cu->str[s]) return(s+1); else return(s); + for (s = cu->pos - 2; ((cu->str[s]) && (cu->str[s] != ' ') && (cu->str[s] != '\n') && + (cu->str[s] != 1) && (cu->str[s] != '\r')); + s--) + { + /* pass */ + } + + return cu->str[s] ? (s + 1) : s; } static int kill_selection(Object *obedit, int ins) /* 1 == new character */ @@ -816,7 +825,7 @@ static int move_cursor(bContext *C, int type, int select) EditFont *ef= cu->editfont; int cursmove= -1; - switch(type) { + switch (type) { case LINE_BEGIN: if ((select) && (cu->selstart==0)) cu->selstart = cu->selend = cu->pos+1; while (cu->pos>0) { @@ -1121,7 +1130,7 @@ static int delete_exec(bContext *C, wmOperator *op) else if (type == DEL_PREV_SEL) type= DEL_PREV_CHAR; } - switch(type) { + switch (type) { case DEL_ALL: cu->len = cu->pos = 0; ef->textbuf[0]= 0; diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index a7ff1565c3d..e64446be84b 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -782,8 +782,7 @@ static void ui_add_smart_controller(bContext *C, uiBut *from, uiBut *to) /* (1) get the object */ CTX_DATA_BEGIN(C, Object *, ob_iter, selected_editable_objects) { - for (sens_iter = ob_iter->sensors.first; sens_iter; sens_iter = sens_iter->next) - { + for (sens_iter = ob_iter->sensors.first; sens_iter; sens_iter = sens_iter->next) { if (&(sens_iter->links) == sens_from_links) { ob = ob_iter; break; @@ -1564,8 +1563,7 @@ static int ui_textedit_copypaste(uiBut *but, uiHandleButtonData *data, int paste len = strlen(str); } - for (y = 0; y < strlen(buf); y++) - { + for (y = 0; y < strlen(buf); y++) { /* add contents of buffer */ if (len + 1 < data->maxlen) { for (x = data->maxlen; x > but->pos; x--) diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index cce037822e3..03ceeb68c4c 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1061,8 +1061,7 @@ static void ui_text_label_rightclip(uiFontStyle *fstyle, uiBut *but, rcti *rect) /* after the leading text is gone, chop off the : and following space, with ofs */ - while ((but->strwidth > okwidth) && (but->ofs < 2)) - { + while ((but->strwidth > okwidth) && (but->ofs < 2)) { ui_text_clip_give_next_off(but); but->strwidth = BLF_width(fstyle->uifont_id, but->drawstr + but->ofs); if (but->strwidth < 10) break; diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 9f4a351c66d..2d222059fc1 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -1151,8 +1151,7 @@ void UI_ThemeClearColor(int colorid) void UI_make_axis_color(const unsigned char src_col[3], unsigned char dst_col[3], const char axis) { - switch (axis) - { + switch (axis) { case 'X': dst_col[0] = src_col[0] > 219 ? 255 : src_col[0] + 36; dst_col[1] = src_col[1] < 26 ? 0 : src_col[1] - 26; diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index e88b34b5812..f68c40d5f8a 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -927,7 +927,9 @@ static int edbm_delete_exec(bContext *C, wmOperator *op) //"Erase Only Faces"; if (!EDBM_op_callf(em, op, "del geom=%hf context=%i", BM_ELEM_SELECT, DEL_ONLYFACES)) + { return OPERATOR_CANCELLED; + } } EDBM_flag_disable_all(em, BM_ELEM_SELECT); @@ -1021,8 +1023,7 @@ static int edbm_add_edge_face__smooth_get(BMesh *bm) unsigned int vote_on_smooth[2] = {0, 0}; BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { - if (BM_elem_flag_test(e, BM_ELEM_SELECT) && e->l) - { + if (BM_elem_flag_test(e, BM_ELEM_SELECT) && e->l) { vote_on_smooth[BM_elem_flag_test_bool(e->l->f, BM_ELEM_SMOOTH)]++; } } diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index 96fb2afbac4..0a6368daf74 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -928,9 +928,10 @@ static BMVert *editbmesh_get_x_mirror_vert_spacial(Object *ob, BMEditMesh *em, f /* ignore nan verts */ if (!finite(co[0]) || !finite(co[1]) || - !finite(co[2]) - ) + !finite(co[2])) + { return NULL; + } vec[0] = -co[0]; vec[1] = co[1]; diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 3717591e412..ba527e6fa6a 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -430,7 +430,7 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type) ob= ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer); rename_id(&ob->id, "Field"); - switch(type) { + switch (type) { case PFIELD_WIND: case PFIELD_VORTEX: ob->empty_drawtype = OB_SINGLE_ARROW; @@ -1680,7 +1680,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base id= obn->data; didit= 0; - switch(obn->type) { + switch (obn->type) { case OB_MESH: if (dupflag & USER_DUP_MESH) { ID_NEW_US2( obn->data ) diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 1f012c6f0be..8b22b4613b8 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -862,7 +862,7 @@ static void bake_images(MultiresBakeRender *bkr) if (ibuf->x>0 && ibuf->y>0) { ibuf->userdata= MEM_callocN(ibuf->y*ibuf->x, "MultiresBake imbuf mask"); - switch(bkr->mode) { + switch (bkr->mode) { case RE_BAKE_NORMALS: do_multires_bake(bkr, ima, apply_tangmat_callback, init_normal_data, NULL, free_normal_data); break; diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 2fbc2966bc8..8531ec5701d 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -1354,14 +1354,16 @@ static EnumPropertyItem *object_mode_set_itemsf(bContext *C, PointerRNA *UNUSED( ob = CTX_data_active_object(C); while (ob && input->identifier) { if ((input->value == OB_MODE_EDIT && ((ob->type == OB_MESH) || (ob->type == OB_ARMATURE) || - (ob->type == OB_CURVE) || (ob->type == OB_SURF) || - (ob->type == OB_FONT) || (ob->type == OB_MBALL) || (ob->type == OB_LATTICE))) || - (input->value == OB_MODE_POSE && (ob->type == OB_ARMATURE)) || - (input->value == OB_MODE_PARTICLE_EDIT && ob->particlesystem.first) || - ((input->value == OB_MODE_SCULPT || input->value == OB_MODE_VERTEX_PAINT || - input->value == OB_MODE_WEIGHT_PAINT || input->value == OB_MODE_TEXTURE_PAINT) && (ob->type == OB_MESH)) || - (input->value == OB_MODE_OBJECT)) + (ob->type == OB_CURVE) || (ob->type == OB_SURF) || + (ob->type == OB_FONT) || (ob->type == OB_MBALL) || (ob->type == OB_LATTICE))) || + (input->value == OB_MODE_POSE && (ob->type == OB_ARMATURE)) || + (input->value == OB_MODE_PARTICLE_EDIT && ob->particlesystem.first) || + ((input->value == OB_MODE_SCULPT || input->value == OB_MODE_VERTEX_PAINT || + input->value == OB_MODE_WEIGHT_PAINT || input->value == OB_MODE_TEXTURE_PAINT) && (ob->type == OB_MESH)) || + (input->value == OB_MODE_OBJECT)) + { RNA_enum_item_add(&item, &totitem, input); + } ++input; } @@ -1401,7 +1403,7 @@ static int object_mode_set_compat(bContext *UNUSED(C), wmOperator *op, Object *o if (mode == OB_MODE_OBJECT) return 1; - switch(ob->type) { + switch (ob->type) { case OB_MESH: if (mode & (OB_MODE_EDIT|OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_PARTICLE_EDIT)) return 1; diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index ef428b5b1b7..f4d8cd5ae11 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -301,7 +301,7 @@ static int object_hook_index_array(Scene *scene, Object *obedit, int *tot, int * *tot= 0; name[0]= 0; - switch(obedit->type) { + switch (obedit->type) { case OB_MESH: { Mesh *me= obedit->data; diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index a666f04034b..40e852ebf7c 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -1232,7 +1232,7 @@ enum { /* Return 1 if make link data is allow, zero otherwise */ static int allow_make_links_data(int ev, Object *ob, Object *obt) { - switch(ev) { + switch (ev) { case MAKE_LINKS_OBDATA: if (ob->type == obt->type && ob->type != OB_EMPTY) return 1; @@ -1268,7 +1268,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op) CTX_DATA_BEGIN(C, Object*, obt, selected_editable_objects) { if (ob != obt) { if (allow_make_links_data(event, ob, obt)) { - switch(event) { + switch (event) { case MAKE_LINKS_OBDATA: /* obdata */ id= obt->data; id->us--; @@ -1464,7 +1464,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, int flag) BKE_copy_animdata_id_action(id); - switch(ob->type) { + switch (ob->type) { case OB_LAMP: ob->data= la= copy_lamp(ob->data); for (a=0; arefkey) { /* apply new basis key on original data */ - switch(ob->type) { + switch (ob->type) { case OB_MESH: key_to_mesh(key->refkey, ob->data); break; diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index b5c34f1c750..e74819f10bf 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -184,7 +184,7 @@ static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_to *dvert_arr = NULL; if (id) { - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_ME: { Mesh *me = (Mesh *)id; @@ -287,7 +287,7 @@ static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_to int ED_vgroup_give_array(ID *id, MDeformVert **dvert_arr, int *dvert_tot) { if (id) { - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_ME: { Mesh *me = (Mesh *)id; @@ -412,7 +412,7 @@ static void ED_vgroup_nr_vert_add(Object *ob, dw= defvert_find_index(dv, def_nr); if (dw) { - switch(assignmode) { + switch (assignmode) { case WEIGHT_REPLACE: dw->weight = weight; break; @@ -437,7 +437,7 @@ static void ED_vgroup_nr_vert_add(Object *ob, * we must take a different form of action ... */ - switch(assignmode) { + switch (assignmode) { case WEIGHT_SUBTRACT: /* if we are subtracting then we don't * need to do anything @@ -1043,8 +1043,9 @@ static void moveCloserToDistanceFromPlane(Scene *scene, Object *ob, Mesh *me, in dm_deform_clear(dm, ob); dm = NULL; } } - } while (wasChange && (distToStart-distToBe)/fabsf(distToStart-distToBe) == - (dists[bestIndex]-distToBe)/fabsf(dists[bestIndex]-distToBe)); + } while (wasChange && ((distToStart - distToBe) / fabsf(distToStart - distToBe) == + (dists[bestIndex] - distToBe) / fabsf(dists[bestIndex] - distToBe))); + MEM_freeN(upDown); MEM_freeN(changes); MEM_freeN(dists); @@ -1193,7 +1194,7 @@ static void vgroup_lock_all(Object *ob, int action) } for (dg= ob->defbase.first; dg; dg= dg->next) { - switch(action) { + switch (action) { case SEL_SELECT: dg->flag |= DG_LOCK_WEIGHT; break; diff --git a/source/blender/editors/physics/dynamicpaint_ops.c b/source/blender/editors/physics/dynamicpaint_ops.c index 417cddb74fe..c82e0459218 100644 --- a/source/blender/editors/physics/dynamicpaint_ops.c +++ b/source/blender/editors/physics/dynamicpaint_ops.c @@ -291,8 +291,7 @@ static int dynamicPaint_bakeImageSequence(bContext *C, DynamicPaintSurface *surf if (!dynamicPaint_createUVSurface(surface)) return 0; /* Loop through selected frames */ - for (frame=surface->start_frame; frame<=surface->end_frame; frame++) - { + for (frame=surface->start_frame; frame<=surface->end_frame; frame++) { float progress = (frame - surface->start_frame) / (float)frames * 100; surface->current_frame = frame; diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 591015a7479..4f8f2ea3642 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -215,7 +215,7 @@ static PTCacheEdit *pe_get_current(Scene *scene, Object *ob, int create) /* in the case of only one editable thing, set pset->edittype accordingly */ if (pidlist.first && pidlist.first == pidlist.last) { pid = pidlist.first; - switch(pid->type) { + switch (pid->type) { case PTCACHE_TYPE_PARTICLES: pset->edittype = PE_TYPE_PARTICLES; break; @@ -477,10 +477,12 @@ static int key_inside_rect(PEData *data, const float co[3]) if (sco[0] == IS_CLIPPED) return 0; - + if (sco[0] > data->rect->xmin && sco[0] < data->rect->xmax && - sco[1] > data->rect->ymin && sco[1] < data->rect->ymax) + sco[1] > data->rect->ymin && sco[1] < data->rect->ymax) + { return key_test_depth(data, co); + } return 0; } @@ -3493,7 +3495,7 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr) mval[0] = bedit->lastmouse[0] + step*dx; mval[1] = bedit->lastmouse[1] + step*dy; - switch(pset->brushtype) { + switch (pset->brushtype) { case PE_BRUSH_COMB: { float mval_f[2]; @@ -3710,7 +3712,7 @@ static int brush_edit_invoke(bContext *C, wmOperator *op, wmEvent *event) static int brush_edit_modal(bContext *C, wmOperator *op, wmEvent *event) { - switch(event->type) { + switch (event->type) { case LEFTMOUSE: case MIDDLEMOUSE: case RIGHTMOUSE: // XXX hardcoded diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c index 20fa4c5753f..c0d3e505873 100644 --- a/source/blender/editors/physics/physics_fluid.c +++ b/source/blender/editors/physics/physics_fluid.c @@ -594,8 +594,7 @@ static int fluid_validate_scene(ReportList *reports, Scene *scene, Object *fsDom int channelObjCount = 0; int fluidInputCount = 0; - for (base=scene->base.first; base; base= base->next) - { + for (base=scene->base.first; base; base= base->next) { Object *ob = base->object; FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim); diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index bed17048ea1..eb1688a76e2 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -115,7 +115,7 @@ void ED_region_pixelspace(ARegion *ar) void ED_region_do_listen(ARegion *ar, wmNotifier *note) { /* generic notes first */ - switch(note->category) { + switch (note->category) { case NC_WM: if (note->data==ND_FILEREAD) ED_region_tag_redraw(ar); @@ -247,7 +247,7 @@ static void region_draw_azone_tab_plus(AZone *az) glEnable(GL_BLEND); /* add code to draw region hidden as 'too small' */ - switch(az->edge) { + switch (az->edge) { case AE_TOP_TO_BOTTOMRIGHT: uiSetRoundBox(UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT); break; @@ -282,7 +282,7 @@ static void region_draw_azone_tab(AZone *az) glColor4f(col[0], col[1], col[2], 0.5f); /* add code to draw region hidden as 'too small' */ - switch(az->edge) { + switch (az->edge) { case AE_TOP_TO_BOTTOMRIGHT: uiSetRoundBox(UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT | UI_RB_ALPHA); @@ -325,7 +325,7 @@ static void region_draw_azone_tria(AZone *az) glColor4f(0.0f, 0.0f, 0.0f, 0.35f); /* add code to draw region hidden as 'too small' */ - switch(az->edge) { + switch (az->edge) { case AE_TOP_TO_BOTTOMRIGHT: ui_draw_anti_tria((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y1, (float)(az->x1+az->x2)/2, (float)az->y2); break; @@ -623,7 +623,7 @@ static void area_azone_initialize(ScrArea *sa) #define AZONEPAD_ICON 9 static void region_azone_edge(AZone *az, ARegion *ar) { - switch(az->edge) { + switch (az->edge) { case AE_TOP_TO_BOTTOMRIGHT: az->x1= ar->winrct.xmin; az->y1= ar->winrct.ymax - AZONEPAD_EDGE; @@ -665,7 +665,7 @@ static void region_azone_icon(ScrArea *sa, AZone *az, ARegion *ar) if (azt->edge == az->edge) tot++; } - switch(az->edge) { + switch (az->edge) { case AE_TOP_TO_BOTTOMRIGHT: az->x1= ar->winrct.xmax - tot*2*AZONEPAD_ICON; az->y1= ar->winrct.ymax + AZONEPAD_ICON; @@ -725,7 +725,7 @@ static void region_azone_tab_plus(ScrArea *sa, AZone *az, ARegion *ar) if (azt->edge == az->edge) tot++; } - switch(az->edge) { + switch (az->edge) { case AE_TOP_TO_BOTTOMRIGHT: if (ar->winrct.ymax == sa->totrct.ymin) add= 1; else add= 0; az->x1= ar->winrct.xmax - 2.5*AZONEPAD_TAB_PLUSW; @@ -770,7 +770,7 @@ static void region_azone_tab(ScrArea *sa, AZone *az, ARegion *ar) if (azt->edge == az->edge) tot++; } - switch(az->edge) { + switch (az->edge) { case AE_TOP_TO_BOTTOMRIGHT: if (ar->winrct.ymax == sa->totrct.ymin) add= 1; else add= 0; az->x1= ar->winrct.xmax - 2*AZONEPAD_TABW; @@ -815,7 +815,7 @@ static void region_azone_tria(ScrArea *sa, AZone *az, ARegion *ar) if (azt->edge == az->edge) tot++; } - switch(az->edge) { + switch (az->edge) { case AE_TOP_TO_BOTTOMRIGHT: if (ar->winrct.ymax == sa->totrct.ymin) add= 1; else add= 0; az->x1= ar->winrct.xmax - 2*AZONEPAD_TRIAW; diff --git a/source/blender/editors/screen/glutil.c b/source/blender/editors/screen/glutil.c index 5ba0e86e0c1..5b73645abde 100644 --- a/source/blender/editors/screen/glutil.c +++ b/source/blender/editors/screen/glutil.c @@ -825,7 +825,7 @@ int bglPointHack(void) void bglVertex3fv(const float vec[3]) { - switch(curmode) { + switch (curmode) { case GL_POINTS: if (pointhack) { glRasterPos3fv(vec); @@ -838,7 +838,7 @@ void bglVertex3fv(const float vec[3]) void bglVertex3f(float x, float y, float z) { - switch(curmode) { + switch (curmode) { case GL_POINTS: if (pointhack) { glRasterPos3f(x, y, z); @@ -851,7 +851,7 @@ void bglVertex3f(float x, float y, float z) void bglVertex2fv(const float vec[2]) { - switch(curmode) { + switch (curmode) { case GL_POINTS: if (pointhack) { glRasterPos2fv(vec); @@ -882,11 +882,15 @@ void bgl_get_mats(bglMats *mats) /* Very strange code here - it seems that certain bad values in the * modelview matrix can cause gluUnProject to give bad results. */ if (mats->modelview[0] < badvalue && - mats->modelview[0] > -badvalue) - mats->modelview[0]= 0; + mats->modelview[0] > -badvalue) + { + mats->modelview[0] = 0; + } if (mats->modelview[5] < badvalue && - mats->modelview[5] > -badvalue) - mats->modelview[5]= 0; + mats->modelview[5] > -badvalue) + { + mats->modelview[5] = 0; + } /* Set up viewport so that gluUnProject will give correct values */ mats->viewport[0] = 0; diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index cafa4527c20..512cd404273 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -963,7 +963,7 @@ void ED_screen_do_listen(bContext *C, wmNotifier *note) wmWindow *win= CTX_wm_window(C); /* generic notes */ - switch(note->category) { + switch (note->category) { case NC_WM: if (note->data==ND_FILEREAD) win->screen->do_draw= 1; @@ -1009,7 +1009,7 @@ void ED_screen_draw(wmWindow *win) if (sa1 && sa2) { dir = area_getorientation(sa1, sa2); if (dir >= 0) { - switch(dir) { + switch (dir) { case 0: /* W */ dir = 'r'; dira = 'l'; diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index e427e1e21cf..3777547fa90 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -597,7 +597,7 @@ static int actionzone_modal(bContext *C, wmOperator *op, wmEvent *event) int deltax, deltay; int mindelta= sad->az->type==AZONE_REGION?1:12; - switch(event->type) { + switch (event->type) { case MOUSEMOVE: /* calculate gesture direction */ deltax= (event->x - sad->x); @@ -735,7 +735,7 @@ static int area_swap_modal(bContext *C, wmOperator *op, wmEvent *event) { sActionzoneData *sad= op->customdata; - switch(event->type) { + switch (event->type) { case MOUSEMOVE: /* second area, for join */ sad->sa2= screen_areahascursor(CTX_wm_screen(C), event->x, event->y); @@ -1045,7 +1045,7 @@ static int area_move_modal(bContext *C, wmOperator *op, wmEvent *event) int delta, x, y; /* execute the events */ - switch(event->type) { + switch (event->type) { case MOUSEMOVE: x= RNA_int_get(op->ptr, "x"); @@ -1438,7 +1438,7 @@ static int area_split_modal(bContext *C, wmOperator *op, wmEvent *event) int dir; /* execute the events */ - switch(event->type) { + switch (event->type) { case MOUSEMOVE: dir= RNA_enum_get(op->ptr, "direction"); @@ -1711,7 +1711,7 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event) int delta; /* execute the events */ - switch(event->type) { + switch (event->type) { case MOUSEMOVE: if (rmd->edge==AE_LEFT_TO_TOPRIGHT || rmd->edge==AE_RIGHT_TO_TOPLEFT) { @@ -2262,7 +2262,7 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event) sAreaJoinData *jd = (sAreaJoinData *)op->customdata; /* execute the events */ - switch(event->type) { + switch (event->type) { case MOUSEMOVE: { diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c index 5d4710accad..553a9a335d7 100644 --- a/source/blender/editors/sculpt_paint/paint_cursor.c +++ b/source/blender/editors/sculpt_paint/paint_cursor.c @@ -377,7 +377,9 @@ static void paint_draw_alpha_overlay(Sculpt *sd, Brush *brush, /* check for overlay mode */ if (!(brush->flag & BRUSH_TEXTURE_OVERLAY) || !(ELEM(brush->mtex.brush_map_mode, MTEX_MAP_MODE_FIXED, MTEX_MAP_MODE_TILED))) + { return; + } /* save lots of GL state * TODO: check on whether all of these are needed? */ @@ -566,7 +568,9 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused)) ELEM5(brush->sculpt_tool, SCULPT_TOOL_DRAW, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY, SCULPT_TOOL_PINCH, SCULPT_TOOL_CREASE)) + { outline_col = brush->sub_col; + } /* only do if brush is over the mesh */ if (hit) diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 157be337823..507fbe0f4b8 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -2817,8 +2817,10 @@ static void sculpt_init_mirror_clipping(Object *ob, SculptSession *ss) /* update the clip tolerance */ if (mmd->tolerance > ss->cache->clip_tolerance[i]) + { ss->cache->clip_tolerance[i] = - mmd->tolerance; + mmd->tolerance; + } } } } @@ -2928,8 +2930,11 @@ static void sculpt_update_cache_invariants(bContext *C, Sculpt *sd, SculptSessio SCULPT_TOOL_DRAW, SCULPT_TOOL_CREASE, SCULPT_TOOL_BLOB, SCULPT_TOOL_LAYER, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY, SCULPT_TOOL_CLAY_STRIPS, SCULPT_TOOL_ROTATE)) - if (!(brush->flag & BRUSH_ACCUMULATE)) + { + if (!(brush->flag & BRUSH_ACCUMULATE)) { cache->original = 1; + } + } cache->special_rotation = (brush->flag & BRUSH_RAKE) ? sd->last_angle : 0; diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c index 89a786d02a9..c08ed2e85b9 100644 --- a/source/blender/editors/sculpt_paint/sculpt_undo.c +++ b/source/blender/editors/sculpt_paint/sculpt_undo.c @@ -237,7 +237,9 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb) else if (unode->maxgrid && dm->getGridData) { if ((dm->getNumGrids(dm) != unode->maxgrid) || (dm->getGridSize(dm) != unode->gridsize)) + { continue; + } } else { continue; diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c index b50c3f11534..c238789446f 100644 --- a/source/blender/editors/sound/sound_ops.c +++ b/source/blender/editors/sound/sound_ops.c @@ -437,8 +437,7 @@ static void sound_mixdown_draw(bContext *C, wmOperator *op) RNA_def_property_flag(prop_codec, PROP_HIDDEN); RNA_def_property_flag(prop_format, PROP_HIDDEN); - switch(container) - { + switch (container) { case AUD_CONTAINER_AC3: RNA_def_property_clear_flag(prop_format, PROP_HIDDEN); RNA_def_property_enum_items(prop_format, ac3_format_items); @@ -460,8 +459,7 @@ static void sound_mixdown_draw(bContext *C, wmOperator *op) RNA_def_property_clear_flag(prop_codec, PROP_HIDDEN); RNA_def_property_enum_items(prop_codec, all_codec_items); - switch(codec) - { + switch (codec) { case AUD_CODEC_AAC: RNA_enum_set(op->ptr, "format", AUD_FORMAT_S16); break; diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c index 9d0dab7d34e..c1875eb3a9a 100644 --- a/source/blender/editors/space_action/space_action.c +++ b/source/blender/editors/space_action/space_action.c @@ -269,12 +269,12 @@ static void action_header_area_draw(const bContext *C, ARegion *ar) static void action_channel_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_ANIMATION: ED_region_tag_redraw(ar); break; case NC_SCENE: - switch(wmn->data) { + switch (wmn->data) { case ND_OB_ACTIVE: case ND_FRAME: ED_region_tag_redraw(ar); @@ -282,7 +282,7 @@ static void action_channel_area_listener(ARegion *ar, wmNotifier *wmn) } break; case NC_OBJECT: - switch(wmn->data) { + switch (wmn->data) { case ND_BONE_ACTIVE: case ND_BONE_SELECT: case ND_KEYS: @@ -307,12 +307,12 @@ static void action_channel_area_listener(ARegion *ar, wmNotifier *wmn) static void action_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_ANIMATION: ED_region_tag_redraw(ar); break; case NC_SCENE: - switch(wmn->data) { + switch (wmn->data) { case ND_RENDER_OPTIONS: case ND_OB_ACTIVE: case ND_FRAME: @@ -322,7 +322,7 @@ static void action_main_area_listener(ARegion *ar, wmNotifier *wmn) } break; case NC_OBJECT: - switch(wmn->data) { + switch (wmn->data) { case ND_TRANSFORM: /* moving object shouldn't need to redraw action */ break; @@ -334,7 +334,7 @@ static void action_main_area_listener(ARegion *ar, wmNotifier *wmn) } break; case NC_NODE: - switch(wmn->action) { + switch (wmn->action) { case NA_EDITED: ED_region_tag_redraw(ar); break; diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index b698ec03668..20d5257a62f 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -535,7 +535,7 @@ static int buttons_context_path(const bContext *C, ButsContextPath *path, int ma /* now for each buttons context type, we try to construct a path, * tracing back recursively */ - switch(mainb) { + switch (mainb) { case BCONTEXT_SCENE: case BCONTEXT_RENDER: found= buttons_context_path_scene(path); diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index fcc5b488ca9..2385bfd75b7 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -56,7 +56,7 @@ static void set_texture_context(bContext *C, SpaceButs *sbuts) { - switch(sbuts->mainb) { + switch (sbuts->mainb) { case BCONTEXT_MATERIAL: sbuts->texture_context = SB_TEXC_MAT_OR_LAMP; break; @@ -83,7 +83,7 @@ static void do_buttons_buttons(bContext *C, void *UNUSED(arg), int event) if (!sbuts) /* editor type switch */ return; - switch(event) { + switch (event) { case B_CONTEXT_SWITCH: case B_BUTSPREVIEW: ED_area_tag_redraw(CTX_wm_area(C)); diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index f1f4fb37b6e..b2a58041832 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -234,9 +234,9 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) SpaceButs *sbuts= sa->spacedata.first; /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SCENE: - switch(wmn->data) { + switch (wmn->data) { case ND_RENDER_OPTIONS: buttons_area_redraw(sa, BCONTEXT_RENDER); break; @@ -262,7 +262,7 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) } break; case NC_OBJECT: - switch(wmn->data) { + switch (wmn->data) { case ND_TRANSFORM: buttons_area_redraw(sa, BCONTEXT_OBJECT); buttons_area_redraw(sa, BCONTEXT_DATA); /* autotexpace flag */ @@ -307,7 +307,7 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) } break; case NC_GEOM: - switch(wmn->data) { + switch (wmn->data) { case ND_SELECT: case ND_DATA: ED_area_tag_redraw(sa); @@ -316,7 +316,7 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) break; case NC_MATERIAL: ED_area_tag_redraw(sa); - switch(wmn->data) { + switch (wmn->data) { case ND_SHADING: case ND_SHADING_DRAW: case ND_NODES: @@ -350,7 +350,7 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) ED_area_tag_redraw(sa); break; case NC_ANIMATION: - switch(wmn->data) { + switch (wmn->data) { case ND_KEYFRAME: if (wmn->action == NA_EDITED) ED_area_tag_redraw(sa); diff --git a/source/blender/editors/space_clip/clip_graph_ops.c b/source/blender/editors/space_clip/clip_graph_ops.c index f8c81c2944a..b569469d304 100644 --- a/source/blender/editors/space_clip/clip_graph_ops.c +++ b/source/blender/editors/space_clip/clip_graph_ops.c @@ -82,7 +82,7 @@ static void toggle_selection_cb(void *userdata, MovieTrackingMarker *marker) { SelectUserData *data = (SelectUserData *)userdata; - switch(data->action) { + switch (data->action) { case SEL_SELECT: marker->flag |= MARKER_GRAPH_SEL; break; diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c index 7e1bbc254e9..64ce529345c 100644 --- a/source/blender/editors/space_clip/clip_ops.c +++ b/source/blender/editors/space_clip/clip_ops.c @@ -361,7 +361,7 @@ static int view_pan_modal(bContext *C, wmOperator *op, wmEvent *event) ViewPanData *vpd = op->customdata; float offset[2]; - switch(event->type) { + switch (event->type) { case MOUSEMOVE: copy_v2_v2(vpd->vec, &vpd->xorig); offset[0] = (vpd->x - event->x) / sc->zoom; @@ -496,7 +496,7 @@ static int view_zoom_modal(bContext *C, wmOperator *op, wmEvent *event) ViewZoomData *vpd = op->customdata; float factor; - switch(event->type) { + switch (event->type) { case MOUSEMOVE: factor = 1.0f + (vpd->x-event->x + vpd->y - event->y) / 300.0f; RNA_float_set(op->ptr, "factor", factor); diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c index 228c716e3b6..4de790bc00c 100644 --- a/source/blender/editors/space_clip/space_clip.c +++ b/source/blender/editors/space_clip/space_clip.c @@ -236,9 +236,9 @@ static SpaceLink *clip_duplicate(SpaceLink *sl) static void clip_listener(ScrArea *sa, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SCENE: - switch(wmn->data) { + switch (wmn->data) { case ND_FRAME: clip_scopes_tag_refresh(sa); /* no break! */ @@ -249,14 +249,14 @@ static void clip_listener(ScrArea *sa, wmNotifier *wmn) } break; case NC_MOVIECLIP: - switch(wmn->data) { + switch (wmn->data) { case ND_DISPLAY: case ND_SELECT: clip_scopes_tag_refresh(sa); ED_area_tag_redraw(sa); break; } - switch(wmn->action) { + switch (wmn->action) { case NA_REMOVED: case NA_EDITED: case NA_EVALUATED: @@ -270,7 +270,7 @@ static void clip_listener(ScrArea *sa, wmNotifier *wmn) } break; case NC_GEOM: - switch(wmn->data) { + switch (wmn->data) { case ND_SELECT: clip_scopes_tag_refresh(sa); ED_area_tag_redraw(sa); @@ -808,7 +808,7 @@ static void clip_main_area_draw(const bContext *C, ARegion *ar) static void clip_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SCREEN: if (wmn->data == ND_GPENCIL) ED_region_tag_redraw(ar); @@ -896,7 +896,7 @@ static void clip_tools_area_draw(const bContext *C, ARegion *ar) static void clip_props_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_WM: if (wmn->data == ND_HISTORY) ED_region_tag_redraw(ar); @@ -941,7 +941,7 @@ static void clip_properties_area_draw(const bContext *C, ARegion *ar) static void clip_properties_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SCREEN: if (wmn->data ==ND_GPENCIL) ED_region_tag_redraw(ar); diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index 35986fa2700..2b1b311b89d 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -526,7 +526,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, wmEvent *event) SlideMarkerData *data = (SlideMarkerData *)op->customdata; float dx, dy, mdelta[2]; - switch(event->type) { + switch (event->type) { case LEFTCTRLKEY: case RIGHTCTRLKEY: case LEFTSHIFTKEY: diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 193fa2d2c65..36b38661463 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -82,7 +82,7 @@ enum { static void do_file_buttons(bContext *C, void *UNUSED(arg), int event) { - switch(event) { + switch (event) { case B_FS_FILENAME: file_filename_exec(C, NULL); break; @@ -417,8 +417,7 @@ static void draw_background(FileLayout *layout, View2D *v2d) int sy; /* alternating flat shade background */ - for (i=0; (i <= layout->rows); i+=2) - { + for (i=0; (i <= layout->rows); i+=2) { sy = (int)v2d->cur.ymax - i*(layout->tile_h+2*layout->tile_border_y) - layout->tile_border_y; UI_ThemeColorShade(TH_BACK, -7); @@ -490,8 +489,7 @@ void file_draw_list(const bContext *C, ARegion *ar) align = ( FILE_IMGDISPLAY == params->display) ? UI_STYLE_TEXT_CENTER : UI_STYLE_TEXT_LEFT; - for (i=offset; (i < numfiles) && (itot.xmin+2.0f); sy = (int)(v2d->tot.ymax - sy); diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index 7d1981a5a3b..aa1ab823ee1 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -911,8 +911,7 @@ static int file_smoothscroll_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent numfiles = filelist_numfiles(sfile->files); /* check if we are editing a name */ - for (i=0; i < numfiles; ++i) - { + for (i=0; i < numfiles; ++i) { if (filelist_is_selected(sfile->files, i, CHECK_ALL) ) { edit_idx=i; break; diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 45a271cc7e9..a05eba2daeb 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -520,7 +520,7 @@ static void filelist_read_dir(struct FileList* filelist); struct FileList* filelist_new(short type) { FileList* p = MEM_callocN( sizeof(FileList), "filelist" ); - switch(type) { + switch (type) { case FILE_MAIN: p->readf = filelist_read_main; p->filterf = is_filtered_main; @@ -982,7 +982,7 @@ int filelist_is_selected(struct FileList* filelist, int index, FileCheckType che void filelist_sort(struct FileList* filelist, short sort) { - switch(sort) { + switch (sort) { case FILE_SORT_ALPHA: qsort(filelist->filelist, filelist->numfiles, sizeof(struct direntry), compare_name); break; diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 31695ddd776..b17ca5ee319 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -447,8 +447,7 @@ static void column_widths(struct FileList* files, struct FileLayout* layout) layout->column_widths[i] = 0; } - for (i=0; (i < numfiles); ++i) - { + for (i=0; (i < numfiles); ++i) { struct direntry* file = filelist_file(files, i); if (file) { float len; diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index 48449ac8870..a4da1975c56 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -99,7 +99,7 @@ static FSMenuEntry *fsmenu_get_category(struct FSMenu* fsmenu, FSMenuCategory ca { FSMenuEntry *fsms = NULL; - switch(category) { + switch (category) { case FS_CATEGORY_SYSTEM: fsms = fsmenu->fsmenu_system; break; @@ -115,7 +115,7 @@ static FSMenuEntry *fsmenu_get_category(struct FSMenu* fsmenu, FSMenuCategory ca static void fsmenu_set_category(struct FSMenu* fsmenu, FSMenuCategory category, FSMenuEntry *fsms) { - switch(category) { + switch (category) { case FS_CATEGORY_SYSTEM: fsmenu->fsmenu_system = fsms; break; @@ -268,8 +268,7 @@ void fsmenu_read_bookmarks(struct FSMenu* fsmenu, const char *filename) fp = BLI_fopen(filename, "r"); if (!fp) return; - while ( fgets ( line, 256, fp ) != NULL ) /* read a line */ - { + while ( fgets ( line, 256, fp ) != NULL ) { /* read a line */ if (strncmp(line, "[Bookmarks]", 11)==0) { category = FS_CATEGORY_BOOKMARKS; } @@ -329,8 +328,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu) const char *home; /* loop through all the OS X Volumes, and add them to the SYSTEM section */ - for (i=1; err!=nsvErr; i++) - { + for (i = 1; err != nsvErr; i++) { FSRef dir; unsigned char path[FILE_MAX]; @@ -389,8 +387,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu) pathesArray = LSSharedFileListCopySnapshot(list, &seed); pathesCount = CFArrayGetCount(pathesArray); - for (i=0; ispacedata.first; */ /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SPACE: switch (wmn->data) { case ND_SPACE_FILE_LIST: @@ -287,7 +287,7 @@ static void file_main_area_init(wmWindowManager *wm, ARegion *ar) static void file_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SPACE: switch (wmn->data) { case ND_SPACE_FILE_LIST: @@ -476,7 +476,7 @@ static void file_channel_area_draw(const bContext *C, ARegion *ar) static void file_channel_area_listener(ARegion *UNUSED(ar), wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { } } @@ -536,7 +536,7 @@ static void file_ui_area_draw(const bContext *C, ARegion *ar) static void file_ui_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SPACE: switch (wmn->data) { case ND_SPACE_FILE_LIST: diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index 4d2fe2cd568..8bc2eda7e33 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -85,7 +85,7 @@ static void do_graph_region_buttons(bContext *UNUSED(C), void *UNUSED(arg), int { //Scene *scene= CTX_data_scene(C); - switch(event) { + switch (event) { } diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index 37cdbd4963a..6214201a87d 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -374,12 +374,12 @@ static void graph_buttons_area_draw(const bContext *C, ARegion *ar) static void graph_region_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_ANIMATION: ED_region_tag_redraw(ar); break; case NC_SCENE: - switch(wmn->data) { + switch (wmn->data) { case ND_RENDER_OPTIONS: case ND_OB_ACTIVE: case ND_FRAME: @@ -393,7 +393,7 @@ static void graph_region_listener(ARegion *ar, wmNotifier *wmn) } break; case NC_OBJECT: - switch(wmn->data) { + switch (wmn->data) { case ND_BONE_ACTIVE: case ND_BONE_SELECT: case ND_KEYS: @@ -406,7 +406,7 @@ static void graph_region_listener(ARegion *ar, wmNotifier *wmn) } break; case NC_NODE: - switch(wmn->action) { + switch (wmn->action) { case NA_EDITED: case NA_SELECTED: ED_region_tag_redraw(ar); @@ -552,7 +552,7 @@ static void graph_refresh(const bContext *C, ScrArea *sa) */ float *col= fcu->color; - switch(fcu->array_index) { + switch (fcu->array_index) { case 0: col[0]= 1.0f; col[1]= 0.0f; col[2]= 0.0f; break; diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index 08aa69fe499..447028b8bef 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -205,7 +205,9 @@ void ED_image_aspect(Image *ima, float *aspx, float *aspy) if ((ima == NULL) || (ima->type == IMA_TYPE_R_RESULT) || (ima->type == IMA_TYPE_COMPOSITE) || (ima->aspx == 0.0f || ima->aspy == 0.0f)) + { return; + } /* x is always 1 */ *aspy = ima->aspy / ima->aspx; diff --git a/source/blender/editors/space_logic/logic_buttons.c b/source/blender/editors/space_logic/logic_buttons.c index dcead6c01db..16fe48f314a 100644 --- a/source/blender/editors/space_logic/logic_buttons.c +++ b/source/blender/editors/space_logic/logic_buttons.c @@ -119,8 +119,7 @@ static int cut_links_exec(bContext *C, wmOperator *op) uiBlock *block; uiLinkLine *line, *nline; uiBut *but; - for (block= ar->uiblocks.first; block; block= block->next) - { + for (block= ar->uiblocks.first; block; block= block->next) { but= block->buttons.first; while (but) { if (but->type==LINK && but->link) { diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c index f7c69c80067..9f5ae19d92c 100644 --- a/source/blender/editors/space_logic/logic_window.c +++ b/source/blender/editors/space_logic/logic_window.c @@ -371,7 +371,7 @@ static void do_logic_buts(bContext *C, void *UNUSED(arg), int event) ob= CTX_data_active_object(C); if (ob==NULL) return; - switch(event) { + switch (event) { case B_SETPROP: /* check for inconsistent types */ @@ -551,13 +551,10 @@ static void do_logic_buts(bContext *C, void *UNUSED(arg), int event) didit= 0; for (ob=bmain->object.first; ob; ob=ob->id.next) { act= ob->actuators.first; - while (act) - { - if (act->type==ACT_SOUND) - { + while (act) { + if (act->type==ACT_SOUND) { bSoundActuator *sa= act->data; - if (sa->sndnr) - { + if (sa->sndnr) { ID *sound= bmain->sound.first; int nr= 1; @@ -567,8 +564,7 @@ static void do_logic_buts(bContext *C, void *UNUSED(arg), int event) break; } - while (sound) - { + while (sound) { if (nr==sa->sndnr) break; nr++; @@ -727,8 +723,7 @@ static const char *actuator_name(int type) static const char *actuator_pup(Object *owner) { - switch (owner->type) - { + switch (owner->type) { case OB_ARMATURE: return "Actuators %t|Action %x15|Armature %x23|Motion %x0|Constraint %x9|Ipo %x1" "|Camera %x3|Sound %x5|Property %x6|Edit Object %x10" @@ -945,7 +940,7 @@ static int get_col_sensor(int type) { /* XXX themecolors not here */ - switch(type) { + switch (type) { case SENS_ALWAYS: return TH_PANEL; case SENS_DELAY: return TH_PANEL; case SENS_TOUCH: return TH_PANEL; @@ -1161,8 +1156,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short set_col_sensor(sens->type, 0); - switch (sens->type) - { + switch (sens->type) { case SENS_ALWAYS: { ysize= 24; @@ -1347,14 +1341,12 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short uiDefButI(block, MENU, B_REDR, str, xco+30,yco-44,width-60, 19, &ps->type, 0, 31, 0, 0, "Type"); - if (ps->type != SENS_PROP_EXPRESSION) - { + if (ps->type != SENS_PROP_EXPRESSION) { uiDefBut(block, TEX, 1, "Prop: ", xco+30,yco-68,width-60, 19, ps->name, 0, MAX_NAME, 0, 0, "Property name"); } - if (ps->type == SENS_PROP_INTERVAL) - { + if (ps->type == SENS_PROP_INTERVAL) { uiDefBut(block, TEX, 1, "Min: ", xco,yco-92,width/2, 19, ps->value, 0, MAX_NAME, 0, 0, "check for min value"); uiDefBut(block, TEX, 1, "Max: ", xco+width/2,yco-92,width/2, 19, @@ -1401,8 +1393,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short uiDefButI(block, MENU, B_REDR, str, xco+10,yco-66,0.4*(width-20), 19, &arm->type, 0, 31, 0, 0, "Type"); - if (arm->type != SENS_ARM_STATE_CHANGED) - { + if (arm->type != SENS_ARM_STATE_CHANGED) { uiDefButF(block, NUM, 1, "Value: ", xco+10+0.4*(width-20),yco-66,0.6*(width-20), 19, &arm->value, -10000.0, 10000.0, 100, 0, "Test the error against this value"); } @@ -1489,8 +1480,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short draw_default_sensor_header(sens, block, xco, yco, width); randomSensor = sens->data; /* some files were wrongly written, avoid crash now */ - if (randomSensor) - { + if (randomSensor) { uiDefButI(block, NUM, 1, "Seed: ", xco+10,yco-44,(width-20), 19, &randomSensor->seed, 0, 1000, 0, 0, "Initial seed of the generator. (Choose 0 for not random)"); @@ -1610,8 +1600,7 @@ static short draw_sensorbuttons(Object *ob, bSensor *sens, uiBlock *block, short &joy->flag, 0, 0, 0, 0, "Triggered by all events on this joysticks current type (axis/button/hat)"); } - if (joy->type == SENS_JOY_BUTTON) - { + if (joy->type == SENS_JOY_BUTTON) { if ((joy->flag & SENS_JOY_ANY_EVENT)==0) { uiDefButI(block, NUM, 1, "Number:", xco+10 + 0.6 * (width-20), yco-68, 0.4 * (width-20), 19, &joy->button, 0, 18, 100, 0, @@ -1727,7 +1716,7 @@ static short draw_controllerbuttons(bController *cont, uiBlock *block, short xco static int get_col_actuator(int type) { - switch(type) { + switch (type) { case ACT_ACTION: return TH_PANEL; case ACT_SHAPEACTION: return TH_PANEL; case ACT_OBJECT: return TH_PANEL; @@ -1869,14 +1858,12 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo /* yco is at the top of the rect, draw downwards */ set_col_actuator(act->type, 0); - switch (act->type) - { + switch (act->type) { case ACT_OBJECT: { oa = act->data; wval = (width-100)/3; - if (oa->type == ACT_OBJECT_NORMAL) - { + if (oa->type == ACT_OBJECT_NORMAL) { if (ob->gameflag & OB_DYNAMIC) { ysize= 175; } @@ -1904,8 +1891,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiDefButBitS(block, TOG, ACT_DLOC_LOCAL, 0, "L", xco+45+3*wval, yco-45, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation"); uiDefButBitS(block, TOG, ACT_DROT_LOCAL, 0, "L", xco+45+3*wval, yco-64, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation"); - if ( ob->gameflag & OB_DYNAMIC ) - { + if (ob->gameflag & OB_DYNAMIC) { uiDefBut(block, LABEL, 0, "Force", xco, yco-87, 55, 19, NULL, 0, 0, 0, 0, "Sets the force"); uiBlockBeginAlign(block); uiDefButF(block, NUM, 0, "", xco+45, yco-87, wval, 19, oa->forceloc, -10000.0, 10000.0, 10, 0, ""); @@ -1921,8 +1907,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiBlockEndAlign(block); } - if ( ob->gameflag & OB_DYNAMIC ) - { + if (ob->gameflag & OB_DYNAMIC) { uiDefBut(block, LABEL, 0, "LinV", xco, yco-129, 45, 19, NULL, 0, 0, 0, 0, "Sets the linear velocity"); uiBlockBeginAlign(block); uiDefButF(block, NUM, 0, "", xco+45, yco-129, wval, 19, oa->linearvelocity, -10000.0, 10000.0, 10, 0, ""); @@ -1948,8 +1933,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo uiDefButBitS(block, TOG, ACT_ADD_LIN_VEL, 0, "use_additive",xco+45+3*wval+15, yco-129, 35, 19, &oa->flag, 0.0, 0.0, 0, 0, "Toggles between ADD and SET linV"); } } - else if (oa->type == ACT_OBJECT_SERVO) - { + else if (oa->type == ACT_OBJECT_SERVO) { ysize= 195; glRects(xco, yco-ysize, xco+width, yco); @@ -2824,8 +2808,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo glRects( xco, yco-ysize, xco+width, yco ); uiEmboss( (float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1 ); - switch(tdfa->type) - { + switch (tdfa->type) { case ACT_2DFILTER_MOTIONBLUR: if (!tdfa->flag) { uiDefButS(block, TOG, B_REDR, "D", xco+30,yco-44,19, 19, &tdfa->flag, 0.0, 0.0, 0.0, 0.0, "Disable Motion Blur"); @@ -3759,8 +3742,7 @@ static void draw_actuator_armature(uiLayout *layout, PointerRNA *ptr) uiItemR(layout, ptr, "mode", 0, NULL, ICON_NONE); - switch (RNA_enum_get(ptr, "mode")) - { + switch (RNA_enum_get(ptr, "mode")) { case ACT_ARM_RUN: break; case ACT_ARM_ENABLE: @@ -3835,8 +3817,7 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext RNA_main_pointer_create(CTX_data_main(C), &main_ptr); uiItemR(layout, ptr, "mode", 0, NULL, ICON_NONE); - switch (RNA_enum_get(ptr, "mode")) - { + switch (RNA_enum_get(ptr, "mode")) { case ACT_CONST_TYPE_LOC: uiItemR(layout, ptr, "limit", 0, NULL, ICON_NONE); @@ -3934,8 +3915,7 @@ static void draw_actuator_edit_object(uiLayout *layout, PointerRNA *ptr) uiLayout *row, *split, *sub; uiItemR(layout, ptr, "mode", 0, NULL, ICON_NONE); - switch (RNA_enum_get(ptr, "mode")) - { + switch (RNA_enum_get(ptr, "mode")) { case ACT_EDOB_ADD_OBJECT: row = uiLayoutRow(layout, 0); uiItemR(row, ptr, "object", 0, NULL, ICON_NONE); @@ -3988,8 +3968,7 @@ static void draw_actuator_filter_2d(uiLayout *layout, PointerRNA *ptr) uiLayout *row, *split; uiItemR(layout, ptr, "mode", 0, NULL, ICON_NONE); - switch (RNA_enum_get(ptr, "mode")) - { + switch (RNA_enum_get(ptr, "mode")) { case ACT_2DFILTER_CUSTOMFILTER: uiItemR(layout, ptr, "filter_pass", 0, NULL, ICON_NONE); uiItemR(layout, ptr, "glsl_shader", 0, NULL, ICON_NONE); @@ -4163,8 +4142,7 @@ static void draw_actuator_property(uiLayout *layout, PointerRNA *ptr) uiItemR(layout, ptr, "mode", 0, NULL, ICON_NONE); uiItemPointerR(layout, ptr, "property", &settings_ptr, "properties", NULL, ICON_NONE); - switch(RNA_enum_get(ptr, "mode")) - { + switch (RNA_enum_get(ptr, "mode")) { case ACT_PROP_TOGGLE: break; case ACT_PROP_ADD: diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c index 82175f83d39..93105c39f39 100644 --- a/source/blender/editors/space_logic/space_logic.c +++ b/source/blender/editors/space_logic/space_logic.c @@ -195,12 +195,12 @@ static void logic_refresh(const bContext *UNUSED(C), ScrArea *UNUSED(sa)) static void logic_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_LOGIC: ED_region_tag_redraw(ar); break; case NC_SCENE: - switch(wmn->data) { + switch (wmn->data) { case ND_FRAME: ED_region_tag_redraw(ar); break; diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index de42e4a783d..a133d370d99 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -76,7 +76,7 @@ static void do_nla_region_buttons(bContext *C, void *UNUSED(arg), int event) { //Scene *scene= CTX_data_scene(C); - switch(event) { + switch (event) { } diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index 4dc3aef7d2c..27c48d2232f 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -348,12 +348,12 @@ static void nla_buttons_area_draw(const bContext *C, ARegion *ar) static void nla_region_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_ANIMATION: ED_region_tag_redraw(ar); break; case NC_SCENE: - switch(wmn->data) { + switch (wmn->data) { case ND_OB_ACTIVE: case ND_FRAME: case ND_MARKERS: @@ -362,7 +362,7 @@ static void nla_region_listener(ARegion *ar, wmNotifier *wmn) } break; case NC_OBJECT: - switch(wmn->data) { + switch (wmn->data) { case ND_BONE_ACTIVE: case ND_BONE_SELECT: case ND_KEYS: @@ -381,12 +381,12 @@ static void nla_region_listener(ARegion *ar, wmNotifier *wmn) static void nla_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_ANIMATION: ED_region_tag_redraw(ar); break; case NC_SCENE: - switch(wmn->data) { + switch (wmn->data) { case ND_RENDER_OPTIONS: case ND_OB_ACTIVE: case ND_FRAME: @@ -396,7 +396,7 @@ static void nla_main_area_listener(ARegion *ar, wmNotifier *wmn) } break; case NC_OBJECT: - switch(wmn->data) { + switch (wmn->data) { case ND_BONE_ACTIVE: case ND_BONE_SELECT: case ND_KEYS: @@ -406,7 +406,7 @@ static void nla_main_area_listener(ARegion *ar, wmNotifier *wmn) } break; case NC_NODE: - switch(wmn->action) { + switch (wmn->action) { case NA_EDITED: ED_region_tag_redraw(ar); break; @@ -425,19 +425,19 @@ static void nla_main_area_listener(ARegion *ar, wmNotifier *wmn) static void nla_channel_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_ANIMATION: ED_region_tag_redraw(ar); break; case NC_SCENE: - switch(wmn->data) { + switch (wmn->data) { case ND_OB_ACTIVE: ED_region_tag_redraw(ar); break; } break; case NC_OBJECT: - switch(wmn->data) { + switch (wmn->data) { case ND_BONE_ACTIVE: case ND_BONE_SELECT: case ND_KEYS: diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 42aea32b7f6..e00abff30f2 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -963,7 +963,7 @@ static void node_update_frame(const bContext *UNUSED(C), bNodeTree *UNUSED(ntree static void node_common_set_butfunc(bNodeType *ntype) { - switch(ntype->type) { + switch (ntype->type) { case NODE_GROUP: ntype->uifunc= node_uifunc_group; ntype->drawfunc= node_draw_group; @@ -1176,7 +1176,7 @@ static void node_shader_buts_dynamic(uiLayout *layout, bContext *C, PointerRNA * static void node_shader_set_butfunc(bNodeType *ntype) { ntype->uifuncbut = NULL; - switch(ntype->type) { + switch (ntype->type) { /* case NODE_GROUP: note, typeinfo for group is generated... see "XXX ugly hack" */ case SH_NODE_MATERIAL: @@ -1941,7 +1941,7 @@ static void node_composit_buts_moviedistortion(uiLayout *layout, bContext *C, Po static void node_composit_set_butfunc(bNodeType *ntype) { ntype->uifuncbut = NULL; - switch(ntype->type) { + switch (ntype->type) { /* case NODE_GROUP: note, typeinfo for group is generated... see "XXX ugly hack" */ case CMP_NODE_IMAGE: @@ -2137,7 +2137,7 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), Pointe col= uiLayoutColumn(layout, 0); - switch( tex->type ) { + switch ( tex->type ) { case TEX_BLEND: uiItemR(col, &tex_ptr, "progression", 0, "", ICON_NONE); row= uiLayoutRow(col, 0); @@ -2222,45 +2222,50 @@ static void node_texture_set_butfunc(bNodeType *ntype) if ( ntype->type >= TEX_NODE_PROC && ntype->type < TEX_NODE_PROC_MAX ) { ntype->uifunc = node_texture_buts_proc; } - else switch(ntype->type) { - + else { + switch (ntype->type) { + case TEX_NODE_MATH: ntype->uifunc = node_buts_math; break; - + case TEX_NODE_MIX_RGB: ntype->uifunc = node_buts_mix_rgb; break; - + case TEX_NODE_VALTORGB: ntype->uifunc = node_buts_colorramp; break; - + case TEX_NODE_CURVE_RGB: ntype->uifunc= node_buts_curvecol; break; - + case TEX_NODE_CURVE_TIME: ntype->uifunc = node_buts_time; break; - + case TEX_NODE_TEXTURE: ntype->uifunc = node_buts_texture; break; - + case TEX_NODE_BRICKS: ntype->uifunc = node_texture_buts_bricks; break; - + case TEX_NODE_IMAGE: ntype->uifunc = node_texture_buts_image; break; - + case TEX_NODE_OUTPUT: ntype->uifunc = node_texture_buts_output; break; + } + } + + if (ntype->uifuncbut == NULL) { + ntype->uifuncbut = ntype->uifunc; } - if (ntype->uifuncbut == NULL) ntype->uifuncbut = ntype->uifunc; } /* ******* init draw callbacks for all tree types, only called in usiblender.c, once ************* */ @@ -2305,7 +2310,7 @@ void ED_init_node_butfuncs(void) for (i=0; i < NUM_SOCKET_TYPES; ++i) { stype = ntreeGetSocketType(i); if (stype) { - switch(stype->type) { + switch (stype->type) { case SOCK_FLOAT: case SOCK_INT: case SOCK_BOOLEAN: diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index dda06267237..247dd0c1fa7 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -284,7 +284,7 @@ void ED_node_shader_default(Scene *scene, ID *id) ntree= ntreeAddTree("Shader Nodetree", NTREE_SHADER, 0); - switch(GS(id->name)) { + switch (GS(id->name)) { case ID_MA: { Material *ma= (Material*)id; ma->nodetree = ntree; @@ -1458,7 +1458,7 @@ static int sample_invoke(bContext *C, wmOperator *op, wmEvent *event) static int sample_modal(bContext *C, wmOperator *op, wmEvent *event) { - switch(event->type) { + switch (event->type) { case LEFTMOUSE: case RIGHTMOUSE: // XXX hardcoded sample_exit(C, op); diff --git a/source/blender/editors/space_node/node_templates.c b/source/blender/editors/space_node/node_templates.c index 049886b1d66..13e85c7f74d 100644 --- a/source/blender/editors/space_node/node_templates.c +++ b/source/blender/editors/space_node/node_templates.c @@ -220,8 +220,10 @@ static void node_socket_add_replace(Main *bmain, bNodeTree *ntree, bNode *node_t /* also preserve mapping for texture nodes */ if (node_from->typeinfo->nclass == NODE_CLASS_TEXTURE && - node_prev->typeinfo->nclass == NODE_CLASS_TEXTURE) + node_prev->typeinfo->nclass == NODE_CLASS_TEXTURE) + { memcpy(node_from->storage, node_prev->storage, sizeof(NodeTexBase)); + } /* remove node */ node_remove_linked(ntree, node_prev); @@ -295,11 +297,14 @@ static void ui_node_sock_name(bNodeSocket *sock, char name[UI_MAX_NAME_STR]) BLI_strncpy(node_name, node->typeinfo->name, UI_MAX_NAME_STR); if (node->inputs.first == NULL && - node->outputs.first != node->outputs.last && - !(node->typeinfo->flag & NODE_OPTIONS)) + node->outputs.first != node->outputs.last && + !(node->typeinfo->flag & NODE_OPTIONS)) + { BLI_snprintf(name, UI_MAX_NAME_STR, "%s | %s", node_name, sock->link->fromsock->name); - else + } + else { BLI_strncpy(name, node_name, UI_MAX_NAME_STR); + } } else if (sock->type == SOCK_SHADER) BLI_strncpy(name, "None", UI_MAX_NAME_STR); diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index fca9927b0f5..3540c20e515 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -172,7 +172,7 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn) short shader_type = snode->shaderfrom; /* preview renders */ - switch(wmn->category) { + switch (wmn->category) { case NC_SCENE: switch (wmn->data) { case ND_NODES: @@ -244,7 +244,7 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn) ED_area_tag_redraw(sa); break; case NC_SCREEN: - switch(wmn->data) { + switch (wmn->data) { case ND_ANIMPLAY: ED_area_tag_refresh(sa); break; @@ -429,7 +429,7 @@ static void node_header_area_draw(const bContext *C, ARegion *ar) static void node_region_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SPACE: if (wmn->data==ND_SPACE_NODE) ED_region_tag_redraw(ar); diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c index 779475943dd..7b2bbf3e285 100644 --- a/source/blender/editors/space_outliner/outliner_draw.c +++ b/source/blender/editors/space_outliner/outliner_draw.c @@ -278,7 +278,7 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) if (tselem->type==0) { test_idbutton(tselem->id->name+2); // library.c, unique name and alpha sort - switch(GS(tselem->id->name)) { + switch (GS(tselem->id->name)) { case ID_MA: WM_event_add_notifier(C, NC_MATERIAL, NULL); break; case ID_TE: @@ -305,7 +305,7 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) } } else { - switch(tselem->type) { + switch (tselem->type) { case TSE_DEFGROUP: defgroup_unique_name(te->directdata, (Object *)tselem->id); // id = object break; @@ -719,7 +719,7 @@ static void keymap_type_cb(bContext *C, void *kmi_v, void *UNUSED(arg_v)) short maptype= keymap_menu_type(kmi->type); if (maptype!=kmi->maptype) { - switch(kmi->maptype) { + switch (kmi->maptype) { case OL_KM_KEYBOARD: kmi->type= AKEY; kmi->val= KM_PRESS; @@ -776,7 +776,7 @@ static void outliner_draw_keymapbuts(uiBlock *block, ARegion *ar, SpaceOops *soo xstart+= butw2+5; /* edit actual event */ - switch(kmi->maptype) { + switch (kmi->maptype) { case OL_KM_KEYBOARD: uiDefKeyevtButS(block, 0, "", xstart, (int)te->ys+1, butw2, UI_UNIT_Y-1, &kmi->type, "Key code"); xstart+= butw2+5; @@ -904,7 +904,7 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto arg.alpha= alpha; if (tselem->type) { - switch( tselem->type) { + switch ( tselem->type) { case TSE_ANIM_DATA: UI_icon_draw(x, y, ICON_ANIM_DATA); break; // xxx case TSE_NLA: @@ -932,7 +932,7 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto { Object *ob= (Object *)tselem->id; ModifierData *md= BLI_findlink(&ob->modifiers, tselem->nr); - switch(md->type) { + switch (md->type) { case eModifierType_Subsurf: UI_icon_draw(x, y, ICON_MOD_SUBSURF); break; case eModifierType_Armature: @@ -1093,7 +1093,7 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto } } else { - switch( GS(tselem->id->name)) { + switch ( GS(tselem->id->name)) { case ID_SCE: tselem_draw_icon_uibut(&arg, ICON_SCENE_DATA); break; case ID_ME: @@ -1108,7 +1108,7 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto { Lamp *la= (Lamp *)tselem->id; - switch(la->type) { + switch (la->type) { case LA_LOCAL: tselem_draw_icon_uibut(&arg, ICON_LAMP_POINT); break; case LA_SUN: diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c index c06576e48a6..5515ec45269 100644 --- a/source/blender/editors/space_outliner/outliner_select.c +++ b/source/blender/editors/space_outliner/outliner_select.c @@ -629,7 +629,7 @@ static int tree_element_active_keymap_item(bContext *UNUSED(C), TreeElement *te, int tree_element_active(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, int set) { - switch(te->idcode) { + switch (te->idcode) { /* Note: no ID_OB: objects are handled specially to allow multiple * selection. See do_outliner_item_activate. */ case ID_MA: @@ -652,7 +652,7 @@ int tree_element_active(bContext *C, Scene *scene, SpaceOops *soops, TreeElement /* Context can be NULL when set==0 */ int tree_element_type_active(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, TreeStoreElem *tselem, int set) { - switch(tselem->type) { + switch (tselem->type) { case TSE_DEFGROUP: return tree_element_active_defgroup(C, scene, te, tselem, set); case TSE_BONE: diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c index 5c527face83..13e86209f3a 100644 --- a/source/blender/editors/space_outliner/outliner_tools.c +++ b/source/blender/editors/space_outliner/outliner_tools.c @@ -96,7 +96,7 @@ static void set_operation_types(SpaceOops *soops, ListBase *lb, } else { int idcode= GS(tselem->id->name); - switch(idcode) { + switch (idcode) { case ID_SCE: *scenelevel= 1; break; diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index ed050b7f93d..c2a3affa1b6 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -182,9 +182,9 @@ static void outliner_main_area_free(ARegion *UNUSED(ar)) static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SCENE: - switch(wmn->data) { + switch (wmn->data) { case ND_OB_ACTIVE: case ND_OB_SELECT: case ND_OB_VISIBLE: @@ -200,7 +200,7 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn) } break; case NC_OBJECT: - switch(wmn->data) { + switch (wmn->data) { case ND_TRANSFORM: /* transform doesn't change outliner data */ break; @@ -212,7 +212,7 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn) ED_region_tag_redraw(ar); break; case ND_CONSTRAINT: - switch(wmn->action) { + switch (wmn->action) { case NA_ADDED: case NA_REMOVED: case NA_RENAME: @@ -244,7 +244,7 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn) ED_region_tag_redraw(ar); break; case NC_MATERIAL: - switch(wmn->data) { + switch (wmn->data) { case ND_SHADING: case ND_SHADING_DRAW: ED_region_tag_redraw(ar); @@ -255,7 +255,7 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn) ED_region_tag_redraw(ar); break; case NC_GEOM: - switch(wmn->data) { + switch (wmn->data) { case ND_DATA: /* needed for vertex groups only, no special notifier atm so use NC_GEOM|ND_DATA */ ED_region_tag_redraw(ar); @@ -263,7 +263,7 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn) } break; case NC_ANIMATION: - switch(wmn->data) { + switch (wmn->data) { case ND_NLA_ACTCHANGE: case ND_KEYFRAME: ED_region_tag_redraw(ar); @@ -299,7 +299,7 @@ static void outliner_header_area_free(ARegion *UNUSED(ar)) static void outliner_header_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SCENE: if (wmn->data == ND_KEYINGSET) ED_region_tag_redraw(ar); diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index cd0c8779c39..5431156de45 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -206,14 +206,12 @@ static void drawseqwave(Scene *scene, Sequence *seq, float x1, float y1, float x length = floor((waveform->length - startsample) / samplestep); glBegin(GL_LINE_STRIP); - for (i = 0; i < length; i++) - { + for (i = 0; i < length; i++) { pos = startsample + i * samplestep; value = waveform->data[pos * 3]; - for (j = pos + 1; (j < waveform->length) && (j < pos + samplestep); j++) - { + for (j = pos + 1; (j < waveform->length) && (j < pos + samplestep); j++) { if (value > waveform->data[j * 3]) value = waveform->data[j * 3]; } @@ -223,14 +221,12 @@ static void drawseqwave(Scene *scene, Sequence *seq, float x1, float y1, float x glEnd(); glBegin(GL_LINE_STRIP); - for (i = 0; i < length; i++) - { + for (i = 0; i < length; i++) { pos = startsample + i * samplestep; value = waveform->data[pos * 3 + 1]; - for (j = pos + 1; (j < waveform->length) && (j < pos + samplestep); j++) - { + for (j = pos + 1; (j < waveform->length) && (j < pos + samplestep); j++) { if (value < waveform->data[j * 3 + 1]) value = waveform->data[j * 3 + 1]; } diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c index 84f960ecf2a..ffb686b6810 100644 --- a/source/blender/editors/space_text/text_draw.c +++ b/source/blender/editors/space_text/text_draw.c @@ -130,8 +130,7 @@ static void flatten_string_append(FlattenString *fs, const char *c, int accum, i fs->accum = naccum; } - for (i = 0; i < len; i++) - { + for (i = 0; i < len; i++) { fs->buf[fs->pos + i] = c[i]; fs->accum[fs->pos + i] = accum; } diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index 5e56dfa728e..fbb3f3c609f 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -111,7 +111,7 @@ static void time_draw_cache(SpaceTime *stime, Object *ob) int i, sta = pid->cache->startframe, end = pid->cache->endframe; int len = (end - sta + 1)*4; - switch(pid->type) { + switch (pid->type) { case PTCACHE_TYPE_SOFTBODY: if (!(stime->cache_display & TIME_CACHE_SOFTBODY)) continue; break; @@ -171,7 +171,7 @@ static void time_draw_cache(SpaceTime *stime, Object *ob) glTranslatef(0.0, (float)V2D_SCROLL_HEIGHT+yoffs, 0.0); glScalef(1.0, CACHE_DRAW_HEIGHT, 0.0); - switch(pid->type) { + switch (pid->type) { case PTCACHE_TYPE_SOFTBODY: col[0] = 1.0; col[1] = 0.4; col[2] = 0.02; col[3] = 0.1; @@ -509,7 +509,7 @@ static void time_main_area_draw(const bContext *C, ARegion *ar) static void time_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SPACE: if (wmn->data == ND_SPACE_TIME) ED_region_tag_redraw(ar); @@ -549,7 +549,7 @@ static void time_header_area_draw(const bContext *C, ARegion *ar) static void time_header_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ - switch(wmn->category) { + switch (wmn->category) { case NC_SCREEN: if (wmn->data==ND_ANIMPLAY) ED_region_tag_redraw(ar); diff --git a/source/blender/editors/space_userpref/space_userpref.c b/source/blender/editors/space_userpref/space_userpref.c index e9bf9345b5c..6c683eba085 100644 --- a/source/blender/editors/space_userpref/space_userpref.c +++ b/source/blender/editors/space_userpref/space_userpref.c @@ -145,7 +145,7 @@ static void userpref_header_listener(ARegion *UNUSED(ar), wmNotifier *UNUSED(wmn { /* context changes */ #if 0 - switch(wmn->category) { + switch (wmn->category) { default: break; } diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 6f637afd293..2f66fdf8cd4 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -700,11 +700,12 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) fac = fac * fac; interp_v3_v3v3(xaxis, xaxis, m_inv[0], fac); } - else -#endif - { + else { copy_v3_v3(xaxis, m_inv[0]); } +#else + copy_v3_v3(xaxis, m_inv[0]); +#endif /* Determine the direction of the x vector (for rotating up and down) */ /* This can likely be computed directly from the quaternion. */ @@ -1554,7 +1555,9 @@ static void viewzoom_apply(ViewOpsData *vod, int x, int y, const short viewzoom, if (!use_cam_zoom) { if (zfac != 1.0f && zfac * vod->rv3d->dist > 0.001f * vod->grid && zfac * vod->rv3d->dist < 10.0f * vod->far) + { view_zoom_mouseloc(vod->ar, zfac, vod->oldx, vod->oldy); + } } /* these limits were in old code too */ diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index f3819a1b83c..233719033c7 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -298,8 +298,7 @@ void removeAspectRatio(TransInfo *t, float *vec) static void viewRedrawForce(const bContext *C, TransInfo *t) { - if (t->spacetype == SPACE_VIEW3D) - { + if (t->spacetype == SPACE_VIEW3D) { /* Do we need more refined tags? */ if (t->flag & T_POSE) WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL); @@ -415,7 +414,7 @@ static void view_editmove(unsigned short UNUSED(event)) if (Trans.flag & T_2D_EDIT) return; - switch(event) { + switch (event) { case WHEELUPMOUSE: if ( G.qual & LR_SHIFTKEY ) { @@ -586,8 +585,7 @@ int transformEvent(TransInfo *t, wmEvent *event) t->redraw |= handleMouseInput(t, &t->mouse, event); - if (event->type == MOUSEMOVE) - { + if (event->type == MOUSEMOVE) { if (t->modifiers & MOD_CONSTRAINT_SELECT) t->con.mode |= CON_SELECT; @@ -802,7 +800,7 @@ int transformEvent(TransInfo *t, wmEvent *event) t->redraw |= handleNumInput(&(t->num), event); } /* else do non-mapped events */ - else if (event->val==KM_PRESS) { + else if (event->val == KM_PRESS) { switch (event->type) { case RIGHTMOUSE: t->state = TRANS_CANCEL; @@ -1088,11 +1086,9 @@ int transformEvent(TransInfo *t, wmEvent *event) } /* confirm transform if launch key is released after mouse move */ - if (t->flag & T_RELEASE_CONFIRM) - { + if (t->flag & T_RELEASE_CONFIRM) { /* XXX Keyrepeat bug in Xorg fucks this up, will test when fixed */ - if (event->type == t->launch_event && (t->launch_event == LEFTMOUSE || t->launch_event == RIGHTMOUSE)) - { + if (event->type == t->launch_event && (t->launch_event == LEFTMOUSE || t->launch_event == RIGHTMOUSE)) { t->state = TRANS_CONFIRM; } } @@ -1156,8 +1152,7 @@ typedef enum { } ArrowDirection; static void drawArrow(ArrowDirection d, short offset, short length, short size) { - switch(d) - { + switch (d) { case LEFT: offset = -offset; length = -length; @@ -1191,8 +1186,7 @@ static void drawArrow(ArrowDirection d, short offset, short length, short size) static void drawArrowHead(ArrowDirection d, short size) { - switch(d) - { + switch (d) { case LEFT: size = -size; case RIGHT: @@ -1223,8 +1217,7 @@ static void drawArc(float size, float angle_start, float angle_end, int segments glBegin(GL_LINE_STRIP); - for ( angle = angle_start; angle < angle_end; angle += delta) - { + for ( angle = angle_start; angle < angle_end; angle += delta) { glVertex2f( cosf(angle) * size, sinf(angle) * size); } glVertex2f( cosf(angle_end) * size, sinf(angle_end) * size); @@ -1245,8 +1238,7 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata) { TransInfo *t = (TransInfo*)customdata; - if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) - { + if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) { float vecrot[3], cent[2]; int mval[2]; @@ -1267,8 +1259,7 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata) glPushMatrix(); - switch(t->helpline) - { + switch (t->helpline) { case HLP_SPRING: UI_ThemeColor(TH_WIRE); @@ -1417,23 +1408,23 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) } /* convert flag to enum */ - switch(t->flag & (T_PROP_EDIT|T_PROP_CONNECTED)) - { - case (T_PROP_EDIT|T_PROP_CONNECTED): - proportional = PROP_EDIT_CONNECTED; - break; - case T_PROP_EDIT: - proportional = PROP_EDIT_ON; - break; - default: - proportional = PROP_EDIT_OFF; + switch (t->flag & (T_PROP_EDIT|T_PROP_CONNECTED)) { + case (T_PROP_EDIT|T_PROP_CONNECTED): + proportional = PROP_EDIT_CONNECTED; + break; + case T_PROP_EDIT: + proportional = PROP_EDIT_ON; + break; + default: + proportional = PROP_EDIT_OFF; } // If modal, save settings back in scene if not set as operator argument if (t->flag & T_MODAL) { /* save settings if not set in operator */ - if ( (prop = RNA_struct_find_property(op->ptr, "proportional")) && !RNA_property_is_set(op->ptr, prop)) + if ((prop = RNA_struct_find_property(op->ptr, "proportional")) && + !RNA_property_is_set(op->ptr, prop)) { if (t->obedit) ts->proportional = proportional; @@ -1441,12 +1432,14 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) ts->proportional_objects = (proportional != PROP_EDIT_OFF); } - if ( (prop = RNA_struct_find_property(op->ptr, "proportional_size")) && !RNA_property_is_set(op->ptr, prop)) + if ((prop = RNA_struct_find_property(op->ptr, "proportional_size")) && + !RNA_property_is_set(op->ptr, prop)) { ts->proportional_size = t->prop_size; } - if ( (prop = RNA_struct_find_property(op->ptr, "proportional_edit_falloff")) && !RNA_property_is_set(op->ptr, prop)) + if ((prop = RNA_struct_find_property(op->ptr, "proportional_edit_falloff")) && + !RNA_property_is_set(op->ptr, prop)) { ts->prop_mode = t->prop_mode; } @@ -1460,34 +1453,31 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) } if (t->spacetype == SPACE_VIEW3D) { - if ( (prop = RNA_struct_find_property(op->ptr, "constraint_orientation")) && !RNA_property_is_set(op->ptr, prop)) + if ((prop = RNA_struct_find_property(op->ptr, "constraint_orientation")) && + !RNA_property_is_set(op->ptr, prop)) { View3D *v3d = t->view; - + v3d->twmode = t->current_orientation; } } } - if (RNA_struct_find_property(op->ptr, "proportional")) - { + if (RNA_struct_find_property(op->ptr, "proportional")) { RNA_enum_set(op->ptr, "proportional", proportional); RNA_enum_set(op->ptr, "proportional_edit_falloff", t->prop_mode); RNA_float_set(op->ptr, "proportional_size", t->prop_size); } - if ((prop = RNA_struct_find_property(op->ptr, "axis"))) - { + if ((prop = RNA_struct_find_property(op->ptr, "axis"))) { RNA_property_float_set_array(op->ptr, prop, t->axis); } - if ((prop = RNA_struct_find_property(op->ptr, "mirror"))) - { + if ((prop = RNA_struct_find_property(op->ptr, "mirror"))) { RNA_property_boolean_set(op->ptr, prop, t->flag & T_MIRROR); } - if ((prop = RNA_struct_find_property(op->ptr, "constraint_axis"))) - { + if ((prop = RNA_struct_find_property(op->ptr, "constraint_axis"))) { /* constraint orientation can be global, event if user selects something else * so use the orientation in the constraint if set * */ @@ -1498,8 +1488,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) RNA_enum_set(op->ptr, "constraint_orientation", t->current_orientation); } - if (t->con.mode & CON_APPLY) - { + if (t->con.mode & CON_APPLY) { if (t->con.mode & CON_AXIS0) { constraint_axis[0] = 1; } @@ -1527,8 +1516,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int t->state = TRANS_STARTING; - if ( (prop = RNA_struct_find_property(op->ptr, "texture_space")) && RNA_property_is_set(op->ptr, prop)) - { + if ( (prop = RNA_struct_find_property(op->ptr, "texture_space")) && RNA_property_is_set(op->ptr, prop)) { if (RNA_property_boolean_get(op->ptr, prop)) { options |= CTX_TEXTURE; } @@ -1540,8 +1528,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int t->launch_event = event ? event->type : -1; - if (t->launch_event == EVT_TWEAK_R) - { + if (t->launch_event == EVT_TWEAK_R) { t->launch_event = RIGHTMOUSE; } else if (t->launch_event == EVT_TWEAK_L) { @@ -1550,18 +1537,15 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int // XXX Remove this when wm_operator_call_internal doesn't use window->eventstate (which can have type = 0) // For manipulator only, so assume LEFTMOUSE - if (t->launch_event == 0) - { + if (t->launch_event == 0) { t->launch_event = LEFTMOUSE; } - if (!initTransInfo(C, t, op, event)) // internal data, mouse, vectors - { + if (!initTransInfo(C, t, op, event)) { /* internal data, mouse, vectors */ return 0; } - if (t->spacetype == SPACE_VIEW3D) - { + if (t->spacetype == SPACE_VIEW3D) { //calc_manipulator_stats(curarea); initTransformOrientation(C, t); @@ -1592,15 +1576,12 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int } /* Stupid code to have Ctrl-Click on manipulator work ok */ - if (event) - { + if (event) { wmKeyMap *keymap = WM_keymap_active(CTX_wm_manager(C), op->type->modalkeymap); wmKeyMapItem *kmi; - for (kmi = keymap->items.first; kmi; kmi = kmi->next) - { - if (kmi->propvalue == TFM_MODAL_SNAP_INV_ON && kmi->val == KM_PRESS) - { + for (kmi = keymap->items.first; kmi; kmi = kmi->next) { + if (kmi->propvalue == TFM_MODAL_SNAP_INV_ON && kmi->val == KM_PRESS) { if ((ELEM(kmi->type, LEFTCTRLKEY, RIGHTCTRLKEY) && event->ctrl) || (ELEM(kmi->type, LEFTSHIFTKEY, RIGHTSHIFTKEY) && event->shift) || (ELEM(kmi->type, LEFTALTKEY, RIGHTALTKEY) && event->alt) || @@ -1731,16 +1712,14 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int break; } - if (t->state == TRANS_CANCEL) - { + if (t->state == TRANS_CANCEL) { postTrans(C, t); return 0; } /* overwrite initial values if operator supplied a non-null vector */ - if ( (prop = RNA_struct_find_property(op->ptr, "value")) && RNA_property_is_set(op->ptr, prop)) - { + if ((prop = RNA_struct_find_property(op->ptr, "value")) && RNA_property_is_set(op->ptr, prop)) { float values[4]= {0}; /* in case value isn't length 4, avoid uninitialized memory */ if (RNA_property_array_check(prop)) { @@ -1756,22 +1735,19 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int } /* Transformation axis from operator */ - if ((prop = RNA_struct_find_property(op->ptr, "axis")) && RNA_property_is_set(op->ptr, prop)) - { + if ((prop = RNA_struct_find_property(op->ptr, "axis")) && RNA_property_is_set(op->ptr, prop)) { RNA_property_float_get_array(op->ptr, prop, t->axis); normalize_v3(t->axis); copy_v3_v3(t->axis_orig, t->axis); } /* Constraint init from operator */ - if ((prop = RNA_struct_find_property(op->ptr, "constraint_axis")) && RNA_property_is_set(op->ptr, prop)) - { + if ((prop = RNA_struct_find_property(op->ptr, "constraint_axis")) && RNA_property_is_set(op->ptr, prop)) { int constraint_axis[3]; RNA_property_boolean_get_array(op->ptr, prop, constraint_axis); - if (constraint_axis[0] || constraint_axis[1] || constraint_axis[2]) - { + if (constraint_axis[0] || constraint_axis[1] || constraint_axis[2]) { t->con.mode |= CON_APPLY; if (constraint_axis[0]) { @@ -1797,8 +1773,7 @@ void transformApply(bContext *C, TransInfo *t) { t->context = C; - if ((t->redraw & TREDRAW_HARD) || (t->draw_handle_apply == NULL && (t->redraw & TREDRAW_SOFT))) - { + if ((t->redraw & TREDRAW_HARD) || (t->draw_handle_apply == NULL && (t->redraw & TREDRAW_SOFT))) { selectConstraint(t); if (t->transform) { t->transform(t, t->mval); // calls recalcData() @@ -1811,13 +1786,11 @@ void transformApply(bContext *C, TransInfo *t) } /* If auto confirm is on, break after one pass */ - if (t->options & CTX_AUTOCONFIRM) - { + if (t->options & CTX_AUTOCONFIRM) { t->state = TRANS_CONFIRM; } - if (BKE_ptcache_get_continue_physics()) - { + if (BKE_ptcache_get_continue_physics()) { // TRANSFORM_FIX_ME //do_screenhandlers(G.curscreen); t->redraw |= TREDRAW_HARD; @@ -1842,11 +1815,9 @@ int transformEnd(bContext *C, TransInfo *t) t->context = C; - if (t->state != TRANS_STARTING && t->state != TRANS_RUNNING) - { + if (t->state != TRANS_STARTING && t->state != TRANS_RUNNING) { /* handle restoring objects */ - if (t->state == TRANS_CANCEL) - { + if (t->state == TRANS_CANCEL) { /* exception, edge slide transformed UVs too */ if (t->mode==TFM_EDGE_SLIDE) doEdgeSlide(t, 0.0f); @@ -2097,8 +2068,7 @@ static void constraintob_from_transdata(bConstraintOb *cob, TransData *td) * - current space should be local */ memset(cob, 0, sizeof(bConstraintOb)); - if (td->ext) - { + if (td->ext) { if (td->ext->rotOrder == ROT_MODE_QUAT) { /* quats */ /* objects and bones do normalization first too, otherwise @@ -2271,8 +2241,7 @@ static void postInputWarp(TransInfo *t, float values[3]) { mul_v3_fl(values, (float)(M_PI * 2)); - if (t->customData) /* non-null value indicates reversed input */ - { + if (t->customData) { /* non-null value indicates reversed input */ negate_v3(values); } } @@ -2324,8 +2293,7 @@ int handleEventWarp(TransInfo *t, wmEvent *event) { int status = 0; - if (event->type == MIDDLEMOUSE && event->val==KM_PRESS) - { + if (event->type == MIDDLEMOUSE && event->val == KM_PRESS) { // Use customData pointer to signal warp direction if (t->customData == NULL) t->customData = (void*)1; @@ -2465,11 +2433,9 @@ int handleEventShear(TransInfo *t, wmEvent *event) { int status = 0; - if (event->type == MIDDLEMOUSE && event->val==KM_PRESS) - { + if (event->type == MIDDLEMOUSE && event->val == KM_PRESS) { // Use customData pointer to signal Shear direction - if (t->customData == NULL) - { + if (t->customData == NULL) { initMouseInputMode(t, &t->mouse, INPUT_VERTICAL_ABSOLUTE); t->customData = (void*)1; } @@ -2603,7 +2569,7 @@ static void headerResize(TransInfo *t, float vec[3], char *str) } if (t->con.mode & CON_APPLY) { - switch(t->num.idx_max) { + switch (t->num.idx_max) { case 0: spos += sprintf(spos, "Scale: %s%s %s", &tvec[0], t->con.text, t->proptext); break; @@ -2755,8 +2721,7 @@ int Resize(TransInfo *t, const int mval[2]) char str[200]; /* for manipulator, center handle, the scaling can't be done relative to center */ - if ( (t->flag & T_USES_MANIPULATOR) && t->con.mode==0) - { + if ( (t->flag & T_USES_MANIPULATOR) && t->con.mode==0) { ratio = 1.0f - ((t->imval[0] - mval[0]) + (t->imval[1] - mval[1]))/100.0f; } else { @@ -2774,8 +2739,7 @@ int Resize(TransInfo *t, const int mval[2]) applySnapping(t, size); - if (t->flag & T_AUTOVALUES) - { + if (t->flag & T_AUTOVALUES) { copy_v3_v3(size, t->auto_values); } @@ -3008,8 +2972,7 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short copy_m3_m4(pmtx, t->poseobj->obmat); invert_m3_m3(imtx, pmtx); - if ((td->flag & TD_NO_LOC) == 0) - { + if ((td->flag & TD_NO_LOC) == 0) { sub_v3_v3v3(vec, td->center, center); mul_m3_v3(pmtx, vec); // To Global space @@ -3093,8 +3056,7 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short } } else { - if ((td->flag & TD_NO_LOC) == 0) - { + if ((td->flag & TD_NO_LOC) == 0) { /* translation */ sub_v3_v3v3(vec, td->center, center); mul_m3_v3(mat, vec); @@ -3440,7 +3402,7 @@ static void headerTranslation(TransInfo *t, float vec[3], char *str) autoik[0]= '\0'; if (t->con.mode & CON_APPLY) { - switch(t->num.idx_max) { + switch (t->num.idx_max) { case 0: spos += sprintf(spos, "D: %s (%s)%s %s %s", &tvec[0], distvec, t->con.text, t->proptext, &autoik[0]); break; @@ -3899,7 +3861,7 @@ void initBevel(TransInfo *t) int handleEventBevel(TransInfo *t, wmEvent *event) { - if (event->val==KM_PRESS) { + if (event->val == KM_PRESS) { if (!G.editBMesh) return 0; switch (event->type) { @@ -5243,8 +5205,7 @@ int Align(TransInfo *t, const int UNUSED(mval[2])) /* saving original center */ copy_v3_v3(center, t->center); - for (i = 0 ; i < t->total; i++, td++) - { + for (i = 0 ; i < t->total; i++, td++) { float mat[3][3], invmat[3][3]; if (td->flag & TD_NOACTION) diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index 18e9c1a47b8..ebded7b0a6e 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -76,8 +76,7 @@ static void drawObjectConstraint(TransInfo *t); static void constraintAutoValues(TransInfo *t, float vec[3]) { int mode = t->con.mode; - if (mode & CON_APPLY) - { + if (mode & CON_APPLY) { float nval = (t->flag & T_NULL_ONE)?1.0f:0.0f; if ((mode & CON_AXIS0) == 0) { @@ -478,7 +477,7 @@ static void applyAxisConstraintRot(TransInfo *t, TransData *td, float vec[3], fl if (!td && t->con.mode & CON_APPLY) { int mode = t->con.mode & (CON_AXIS0|CON_AXIS1|CON_AXIS2); - switch(mode) { + switch (mode) { case CON_AXIS0: case (CON_AXIS1|CON_AXIS2): copy_v3_v3(vec, t->con.mtx[0]); @@ -525,7 +524,7 @@ static void applyObjectConstraintRot(TransInfo *t, TransData *td, float vec[3], td= t->data; } - switch(mode) { + switch (mode) { case CON_AXIS0: case (CON_AXIS1|CON_AXIS2): copy_v3_v3(vec, td->axismtx[0]); @@ -604,7 +603,7 @@ void setUserConstraint(TransInfo *t, short orientation, int mode, const char fte { char text[40]; - switch(orientation) { + switch (orientation) { case V3D_MANIP_GLOBAL: { float mtx[3][3]= MAT3_UNITY; diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 062f88f8837..d33b8787121 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -127,8 +127,7 @@ static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail, Tra TransData *itail = tail; *temp = *head; - while (head < tail) - { + while (head < tail) { if (t->flag & T_PROP_CONNECTED) { while ((tail->dist >= temp->dist) && (head < tail)) tail--; @@ -138,8 +137,7 @@ static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail, Tra tail--; } - if (head != tail) - { + if (head != tail) { *head = *tail; head++; } @@ -153,8 +151,7 @@ static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail, Tra head++; } - if (head != tail) - { + if (head != tail) { *tail = *head; tail--; } @@ -535,13 +532,11 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr td->ob = ob; td->flag = TD_SELECTED; - if (bone->flag & BONE_HINGE_CHILD_TRANSFORM) - { + if (bone->flag & BONE_HINGE_CHILD_TRANSFORM) { td->flag |= TD_NOCENTER; } - if (bone->flag & BONE_TRANSFORM_CHILD) - { + if (bone->flag & BONE_TRANSFORM_CHILD) { td->flag |= TD_NOCENTER; td->flag |= TD_NO_LOC; } @@ -2707,8 +2702,7 @@ static void createTransNlaData(bContext *C, TransInfo *t) center[2]= 0.0f; /* set td's based on which handles are applicable */ - if (FrameOnMouseSide(t->frame_side, strip->start, (float)CFRA)) - { + if (FrameOnMouseSide(t->frame_side, strip->start, (float)CFRA)) { /* just set tdn to assume that it only has one handle for now */ tdn->handle= -1; @@ -2739,8 +2733,7 @@ static void createTransNlaData(bContext *C, TransInfo *t) td->extra= tdn; td++; } - if (FrameOnMouseSide(t->frame_side, strip->end, (float)CFRA)) - { + if (FrameOnMouseSide(t->frame_side, strip->end, (float)CFRA)) { /* if tdn is already holding the start handle, then we're doing both, otherwise, only end */ tdn->handle= (tdn->handle) ? 2 : 1; @@ -3993,7 +3986,7 @@ static TransData *SeqToTransData(TransData *td, TransData2D *td2d, TransDataSeq { int start_left; - switch(sel_flag) { + switch (sel_flag) { case SELECT: /* Use seq_tx_get_final_left() and an offset here * so transform has the left hand location of the strip. @@ -4447,8 +4440,7 @@ static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob) } /* set active flag */ - if (ob == OBACT) - { + if (ob == OBACT) { td->flag |= TD_ACTIVE; } } @@ -4500,8 +4492,7 @@ static void set_trans_object_base_flags(TransInfo *t) parsel= parsel->parent; } - if (parsel) - { + if (parsel) { /* rotation around local centers are allowed to propagate */ if ((t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL) && t->around == V3D_LOCAL) { base->flag |= BA_TRANSFORM_CHILD; @@ -4534,10 +4525,8 @@ static int mark_children(Object *ob) if (ob->flag & (SELECT|BA_TRANSFORM_CHILD)) return 1; - if (ob->parent) - { - if (mark_children(ob->parent)) - { + if (ob->parent) { + if (mark_children(ob->parent)) { ob->flag |= BA_TRANSFORM_CHILD; return 1; } @@ -4554,8 +4543,7 @@ static int count_proportional_objects(TransInfo *t) Base *base; /* rotations around local centers are allowed to propagate, so we take all objects */ - if (!((t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL) && t->around == V3D_LOCAL)) - { + if (!((t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL) && t->around == V3D_LOCAL)) { /* mark all parents */ for (base= scene->base.first; base; base= base->next) { if (TESTBASELIB_BGMODE(v3d, scene, base)) { @@ -4616,8 +4604,7 @@ static void clear_trans_object_base_flags(TransInfo *t) Scene *sce = t->scene; Base *base; - for (base= sce->base.first; base; base = base->next) - { + for (base= sce->base.first; base; base = base->next) { if (base->flag & BA_WAS_SEL) base->flag |= SELECT; @@ -5070,8 +5057,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) if (ANIM_animdata_get_context(C, &ac) == 0) return; - if (ac.datatype) - { + if (ac.datatype) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; short filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVE_VISIBLE); @@ -5120,8 +5106,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) if (ANIM_animdata_get_context(C, &ac) == 0) return; - if (ac.datatype) - { + if (ac.datatype) { ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; short filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_FOREDIT); @@ -5147,8 +5132,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) } } else if (t->obedit) { - if (t->obedit->type == OB_MESH) - { + if (t->obedit->type == OB_MESH) { BMEditMesh *em = BMEdit_FromObject(t->obedit); /* table needs to be created for each edit command, since vertices can move etc */ mesh_octree_table(t->obedit, em, NULL, 'e'); @@ -5298,8 +5282,7 @@ static void createTransObject(bContext *C, TransInfo *t) return; } - if (propmode) - { + if (propmode) { t->total += count_proportional_objects(t); } @@ -5315,8 +5298,7 @@ static void createTransObject(bContext *C, TransInfo *t) td->ext = tx; td->ext->rotOrder= ob->rotmode; - if (base->flag & BA_TRANSFORM_CHILD) - { + if (base->flag & BA_TRANSFORM_CHILD) { td->flag |= TD_NOCENTER; td->flag |= TD_NO_LOC; } @@ -5333,8 +5315,7 @@ static void createTransObject(bContext *C, TransInfo *t) } CTX_DATA_END; - if (propmode) - { + if (propmode) { Scene *scene = t->scene; View3D *v3d = t->view; Base *base; @@ -5343,7 +5324,8 @@ static void createTransObject(bContext *C, TransInfo *t) Object *ob= base->object; /* if base is not selected, not a parent of selection or not a child of selection and it is editable */ - if ((ob->flag & (SELECT|BA_TRANSFORM_CHILD|BA_TRANSFORM_PARENT)) == 0 && BASE_EDITABLE_BGMODE(v3d, scene, base)) + if ((ob->flag & (SELECT | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT)) == 0 && + BASE_EDITABLE_BGMODE(v3d, scene, base)) { td->protectflag= ob->protectflag; td->ext = tx; @@ -6032,12 +6014,10 @@ void createTransData(bContext *C, TransInfo *t) sort_trans_data_dist(t); } - if ((t->spacetype == SPACE_VIEW3D) && (t->ar->regiontype == RGN_TYPE_WINDOW)) - { + if ((t->spacetype == SPACE_VIEW3D) && (t->ar->regiontype == RGN_TYPE_WINDOW)) { View3D *v3d = t->view; RegionView3D *rv3d = CTX_wm_region_view3d(C); - if (rv3d && (t->flag & T_OBJECT) && v3d->camera == OBACT && rv3d->persp==RV3D_CAMOB) - { + if (rv3d && (t->flag & T_OBJECT) && v3d->camera == OBACT && rv3d->persp==RV3D_CAMOB) { t->flag |= T_CAMERA; } } diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index b500398dd76..2c5d074e2cf 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -111,8 +111,7 @@ void getViewVector(TransInfo *t, float coord[3], float vec[3]) { - if (t->persp != RV3D_ORTHO) - { + if (t->persp != RV3D_ORTHO) { float p1[4], p2[4]; copy_v3_v3(p1, coord); @@ -256,8 +255,7 @@ static void editbmesh_apply_to_mirror(TransInfo *t) eve->co[2]= td->loc[2]; } - if (td->flag & TD_MIRROR_EDGE) - { + if (td->flag & TD_MIRROR_EDGE) { td->loc[0] = 0; } } @@ -775,21 +773,17 @@ static void recalcData_view3d(TransInfo *t) } - if (t->mode != TFM_BONE_ROLL) - { + if (t->mode != TFM_BONE_ROLL) { /* fix roll */ - for (i = 0; i < t->total; i++, td++) - { - if (td->extra) - { + for (i = 0; i < t->total; i++, td++) { + if (td->extra) { float vec[3], up_axis[3]; float qrot[4]; ebo = td->extra; copy_v3_v3(up_axis, td->axismtx[2]); - if (t->mode != TFM_ROTATION) - { + if (t->mode != TFM_ROTATION) { sub_v3_v3v3(vec, ebo->tail, ebo->head); normalize_v3(vec); rotation_between_vecs_to_quat(qrot, td->axismtx[1], vec); @@ -915,8 +909,7 @@ void drawLine(TransInfo *t, float *center, float *dir, char axis, short options) float v1[3], v2[3], v3[3]; unsigned char col[3], col2[3]; - if (t->spacetype == SPACE_VIEW3D) - { + if (t->spacetype == SPACE_VIEW3D) { View3D *v3d = t->view; glPushMatrix(); @@ -984,8 +977,7 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->redraw = 1; /* redraw first time */ - if (event) - { + if (event) { copy_v2_v2_int(t->imval, event->mval); t->event_type = event->type; } @@ -1043,8 +1035,7 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) } - if (t->spacetype == SPACE_VIEW3D) - { + if (t->spacetype == SPACE_VIEW3D) { View3D *v3d = sa->spacedata.first; t->view = v3d; @@ -1060,12 +1051,12 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) if (v3d->flag & V3D_ALIGN) t->flag |= T_V3D_ALIGN; t->around = v3d->around; - if (op && RNA_struct_find_property(op->ptr, "constraint_orientation") && RNA_struct_property_is_set(op->ptr, "constraint_orientation")) + if (op && (RNA_struct_find_property(op->ptr, "constraint_orientation") && + RNA_struct_property_is_set(op->ptr, "constraint_orientation"))) { t->current_orientation = RNA_enum_get(op->ptr, "constraint_orientation"); - - if (t->current_orientation >= V3D_MANIP_CUSTOM + BIF_countTransformOrientation(C)) - { + + if (t->current_orientation >= V3D_MANIP_CUSTOM + BIF_countTransformOrientation(C)) { t->current_orientation = V3D_MANIP_GLOBAL; } } @@ -1124,10 +1115,8 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->around = V3D_CENTER; } - if (op && RNA_struct_property_is_set(op->ptr, "release_confirm")) - { - if (RNA_boolean_get(op->ptr, "release_confirm")) - { + if (op && RNA_struct_property_is_set(op->ptr, "release_confirm")) { + if (RNA_boolean_get(op->ptr, "release_confirm")) { t->flag |= T_RELEASE_CONFIRM; } } @@ -1137,35 +1126,31 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) } } - if (op && RNA_struct_find_property(op->ptr, "mirror") && RNA_struct_property_is_set(op->ptr, "mirror")) + if (op && (RNA_struct_find_property(op->ptr, "mirror") && + RNA_struct_property_is_set(op->ptr, "mirror"))) { - if (RNA_boolean_get(op->ptr, "mirror")) - { + if (RNA_boolean_get(op->ptr, "mirror")) { t->flag |= T_MIRROR; t->mirror = 1; } } // Need stuff to take it from edit mesh or whatnot here else if (t->spacetype == SPACE_VIEW3D) { - if (t->obedit && t->obedit->type == OB_MESH && (((Mesh *)t->obedit->data)->editflag & ME_EDIT_MIRROR_X)) - { + if (t->obedit && t->obedit->type == OB_MESH && (((Mesh *)t->obedit->data)->editflag & ME_EDIT_MIRROR_X)) { t->flag |= T_MIRROR; t->mirror = 1; } } /* setting PET flag only if property exist in operator. Otherwise, assume it's not supported */ - if (op && RNA_struct_find_property(op->ptr, "proportional")) - { - if (RNA_struct_property_is_set(op->ptr, "proportional")) - { - switch(RNA_enum_get(op->ptr, "proportional")) - { - case PROP_EDIT_CONNECTED: - t->flag |= T_PROP_CONNECTED; - case PROP_EDIT_ON: - t->flag |= T_PROP_EDIT; - break; + if (op && RNA_struct_find_property(op->ptr, "proportional")) { + if (RNA_struct_property_is_set(op->ptr, "proportional")) { + switch (RNA_enum_get(op->ptr, "proportional")) { + case PROP_EDIT_CONNECTED: + t->flag |= T_PROP_CONNECTED; + case PROP_EDIT_ON: + t->flag |= T_PROP_EDIT; + break; } } else { @@ -1186,7 +1171,8 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) } } - if (op && RNA_struct_find_property(op->ptr, "proportional_size") && RNA_struct_property_is_set(op->ptr, "proportional_size")) + if (op && (RNA_struct_find_property(op->ptr, "proportional_size") && + RNA_struct_property_is_set(op->ptr, "proportional_size"))) { t->prop_size = RNA_float_get(op->ptr, "proportional_size"); } @@ -1196,13 +1182,13 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) /* TRANSFORM_FIX_ME rna restrictions */ - if (t->prop_size <= 0.00001f) - { + if (t->prop_size <= 0.00001f) { printf("Proportional size (%f) under 0.00001, reseting to 1!\n", t->prop_size); t->prop_size = 1.0f; } - if (op && RNA_struct_find_property(op->ptr, "proportional_edit_falloff") && RNA_struct_property_is_set(op->ptr, "proportional_edit_falloff")) + if (op && (RNA_struct_find_property(op->ptr, "proportional_edit_falloff") && + RNA_struct_property_is_set(op->ptr, "proportional_edit_falloff"))) { t->prop_mode = RNA_enum_get(op->ptr, "proportional_edit_falloff"); } @@ -1210,14 +1196,12 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->prop_mode = ts->prop_mode; } } - else /* add not pet option to context when not available */ - { + else { /* add not pet option to context when not available */ t->options |= CTX_NO_PET; } // Mirror is not supported with PET, turn it off. - if (t->flag & T_PROP_EDIT) - { + if (t->flag & T_PROP_EDIT) { t->flag &= ~T_MIRROR; } @@ -1282,8 +1266,7 @@ void postTrans (bContext *C, TransInfo *t) } } - if (t->mouse.data) - { + if (t->mouse.data) { MEM_freeN(t->mouse.data); } } @@ -1440,8 +1423,7 @@ void calculateCenterMedian(TransInfo *t) for (i = 0; i < t->total; i++) { if (t->data[i].flag & TD_SELECTED) { - if (!(t->data[i].flag & TD_NOCENTER)) - { + if (!(t->data[i].flag & TD_NOCENTER)) { add_v3_v3(partial, t->data[i].center); total++; } @@ -1493,7 +1475,7 @@ void calculateCenterBound(TransInfo *t) void calculateCenter(TransInfo *t) { - switch(t->around) { + switch (t->around) { case V3D_CENTER: calculateCenterBound(t); break; @@ -1542,8 +1524,7 @@ void calculateCenter(TransInfo *t) } /* END EDIT MODE ACTIVE ELEMENT */ calculateCenterMedian(t); - if ((t->flag & (T_EDIT|T_POSE))==0) - { + if ((t->flag & (T_EDIT|T_POSE))==0) { Scene *scene = t->scene; Object *ob= OBACT; if (ob) { @@ -1583,8 +1564,7 @@ void calculateCenter(TransInfo *t) projectIntView(t, axis, t->center2d); /* rotate only needs correct 2d center, grab needs initgrabz() value */ - if (t->mode==TFM_TRANSLATION) - { + if (t->mode==TFM_TRANSLATION) { copy_v3_v3(t->center, axis); copy_v3_v3(t->con.center, t->center); } @@ -1625,11 +1605,8 @@ void calculatePropRatio(TransInfo *t) td->factor = 0.0f; restoreElement(td); } - else if ((connected && - (td->flag & TD_NOTCONNECTED || td->dist > t->prop_size)) - || - (connected == 0 && - td->rdist > t->prop_size)) + else if ((connected && (td->flag & TD_NOTCONNECTED || td->dist > t->prop_size)) || + (connected == 0 && td->rdist > t->prop_size)) { /* * The elements are sorted according to their dist member in the array, @@ -1656,7 +1633,7 @@ void calculatePropRatio(TransInfo *t) if (dist < 0.0f) dist = 0.0f; - switch(t->prop_mode) { + switch (t->prop_mode) { case PROP_SHARP: td->factor= dist*dist; break; @@ -1684,7 +1661,7 @@ void calculatePropRatio(TransInfo *t) } } } - switch(t->prop_mode) { + switch (t->prop_mode) { case PROP_SHARP: strcpy(t->proptext, "(Sharp)"); break; diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c index bd3fb20f77f..467e3dc600e 100644 --- a/source/blender/editors/transform/transform_input.c +++ b/source/blender/editors/transform/transform_input.c @@ -313,8 +313,7 @@ void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode) } #endif - switch(mode) - { + switch (mode) { case INPUT_VECTOR: mi->apply = InputVector; t->helpline = HLP_NONE; @@ -391,8 +390,7 @@ int handleMouseInput(TransInfo *t, MouseInput *mi, wmEvent *event) { int redraw = TREDRAW_NOTHING; - switch (event->type) - { + switch (event->type) { case LEFTSHIFTKEY: case RIGHTSHIFTKEY: if (event->val == KM_PRESS) { diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 5b70b25c894..c043be0c7f8 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -549,7 +549,7 @@ int calc_manipulator_stats(const bContext *C) /* global, local or normal orientation? */ if (ob && totsel) { - switch(v3d->twmode) { + switch (v3d->twmode) { case V3D_MANIP_GLOBAL: break; /* nothing to do */ @@ -761,7 +761,7 @@ static void manipulator_setcolor(View3D *v3d, char axis, int colcode, unsigned c UI_GetThemeColor3ubv(TH_TRANSFORM, col); } else { - switch(axis) { + switch (axis) { case 'C': UI_GetThemeColor3ubv(TH_TRANSFORM, col); if (v3d->twmode == V3D_MANIP_LOCAL) { @@ -1483,7 +1483,7 @@ void BIF_draw_manipulator(const bContext *C) v3d->twflag |= V3D_DRAW_MANIPULATOR; /* now we can define center */ - switch(v3d->around) { + switch (v3d->around) { case V3D_CENTER: case V3D_ACTIVE: rv3d->twmat[3][0]= (scene->twmin[0] + scene->twmax[0])/2.0f; @@ -1639,7 +1639,7 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) if (drawflags==0) drawflags= val; if (drawflags & MAN_TRANS_C) { - switch(drawflags) { + switch (drawflags) { case MAN_TRANS_C: break; case MAN_TRANS_X: @@ -1672,7 +1672,7 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) //wm_operator_invoke(C, WM_operatortype_find("TRANSFORM_OT_translate", 0), event, op->ptr, NULL, FALSE); } else if (drawflags & MAN_SCALE_C) { - switch(drawflags) { + switch (drawflags) { case MAN_SCALE_X: if (shift) { constraint_axis[1] = 1; @@ -1707,7 +1707,7 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) //wm_operator_invoke(C, WM_operatortype_find("TRANSFORM_OT_trackball", 0), event, op->ptr, NULL, FALSE); } else if (drawflags & MAN_ROT_C) { - switch(drawflags) { + switch (drawflags) { case MAN_ROT_X: constraint_axis[0] = 1; break; diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 09078c199c4..b9ae3180591 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -317,23 +317,19 @@ static void transformops_exit(bContext *C, wmOperator *op) static int transformops_data(bContext *C, wmOperator *op, wmEvent *event) { int retval = 1; - if (op->customdata == NULL) - { + if (op->customdata == NULL) { TransInfo *t = MEM_callocN(sizeof(TransInfo), "TransInfo data2"); TransformModeItem *tmode; int mode = -1; - for (tmode = transform_modes; tmode->idname; tmode++) - { - if (op->type->idname == tmode->idname) - { + for (tmode = transform_modes; tmode->idname; tmode++) { + if (op->type->idname == tmode->idname) { mode = tmode->mode; break; } } - if (mode == -1) - { + if (mode == -1) { mode = RNA_enum_get(op->ptr, "mode"); } @@ -376,8 +372,7 @@ static int transform_modal(bContext *C, wmOperator *op, wmEvent *event) exit_code |= transformEnd(C, t); - if ((exit_code & OPERATOR_RUNNING_MODAL) == 0) - { + if ((exit_code & OPERATOR_RUNNING_MODAL) == 0) { transformops_exit(C, op); exit_code &= ~OPERATOR_PASS_THROUGH; /* preventively remove passthrough */ } @@ -400,8 +395,7 @@ static int transform_exec(bContext *C, wmOperator *op) { TransInfo *t; - if (!transformops_data(C, op, NULL)) - { + if (!transformops_data(C, op, NULL)) { G.moving = 0; return OPERATOR_CANCELLED; } @@ -423,8 +417,7 @@ static int transform_exec(bContext *C, wmOperator *op) static int transform_invoke(bContext *C, wmOperator *op, wmEvent *event) { - if (!transformops_data(C, op, event)) - { + if (!transformops_data(C, op, event)) { G.moving = 0; return OPERATOR_CANCELLED; } @@ -445,8 +438,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) { PropertyRNA *prop; - if (flags & P_AXIS) - { + if (flags & P_AXIS) { prop= RNA_def_property(ot->srna, "axis", PROP_FLOAT, PROP_DIRECTION); RNA_def_property_array(prop, 3); /* Make this not hidden when there's a nice axis selection widget */ @@ -455,8 +447,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) } - if (flags & P_CONSTRAINT) - { + if (flags & P_CONSTRAINT) { RNA_def_boolean_vector(ot->srna, "constraint_axis", 3, NULL, "Constraint Axis", ""); prop= RNA_def_property(ot->srna, "constraint_orientation", PROP_ENUM, PROP_NONE); RNA_def_property_ui_text(prop, "Orientation", "Transformation orientation"); @@ -465,21 +456,18 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) } - if (flags & P_MIRROR) - { + if (flags & P_MIRROR) { RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); } - if (flags & P_PROPORTIONAL) - { + if (flags & P_PROPORTIONAL) { RNA_def_enum(ot->srna, "proportional", proportional_editing_items, 0, "Proportional Editing", ""); RNA_def_enum(ot->srna, "proportional_edit_falloff", proportional_falloff_items, 0, "Proportional Editing Falloff", "Falloff type for proportional editing mode"); RNA_def_float(ot->srna, "proportional_size", 1, 0.00001f, FLT_MAX, "Proportional Size", "", 0.001, 100); } - if (flags & P_SNAP) - { + if (flags & P_SNAP) { prop= RNA_def_boolean(ot->srna, "snap", 0, "Use Snapping Options", ""); RNA_def_property_flag(prop, PROP_HIDDEN); @@ -497,14 +485,12 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) } } } - - if (flags & P_OPTIONS) - { + + if (flags & P_OPTIONS) { RNA_def_boolean(ot->srna, "texture_space", 0, "Edit Texture Space", "Edit Object data texture space"); } - if (flags & P_CORRECT_UV) - { + if (flags & P_CORRECT_UV) { RNA_def_boolean(ot->srna, "correct_uv", 0, "Correct UVs", "Correct UV coordinates when transforming"); } @@ -827,8 +813,7 @@ void transform_operatortypes(void) { TransformModeItem *tmode; - for (tmode = transform_modes; tmode->idname; tmode++) - { + for (tmode = transform_modes; tmode->idname; tmode++) { WM_operatortype_append(tmode->opfunc); } @@ -853,15 +838,13 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac if (modalmap) { TransformModeItem *tmode; - for (tmode = transform_modes; tmode->idname; tmode++) - { + for (tmode = transform_modes; tmode->idname; tmode++) { WM_modalkeymap_assign(modalmap, tmode->idname); } WM_modalkeymap_assign(modalmap, "TRANSFORM_OT_transform"); } - switch(spaceid) - { + switch (spaceid) { case SPACE_VIEW3D: WM_keymap_add_item(keymap, OP_TRANSLATION, GKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 0f929003e8f..0f9f90819d0 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -176,8 +176,7 @@ TransformOrientation *createMeshSpace(bContext *C, ReportList *reports, char *na type = getTransformOrientation(C, normal, plane, 0); - switch (type) - { + switch (type) { case ORIENTATION_VERT: if (createSpaceNormal(mat, normal) == 0) { BKE_reports_prepend(reports, "Cannot use vertex with zero-length normal"); @@ -493,7 +492,7 @@ void initTransformOrientation(bContext *C, TransInfo *t) Object *ob = CTX_data_active_object(C); Object *obedit = CTX_data_active_object(C); - switch(t->current_orientation) { + switch (t->current_orientation) { case V3D_MANIP_GLOBAL: unit_m3(t->spacemtx); strcpy(t->spacename, "global"); @@ -581,8 +580,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], BM_editselection_normal(&ese, normal); BM_editselection_plane(&ese, plane); - switch (ese.htype) - { + switch (ese.htype) { case BM_VERT: result = ORIENTATION_VERT; break; @@ -724,8 +722,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], if (nu->type == CU_BEZIER) { bezt= nu->bezt; a= nu->pntsu; - while (a--) - { + while (a--) { /* exception */ if ((bezt->f1 & SELECT) + (bezt->f2 & SELECT) + (bezt->f3 & SELECT) > SELECT) { sub_v3_v3v3(normal, bezt->vec[0], bezt->vec[2]); @@ -886,8 +883,7 @@ void ED_getTransformOrientationMatrix(const bContext *C, float orientation_mat[] type = getTransformOrientation(C, normal, plane, activeOnly); - switch (type) - { + switch (type) { case ORIENTATION_NORMAL: if (createSpaceNormalTangent(orientation_mat, normal, plane) == 0) { type = ORIENTATION_NONE; diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 7bdd3ddc069..0a5613bca22 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -140,8 +140,7 @@ int activeSnap(TransInfo *t) void drawSnapping(const struct bContext *C, TransInfo *t) { - if (validSnap(t) && activeSnap(t)) - { + if (validSnap(t) && activeSnap(t)) { unsigned char col[4], selectedCol[4], activeCol[4]; UI_GetThemeColor3ubv(TH_TRANSFORM, col); @@ -184,8 +183,7 @@ void drawSnapping(const struct bContext *C, TransInfo *t) } /* draw normal if needed */ - if (usingSnappingNormal(t) && validSnappingNormal(t)) - { + if (usingSnappingNormal(t) && validSnappingNormal(t)) { glColor4ubv(activeCol); glBegin(GL_LINES); @@ -240,16 +238,14 @@ int handleSnapping(TransInfo *t, wmEvent *event) int status = 0; #if 0 // XXX need a proper selector for all snap mode - if (BIF_snappingSupported(t->obedit) && event->type == TABKEY && event->shift) - { + if (BIF_snappingSupported(t->obedit) && event->type == TABKEY && event->shift) { /* toggle snap and reinit */ t->settings->snap_flag ^= SCE_SNAP; initSnapping(t, NULL); status = 1; } #endif - if (event->type == MOUSEMOVE) - { + if (event->type == MOUSEMOVE) { status |= updateSelectedSnapPoint(t); } @@ -259,8 +255,7 @@ int handleSnapping(TransInfo *t, wmEvent *event) void applyProject(TransInfo *t) { /* XXX FLICKER IN OBJECT MODE */ - if ((t->tsnap.project) && activeSnap(t) && (t->flag & T_NO_PROJECT) == 0) - { + if ((t->tsnap.project) && activeSnap(t) && (t->flag & T_NO_PROJECT) == 0) { TransData *td = t->data; float tvec[3]; float imat[4][4]; @@ -283,8 +278,7 @@ void applyProject(TransInfo *t) continue; copy_v3_v3(iloc, td->loc); - if (t->flag & (T_EDIT|T_POSE)) - { + if (t->flag & (T_EDIT|T_POSE)) { Object *ob = t->obedit?t->obedit:t->poseobj; mul_m4_v3(ob->obmat, iloc); } @@ -296,8 +290,7 @@ void applyProject(TransInfo *t) project_float(t->ar, iloc, mval); - if (snapObjectsTransform(t, mval, &dist, loc, no, t->tsnap.modeSelect)) - { + if (snapObjectsTransform(t, mval, &dist, loc, no, t->tsnap.modeSelect)) { // if (t->flag & (T_EDIT|T_POSE)) { // mul_m4_v3(imat, loc); // } @@ -320,8 +313,7 @@ void applySnapping(TransInfo *t, float *vec) if (t->tsnap.project) return; - if (t->tsnap.status & SNAP_FORCED) - { + if (t->tsnap.status & SNAP_FORCED) { t->tsnap.targetSnap(t); t->tsnap.applySnap(t, vec); @@ -331,15 +323,13 @@ void applySnapping(TransInfo *t, float *vec) // Time base quirky code to go around findnearest slowness /* !TODO! add exception for object mode, no need to slow it down then */ - if (current - t->tsnap.last >= 0.01) - { + if (current - t->tsnap.last >= 0.01) { t->tsnap.calcSnap(t, vec); t->tsnap.targetSnap(t); t->tsnap.last = current; } - if (validSnap(t)) - { + if (validSnap(t)) { t->tsnap.applySnap(t, vec); } } @@ -368,10 +358,8 @@ int usingSnappingNormal(TransInfo *t) int validSnappingNormal(TransInfo *t) { - if (validSnap(t)) - { - if (dot_v3v3(t->tsnap.snapNormal, t->tsnap.snapNormal) > 0) - { + if (validSnap(t)) { + if (dot_v3v3(t->tsnap.snapNormal, t->tsnap.snapNormal) > 0) { return 1; } } @@ -439,38 +427,31 @@ void initSnapping(TransInfo *t, wmOperator *op) resetSnapping(t); /* if snap property exists */ - if (op && RNA_struct_find_property(op->ptr, "snap") && RNA_struct_property_is_set(op->ptr, "snap")) - { - if (RNA_boolean_get(op->ptr, "snap")) - { + if (op && RNA_struct_find_property(op->ptr, "snap") && RNA_struct_property_is_set(op->ptr, "snap")) { + if (RNA_boolean_get(op->ptr, "snap")) { t->modifiers |= MOD_SNAP; - if (RNA_struct_property_is_set(op->ptr, "snap_target")) - { + if (RNA_struct_property_is_set(op->ptr, "snap_target")) { snap_target = RNA_enum_get(op->ptr, "snap_target"); } - if (RNA_struct_property_is_set(op->ptr, "snap_point")) - { + if (RNA_struct_property_is_set(op->ptr, "snap_point")) { RNA_float_get_array(op->ptr, "snap_point", t->tsnap.snapPoint); t->tsnap.status |= SNAP_FORCED|POINT_INIT; } /* snap align only defined in specific cases */ - if (RNA_struct_find_property(op->ptr, "snap_align")) - { + if (RNA_struct_find_property(op->ptr, "snap_align")) { t->tsnap.align = RNA_boolean_get(op->ptr, "snap_align"); RNA_float_get_array(op->ptr, "snap_normal", t->tsnap.snapNormal); normalize_v3(t->tsnap.snapNormal); } - if (RNA_struct_find_property(op->ptr, "use_snap_project")) - { + if (RNA_struct_find_property(op->ptr, "use_snap_project")) { t->tsnap.project = RNA_boolean_get(op->ptr, "use_snap_project"); } - if (RNA_struct_find_property(op->ptr, "use_snap_self")) - { + if (RNA_struct_find_property(op->ptr, "use_snap_self")) { t->tsnap.snap_self = RNA_boolean_get(op->ptr, "use_snap_self"); } } @@ -498,8 +479,7 @@ static void setSnappingCallback(TransInfo *t) { t->tsnap.calcSnap = CalcSnapGeometry; - switch(t->tsnap.target) - { + switch (t->tsnap.target) { case SCE_SNAP_TARGET_CLOSEST: t->tsnap.targetSnap = TargetSnapClosest; break; @@ -515,8 +495,7 @@ static void setSnappingCallback(TransInfo *t) } - switch (t->mode) - { + switch (t->mode) { case TFM_TRANSLATION: t->tsnap.applySnap = ApplySnapTranslation; t->tsnap.distance = TranslationBetween; @@ -766,8 +745,7 @@ static void UNUSED_FUNCTION(CalcSnapGrid)(TransInfo *t, float *UNUSED(vec)) static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) { - if (t->spacetype == SPACE_VIEW3D) - { + if (t->spacetype == SPACE_VIEW3D) { float loc[3]; float no[3]; float mval[2]; @@ -777,8 +755,7 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) mval[0] = t->mval[0]; mval[1] = t->mval[1]; - if (t->tsnap.mode == SCE_SNAP_MODE_VOLUME) - { + if (t->tsnap.mode == SCE_SNAP_MODE_VOLUME) { ListBase depth_peels; DepthPeel *p1, *p2; float *last_p = NULL; @@ -799,10 +776,8 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) // } - for (p1 = depth_peels.first; p1; p1 = p1->next) - { - if (p1->flag == 0) - { + for (p1 = depth_peels.first; p1; p1 = p1->next) { + if (p1->flag == 0) { float vec[3]; float new_dist; @@ -810,13 +785,10 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) p1->flag = 1; /* if peeling objects, take the first and last from each object */ - if (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) - { + if (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) { DepthPeel *peel; - for (peel = p1->next; peel; peel = peel->next) - { - if (peel->ob == p1->ob) - { + for (peel = p1->next; peel; peel = peel->next) { + if (peel->ob == p1->ob) { peel->flag = 1; p2 = peel; } @@ -824,8 +796,7 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) } /* otherwise, pair first with second and so on */ else { - for (p2 = p1->next; p2 && p2->ob != p1->ob; p2 = p2->next) - { + for (p2 = p1->next; p2 && p2->ob != p1->ob; p2 = p2->next) { /* nothing to do here */ } } @@ -839,9 +810,8 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) else { copy_v3_v3(vec, p1->p); } - - if (last_p == NULL) - { + + if (last_p == NULL) { copy_v3_v3(p, vec); max_dist = 0; break; @@ -856,8 +826,7 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) } } - if (max_dist != FLT_MAX) - { + if (max_dist != FLT_MAX) { copy_v3_v3(loc, p); /* XXX, is there a correct normal in this case ???, for now just z up */ no[0]= 0.0; @@ -878,8 +847,7 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) sub_v3_v3v3(tangent, loc, t->tsnap.snapPoint); tangent[2] = 0; - if (dot_v3v3(tangent, tangent) > 0) - { + if (dot_v3v3(tangent, tangent) > 0) { copy_v3_v3(t->tsnap.snapTangent, tangent); } @@ -899,8 +867,7 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) UI_view2d_region_to_view(&t->ar->v2d, t->mval[0], t->mval[1], co, co+1); - if (ED_uvedit_nearest_uv(t->scene, t->obedit, ima, co, t->tsnap.snapPoint)) - { + if (ED_uvedit_nearest_uv(t->scene, t->obedit, ima, co, t->tsnap.snapPoint)) { ED_space_image_uv_aspect(t->sa->spacedata.first, &aspx, &aspy); t->tsnap.snapPoint[0] *= aspx; t->tsnap.snapPoint[1] *= aspy; @@ -917,9 +884,8 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) static void TargetSnapCenter(TransInfo *t) { - // Only need to calculate once - if ((t->tsnap.status & TARGET_INIT) == 0) - { + /* Only need to calculate once */ + if ((t->tsnap.status & TARGET_INIT) == 0) { copy_v3_v3(t->tsnap.snapTarget, t->center); if (t->flag & (T_EDIT|T_POSE)) { Object *ob= t->obedit?t->obedit:t->poseobj; @@ -932,24 +898,20 @@ static void TargetSnapCenter(TransInfo *t) static void TargetSnapActive(TransInfo *t) { - // Only need to calculate once - if ((t->tsnap.status & TARGET_INIT) == 0) - { + /* Only need to calculate once */ + if ((t->tsnap.status & TARGET_INIT) == 0) { TransData *td = NULL; TransData *active_td = NULL; int i; - for (td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) - { - if (td->flag & TD_ACTIVE) - { + for (td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) { + if (td->flag & TD_ACTIVE) { active_td = td; break; } } - if (active_td) - { + if (active_td) { copy_v3_v3(t->tsnap.snapTarget, active_td->center); if (t->flag & (T_EDIT|T_POSE)) { @@ -971,8 +933,7 @@ static void TargetSnapActive(TransInfo *t) static void TargetSnapMedian(TransInfo *t) { // Only need to calculate once - if ((t->tsnap.status & TARGET_INIT) == 0) - { + if ((t->tsnap.status & TARGET_INIT) == 0) { TransData *td = NULL; int i; @@ -980,8 +941,7 @@ static void TargetSnapMedian(TransInfo *t) t->tsnap.snapTarget[1] = 0; t->tsnap.snapTarget[2] = 0; - for (td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) - { + for (td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) { add_v3_v3(t->tsnap.snapTarget, td->center); } @@ -999,21 +959,17 @@ static void TargetSnapMedian(TransInfo *t) static void TargetSnapClosest(TransInfo *t) { // Only valid if a snap point has been selected - if (t->tsnap.status & POINT_INIT) - { + if (t->tsnap.status & POINT_INIT) { TransData *closest = NULL, *td = NULL; /* Object mode */ - if (t->flag & T_OBJECT) - { + if (t->flag & T_OBJECT) { int i; - for (td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) - { + for (td = t->data, i = 0 ; i < t->total && td->flag & TD_SELECTED ; i++, td++) { struct BoundBox *bb = object_get_boundbox(td->ob); /* use boundbox if possible */ - if (bb) - { + if (bb) { int j; for (j = 0; j < 8; j++) { @@ -1041,8 +997,7 @@ static void TargetSnapClosest(TransInfo *t) dist = t->tsnap.distance(t, loc, t->tsnap.snapPoint); - if (closest == NULL || fabs(dist) < fabs(t->tsnap.dist)) - { + if (closest == NULL || fabs(dist) < fabs(t->tsnap.dist)) { copy_v3_v3(t->tsnap.snapTarget, loc); closest = td; t->tsnap.dist = dist; @@ -1065,8 +1020,7 @@ static void TargetSnapClosest(TransInfo *t) dist = t->tsnap.distance(t, loc, t->tsnap.snapPoint); - if (closest == NULL || fabs(dist) < fabs(t->tsnap.dist)) - { + if (closest == NULL || fabs(dist) < fabs(t->tsnap.dist)) { copy_v3_v3(t->tsnap.snapTarget, loc); closest = td; t->tsnap.dist = dist; @@ -1112,8 +1066,7 @@ static int snapFace(ARegion *ar, float v1co[3], float v2co[3], float v3co[3], fl project_int(ar, location, screen_loc); new_dist = abs(screen_loc[0] - (int)mval[0]) + abs(screen_loc[1] - (int)mval[1]); - if (new_dist <= *dist && new_depth < *depth) - { + if (new_dist <= *dist && new_depth < *depth) { *depth = new_depth; retval = 1; @@ -1145,8 +1098,7 @@ static int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], sh result = isect_line_line_v3(v1co, v2co, ray_start_local, ray_end, intersect, dvec); /* dvec used but we don't care about result */ - if (result) - { + if (result) { float edge_loc[3], vec[3]; float mul; @@ -1167,8 +1119,7 @@ static int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], sh copy_v3_v3(intersect, v2co); } - if (dot_v3v3(ray_normal_local, dvec) > 0) - { + if (dot_v3v3(ray_normal_local, dvec) > 0) { float location[3]; float new_depth; int screen_loc[2]; @@ -1187,8 +1138,7 @@ static int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], sh * this takes care of series of connected edges a bit slanted w.r.t the viewport * otherwise, it would stick to the verts of the closest edge and not slide along merrily * */ - if (new_dist <= *r_dist && new_depth < *r_depth * 1.001f) - { + if (new_dist <= *r_dist && new_depth < *r_depth * 1.001f) { float n1[3], n2[3]; *r_depth = new_depth; @@ -1199,8 +1149,7 @@ static int snapEdge(ARegion *ar, float v1co[3], short v1no[3], float v2co[3], sh mul = dot_v3v3(vec, edge_loc) / dot_v3v3(edge_loc, edge_loc); - if (r_no) - { + if (r_no) { normal_short_to_float_v3(n1, v1no); normal_short_to_float_v3(n2, v2no); interp_v3_v3v3(r_no, n2, n1, mul); @@ -1227,8 +1176,7 @@ static int snapVertex(ARegion *ar, float vco[3], short vno[3], float obmat[][4], sub_v3_v3v3(dvec, vco, ray_start_local); - if (dot_v3v3(ray_normal_local, dvec) > 0) - { + if (dot_v3v3(ray_normal_local, dvec) > 0) { float location[3]; float new_depth; int screen_loc[2]; @@ -1243,15 +1191,13 @@ static int snapVertex(ARegion *ar, float vco[3], short vno[3], float obmat[][4], project_int(ar, location, screen_loc); new_dist = abs(screen_loc[0] - (int)mval[0]) + abs(screen_loc[1] - (int)mval[1]); - if (new_dist <= *r_dist && new_depth < *r_depth) - { + if (new_dist <= *r_dist && new_depth < *r_depth) { *r_depth = new_depth; retval = 1; copy_v3_v3(r_loc, location); - if (r_no) - { + if (r_no) { normal_short_to_float_v3(r_no, vno); mul_m3_v3(timat, r_no); normalize_v3(r_no); @@ -1280,16 +1226,14 @@ static int snapArmature(short snap_mode, ARegion *ar, Object *ob, bArmature *arm mul_m4_v3(imat, ray_start_local); mul_mat3_m4_v3(imat, ray_normal_local); - if (arm->edbo) - { + if (arm->edbo) { EditBone *eBone; for (eBone=arm->edbo->first; eBone; eBone=eBone->next) { if (eBone->layer & arm->layer) { /* skip hidden or moving (selected) bones */ if ((eBone->flag & (BONE_HIDDEN_A|BONE_ROOTSEL|BONE_TIPSEL))==0) { - switch (snap_mode) - { + switch (snap_mode) { case SCE_SNAP_MODE_VERTEX: retval |= snapVertex(ar, eBone->head, NULL, obmat, NULL, ray_start, ray_start_local, ray_normal_local, mval, r_loc, NULL, r_dist, r_depth); retval |= snapVertex(ar, eBone->tail, NULL, obmat, NULL, ray_start, ray_start_local, ray_normal_local, mval, r_loc, NULL, r_dist, r_depth); @@ -1313,8 +1257,7 @@ static int snapArmature(short snap_mode, ARegion *ar, Object *ob, bArmature *arm float *head_vec = pchan->pose_head; float *tail_vec = pchan->pose_tail; - switch (snap_mode) - { + switch (snap_mode) { case SCE_SNAP_MODE_VERTEX: retval |= snapVertex(ar, head_vec, NULL, obmat, NULL, ray_start, ray_start_local, ray_normal_local, mval, r_loc, NULL, r_dist, r_depth); retval |= snapVertex(ar, tail_vec, NULL, obmat, NULL, ray_start, ray_start_local, ray_normal_local, mval, r_loc, NULL, r_dist, r_depth); @@ -1366,8 +1309,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh if (test == 1) { - switch (snap_mode) - { + switch (snap_mode) { case SCE_SNAP_MODE_FACE: { #ifdef USE_BVH_FACE_SNAP // Added for durian @@ -1383,8 +1325,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh hit.index = -1; hit.dist = *r_depth * (*r_depth == FLT_MAX ? 1.0f : local_scale); - if (treeData.tree && BLI_bvhtree_ray_cast(treeData.tree, ray_start_local, ray_normal_local, 0.0f, &hit, treeData.raycast_callback, &treeData) != -1) - { + if (treeData.tree && BLI_bvhtree_ray_cast(treeData.tree, ray_start_local, ray_normal_local, 0.0f, &hit, treeData.raycast_callback, &treeData) != -1) { if (hit.dist/local_scale <= *r_depth) { *r_depth= hit.dist/local_scale; copy_v3_v3(r_loc, hit.co); @@ -1409,8 +1350,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh int index = 0; int i; - if (em != NULL) - { + if (em != NULL) { index_array = dm->getTessFaceDataArray(dm, CD_ORIGINDEX); EDBM_index_arrays_init(em, 0, 0, 1); } @@ -1421,8 +1361,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh test = 1; /* reset for every face */ - if (em != NULL) - { + if (em != NULL) { if (index_array) { index = index_array[i]; } @@ -1436,8 +1375,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh else { efa = EDBM_face_at_index(em, index); - if (efa && BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) - { + if (efa && BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) { test = 0; } else if (efa) { @@ -1456,28 +1394,24 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh } - if (test) - { + if (test) { int result; float *v4co = NULL; - if (f->v4) - { + if (f->v4) { v4co = verts[f->v4].co; } result = snapFace(ar, verts[f->v1].co, verts[f->v2].co, verts[f->v3].co, v4co, mval, ray_start, ray_start_local, ray_normal_local, obmat, timat, loc, no, dist, depth); retval |= result; - if (f->v4 && result == 0) - { + if (f->v4 && result == 0) { retval |= snapFace(ar, verts[f->v3].co, verts[f->v4].co, verts[f->v1].co, verts[f->v2].co, mval, ray_start, ray_start_local, ray_normal_local, obmat, timat, loc, no, dist, depth); } } } - if (em != NULL) - { + if (em != NULL) { EDBM_index_arrays_free(em); } #endif @@ -1490,8 +1424,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh int index = 0; int i; - if (em != NULL) - { + if (em != NULL) { index_array = dm->getVertDataArray(dm, CD_ORIGINDEX); EDBM_index_arrays_init(em, 1, 0, 0); } @@ -1516,22 +1449,19 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh else { eve = EDBM_vert_at_index(em, index); - if (eve && (BM_elem_flag_test(eve, BM_ELEM_HIDDEN) || BM_elem_flag_test(eve, BM_ELEM_SELECT))) - { + if (eve && (BM_elem_flag_test(eve, BM_ELEM_HIDDEN) || BM_elem_flag_test(eve, BM_ELEM_SELECT))) { test = 0; } } } - if (test) - { + if (test) { retval |= snapVertex(ar, v->co, v->no, obmat, timat, ray_start, ray_start_local, ray_normal_local, mval, r_loc, r_no, r_dist, r_depth); } } - if (em != NULL) - { + if (em != NULL) { EDBM_index_arrays_free(em); } break; @@ -1545,8 +1475,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh int index = 0; int i; - if (em != NULL) - { + if (em != NULL) { index_array = dm->getEdgeDataArray(dm, CD_ORIGINDEX); EDBM_index_arrays_init(em, 0, 1, 0); } @@ -1557,8 +1486,7 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh test = 1; /* reset for every vert */ - if (em != NULL) - { + if (em != NULL) { if (index_array) { index = index_array[i]; } @@ -1580,16 +1508,13 @@ static int snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMesh } } } - - - if (test) - { + + if (test) { retval |= snapEdge(ar, verts[e->v1].co, verts[e->v1].no, verts[e->v2].co, verts[e->v2].no, obmat, timat, ray_start, ray_start_local, ray_normal_local, mval, r_loc, r_no, r_dist, r_depth); } } - if (em != NULL) - { + if (em != NULL) { EDBM_index_arrays_free(em); } break; @@ -1673,8 +1598,7 @@ static int snapObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, c DupliObject *dupli_ob; ListBase *lb = object_duplilist(scene, ob); - for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) - { + for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) { Object *dob = dupli_ob->ob; retval |= snapObject(scene, ar, dob, 0, dupli_ob->mat, ray_start, ray_normal, mval, r_loc, r_no, r_dist, &depth); @@ -1726,8 +1650,7 @@ static void removeDoublesPeel(ListBase *depth_peels) { DepthPeel *peel; - for (peel = depth_peels->first; peel; peel = peel->next) - { + for (peel = depth_peels->first; peel; peel = peel->next) { DepthPeel *next_peel = peel->next; if (next_peel && ABS(peel->depth - next_peel->depth) < 0.0015f) { @@ -1881,8 +1804,7 @@ static int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, L DupliObject *dupli_ob; ListBase *lb = object_duplilist(scene, ob); - for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) - { + for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) { Object *dob = dupli_ob->ob; if (dob->type == OB_MESH) { diff --git a/source/blender/editors/util/numinput.c b/source/blender/editors/util/numinput.c index c037508687b..1f1d5a0c0c0 100644 --- a/source/blender/editors/util/numinput.c +++ b/source/blender/editors/util/numinput.c @@ -207,8 +207,7 @@ char handleNumInput(NumInput *n, wmEvent *event) if (n->flag & NUM_NO_FRACTION) return 0; - switch (n->ctrl[idx]) - { + switch (n->ctrl[idx]) { case 0: case 1: n->ctrl[idx] = 10; diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index 1dee327a066..980aed64ed9 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -861,7 +861,7 @@ const GPUBufferTypeSettings gpu_buffer_type_settings[] = { /* get the GPUDrawObject buffer associated with a type */ static GPUBuffer **gpu_drawobject_buffer_from_type(GPUDrawObject *gdo, GPUBufferType type) { - switch(type) { + switch (type) { case GPU_BUFFER_VERTEX: return &gdo->points; case GPU_BUFFER_NORMAL: @@ -882,7 +882,7 @@ static GPUBuffer **gpu_drawobject_buffer_from_type(GPUDrawObject *gdo, GPUBuffer /* get the amount of space to allocate for a buffer of a particular type */ static int gpu_buffer_size_from_type(DerivedMesh *dm, GPUBufferType type) { - switch(type) { + switch (type) { case GPU_BUFFER_VERTEX: return sizeof(float)*3 * (dm->drawObject->tot_triangle_point + dm->drawObject->tot_loose_point); case GPU_BUFFER_NORMAL: @@ -1059,7 +1059,7 @@ void GPU_uvedge_setup(DerivedMesh *dm) static int GPU_typesize(int type) { - switch(type) { + switch (type) { case GL_FLOAT: return sizeof(float); case GL_INT: diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c index fc3878e2532..4113344760b 100644 --- a/source/blender/gpu/intern/gpu_codegen.c +++ b/source/blender/gpu/intern/gpu_codegen.c @@ -710,8 +710,10 @@ static void GPU_nodes_extract_dynamic_inputs(GPUPass *pass, ListBase *nodes) /* attributes don't need to be bound, they already have * an id that the drawing functions will use */ if (input->source == GPU_SOURCE_ATTRIB || - input->source == GPU_SOURCE_BUILTIN) + input->source == GPU_SOURCE_BUILTIN) + { continue; + } if (input->ima || input->tex) BLI_snprintf(input->shadername, sizeof(input->shadername), "samp%d", input->texid); @@ -1034,8 +1036,10 @@ static void gpu_nodes_get_vertex_attributes(ListBase *nodes, GPUVertexAttribs *a if (input->source == GPU_SOURCE_ATTRIB) { for (a=0; atotlayer; a++) { if (attribs->layer[a].type == input->attribtype && - strcmp(attribs->layer[a].name, input->attribname) == 0) + strcmp(attribs->layer[a].name, input->attribname) == 0) + { break; + } } if (a == attribs->totlayer && a < GPU_MAX_ATTRIB) { diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index 01f000e3314..c830971dcbd 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -441,9 +441,11 @@ int GPU_verify_image(Image *ima, ImageUser *iuser, int tftile, int compare, int /* if same image & tile, we're done */ if (compare && ima == GTS.curima && GTS.curtile == GTS.tile && - GTS.tilemode == GTS.curtilemode && GTS.curtileXRep == GTS.tileXRep && - GTS.curtileYRep == GTS.tileYRep) + GTS.tilemode == GTS.curtilemode && GTS.curtileXRep == GTS.tileXRep && + GTS.curtileYRep == GTS.tileYRep) + { return (ima != NULL); + } /* if tiling mode or repeat changed, change texture matrix to fit */ if (GTS.tilemode!=GTS.curtilemode || GTS.curtileXRep!=GTS.tileXRep || diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c index 6c30c95f355..83d9619f217 100644 --- a/source/blender/gpu/intern/gpu_extensions.c +++ b/source/blender/gpu/intern/gpu_extensions.c @@ -171,14 +171,16 @@ void GPU_extensions_init(void) * New IDs from MESA's src/gallium/drivers/r300/r300_screen.c */ if (strstr(renderer, "R3") || strstr(renderer, "RV3") || - strstr(renderer, "R4") || strstr(renderer, "RV4") || - strstr(renderer, "RS4") || strstr(renderer, "RC4") || - strstr(renderer, "R5") || strstr(renderer, "RV5") || - strstr(renderer, "RS600") || strstr(renderer, "RS690") || - strstr(renderer, "RS740") || strstr(renderer, "X1") || - strstr(renderer, "X2") || strstr(renderer, "Radeon 9") || - strstr(renderer, "RADEON 9")) + strstr(renderer, "R4") || strstr(renderer, "RV4") || + strstr(renderer, "RS4") || strstr(renderer, "RC4") || + strstr(renderer, "R5") || strstr(renderer, "RV5") || + strstr(renderer, "RS600") || strstr(renderer, "RS690") || + strstr(renderer, "RS740") || strstr(renderer, "X1") || + strstr(renderer, "X2") || strstr(renderer, "Radeon 9") || + strstr(renderer, "RADEON 9")) + { GG.npotdisabled = 1; + } } /* make sure double side isn't used by default and only getting enabled in places where it's @@ -236,7 +238,7 @@ static void GPU_print_framebuffer_error(GLenum status, char err_out[256]) { const char *err= "unknown"; - switch(status) { + switch (status) { case GL_FRAMEBUFFER_COMPLETE_EXT: break; case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index ab5f2040175..e14e4dce405 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -397,8 +397,7 @@ static GPUNodeLink *lamp_get_visibility(GPUMaterial *mat, GPULamp *lamp, GPUNode if (lamp->type==LA_AREA) return visifac; - switch(lamp->falloff_type) - { + switch (lamp->falloff_type) { case LA_FALLOFF_CONSTANT: break; case LA_FALLOFF_INVLINEAR: @@ -535,7 +534,7 @@ static void add_to_diffuse(GPUMaterial *mat, Material *ma, GPUShadeInput *shi, G } else { /* input */ - switch(ma->rampin_col) { + switch (ma->rampin_col) { case MA_RAMP_IN_ENERGY: GPU_link(mat, "ramp_rgbtobw", rgb, &fac); break; @@ -588,7 +587,7 @@ static void do_specular_ramp(GPUShadeInput *shi, GPUNodeLink *is, GPUNodeLink *t if (ma->ramp_spec && (ma->rampin_spec!=MA_RAMP_IN_RESULT)) { /* input */ - switch(ma->rampin_spec) { + switch (ma->rampin_spec) { case MA_RAMP_IN_ENERGY: fac = t; break; @@ -807,7 +806,7 @@ static void material_lights(GPUShadeInput *shi, GPUShadeResult *shr) static void texture_rgb_blend(GPUMaterial *mat, GPUNodeLink *tex, GPUNodeLink *out, GPUNodeLink *fact, GPUNodeLink *facg, int blendtype, GPUNodeLink **in) { - switch(blendtype) { + switch (blendtype) { case MTEX_BLEND: GPU_link(mat, "mtex_rgb_blend", out, tex, fact, facg, in); break; @@ -858,7 +857,7 @@ static void texture_rgb_blend(GPUMaterial *mat, GPUNodeLink *tex, GPUNodeLink *o static void texture_value_blend(GPUMaterial *mat, GPUNodeLink *tex, GPUNodeLink *out, GPUNodeLink *fact, GPUNodeLink *facg, int blendtype, GPUNodeLink **in) { - switch(blendtype) { + switch (blendtype) { case MTEX_BLEND: GPU_link(mat, "mtex_value_blend", out, tex, fact, facg, in); break; @@ -1767,7 +1766,7 @@ GPUShaderExport *GPU_shader_export(struct Scene *scene, struct Material *ma) uniform->datatype = GPU_DATA_1I; BLI_strncpy(uniform->varname, input->shadername, sizeof(uniform->varname)); - switch(input->textype) { + switch (input->textype) { case GPU_SHADOW2D: uniform->type = GPU_DYNAMIC_SAMPLER_2DSHADOW; uniform->lamp = input->dynamicdata; @@ -1788,7 +1787,7 @@ GPUShaderExport *GPU_shader_export(struct Scene *scene, struct Material *ma) else { uniform->type = input->dynamictype; BLI_strncpy(uniform->varname, input->shadername, sizeof(uniform->varname)); - switch(input->type) { + switch (input->type) { case 1: uniform->datatype = GPU_DATA_1F; break; @@ -1847,7 +1846,7 @@ GPUShaderExport *GPU_shader_export(struct Scene *scene, struct Material *ma) attribute->number = mat->attribs.layer[i].glindex; BLI_snprintf(attribute->varname, sizeof(attribute->varname), "att%d", mat->attribs.layer[i].attribid); - switch(attribute->type) { + switch (attribute->type) { case CD_TANGENT: attribute->datatype = GPU_DATA_4F; break; diff --git a/source/blender/ikplugin/intern/itasc_plugin.cpp b/source/blender/ikplugin/intern/itasc_plugin.cpp index ccfe2eaa862..a288f330224 100644 --- a/source/blender/ikplugin/intern/itasc_plugin.cpp +++ b/source/blender/ikplugin/intern/itasc_plugin.cpp @@ -502,8 +502,7 @@ static void GetEulerXYZ(const KDL::Rotation& R, double& X,double& Y,double& Z) static void GetJointRotation(KDL::Rotation& boneRot, int type, double* rot) { - switch (type & ~IK_TRANSY) - { + switch (type & ~IK_TRANSY) { default: // fixed bone, no joint break; @@ -825,8 +824,7 @@ static bool joint_callback(const iTaSC::Timestamp& timestamp, iTaSC::ConstraintV } // determine which part of jointValue is used for this joint // closely related to the way the joints are defined - switch (ikchan->jointType & ~IK_TRANSY) - { + switch (ikchan->jointType & ~IK_TRANSY) { case IK_XDOF: case IK_YDOF: case IK_ZDOF: @@ -881,15 +879,21 @@ static int convert_channels(IK_Scene *ikscene, PoseTree *tree) /* set DoF flag */ flag = 0; - if (!(pchan->ikflag & BONE_IK_NO_XDOF) && !(pchan->ikflag & BONE_IK_NO_XDOF_TEMP) && - (!(pchan->ikflag & BONE_IK_XLIMIT) || pchan->limitmin[0]<0.f || pchan->limitmax[0]>0.f)) + if (!(pchan->ikflag & BONE_IK_NO_XDOF) && !(pchan->ikflag & BONE_IK_NO_XDOF_TEMP) && + (!(pchan->ikflag & BONE_IK_XLIMIT) || pchan->limitmin[0]<0.f || pchan->limitmax[0]>0.f)) + { flag |= IK_XDOF; + } if (!(pchan->ikflag & BONE_IK_NO_YDOF) && !(pchan->ikflag & BONE_IK_NO_YDOF_TEMP) && - (!(pchan->ikflag & BONE_IK_YLIMIT) || pchan->limitmin[1]<0.f || pchan->limitmax[1]>0.f)) + (!(pchan->ikflag & BONE_IK_YLIMIT) || pchan->limitmin[1]<0.f || pchan->limitmax[1]>0.f)) + { flag |= IK_YDOF; + } if (!(pchan->ikflag & BONE_IK_NO_ZDOF) && !(pchan->ikflag & BONE_IK_NO_ZDOF_TEMP) && - (!(pchan->ikflag & BONE_IK_ZLIMIT) || pchan->limitmin[2]<0.f || pchan->limitmax[2]>0.f)) + (!(pchan->ikflag & BONE_IK_ZLIMIT) || pchan->limitmin[2]<0.f || pchan->limitmax[2]>0.f)) + { flag |= IK_ZDOF; + } if (tree->stretch && (pchan->ikstretch > 0.0)) { flag |= IK_TRANSY; @@ -921,8 +925,7 @@ static int convert_channels(IK_Scene *ikscene, PoseTree *tree) * bone length is computed from bone->length multiplied by the scaling factor of * the armature. Non-uniform scaling will give bad result! */ - switch (flag & (IK_XDOF|IK_YDOF|IK_ZDOF)) - { + switch (flag & (IK_XDOF|IK_YDOF|IK_ZDOF)) { default: ikchan->jointType = 0; ikchan->ndof = 0; @@ -1165,8 +1168,7 @@ static IK_Scene* convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan) weight[0] = (1.0-pchan->stiffness[0]); weight[1] = (1.0-pchan->stiffness[1]); weight[2] = (1.0-pchan->stiffness[2]); - switch (ikchan->jointType & ~IK_TRANSY) - { + switch (ikchan->jointType & ~IK_TRANSY) { case 0: // fixed bone if (!(ikchan->jointType & IK_TRANSY)) { @@ -1512,7 +1514,7 @@ static void create_scene(Scene *scene, Object *ob) ikdata->first = ikscene; } // delete the trees once we are done - while(tree) { + while (tree) { BLI_remlink(&pchan->iktree, tree); BLI_freelistN(&tree->targets); if (tree->pchan) MEM_freeN(tree->pchan); @@ -1610,10 +1612,12 @@ static void execute_scene(Scene* blscene, IK_Scene* ikscene, bItasc* ikparam, fl ikscene->scene->update(timestamp, timestep, numstep, false, !reiterate, simulation); if (reiterate) { // how many times do we reiterate? - for (i=0; inumiter; i++) { + for (i = 0; inumiter; i++) { if (ikscene->armature->getMaxJointChange() < ikparam->precision || - ikscene->armature->getMaxEndEffectorChange() < ikparam->precision) + ikscene->armature->getMaxEndEffectorChange() < ikparam->precision) + { break; + } ikscene->scene->update(timestamp, timestep, numstep, true, false, simulation); } if (simulation) { diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c index 0c8f932db6a..d0d141a8ef8 100644 --- a/source/blender/imbuf/intern/anim_movie.c +++ b/source/blender/imbuf/intern/anim_movie.c @@ -1271,7 +1271,7 @@ struct ImBuf * IMB_anim_absolute(struct anim * anim, int position, } } - switch(anim->curtype) { + switch (anim->curtype) { case ANIM_SEQUENCE: pic = an_stringdec(anim->first, head, tail, &digits); pic += position; diff --git a/source/blender/imbuf/intern/dds/ColorBlock.cpp b/source/blender/imbuf/intern/dds/ColorBlock.cpp index 42ef799cf3e..42bec5874ca 100644 --- a/source/blender/imbuf/intern/dds/ColorBlock.cpp +++ b/source/blender/imbuf/intern/dds/ColorBlock.cpp @@ -93,12 +93,10 @@ void ColorBlock::init(uint w, uint h, const uint * data, uint x, uint y) // @@ Thats only correct when block size is 1, 2 or 4, but not with 3. :( // @@ Ideally we should zero the weights of the pixels out of range. - for (uint i = 0; i < 4; i++) - { + for (uint i = 0; i < 4; i++) { const int by = i % bh; - for (uint e = 0; e < 4; e++) - { + for (uint e = 0; e < 4; e++) { const int bx = e % bw; const uint idx = (y + by) * w + x + bx; @@ -118,12 +116,10 @@ void ColorBlock::init(uint w, uint h, const float * data, uint x, uint y) uint srcPlane = w * h; - for (uint i = 0; i < 4; i++) - { + for (uint i = 0; i < 4; i++) { const uint by = i % bh; - for (uint e = 0; e < 4; e++) - { + for (uint e = 0; e < 4; e++) { const uint bx = e % bw; const uint idx = ((y + by) * w + x + bx); @@ -148,8 +144,7 @@ static inline uint8 component(Color32 c, uint i) void ColorBlock::swizzle(uint x, uint y, uint z, uint w) { - for (int i = 0; i < 16; i++) - { + for (int i = 0; i < 16; i++) { Color32 c = m_color[i]; m_color[i].r = component(c, x); m_color[i].g = component(c, y); @@ -164,10 +159,8 @@ bool ColorBlock::isSingleColor(Color32 mask/*= Color32(0xFF, 0xFF, 0xFF, 0x00)*/ { uint u = m_color[0].u & mask.u; - for (int i = 1; i < 16; i++) - { - if (u != (m_color[i].u & mask.u)) - { + for (int i = 1; i < 16; i++) { + if (u != (m_color[i].u & mask.u)) { return false; } } @@ -243,8 +236,7 @@ Color32 ColorBlock::averageColor() const /// Return true if the block is not fully opaque. bool ColorBlock::hasAlpha() const { - for (uint i = 0; i < 16; i++) - { + for (uint i = 0; i < 16; i++) { if (m_color[i].a != 255) return true; } return false; diff --git a/source/blender/imbuf/intern/dds/DirectDrawSurface.cpp b/source/blender/imbuf/intern/dds/DirectDrawSurface.cpp index e2874652f02..3966135ea32 100644 --- a/source/blender/imbuf/intern/dds/DirectDrawSurface.cpp +++ b/source/blender/imbuf/intern/dds/DirectDrawSurface.cpp @@ -308,7 +308,7 @@ static const uint DDPF_SRGB = 0x40000000U; const char * getDxgiFormatString(DXGI_FORMAT dxgiFormat) { #define CASE(format) case DXGI_FORMAT_##format: return #format - switch(dxgiFormat) + switch (dxgiFormat) { CASE(UNKNOWN); @@ -431,7 +431,7 @@ static const uint DDPF_SRGB = 0x40000000U; const char * getD3d10ResourceDimensionString(D3D10_RESOURCE_DIMENSION resourceDimension) { - switch(resourceDimension) + switch (resourceDimension) { default: case D3D10_RESOURCE_DIMENSION_UNKNOWN: return "UNKNOWN"; @@ -1305,7 +1305,7 @@ void DirectDrawSurface::readBlock(ColorBlock * rgba) uint DirectDrawSurface::blockSize() const { - switch(header.pf.fourcc) + switch (header.pf.fourcc) { case FOURCC_DXT1: case FOURCC_ATI1: @@ -1318,7 +1318,7 @@ uint DirectDrawSurface::blockSize() const case FOURCC_ATI2: return 16; case FOURCC_DX10: - switch(header.header10.dxgiFormat) + switch (header.header10.dxgiFormat) { case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM: diff --git a/source/blender/imbuf/intern/dds/PixelFormat.h b/source/blender/imbuf/intern/dds/PixelFormat.h index 3c5cb34812c..308ea810f03 100644 --- a/source/blender/imbuf/intern/dds/PixelFormat.h +++ b/source/blender/imbuf/intern/dds/PixelFormat.h @@ -66,17 +66,14 @@ // Convert component \a c having \a inbits to the returned value having \a outbits. inline uint convert(uint c, uint inbits, uint outbits) { - if (inbits == 0) - { + if (inbits == 0) { return 0; } - else if (inbits >= outbits) - { + else if (inbits >= outbits) { // truncate return c >> (inbits - outbits); } - else - { + else { // bitexpand return (c << (outbits - inbits)) | convert(c, inbits, outbits - inbits); } @@ -85,21 +82,20 @@ // Get pixel component shift and size given its mask. inline void maskShiftAndSize(uint mask, uint * shift, uint * size) { - if (!mask) - { + if (!mask) { *shift = 0; *size = 0; return; } *shift = 0; - while((mask & 1) == 0) { + while ((mask & 1) == 0) { ++(*shift); mask >>= 1; } *size = 0; - while((mask & 1) == 1) { + while ((mask & 1) == 1) { ++(*size); mask >>= 1; } diff --git a/source/blender/imbuf/intern/jpeg.c b/source/blender/imbuf/intern/jpeg.c index 3f3ebc5872d..87e56bffb41 100644 --- a/source/blender/imbuf/intern/jpeg.c +++ b/source/blender/imbuf/intern/jpeg.c @@ -321,7 +321,7 @@ static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int f rect = (uchar *) (ibuf->rect + y * ibuf->x); buffer = row_pointer[0]; - switch(depth) { + switch (depth) { case 1: for (x=ibuf->x; x >0; x--) { rect[3] = 255; @@ -524,7 +524,7 @@ next_stamp_info: rect = (uchar *) (ibuf->rect + y * ibuf->x); buffer = row_pointer[0]; - switch(cinfo->in_color_space) { + switch (cinfo->in_color_space) { case JCS_RGB: for (x = 0; x < ibuf->x; x++) { *buffer++ = rect[0]; @@ -577,7 +577,7 @@ static int init_jpeg(FILE * outfile, struct jpeg_compress_struct * cinfo, struct if (ibuf->planes == 32) cinfo->in_color_space = JCS_UNKNOWN; #endif - switch(cinfo->in_color_space) { + switch (cinfo->in_color_space) { case JCS_RGB: cinfo->input_components = 3; break; diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp index ff3a816f478..44b7472b910 100644 --- a/source/blender/imbuf/intern/openexr/openexr_api.cpp +++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp @@ -117,8 +117,7 @@ private: bool Mem_IStream::read (char c[], int n) { - if (n + _exrpos <= _exrsize) - { + if (n + _exrpos <= _exrsize) { memcpy(c, (void *)(&_exrbuf[_exrpos]), n); _exrpos += n; return true; @@ -162,8 +161,7 @@ int imb_is_a_openexr(unsigned char *mem) static void openexr_header_compression(Header *header, int compression) { - switch(compression) - { + switch (compression) { case 0: header->compression() = NO_COMPRESSION; break; @@ -236,12 +234,10 @@ static int imb_save_openexr_half(struct ImBuf *ibuf, const char *name, int flags if (ibuf->rect_float) { float *from; - for (int i = ibuf->y-1; i >= 0; i--) - { + for (int i = ibuf->y-1; i >= 0; i--) { from= ibuf->rect_float + channels*i*width; - for (int j = ibuf->x; j > 0; j--) - { + for (int j = ibuf->x; j > 0; j--) { to->r = from[0]; to->g = from[1]; to->b = from[2]; @@ -254,12 +250,10 @@ static int imb_save_openexr_half(struct ImBuf *ibuf, const char *name, int flags unsigned char *from; if (ibuf->profile == IB_PROFILE_LINEAR_RGB) { - for (int i = ibuf->y-1; i >= 0; i--) - { + for (int i = ibuf->y-1; i >= 0; i--) { from= (unsigned char *)ibuf->rect + channels*i*width; - for (int j = ibuf->x; j > 0; j--) - { + for (int j = ibuf->x; j > 0; j--) { to->r = (float)(from[0])/255.0; to->g = (float)(from[1])/255.0; to->b = (float)(from[2])/255.0; @@ -269,12 +263,10 @@ static int imb_save_openexr_half(struct ImBuf *ibuf, const char *name, int flags } } else { - for (int i = ibuf->y-1; i >= 0; i--) - { + for (int i = ibuf->y-1; i >= 0; i--) { from= (unsigned char *)ibuf->rect + channels*i*width; - for (int j = ibuf->x; j > 0; j--) - { + for (int j = ibuf->x; j > 0; j--) { to->r = srgb_to_linearrgb((float)from[0] / 255.0); to->g = srgb_to_linearrgb((float)from[1] / 255.0); to->b = srgb_to_linearrgb((float)from[2] / 255.0); @@ -364,8 +356,7 @@ static int imb_save_openexr_float(struct ImBuf *ibuf, const char *name, int flag int imb_save_openexr(struct ImBuf *ibuf, const char *name, int flags) { - if (flags & IB_mem) - { + if (flags & IB_mem) { printf("OpenEXR-save: Create EXR in memory CURRENTLY NOT SUPPORTED !\n"); imb_addencodedbufferImBuf(ibuf); ibuf->encodedsize = 0; @@ -743,7 +734,7 @@ static int imb_exr_split_channel_name(ExrChannel *echan, char *layname, char *pa echan->chan_id= echan->name[len-1]; len-= 3; - while(len>=0) { + while (len>=0) { if (echan->name[len]=='.') break; len--; @@ -913,8 +904,7 @@ static void exr_print_filecontents(InputFile *file) { const ChannelList &channels = file->header().channels(); - for (ChannelList::ConstIterator i = channels.begin(); i != channels.end(); ++i) - { + for (ChannelList::ConstIterator i = channels.begin(); i != channels.end(); ++i) { const Channel &channel = i.channel(); printf("OpenEXR-load: Found channel %s of type %d\n", i.name(), channel.type); } @@ -925,8 +915,7 @@ static const char *exr_rgba_channelname(InputFile *file, const char *chan) { const ChannelList &channels = file->header().channels(); - for (ChannelList::ConstIterator i = channels.begin(); i != channels.end(); ++i) - { + for (ChannelList::ConstIterator i = channels.begin(); i != channels.end(); ++i) { /* const Channel &channel = i.channel(); */ /* Not used yet */ const char *str= i.name(); int len= strlen(str); @@ -986,8 +975,7 @@ struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags) is_multi= exr_is_multilayer(file); /* do not make an ibuf when */ - if (is_multi && !(flags & IB_test) && !(flags & IB_multilayer)) - { + if (is_multi && !(flags & IB_test) && !(flags & IB_multilayer)) { printf("Error: can't process EXR multilayer file\n"); } else { @@ -998,10 +986,8 @@ struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags) /* openEXR is linear as per EXR spec */ ibuf->profile = IB_PROFILE_LINEAR_RGB; - if (!(flags & IB_test)) - { - if (is_multi) /* only enters with IB_multilayer flag set */ - { + if (!(flags & IB_test)) { + if (is_multi) { /* only enters with IB_multilayer flag set */ /* constructs channels for reading, allocates memory in channels */ ExrHandle *handle= imb_exr_begin_read_mem(file, width, height); if (handle) { @@ -1032,8 +1018,7 @@ struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags) frameBuffer.insert ( exr_rgba_channelname(file, "A"), Slice (Imf::FLOAT, (char *) (first+3), xstride, ystride, 1, 1, 1.0f)); /* 1.0 is fill value */ - if (exr_has_zbuffer(file)) - { + if (exr_has_zbuffer(file)) { float *firstz; addzbuffloatImBuf(ibuf); diff --git a/source/blender/imbuf/intern/png.c b/source/blender/imbuf/intern/png.c index 74e1a4084c2..513fcb9b6dc 100644 --- a/source/blender/imbuf/intern/png.c +++ b/source/blender/imbuf/intern/png.c @@ -358,7 +358,7 @@ struct ImBuf *imb_loadpng(unsigned char *mem, size_t size, int flags) bytesperpixel = png_get_channels(png_ptr, info_ptr); - switch(color_type) { + switch (color_type) { case PNG_COLOR_TYPE_RGB: case PNG_COLOR_TYPE_RGB_ALPHA: break; diff --git a/source/blender/imbuf/intern/radiance_hdr.c b/source/blender/imbuf/intern/radiance_hdr.c index 524f96b72af..66acd952ac0 100644 --- a/source/blender/imbuf/intern/radiance_hdr.c +++ b/source/blender/imbuf/intern/radiance_hdr.c @@ -192,8 +192,11 @@ struct ImBuf *imb_loadhdr(unsigned char *mem, size_t size, int flags) } } if (found && (x<(size + 2))) { - if (sscanf((char *)&mem[x+1], "%79s %d %79s %d", (char*)&oriY, &height, - (char*)&oriX, &width) != 4) return NULL; + if (sscanf((char *)&mem[x + 1], "%79s %d %79s %d", (char *)&oriY, &height, + (char*)&oriX, &width) != 4) + { + return NULL; + } /* find end of this line, data right behind it */ ptr = (unsigned char *)strchr((char*)&mem[x+1], '\n'); diff --git a/source/blender/imbuf/intern/targa.c b/source/blender/imbuf/intern/targa.c index 7aceb695d00..0ed9b99d0ee 100644 --- a/source/blender/imbuf/intern/targa.c +++ b/source/blender/imbuf/intern/targa.c @@ -288,7 +288,7 @@ int imb_savetarga(struct ImBuf * ibuf, const char *name, int flags) ok = dumptarga(ibuf, fildes); } else { - switch((ibuf->planes + 7) >> 3) { + switch ((ibuf->planes + 7) >> 3) { case 1: ok = makebody_tga(ibuf, fildes, tga_out1); break; @@ -617,7 +617,7 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags) } } - switch(tga.imgtyp) { + switch (tga.imgtyp) { case 1: case 2: case 3: diff --git a/source/blender/imbuf/intern/thumbs.c b/source/blender/imbuf/intern/thumbs.c index 5d64e1b2aec..9aeed8002e1 100644 --- a/source/blender/imbuf/intern/thumbs.c +++ b/source/blender/imbuf/intern/thumbs.c @@ -83,7 +83,7 @@ static int get_thumb_dir( char* dir , ThumbSize size) if (!home) return 0; BLI_strncpy(dir, home, FILE_MAX); #endif - switch(size) { + switch (size) { case THB_NORMAL: strcat(dir, "/.thumbnails/normal/"); break; @@ -269,7 +269,7 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im float scaledx, scaledy; struct stat info; - switch(size) { + switch (size) { case THB_NORMAL: tsize = 128; break; diff --git a/source/blender/imbuf/intern/util.c b/source/blender/imbuf/intern/util.c index b5fdb897d14..9e819e56da5 100644 --- a/source/blender/imbuf/intern/util.c +++ b/source/blender/imbuf/intern/util.c @@ -250,7 +250,7 @@ static int isffmpeg (const char *filename) do_init_ffmpeg(); - if ( BLI_testextensie(filename, ".swf") || + if (BLI_testextensie(filename, ".swf") || BLI_testextensie(filename, ".jpg") || BLI_testextensie(filename, ".png") || BLI_testextensie(filename, ".dds") || @@ -258,7 +258,10 @@ static int isffmpeg (const char *filename) BLI_testextensie(filename, ".bmp") || BLI_testextensie(filename, ".exr") || BLI_testextensie(filename, ".cin") || - BLI_testextensie(filename, ".wav")) return 0; + BLI_testextensie(filename, ".wav")) + { + return 0; + } if (av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0) { if (UTIL_DEBUG) fprintf(stderr, "isffmpeg: av_open_input_file failed\n"); diff --git a/source/blender/makesdna/intern/dna_genfile.c b/source/blender/makesdna/intern/dna_genfile.c index ef7a2746d37..41c04ca0899 100644 --- a/source/blender/makesdna/intern/dna_genfile.c +++ b/source/blender/makesdna/intern/dna_genfile.c @@ -692,7 +692,7 @@ static void cast_elem(const char *ctype, const char *otype, const char *name, ch curlen= DNA_elem_type_size(ctypenr); while (arrlen>0) { - switch(otypenr) { + switch (otypenr) { case SDNA_TYPE_CHAR: val= *olddata; break; case SDNA_TYPE_UCHAR: @@ -717,7 +717,7 @@ static void cast_elem(const char *ctype, const char *otype, const char *name, ch val= *( (uint64_t *)olddata); break; } - switch(ctypenr) { + switch (ctypenr) { case SDNA_TYPE_CHAR: *curdata= val; break; case SDNA_TYPE_UCHAR: diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c index f67fff460f1..f9572e1313a 100644 --- a/source/blender/makesdna/intern/makesdna.c +++ b/source/blender/makesdna/intern/makesdna.c @@ -889,8 +889,7 @@ void dna_write(FILE *file, void *pntr, int size) data = (char *) pntr; - for (i = 0 ; i < size ; i++) - { + for (i = 0 ; i < size ; i++) { fprintf(file, "%d,", data[i]); linelength++; if (linelength >= MAX_DNA_LINE_LENGTH) { diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index e083a690fba..ca29dcd341d 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1359,8 +1359,10 @@ static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp) * array get/next function, we can be sure it is an actual array */ if (cprop->next && cprop->get) if (strcmp((const char*)cprop->next, "rna_iterator_array_next") == 0 && - strcmp((const char*)cprop->get, "rna_iterator_array_get") == 0) + strcmp((const char*)cprop->get, "rna_iterator_array_get") == 0) + { prop->flag |= PROP_RAW_ARRAY; + } cprop->get = (void*)rna_def_property_get_func(f, srna, prop, dp, (const char*)cprop->get); cprop->begin = (void*)rna_def_property_begin_func(f, srna, prop, dp, (const char*)cprop->begin); diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 3200b271718..a0335402060 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -3122,9 +3122,10 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro if (((itemtype == PROP_BOOLEAN || itemtype == PROP_INT) && in.type == PROP_RAW_INT) || (itemtype == PROP_FLOAT && in.type == PROP_RAW_FLOAT)) + { /* avoid creating temporary buffer if the data type match */ needconv = 0; - + } /* no item property pointer, can still be id property, or * property of a type derived from the collection pointer type */ RNA_PROP_BEGIN(ptr, itemptr, prop) { diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index bf5f51374fa..122e42e29e7 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -482,12 +482,10 @@ static void rna_FModifier_active_update(Main *UNUSED(bmain), Scene *UNUSED(scene FModifier *fm, *fmo = (FModifier*)ptr->data; /* clear active state of other FModifiers in this list */ - for (fm = fmo->prev; fm; fm = fm->prev) - { + for (fm = fmo->prev; fm; fm = fm->prev) { fm->flag &= ~FMODIFIER_FLAG_ACTIVE; } - for (fm = fmo->next; fm; fm = fm->next) - { + for (fm = fmo->next; fm; fm = fm->next) { fm->flag &= ~FMODIFIER_FLAG_ACTIVE; } diff --git a/source/blender/makesrna/intern/rna_main.c b/source/blender/makesrna/intern/rna_main.c index e616a632147..cb4eea5c25b 100644 --- a/source/blender/makesrna/intern/rna_main.c +++ b/source/blender/makesrna/intern/rna_main.c @@ -347,8 +347,7 @@ void RNA_def_main(BlenderRNA *brna) RNA_def_property_boolean_funcs(prop, "rna_Main_is_saved_get", NULL); RNA_def_property_ui_text(prop, "File is Saved", "Has the current session been saved to disk as a .blend file"); - for (i = 0; lists[i].name; i++) - { + for (i = 0; lists[i].name; i++) { prop = RNA_def_property(srna, lists[i].identifier, PROP_COLLECTION, PROP_NONE); RNA_def_property_struct_type(prop, lists[i].type); RNA_def_property_collection_funcs(prop, lists[i].iter_begin, "rna_iterator_listbase_next", diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 8c4b7917cb8..0eb4ef1c5c9 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -665,13 +665,15 @@ static int rna_KeyMapItem_any_getf(PointerRNA *ptr) wmKeyMapItem *kmi = (wmKeyMapItem*)ptr->data; if (kmi->shift == KM_ANY && - kmi->ctrl == KM_ANY && - kmi->alt == KM_ANY && - kmi->oskey == KM_ANY) - + kmi->ctrl == KM_ANY && + kmi->alt == KM_ANY && + kmi->oskey == KM_ANY) + { return 1; - else + } + else { return 0; + } } static void rna_KeyMapItem_any_setf(PointerRNA *ptr, int value) diff --git a/source/blender/modifiers/intern/MOD_boolean.c b/source/blender/modifiers/intern/MOD_boolean.c index e4e89db403d..c11d6fc50af 100644 --- a/source/blender/modifiers/intern/MOD_boolean.c +++ b/source/blender/modifiers/intern/MOD_boolean.c @@ -97,7 +97,7 @@ static DerivedMesh *get_quick_derivedMesh(DerivedMesh *derivedData, DerivedMesh DerivedMesh *result = NULL; if (derivedData->getNumPolys(derivedData) == 0 || dm->getNumPolys(dm) == 0) { - switch(operation) { + switch (operation) { case eBooleanModifierOp_Intersect: result = CDDM_new(0, 0, 0, 0, 0); break; diff --git a/source/blender/modifiers/intern/MOD_cast.c b/source/blender/modifiers/intern/MOD_cast.c index 15940112527..8ad5b72204b 100644 --- a/source/blender/modifiers/intern/MOD_cast.c +++ b/source/blender/modifiers/intern/MOD_cast.c @@ -423,8 +423,11 @@ static void cuboid_do( if (has_radius) { if (fabsf(tmp_co[0]) > cmd->radius || - fabsf(tmp_co[1]) > cmd->radius || - fabsf(tmp_co[2]) > cmd->radius) continue; + fabsf(tmp_co[1]) > cmd->radius || + fabsf(tmp_co[2]) > cmd->radius) + { + continue; + } } for (j = 0; j < dvert[i].totweight; ++j) { @@ -521,8 +524,11 @@ static void cuboid_do( if (has_radius) { if (fabsf(tmp_co[0]) > cmd->radius || - fabsf(tmp_co[1]) > cmd->radius || - fabsf(tmp_co[2]) > cmd->radius) continue; + fabsf(tmp_co[1]) > cmd->radius || + fabsf(tmp_co[2]) > cmd->radius) + { + continue; + } } octant = 0; diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c index b3faf6c140a..4c5ce184c22 100644 --- a/source/blender/modifiers/intern/MOD_collision.c +++ b/source/blender/modifiers/intern/MOD_collision.c @@ -71,8 +71,7 @@ static void freeData(ModifierData *md) { CollisionModifierData *collmd = (CollisionModifierData*) md; - if (collmd) - { + if (collmd) { if (collmd->bvhtree) BLI_bvhtree_free(collmd->bvhtree); if (collmd->x) @@ -120,14 +119,12 @@ static void deformVerts(ModifierData *md, Object *ob, if (derivedData) dm = CDDM_copy(derivedData); else if (ob->type==OB_MESH) dm = CDDM_from_mesh(ob->data, ob); - if (!ob->pd) - { + if (!ob->pd) { printf("CollisionModifier deformVerts: Should not happen!\n"); return; } - if (dm) - { + if (dm) { float current_time = 0; unsigned int numverts = 0; @@ -141,20 +138,17 @@ static void deformVerts(ModifierData *md, Object *ob, numverts = dm->getNumVerts ( dm ); - if ((current_time > collmd->time_xnew)|| (BKE_ptcache_get_continue_physics())) - { + if ((current_time > collmd->time_xnew)|| (BKE_ptcache_get_continue_physics())) { unsigned int i; // check if mesh has changed if (collmd->x && (numverts != collmd->numverts)) freeData((ModifierData *)collmd); - if (collmd->time_xnew == -1000) // first time - { + if (collmd->time_xnew == -1000) { /* first time */ collmd->x = dm->dupVertArray(dm); // frame start position - for ( i = 0; i < numverts; i++ ) - { + for ( i = 0; i < numverts; i++ ) { // we save global positions mul_m4_v3( ob->obmat, collmd->x[i].co ); } diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c index 293a8a8c686..70294588fd4 100644 --- a/source/blender/modifiers/intern/MOD_displace.c +++ b/source/blender/modifiers/intern/MOD_displace.c @@ -208,7 +208,7 @@ static void displaceModifier_do( delta *= strength; CLAMP(delta, -10000, 10000); - switch(dmd->direction) { + switch (dmd->direction) { case MOD_DISP_DIR_X: vertexCos[i][0] += delta; break; diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c index a1dc69918c2..11542dc4c1a 100644 --- a/source/blender/modifiers/intern/MOD_explode.c +++ b/source/blender/modifiers/intern/MOD_explode.c @@ -679,7 +679,7 @@ static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) for (i=0,fs=facesplit; igetTessFaceData(dm, i, CD_MFACE); - switch(*fs) { + switch (*fs) { case 3: case 10: case 11: @@ -711,7 +711,7 @@ static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm) break; } - switch(*fs) { + switch (*fs) { case 3: case 6: case 9: diff --git a/source/blender/modifiers/intern/MOD_fluidsim_util.c b/source/blender/modifiers/intern/MOD_fluidsim_util.c index fe0cb2e650f..8d3b1871c51 100644 --- a/source/blender/modifiers/intern/MOD_fluidsim_util.c +++ b/source/blender/modifiers/intern/MOD_fluidsim_util.c @@ -66,8 +66,7 @@ void fluidsim_init(FluidsimModifierData *fluidmd) { #ifdef WITH_MOD_FLUID - if (fluidmd) - { + if (fluidmd) { FluidsimSettings *fss = MEM_callocN(sizeof(FluidsimSettings), "fluidsimsettings"); fluidmd->fss = fss; @@ -184,8 +183,7 @@ static DerivedMesh *fluidsim_read_obj(const char *filename, const MPoly *mp_exam // get numverts + numfaces first // ------------------------------------------------ gzf = BLI_gzopen(filename, "rb"); - if (!gzf) - { + if (!gzf) { return NULL; } @@ -216,15 +214,13 @@ static DerivedMesh *fluidsim_read_obj(const char *filename, const MPoly *mp_exam return NULL; gzf = BLI_gzopen(filename, "rb"); - if (!gzf) - { + if (!gzf) { return NULL; } dm = CDDM_new(numverts, 0, 0, numfaces * 3, numfaces); - if (!dm) - { + if (!dm) { gzclose(gzf); return NULL; } @@ -240,8 +236,7 @@ static DerivedMesh *fluidsim_read_obj(const char *filename, const MPoly *mp_exam // should be the same as numverts gotBytes = gzread(gzf, &wri, sizeof(wri)); - if (wri != numverts) - { + if (wri != numverts) { if (dm) dm->release(dm); gzclose(gzf); @@ -249,8 +244,7 @@ static DerivedMesh *fluidsim_read_obj(const char *filename, const MPoly *mp_exam } normals = MEM_callocN(sizeof(short) * numverts * 3, "fluid_tmp_normals" ); - if (!normals) - { + if (!normals) { if (dm) dm->release(dm); gzclose(gzf); @@ -258,8 +252,7 @@ static DerivedMesh *fluidsim_read_obj(const char *filename, const MPoly *mp_exam } // read normals from file (but don't save them yet) - for (i=numverts, no_s= normals; i>0; i--, no_s += 3) - { + for (i=numverts, no_s= normals; i>0; i--, no_s += 3) { gotBytes = gzread(gzf, no, sizeof(float) * 3); normal_float_to_short_v3(no_s, no); } @@ -279,8 +272,7 @@ static DerivedMesh *fluidsim_read_obj(const char *filename, const MPoly *mp_exam // read triangles from file mp = CDDM_get_polys(dm); ml = CDDM_get_loops(dm); - for (i=0; i < numfaces; i++, mp++, ml += 3) - { + for (i=0; i < numfaces; i++, mp++, ml += 3) { int face[3]; gotBytes = gzread(gzf, face, sizeof(int) * 3); @@ -390,8 +382,7 @@ static void fluidsim_read_vel_cache(FluidsimModifierData *fluidmd, DerivedMesh * if (fss->meshVelocities) MEM_freeN(fss->meshVelocities); - if (len<7) - { + if (len < 7) { return; } @@ -409,25 +400,21 @@ static void fluidsim_read_vel_cache(FluidsimModifierData *fluidmd, DerivedMesh * filename[len-4] = 'l'; gzf = BLI_gzopen(filename, "rb"); - if (!gzf) - { + if (!gzf) { MEM_freeN(fss->meshVelocities); fss->meshVelocities = NULL; return; } gzread(gzf, &wri, sizeof( wri )); - if (wri != totvert) - { + if (wri != totvert) { MEM_freeN(fss->meshVelocities); fss->meshVelocities = NULL; return; } - for (i=0; idw; int j; @@ -229,8 +228,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, BLI_ghash_free(vgroupHash, NULL, NULL); MEM_freeN(bone_select_array); } - else /* --- Using Nominated VertexGroup only --- */ - { + else { /* --- Using Nominated VertexGroup only --- */ int defgrp_index = defgroup_name_index(ob, mmd->vgroup); /* get dverts */ @@ -245,8 +243,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, vertHash= BLI_ghash_new(BLI_ghashutil_inthash, BLI_ghashutil_intcmp, "mask vert2 bh"); /* add vertices which exist in vertexgroup into ghash for filtering */ - for (i= 0, dv= dvert; i < maxVerts; i++, dv++) - { + for (i= 0, dv= dvert; i < maxVerts; i++, dv++) { const int weight_set= defvert_find_weight(dv, defgrp_index) != 0.0f; /* check if include vert in vertHash */ @@ -277,8 +274,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, /* loop over edges and faces, and do the same thing to * ensure that they only reference existing verts */ - for (i = 0; i < maxEdges; i++) - { + for (i = 0; i < maxEdges; i++) { MEdge me; dm->getEdge(dm, i, &me); @@ -290,8 +286,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, numEdges++; } } - for (i = 0; i < maxPolys; i++) - { + for (i = 0; i < maxPolys; i++) { MPoly *mp = &mpoly[i]; MLoop *ml = mloop + mp->loopstart; int ok = TRUE; diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c index d408e5a3bee..56b6493eda6 100644 --- a/source/blender/modifiers/intern/MOD_remesh.c +++ b/source/blender/modifiers/intern/MOD_remesh.c @@ -103,8 +103,10 @@ static void *dualcon_alloc_output(int totvert, int totquad) DualConOutput *output; if (!(output = MEM_callocN(sizeof(DualConOutput), - "DualConOutput"))) + "DualConOutput"))) + { return NULL; + } output->dm = CDDM_new(totvert, 0, 0, 4*totquad, totquad); return output; @@ -164,7 +166,7 @@ static DerivedMesh *applyModifier(ModifierData *md, if (rmd->flag & MOD_REMESH_FLOOD_FILL) flags |= DUALCON_FLOOD_FILL; - switch(rmd->mode) { + switch (rmd->mode) { case MOD_REMESH_CENTROID: mode = DUALCON_CENTROID; break; diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c index ae21d3d66ad..60eed4abcb1 100644 --- a/source/blender/modifiers/intern/MOD_screw.c +++ b/source/blender/modifiers/intern/MOD_screw.c @@ -179,7 +179,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, if (!totvert) return CDDM_from_template(dm, 0, 0, 0, 0, 0); - switch(ltmd->axis) { + switch (ltmd->axis) { case 0: other_axis_1=1; other_axis_2=2; diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c index 6c1325b0bde..5ac52a97315 100644 --- a/source/blender/modifiers/intern/MOD_simpledeform.c +++ b/source/blender/modifiers/intern/MOD_simpledeform.c @@ -185,8 +185,7 @@ static void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object float lower = FLT_MAX; float upper = -FLT_MAX; - for (i=0; ivgroup_name, &dvert, &vgroup); - switch(smd->mode) - { + switch (smd->mode) { case MOD_SIMPLEDEFORM_MODE_TWIST: simpleDeform_callback = simpleDeform_twist; break; case MOD_SIMPLEDEFORM_MODE_BEND: simpleDeform_callback = simpleDeform_bend; break; case MOD_SIMPLEDEFORM_MODE_TAPER: simpleDeform_callback = simpleDeform_taper; break; @@ -216,8 +214,7 @@ static void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object return; //No simpledeform mode? } - for (i=0; ifalloff_type) { + switch (wmd->falloff_type) { case eWarp_Falloff_None: fac = 1.0f; break; diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c index 78e76e27c02..5fa3090cd87 100644 --- a/source/blender/modifiers/intern/MOD_wave.c +++ b/source/blender/modifiers/intern/MOD_wave.c @@ -247,7 +247,7 @@ static void waveModifier_do(WaveModifierData *md, } } - switch(wmd_axis) { + switch (wmd_axis) { case MOD_WAVE_X|MOD_WAVE_Y: amplit = sqrtf(x*x + y*y); break; @@ -270,7 +270,7 @@ static void waveModifier_do(WaveModifierData *md, if (falloff != 0.0f) { float dist = 0.0f; - switch(wmd_axis) { + switch (wmd_axis) { case MOD_WAVE_X|MOD_WAVE_Y: dist = sqrtf(x*x + y*y); break; diff --git a/source/blender/modifiers/intern/MOD_weightvg_util.c b/source/blender/modifiers/intern/MOD_weightvg_util.c index 5ce435a7ca5..1f886812ab7 100644 --- a/source/blender/modifiers/intern/MOD_weightvg_util.c +++ b/source/blender/modifiers/intern/MOD_weightvg_util.c @@ -69,7 +69,9 @@ void weightvg_do_map(int num, float *new_w, short falloff_type, CurveMapping *cm !ELEM7(falloff_type, MOD_WVG_MAPPING_CURVE, MOD_WVG_MAPPING_SHARP, MOD_WVG_MAPPING_SMOOTH, MOD_WVG_MAPPING_ROOT, MOD_WVG_MAPPING_SPHERE, MOD_WVG_MAPPING_RANDOM, MOD_WVG_MAPPING_STEP)) + { return; + } /* Map each weight (vertex) to its new value, accordingly to the chosen mode. */ for (i = 0; i < num; ++i) { @@ -77,7 +79,7 @@ void weightvg_do_map(int num, float *new_w, short falloff_type, CurveMapping *cm /* Code borrowed from the warp modifier. */ /* Closely matches PROP_SMOOTH and similar. */ - switch(falloff_type) { + switch (falloff_type) { case MOD_WVG_MAPPING_CURVE: fac = curvemapping_evaluateF(cmap, 0, fac); break; @@ -157,7 +159,7 @@ void weightvg_do_mask(int num, const int *indices, float *org_w, const float *ne texres.nor = NULL; get_texture_value(texture, tex_co[idx], &texres); /* Get the good channel value... */ - switch(tex_use_channel) { + switch (tex_use_channel) { case MOD_WVG_MASK_TEX_USE_INT: org_w[i] = (new_w[i] * texres.tin * fact) + (org_w[i] * (1.0f - (texres.tin*fact))); break; diff --git a/source/blender/nodes/composite/node_composite_util.c b/source/blender/nodes/composite/node_composite_util.c index ab3a363e703..8012057b393 100644 --- a/source/blender/nodes/composite/node_composite_util.c +++ b/source/blender/nodes/composite/node_composite_util.c @@ -884,8 +884,9 @@ static void FHT2D(fREAL *data, unsigned int Mx, unsigned int My, #define PRED(k) (((k & Nym) << Mx) + (k >> My)) for (j=PRED(i); j>i; j=PRED(j)); if (j < i) continue; - for (k=i, j=PRED(i); j!=i; k=j, j=PRED(j), stm--) - { t=data[j], data[j]=data[k], data[k]=t; } + for (k=i, j=PRED(i); j!=i; k=j, j=PRED(j), stm--) { + t=data[j], data[j]=data[k], data[k]=t; + } #undef PRED stm--; } @@ -1108,7 +1109,7 @@ void qd_getPixel(CompBuf* src, int x, int y, float* col) float bc[4]; src->rect_procedural(src, bc, (float)x/(float)src->xrad, (float)y/(float)src->yrad); - switch(src->type) { + switch (src->type) { /* these fallthrough to get all the channels */ case CB_RGBA: col[3]=bc[3]; case CB_VEC3: col[2]=bc[2]; @@ -1118,7 +1119,7 @@ void qd_getPixel(CompBuf* src, int x, int y, float* col) } else if ((x >= 0) && (x < src->x) && (y >= 0) && (y < src->y)) { float* bc = &src->rect[(x + y*src->x)*src->type]; - switch(src->type) { + switch (src->type) { /* these fallthrough to get all the channels */ case CB_RGBA: col[3]=bc[3]; case CB_VEC3: col[2]=bc[2]; @@ -1127,7 +1128,7 @@ void qd_getPixel(CompBuf* src, int x, int y, float* col) } } else { - switch(src->type) { + switch (src->type) { /* these fallthrough to get all the channels */ case CB_RGBA: col[3]=0.0; case CB_VEC3: col[2]=0.0; @@ -1142,7 +1143,7 @@ void qd_setPixel(CompBuf* src, int x, int y, float* col) { if ((x >= 0) && (x < src->x) && (y >= 0) && (y < src->y)) { float* bc = &src->rect[(x + y*src->x)*src->type]; - switch(src->type) { + switch (src->type) { /* these fallthrough to get all the channels */ case CB_RGBA: bc[3]=col[3]; case CB_VEC3: bc[2]=col[2]; diff --git a/source/blender/nodes/composite/nodes/node_composite_channelMatte.c b/source/blender/nodes/composite/nodes/node_composite_channelMatte.c index 132b1659fa5..b3690b5d20f 100644 --- a/source/blender/nodes/composite/nodes/node_composite_channelMatte.c +++ b/source/blender/nodes/composite/nodes/node_composite_channelMatte.c @@ -71,7 +71,7 @@ static void do_channel_matte(bNode *node, float *out, float *in) NodeChroma *c=(NodeChroma *)node->storage; float alpha=0.0; - switch(c->algorithm) { + switch (c->algorithm) { case 0: { /* Alpha=key_channel-limit channel */ int key_channel=node->custom2-1; int limit_channel=c->channel-1; @@ -79,7 +79,7 @@ static void do_channel_matte(bNode *node, float *out, float *in) break; } case 1: { /* Alpha=G-MAX(R, B) */ - switch(node->custom2) { + switch (node->custom2) { case 1: { alpha=in[0]-MAX2(in[1],in[2]); break; @@ -139,7 +139,7 @@ static void node_composit_exec_channel_matte(void *data, bNode *node, bNodeStack outbuf=dupalloc_compbuf(cbuf); /*convert to colorspace*/ - switch(node->custom1) { + switch (node->custom1) { case CMP_NODE_CHANNEL_MATTE_CS_RGB: break; case CMP_NODE_CHANNEL_MATTE_CS_HSV: /*HSV*/ @@ -159,7 +159,7 @@ static void node_composit_exec_channel_matte(void *data, bNode *node, bNodeStack composit1_pixel_processor(node, outbuf, outbuf, in[1]->vec, do_channel_matte, CB_RGBA); /*convert back to RGB colorspace in place*/ - switch(node->custom1) { + switch (node->custom1) { case CMP_NODE_CHANNEL_MATTE_CS_RGB: /*RGB*/ break; case CMP_NODE_CHANNEL_MATTE_CS_HSV: /*HSV*/ diff --git a/source/blender/nodes/composite/nodes/node_composite_colorSpill.c b/source/blender/nodes/composite/nodes/node_composite_colorSpill.c index 46d7c620aa8..0153a2bce34 100644 --- a/source/blender/nodes/composite/nodes/node_composite_colorSpill.c +++ b/source/blender/nodes/composite/nodes/node_composite_colorSpill.c @@ -206,12 +206,10 @@ static void node_composit_exec_color_spill(void *UNUSED(data), bNode *node, bNod spillmap=alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); rgbbuf=dupalloc_compbuf(cbuf); - switch(node->custom1) - { + switch (node->custom1) { case 1: /*red spill*/ { - switch(node->custom2) - { + switch (node->custom2) { case 0: /* simple limit */ { if ((in[1]->data==NULL) && (in[1]->vec[0] >= 1.f)) { @@ -243,8 +241,7 @@ static void node_composit_exec_color_spill(void *UNUSED(data), bNode *node, bNod } case 2: /*green spill*/ { - switch(node->custom2) - { + switch (node->custom2) { case 0: /* simple limit */ { if ((in[1]->data==NULL) && (in[1]->vec[0] >= 1.f)) { @@ -276,8 +273,7 @@ static void node_composit_exec_color_spill(void *UNUSED(data), bNode *node, bNod } case 3: /*blue spill*/ { - switch(node->custom2) - { + switch (node->custom2) { case 0: /* simple limit */ { if ((in[1]->data==NULL) && (in[1]->vec[0] >= 1.f)) { diff --git a/source/blender/nodes/composite/nodes/node_composite_filter.c b/source/blender/nodes/composite/nodes/node_composite_filter.c index 6d470467cb0..d6cb54eb944 100644 --- a/source/blender/nodes/composite/nodes/node_composite_filter.c +++ b/source/blender/nodes/composite/nodes/node_composite_filter.c @@ -189,7 +189,7 @@ static void node_composit_exec_filter(void *data, bNode *node, bNodeStack **in, stackbuf->xof= cbuf->xof; stackbuf->yof= cbuf->yof; - switch(node->custom1) { + switch (node->custom1) { case CMP_FILT_SOFT: do_filter3(stackbuf, cbuf, soft, in[0]->vec[0]); break; diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c index 6a156c390a7..62179cfa471 100644 --- a/source/blender/nodes/composite/nodes/node_composite_image.c +++ b/source/blender/nodes/composite/nodes/node_composite_image.c @@ -442,11 +442,14 @@ static void node_composit_exec_image(void *data, bNode *node, bNodeStack **UNUSE /* preview policy: take first 'Combined' pass if available, * otherwise just use the first layer. */ - if (!firstbuf) + if (!firstbuf) { firstbuf = stackbuf; + } if (!combinedbuf && - (strcmp(sock->name, "Combined")==0 || strcmp(sock->name, "Image")==0)) + (strcmp(sock->name, "Combined") == 0 || strcmp(sock->name, "Image") == 0)) + { combinedbuf = stackbuf; + } } } } diff --git a/source/blender/nodes/composite/nodes/node_composite_levels.c b/source/blender/nodes/composite/nodes/node_composite_levels.c index ec6d2006296..32b07582140 100644 --- a/source/blender/nodes/composite/nodes/node_composite_levels.c +++ b/source/blender/nodes/composite/nodes/node_composite_levels.c @@ -64,7 +64,7 @@ static void fill_bins(bNode* node, CompBuf* in, int* bins) qd_getPixel(in, x, y, value); if (value[3] > 0.0f) { /* don't count transparent pixels */ - switch(node->custom1) { + switch (node->custom1) { case 1: { /* all colors */ rgb_tobw(value[0],value[1],value[2], &value[0]); value[0]=value[0]*255; /* scale to 0-255 range */ @@ -122,8 +122,7 @@ static float brightness_mean(bNode* node, CompBuf* in) if (value[3] > 0.0f) { /* don't count transparent pixels */ numPixels++; - switch(node->custom1) - { + switch (node->custom1) { case 1: { rgb_tobw(value[0],value[1],value[2], &value[0]); @@ -174,8 +173,7 @@ static float brightness_standard_deviation(bNode* node, CompBuf* in, float mean) if (value[3] > 0.0f) { /* don't count transparent pixels */ numPixels++; - switch(node->custom1) - { + switch (node->custom1) { case 1: { rgb_tobw(value[0],value[1],value[2], &value[0]); diff --git a/source/blender/nodes/composite/nodes/node_composite_math.c b/source/blender/nodes/composite/nodes/node_composite_math.c index 8362df1b691..4c9d1a66fb0 100644 --- a/source/blender/nodes/composite/nodes/node_composite_math.c +++ b/source/blender/nodes/composite/nodes/node_composite_math.c @@ -46,8 +46,7 @@ static bNodeSocketTemplate cmp_node_math_out[]= { static void do_math(bNode *node, float *out, float *in, float *in2) { - switch(node->custom1) - { + switch (node->custom1) { case 0: /* Add */ out[0]= in[0] + in2[0]; break; diff --git a/source/blender/nodes/composite/nodes/node_composite_rotate.c b/source/blender/nodes/composite/nodes/node_composite_rotate.c index 6952817248d..8268977658d 100644 --- a/source/blender/nodes/composite/nodes/node_composite_rotate.c +++ b/source/blender/nodes/composite/nodes/node_composite_rotate.c @@ -87,7 +87,7 @@ static void node_composit_exec_rotate(void *UNUSED(data), bNode *node, bNodeStac v=-s*x + c*y + centy; xo= x+(int)centx; - switch(node->custom1) { + switch (node->custom1) { case 0: neareast_interpolation(ibuf, obuf, u, v, xo, yo); break; diff --git a/source/blender/nodes/composite/nodes/node_composite_sepcombYCCA.c b/source/blender/nodes/composite/nodes/node_composite_sepcombYCCA.c index b12f08bb13d..6eff3dcd95b 100644 --- a/source/blender/nodes/composite/nodes/node_composite_sepcombYCCA.c +++ b/source/blender/nodes/composite/nodes/node_composite_sepcombYCCA.c @@ -91,8 +91,7 @@ static void node_composit_exec_sepycca(void *UNUSED(data), bNode *node, bNodeSta if (in[0]->data==NULL) { float y, cb, cr; - switch(node->custom1) - { + switch (node->custom1) { case 1: rgb_to_ycc(in[0]->vec[0], in[0]->vec[1], in[0]->vec[2], &y, &cb, &cr, BLI_YCC_ITU_BT709); break; @@ -117,8 +116,7 @@ static void node_composit_exec_sepycca(void *UNUSED(data), bNode *node, bNodeSta CompBuf *cbuf2=typecheck_compbuf(cbuf, CB_RGBA); /* convert the RGB stackbuf to an HSV representation */ - switch(node->custom1) - { + switch (node->custom1) { case 1: composit1_pixel_processor(node, cbuf2, cbuf2, in[0]->vec, do_sepycca_709, CB_RGBA); break; @@ -240,8 +238,7 @@ static void node_composit_exec_combycca(void *UNUSED(data), bNode *node, bNodeSt float cb = in[1]->vec[0] * 255; float cr = in[2]->vec[0] * 255; - switch(node->custom1) - { + switch (node->custom1) { case 1: ycc_to_rgb(y, cb, cr, &out[0]->vec[0], &out[0]->vec[1], &out[0]->vec[2], BLI_YCC_ITU_BT709); break; @@ -270,8 +267,7 @@ static void node_composit_exec_combycca(void *UNUSED(data), bNode *node, bNodeSt stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */ - switch(node->custom1) - { + switch (node->custom1) { case 1: composit4_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec, in[2]->data, in[2]->vec, in[3]->data, in[3]->vec, diff --git a/source/blender/nodes/composite/nodes/node_composite_transform.c b/source/blender/nodes/composite/nodes/node_composite_transform.c index a610d8a66c4..a7906cf3e46 100644 --- a/source/blender/nodes/composite/nodes/node_composite_transform.c +++ b/source/blender/nodes/composite/nodes/node_composite_transform.c @@ -89,7 +89,7 @@ CompBuf* node_composit_transform(CompBuf *cbuf, float x, float y, float angle, f mul_v3_m4v3(vec, mat, vec); - switch(filter_type) { + switch (filter_type) { case 0: neareast_interpolation(ibuf, obuf, vec[0], vec[1], i, j); break; diff --git a/source/blender/nodes/shader/node_shader_util.c b/source/blender/nodes/shader/node_shader_util.c index 90c62bc47ac..9a9a27603dc 100644 --- a/source/blender/nodes/shader/node_shader_util.c +++ b/source/blender/nodes/shader/node_shader_util.c @@ -101,7 +101,7 @@ void ntreeShaderGetTexcoMode(bNodeTree *ntree, int r_mode, short *texco, int *mo /* note; sockets always exist for the given type! */ for (a=0, sock= node->outputs.first; sock; sock= sock->next, a++) { if (sock->flag & SOCK_IN_USE) { - switch(a) { + switch (a) { case GEOM_OUT_GLOB: *texco |= TEXCO_GLOB|NEED_UV; break; case GEOM_OUT_VIEW: @@ -137,7 +137,7 @@ void nodeShaderSynchronizeID(bNode *node, int copyto) for (a=0, sock= node->inputs.first; sock; sock= sock->next, a++) { if (!nodeSocketIsHidden(sock)) { if (copyto) { - switch(a) { + switch (a) { case MAT_IN_COLOR: copy_v3_v3(&ma->r, ((bNodeSocketValueRGBA*)sock->default_value)->value); break; case MAT_IN_SPEC: @@ -161,7 +161,7 @@ void nodeShaderSynchronizeID(bNode *node, int copyto) } } else { - switch(a) { + switch (a) { case MAT_IN_COLOR: copy_v3_v3(((bNodeSocketValueRGBA*)sock->default_value)->value, &ma->r); break; case MAT_IN_SPEC: diff --git a/source/blender/nodes/shader/nodes/node_shader_math.c b/source/blender/nodes/shader/nodes/node_shader_math.c index 44df496f5d6..db2b57ab51b 100644 --- a/source/blender/nodes/shader/nodes/node_shader_math.c +++ b/source/blender/nodes/shader/nodes/node_shader_math.c @@ -48,7 +48,7 @@ static bNodeSocketTemplate sh_node_math_out[]= { static void node_shader_exec_math(void *UNUSED(data), bNode *node, bNodeStack **in, bNodeStack **out) { - switch(node->custom1) { + switch (node->custom1) { case 0: /* Add */ out[0]->vec[0]= in[0]->vec[0] + in[1]->vec[0]; diff --git a/source/blender/nodes/texture/nodes/node_texture_math.c b/source/blender/nodes/texture/nodes/node_texture_math.c index 29d154df884..54c9645fac3 100644 --- a/source/blender/nodes/texture/nodes/node_texture_math.c +++ b/source/blender/nodes/texture/nodes/node_texture_math.c @@ -51,7 +51,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor float in0 = tex_input_value(in[0], p, thread); float in1 = tex_input_value(in[1], p, thread); - switch(node->custom1) { + switch (node->custom1) { case 0: /* Add */ *out= in0 + in1; diff --git a/source/blender/nodes/texture/nodes/node_texture_output.c b/source/blender/nodes/texture/nodes/node_texture_output.c index 2b899fde593..19ba0e88639 100644 --- a/source/blender/nodes/texture/nodes/node_texture_output.c +++ b/source/blender/nodes/texture/nodes/node_texture_output.c @@ -88,14 +88,14 @@ static void unique_name(bNode *node) i = node; while (i->prev) i = i->prev; - for (; i; i=i->next) { - if ( - i == node || - i->type != TEX_NODE_OUTPUT || - strcmp(name, ((TexNodeOutput*)(i->storage))->name) - ) + for ( ; i; i = i->next) { + if (i == node || + i->type != TEX_NODE_OUTPUT || + strcmp(name, ((TexNodeOutput*)(i->storage))->name)) + { continue; - + } + if (!new_name) { int len = strlen(name); if (len >= 4 && sscanf(name + len - 4, ".%03d", &suffix) == 1) { diff --git a/source/blender/quicktime/apple/quicktime_import.c b/source/blender/quicktime/apple/quicktime_import.c index a1f35935877..197c8cebca3 100644 --- a/source/blender/quicktime/apple/quicktime_import.c +++ b/source/blender/quicktime/apple/quicktime_import.c @@ -195,16 +195,19 @@ int anim_is_quicktime (const char *name) // don't let quicktime movie import handle these if ( BLI_testextensie(name, ".swf") || - BLI_testextensie(name, ".txt") || - BLI_testextensie(name, ".mpg") || - BLI_testextensie(name, ".avi") || // wouldnt be appropriate ;) - BLI_testextensie(name, ".tga") || - BLI_testextensie(name, ".png") || - BLI_testextensie(name, ".bmp") || - BLI_testextensie(name, ".jpg") || - BLI_testextensie(name, ".wav") || - BLI_testextensie(name, ".zip") || - BLI_testextensie(name, ".mp3")) return 0; + BLI_testextensie(name, ".txt") || + BLI_testextensie(name, ".mpg") || + BLI_testextensie(name, ".avi") || // wouldnt be appropriate ;) + BLI_testextensie(name, ".tga") || + BLI_testextensie(name, ".png") || + BLI_testextensie(name, ".bmp") || + BLI_testextensie(name, ".jpg") || + BLI_testextensie(name, ".wav") || + BLI_testextensie(name, ".zip") || + BLI_testextensie(name, ".mp3")) + { + return 0; + } if (QTIME_DEBUG) printf("qt: checking as movie: %s\n", name); @@ -582,13 +585,16 @@ int imb_is_a_quicktime (char *name) if (QTIME_DEBUG) printf("qt: checking as image %s\n", name); // don't let quicktime image import handle these - if ( BLI_testextensie(name, ".swf") || - BLI_testextensie(name, ".txt") || - BLI_testextensie(name, ".mpg") || - BLI_testextensie(name, ".wav") || - BLI_testextensie(name, ".mov") || // not as image, doesn't work - BLI_testextensie(name, ".avi") || - BLI_testextensie(name, ".mp3")) return 0; + if (BLI_testextensie(name, ".swf") || + BLI_testextensie(name, ".txt") || + BLI_testextensie(name, ".mpg") || + BLI_testextensie(name, ".wav") || + BLI_testextensie(name, ".mov") || // not as image, doesn't work + BLI_testextensie(name, ".avi") || + BLI_testextensie(name, ".mp3")) + { + return 0; + } sprintf(theFullPath, "%s", name); #ifdef __APPLE__ diff --git a/source/blender/render/intern/raytrace/bvh.h b/source/blender/render/intern/raytrace/bvh.h index ac86a65ff0b..946b64e98e5 100644 --- a/source/blender/render/intern/raytrace/bvh.h +++ b/source/blender/render/intern/raytrace/bvh.h @@ -88,9 +88,9 @@ static int rayobject_bb_intersect_test(const Isect *isec, const float *_bb) RE_RC_COUNT(isec->raycounter->bb.test); - if(t1x > t2y || t2x < t1y || t1x > t2z || t2x < t1z || t1y > t2z || t2y < t1z) return 0; - if(t2x < 0.0 || t2y < 0.0 || t2z < 0.0) return 0; - if(t1x > isec->dist || t1y > isec->dist || t1z > isec->dist) return 0; + if (t1x > t2y || t2x < t1y || t1x > t2z || t2x < t1z || t1y > t2z || t2y < t1z) return 0; + if (t2x < 0.0 || t2y < 0.0 || t2z < 0.0) return 0; + if (t1x > isec->dist || t1y > isec->dist || t1z > isec->dist) return 0; RE_RC_COUNT(isec->raycounter->bb.hit); return 1; @@ -113,10 +113,10 @@ template static void bvh_done(Tree *obj); template static void bvh_free(Tree *obj) { - if(obj->builder) + if (obj->builder) rtbuild_free(obj->builder); - if(obj->node_arena) + if (obj->node_arena) BLI_memarena_free(obj->node_arena); MEM_freeN(obj); @@ -125,7 +125,7 @@ static void bvh_free(Tree *obj) template static void bvh_bb(Tree *obj, float *min, float *max) { - if(obj->root) + if (obj->root) bvh_node_merge_bb(obj->root, min, max); } @@ -149,12 +149,10 @@ template static inline int bvh_node_hit_test(Node *node, Isect *isec template static inline void bvh_node_merge_bb(Node *node, float *min, float *max) { - if(is_leaf(node)) - { + if (is_leaf(node)) { RE_rayobject_merge_bb( (RayObject*)node, min, max); } - else - { + else { DO_MIN(node->bb , min); DO_MAX(node->bb+3, max); } @@ -173,26 +171,22 @@ static int bvh_node_stack_raycast(Node *root, Isect *isec) Node *stack[MAX_STACK_SIZE]; int hit = 0, stack_pos = 0; - if(!TEST_ROOT && !is_leaf(root)) + if (!TEST_ROOT && !is_leaf(root)) bvh_node_push_childs(root, isec, stack, stack_pos); else stack[stack_pos++] = root; - while(stack_pos) - { + while (stack_pos) { Node *node = stack[--stack_pos]; - if(!is_leaf(node)) - { - if(bvh_node_hit_test(node,isec)) - { + if (!is_leaf(node)) { + if (bvh_node_hit_test(node,isec)) { bvh_node_push_childs(node, isec, stack, stack_pos); assert(stack_pos <= MAX_STACK_SIZE); } } - else - { + else { hit |= RE_rayobject_intersect( (RayObject*)node, isec); - if(SHADOW && hit) return hit; + if (SHADOW && hit) return hit; } } return hit; @@ -212,11 +206,9 @@ static int bvh_node_stack_raycast_simd(Node *root, Isect *isec) int hit = 0, stack_pos = 0; - if(!TEST_ROOT) - { - if(!is_leaf(root)) - { - if(!is_leaf(root->child)) + if (!TEST_ROOT) { + if (!is_leaf(root)) { + if (!is_leaf(root->child)) bvh_node_push_childs(root, isec, stack, stack_pos); else return RE_rayobject_intersect( (RayObject*)root->child, isec); @@ -224,19 +216,16 @@ static int bvh_node_stack_raycast_simd(Node *root, Isect *isec) else return RE_rayobject_intersect( (RayObject*)root, isec); } - else - { - if(!is_leaf(root)) + else { + if (!is_leaf(root)) stack[stack_pos++] = root; else return RE_rayobject_intersect( (RayObject*)root, isec); } - while(true) - { + while (true) { //Use SIMD 4 - if(stack_pos >= 4) - { + if (stack_pos >= 4) { __m128 t_bb[6]; Node * t_node[4]; @@ -286,41 +275,33 @@ static int bvh_node_stack_raycast_simd(Node *root, Isect *isec) RE_RC_COUNT(isec->raycounter->simd_bb.test); int res = test_bb_group4( t_bb, isec ); - for(int i=0; i<4; i++) - if(res & (1<raycounter->simd_bb.hit); - if(!is_leaf(t_node[i])) - { - for(Node *t=t_node[i]; t; t=t->sibling) - { + if (!is_leaf(t_node[i])) { + for (Node *t = t_node[i]; t; t = t->sibling) { assert(stack_pos < MAX_STACK_SIZE); stack[stack_pos++] = t; } } - else - { + else { hit |= RE_rayobject_intersect( (RayObject*)t_node[i], isec); - if(hit && isec->mode == RE_RAY_SHADOW) return hit; + if (hit && isec->mode == RE_RAY_SHADOW) return hit; } } } - else if(stack_pos > 0) - { + else if (stack_pos > 0) { Node *node = stack[--stack_pos]; assert(!is_leaf(node)); - if(bvh_node_hit_test(node,isec)) - { - if(!is_leaf(node->child)) - { + if (bvh_node_hit_test(node,isec)) { + if (!is_leaf(node->child)) { bvh_node_push_childs(node, isec, stack, stack_pos); assert(stack_pos <= MAX_STACK_SIZE); } - else - { + else { hit |= RE_rayobject_intersect( (RayObject*)node->child, isec); - if(hit && isec->mode == RE_RAY_SHADOW) return hit; + if (hit && isec->mode == RE_RAY_SHADOW) return hit; } } } @@ -338,41 +319,41 @@ template static int bvh_node_raycast(Node *node, Isect *isec) { int hit = 0; - if(bvh_test_node(node, isec)) + if (bvh_test_node(node, isec)) { - if(isec->idot_axis[node->split_axis] > 0.0f) + if (isec->idot_axis[node->split_axis] > 0.0f) { int i; for(i=0; ichild[i])) + if (!is_leaf(node->child[i])) { - if(node->child[i] == 0) break; + if (node->child[i] == 0) break; hit |= bvh_node_raycast(node->child[i], isec); - if(hit && isec->mode == RE_RAY_SHADOW) return hit; + if (hit && isec->mode == RE_RAY_SHADOW) return hit; } else { hit |= RE_rayobject_intersect( (RayObject*)node->child[i], isec); - if(hit && isec->mode == RE_RAY_SHADOW) return hit; + if (hit && isec->mode == RE_RAY_SHADOW) return hit; } } else { int i; for(i=BVH_NCHILDS-1; i>=0; i--) - if(!is_leaf(node->child[i])) + if (!is_leaf(node->child[i])) { - if(node->child[i]) + if (node->child[i]) { hit |= dfs_raycast(node->child[i], isec); - if(hit && isec->mode == RE_RAY_SHADOW) return hit; + if (hit && isec->mode == RE_RAY_SHADOW) return hit; } } else { hit |= RE_rayobject_intersect( (RayObject*)node->child[i], isec); - if(hit && isec->mode == RE_RAY_SHADOW) return hit; + if (hit && isec->mode == RE_RAY_SHADOW) return hit; } } } @@ -385,28 +366,22 @@ void bvh_dfs_make_hint(Node *node, LCTSHint *hint, int reserve_space, HintObject { assert( hint->size + reserve_space + 1 <= RE_RAY_LCTS_MAX_SIZE ); - if(is_leaf(node)) - { + if (is_leaf(node)) { hint->stack[hint->size++] = (RayObject*)node; } - else - { + else { int childs = count_childs(node); - if(hint->size + reserve_space + childs <= RE_RAY_LCTS_MAX_SIZE) - { + if (hint->size + reserve_space + childs <= RE_RAY_LCTS_MAX_SIZE) { int result = hint_test_bb(hintObject, node->bb, node->bb+3); - if(result == HINT_RECURSE) - { + if (result == HINT_RECURSE) { /* We are 100% sure the ray will be pass inside this node */ bvh_dfs_make_hint_push_siblings(node->child, hint, reserve_space, hintObject); } - else if(result == HINT_ACCEPT) - { + else if (result == HINT_ACCEPT) { hint->stack[hint->size++] = (RayObject*)node; } } - else - { + else { hint->stack[hint->size++] = (RayObject*)node; } } diff --git a/source/blender/render/intern/raytrace/rayobject.cpp b/source/blender/render/intern/raytrace/rayobject.cpp index b2f85e8429d..a2773ba218d 100644 --- a/source/blender/render/intern/raytrace/rayobject.cpp +++ b/source/blender/render/intern/raytrace/rayobject.cpp @@ -60,13 +60,11 @@ MALWAYS_INLINE RayObject* rayface_from_coords(RayFace *rayface, void *ob, void * copy_v3_v3(rayface->v2, v2); copy_v3_v3(rayface->v3, v3); - if (v4) - { + if (v4) { copy_v3_v3(rayface->v4, v4); rayface->quad = 1; } - else - { + else { rayface->quad = 0; } @@ -77,8 +75,7 @@ MALWAYS_INLINE void rayface_from_vlak(RayFace *rayface, ObjectInstanceRen *obi, { rayface_from_coords(rayface, obi, vlr, vlr->v1->co, vlr->v2->co, vlr->v3->co, vlr->v4 ? vlr->v4->co : NULL); - if (obi->transform_primitives) - { + if (obi->transform_primitives) { mul_m4_v3(obi->mat, rayface->v1); mul_m4_v3(obi->mat, rayface->v2); mul_m4_v3(obi->mat, rayface->v3); @@ -295,13 +292,11 @@ MALWAYS_INLINE int intersect_rayface(RayObject *hit_obj, RayFace *face, Isect *i return 0; /* check if we should intersect this face */ - if (is->check == RE_CHECK_VLR_RENDER) - { + if (is->check == RE_CHECK_VLR_RENDER) { if (vlr_check_intersect(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face) == 0) return 0; } - else if (is->check == RE_CHECK_VLR_NON_SOLID_MATERIAL) - { + else if (is->check == RE_CHECK_VLR_NON_SOLID_MATERIAL) { if (vlr_check_intersect(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face) == 0) return 0; if (vlr_check_intersect_solid(is, (ObjectInstanceRen*)face->ob, (VlakRen*)face->face) == 0) @@ -322,27 +317,25 @@ MALWAYS_INLINE int intersect_rayface(RayObject *hit_obj, RayFace *face, Isect *i /* when a shadow ray leaves a face, it can be little outside the edges * of it, causing intersection to be detected in its neighbor face */ - if (is->skip & RE_SKIP_VLR_NEIGHBOUR) - { - if (dist < 0.1f && is->orig.ob == face->ob) - { + if (is->skip & RE_SKIP_VLR_NEIGHBOUR) { + if (dist < 0.1f && is->orig.ob == face->ob) { VlakRen * a = (VlakRen*)is->orig.face; VlakRen * b = (VlakRen*)face->face; /* so there's a shared edge or vertex, let's intersect ray with * face itself, if that's true we can safely return 1, otherwise * we assume the intersection is invalid, 0 */ - if (a->v1==b->v1 || a->v2==b->v1 || a->v3==b->v1 || a->v4==b->v1 - || a->v1==b->v2 || a->v2==b->v2 || a->v3==b->v2 || a->v4==b->v2 - || a->v1==b->v3 || a->v2==b->v3 || a->v3==b->v3 || a->v4==b->v3 - || (b->v4 && (a->v1==b->v4 || a->v2==b->v4 || a->v3==b->v4 || a->v4==b->v4))) { + if (a->v1==b->v1 || a->v2==b->v1 || a->v3==b->v1 || a->v4==b->v1 || + a->v1==b->v2 || a->v2==b->v2 || a->v3==b->v2 || a->v4==b->v2 || + a->v1==b->v3 || a->v2==b->v3 || a->v3==b->v3 || a->v4==b->v3 || + (b->v4 && (a->v1==b->v4 || a->v2==b->v4 || a->v3==b->v4 || a->v4==b->v4))) + { /* create RayFace from original face, transformed if necessary */ RayFace origface; ObjectInstanceRen *ob= (ObjectInstanceRen*)is->orig.ob; rayface_from_vlak(&origface, ob, (VlakRen*)is->orig.face); - if (!isec_tri_quad_neighbour(is->start, is->dir, &origface)) - { + if (!isec_tri_quad_neighbour(is->start, is->dir, &origface)) { return 0; } } @@ -375,8 +368,7 @@ int RE_rayobject_raycast(RayObject *r, Isect *isec) RE_RC_COUNT(isec->raycounter->raycast.test); /* setup vars used on raycast */ - for (i=0; i<3; i++) - { + for (i=0; i<3; i++) { isec->idot_axis[i] = 1.0f / isec->dir[i]; isec->bv_index[2*i] = isec->idot_axis[i] < 0.0 ? 1 : 0; @@ -388,12 +380,10 @@ int RE_rayobject_raycast(RayObject *r, Isect *isec) #ifdef RT_USE_LAST_HIT /* last hit heuristic */ - if (isec->mode==RE_RAY_SHADOW && isec->last_hit) - { + if (isec->mode==RE_RAY_SHADOW && isec->last_hit) { RE_RC_COUNT(isec->raycounter->rayshadow_last_hit.test); - if (RE_rayobject_intersect(isec->last_hit, isec)) - { + if (RE_rayobject_intersect(isec->last_hit, isec)) { RE_RC_COUNT(isec->raycounter->raycast.hit); RE_RC_COUNT(isec->raycounter->rayshadow_last_hit.hit); return 1; @@ -405,8 +395,7 @@ int RE_rayobject_raycast(RayObject *r, Isect *isec) isec->hit_hint = 0; #endif - if (RE_rayobject_intersect(r, isec)) - { + if (RE_rayobject_intersect(r, isec)) { RE_RC_COUNT(isec->raycounter->raycast.hit); #ifdef RT_USE_HINT @@ -420,12 +409,10 @@ int RE_rayobject_raycast(RayObject *r, Isect *isec) int RE_rayobject_intersect(RayObject *r, Isect *i) { - if (RE_rayobject_isRayFace(r)) - { + if (RE_rayobject_isRayFace(r)) { return intersect_rayface(r, (RayFace*) RE_rayobject_align(r), i); } - else if (RE_rayobject_isVlakPrimitive(r)) - { + else if (RE_rayobject_isVlakPrimitive(r)) { //TODO optimize (useless copy to RayFace to avoid duplicate code) VlakPrimitive *face = (VlakPrimitive*) RE_rayobject_align(r); RayFace nface; @@ -433,8 +420,7 @@ int RE_rayobject_intersect(RayObject *r, Isect *i) return intersect_rayface(r, &nface, i); } - else if (RE_rayobject_isRayAPI(r)) - { + else if (RE_rayobject_isRayAPI(r)) { r = RE_rayobject_align(r); return r->api->raycast(r, i); } @@ -466,12 +452,10 @@ void RE_rayobject_free(RayObject *r) float RE_rayobject_cost(RayObject *r) { - if (RE_rayobject_isRayFace(r) || RE_rayobject_isVlakPrimitive(r)) - { + if (RE_rayobject_isRayFace(r) || RE_rayobject_isVlakPrimitive(r)) { return 1.0f; } - else if (RE_rayobject_isRayAPI(r)) - { + else if (RE_rayobject_isRayAPI(r)) { r = RE_rayobject_align(r); return r->api->cost(r); } @@ -485,8 +469,7 @@ float RE_rayobject_cost(RayObject *r) void RE_rayobject_merge_bb(RayObject *r, float *min, float *max) { - if (RE_rayobject_isRayFace(r)) - { + if (RE_rayobject_isRayFace(r)) { RayFace *face = (RayFace*) RE_rayobject_align(r); DO_MINMAX(face->v1, min, max); @@ -494,8 +477,7 @@ void RE_rayobject_merge_bb(RayObject *r, float *min, float *max) DO_MINMAX(face->v3, min, max); if (RE_rayface_isQuad(face)) DO_MINMAX(face->v4, min, max); } - else if (RE_rayobject_isVlakPrimitive(r)) - { + else if (RE_rayobject_isVlakPrimitive(r)) { VlakPrimitive *face = (VlakPrimitive*) RE_rayobject_align(r); RayFace nface; rayface_from_vlak(&nface, face->ob, face->face); @@ -505,8 +487,7 @@ void RE_rayobject_merge_bb(RayObject *r, float *min, float *max) DO_MINMAX(nface.v3, min, max); if (RE_rayface_isQuad(&nface)) DO_MINMAX(nface.v4, min, max); } - else if (RE_rayobject_isRayAPI(r)) - { + else if (RE_rayobject_isRayAPI(r)) { r = RE_rayobject_align(r); r->api->bb(r, min, max); } @@ -518,12 +499,10 @@ void RE_rayobject_merge_bb(RayObject *r, float *min, float *max) void RE_rayobject_hint_bb(RayObject *r, RayHint *hint, float *min, float *max) { - if (RE_rayobject_isRayFace(r) || RE_rayobject_isVlakPrimitive(r)) - { + if (RE_rayobject_isRayFace(r) || RE_rayobject_isVlakPrimitive(r)) { return; } - else if (RE_rayobject_isRayAPI(r)) - { + else if (RE_rayobject_isRayAPI(r)) { r = RE_rayobject_align(r); return r->api->hint_bb(r, hint, min, max); } @@ -543,8 +522,7 @@ int RE_rayobjectcontrol_test_break(RayObjectControl *control) void RE_rayobject_set_control(RayObject *r, void *data, RE_rayobjectcontrol_test_break_callback test_break) { - if (RE_rayobject_isRayAPI(r)) - { + if (RE_rayobject_isRayAPI(r)) { r = RE_rayobject_align(r); r->control.data = data; r->control.test_break = test_break; diff --git a/source/blender/render/intern/raytrace/rayobject_blibvh.cpp b/source/blender/render/intern/raytrace/rayobject_blibvh.cpp index 165b62cfbe4..d0036fd8556 100644 --- a/source/blender/render/intern/raytrace/rayobject_blibvh.cpp +++ b/source/blender/render/intern/raytrace/rayobject_blibvh.cpp @@ -102,8 +102,7 @@ static void bvh_callback(void *userdata, int index, const BVHTreeRay *UNUSED(ray Isect *isec = data->isec; RayObject *face = data->leafs[index]; - if (RE_rayobject_intersect(face,isec)) - { + if (RE_rayobject_intersect(face, isec)) { hit->index = index; if (isec->mode == RE_RAY_SHADOW) diff --git a/source/blender/render/intern/raytrace/rayobject_hint.h b/source/blender/render/intern/raytrace/rayobject_hint.h index 3689aa8ac17..37d9edb035d 100644 --- a/source/blender/render/intern/raytrace/rayobject_hint.h +++ b/source/blender/render/intern/raytrace/rayobject_hint.h @@ -44,7 +44,7 @@ struct HintBB inline int hint_test_bb(HintBB *obj, float *Nmin, float *Nmax) { - if(bb_fits_inside( Nmin, Nmax, obj->bb, obj->bb+3 ) ) + if (bb_fits_inside( Nmin, Nmax, obj->bb, obj->bb+3 ) ) return HINT_RECURSE; else return HINT_ACCEPT; diff --git a/source/blender/render/intern/raytrace/rayobject_instance.cpp b/source/blender/render/intern/raytrace/rayobject_instance.cpp index 2e803ce0fd3..ce88bac1587 100644 --- a/source/blender/render/intern/raytrace/rayobject_instance.cpp +++ b/source/blender/render/intern/raytrace/rayobject_instance.cpp @@ -99,8 +99,7 @@ static int RE_rayobject_instance_intersect(RayObject *o, Isect *isec) int changed = 0, i, res; // TODO - this is disabling self intersection on instances - if (isec->orig.ob == obj->ob && obj->ob) - { + if (isec->orig.ob == obj->ob && obj->ob) { changed = 1; isec->orig.ob = obj->target_ob; } @@ -117,8 +116,7 @@ static int RE_rayobject_instance_intersect(RayObject *o, Isect *isec) isec->dist *= normalize_v3(isec->dir); // update idot_axis and bv_index - for (i=0; i<3; i++) - { + for (i=0; i<3; i++) { isec->idot_axis[i] = 1.0f / isec->dir[i]; isec->bv_index[2*i] = isec->idot_axis[i] < 0.0 ? 1 : 0; @@ -132,12 +130,10 @@ static int RE_rayobject_instance_intersect(RayObject *o, Isect *isec) res = RE_rayobject_intersect(obj->target, isec); // map dist into original coordinate space - if (res == 0) - { + if (res == 0) { isec->dist = dist; } - else - { + else { // note we don't just multiply dist, because of possible // non-uniform scaling in the transform matrix float vec[3]; @@ -165,8 +161,7 @@ static int RE_rayobject_instance_intersect(RayObject *o, Isect *isec) isec->orig.ob = obj->ob; // restore bv_index - for (i=0; i<3; i++) - { + for (i=0; i<3; i++) { isec->bv_index[2*i] = isec->idot_axis[i] < 0.0 ? 1 : 0; isec->bv_index[2*i+1] = 1 - isec->bv_index[2*i]; @@ -202,8 +197,7 @@ static void RE_rayobject_instance_bb(RayObject *o, float *min, float *max) RE_rayobject_merge_bb(obj->target, m, M); //There must be a faster way than rotating all the 8 vertexs of the BB - for (i=0; i<8; i++) - { + for (i=0; i<8; i++) { for (j=0; j<3; j++) t[j] = i&(1<target2global, t); DO_MINMAX(t, min, max); diff --git a/source/blender/render/intern/raytrace/rayobject_octree.cpp b/source/blender/render/intern/raytrace/rayobject_octree.cpp index ea1d5c2573c..eef2fcc51c9 100644 --- a/source/blender/render/intern/raytrace/rayobject_octree.cpp +++ b/source/blender/render/intern/raytrace/rayobject_octree.cpp @@ -305,7 +305,7 @@ static void ocwrite(Octree *oc, RayFace *face, int quad, short x, short y, short no= (Node *)br->b[oc5]; if (no==NULL) br->b[oc5]= (Branch *)(no= addnode(oc)); - while(no->next) no= no->next; + while (no->next) no = no->next; a= 0; if (no->v[7]) { /* node full */ @@ -313,7 +313,7 @@ static void ocwrite(Octree *oc, RayFace *face, int quad, short x, short y, short no= no->next; } else { - while(no->v[a]!=NULL) a++; + while (no->v[a] != NULL) a++; } no->v[a]= (RayFace*) RE_rayobject_align(face); @@ -383,7 +383,7 @@ static void d2dda(Octree *oc, short b1, short b2, short c1, short c2, char *ocfa x=ocx1; y=ocy1; labda= MIN2(labdax, labday); - while(TRUE) { + while (TRUE) { if (x<0 || y<0 || x>=oc->ocres || y>=oc->ocres); else ocface[oc->ocres*x+y]= 1; @@ -421,7 +421,7 @@ static void filltriangle(Octree *oc, short c1, short c2, char *ocface, short *oc for (y=ocmin[c2];y<=ocmax[c2];y++) { if (ocface[a+y]) { y++; - while(ocface[a+y] && y!=ocmax[c2]) y++; + while (ocface[a+y] && y!=ocmax[c2]) y++; for (y1=ocmax[c2];y1>y;y1--) { if (ocface[a+y1]) { for (y2=y;y2<=y1;y2++) ocface[a+y2]=1; @@ -449,7 +449,7 @@ static void RE_rayobject_octree_free(RayObject *tree) if (oc->adrbranch) { int a= 0; - while(oc->adrbranch[a]) { + while (oc->adrbranch[a]) { MEM_freeN(oc->adrbranch[a]); oc->adrbranch[a]= NULL; a++; @@ -461,7 +461,7 @@ static void RE_rayobject_octree_free(RayObject *tree) if (oc->adrnode) { int a= 0; - while(oc->adrnode[a]) { + while (oc->adrnode[a]) { MEM_freeN(oc->adrnode[a]); oc->adrnode[a]= NULL; a++; @@ -658,8 +658,7 @@ static void RE_rayobject_octree_done(RayObject *tree) oc->ocsize= sqrt(t00*t00+t01*t01+t02*t02); /* global, max size octree */ - for (c=0; cro_nodes_used; c++) - { + for (c=0; cro_nodes_used; c++) { octree_fill_rayface(oc, oc->ro_nodes[c]); } @@ -683,42 +682,41 @@ static void RE_rayobject_octree_bb(RayObject *tree, float *min, float *max) /* check all faces in this node */ static int testnode(Octree *UNUSED(oc), Isect *is, Node *no, OcVal ocval) { - short nr=0; + short nr = 0; /* return on any first hit */ - if (is->mode==RE_RAY_SHADOW) { + if (is->mode == RE_RAY_SHADOW) { - for (; no; no = no->next) - for (nr=0; nr<8; nr++) - { - RayFace *face = no->v[nr]; - OcVal *ov = no->ov+nr; - - if (!face) break; - - if ( (ov->ocx & ocval.ocx) && (ov->ocy & ocval.ocy) && (ov->ocz & ocval.ocz) ) - { - if ( RE_rayobject_intersect( RE_rayobject_unalignRayFace(face),is) ) - return 1; + for ( ; no; no = no->next) { + for (nr = 0; nr < 8; nr++) { + RayFace *face = no->v[nr]; + OcVal *ov = no->ov + nr; + + if (!face) break; + + if ( (ov->ocx & ocval.ocx) && (ov->ocy & ocval.ocy) && (ov->ocz & ocval.ocz) ) { + if ( RE_rayobject_intersect( RE_rayobject_unalignRayFace(face),is) ) + return 1; + } } } } - else - { /* else mirror or glass or shadowtra, return closest face */ + else { + /* else mirror or glass or shadowtra, return closest face */ int found= 0; - for (; no; no = no->next) - for (nr=0; nr<8; nr++) - { - RayFace *face = no->v[nr]; - OcVal *ov = no->ov+nr; - - if (!face) break; - - if ( (ov->ocx & ocval.ocx) && (ov->ocy & ocval.ocy) && (ov->ocz & ocval.ocz) ) - { - if ( RE_rayobject_intersect( RE_rayobject_unalignRayFace(face),is) ) - found= 1; + for ( ; no; no = no->next) { + for (nr = 0; nr < 8; nr++) { + RayFace *face = no->v[nr]; + OcVal *ov = no->ov + nr; + + if (!face) break; + + if ( (ov->ocx & ocval.ocx) && (ov->ocy & ocval.ocy) && (ov->ocz & ocval.ocz) ) { + if ( RE_rayobject_intersect( RE_rayobject_unalignRayFace(face),is) ) { + found = 1; + } + } } } @@ -1003,7 +1001,7 @@ static int RE_rayobject_octree_intersect(RayObject *tree, Isect *is) /* this loop has been constructed to make sure the first and last node of ray * are always included, even when ddalabda==1.0f or larger */ - while(TRUE) { + while (TRUE) { no= ocread(oc, xo, yo, zo); if (no) { diff --git a/source/blender/render/intern/raytrace/rayobject_qbvh.cpp b/source/blender/render/intern/raytrace/rayobject_qbvh.cpp index 2edf1593e99..2d0abba9a75 100644 --- a/source/blender/render/intern/raytrace/rayobject_qbvh.cpp +++ b/source/blender/render/intern/raytrace/rayobject_qbvh.cpp @@ -71,8 +71,7 @@ void bvh_done(QBVHTree *obj) //TODO do this in 1 pass (half memory usage during building) VBVHNode *root = BuildBinaryVBVH(arena1, &obj->rayobj.control).transform(obj->builder); - if (RE_rayobjectcontrol_test_break(&obj->rayobj.control)) - { + if (RE_rayobjectcontrol_test_break(&obj->rayobj.control)) { BLI_memarena_free(arena1); BLI_memarena_free(arena2); return; diff --git a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp index 54901db8bdd..ad74159fd3b 100644 --- a/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp +++ b/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp @@ -74,8 +74,7 @@ RTBuilder* rtbuild_create(int size) builder->primitives.begin = builder->primitives.end = memblock; builder->primitives.maxsize = size; - for (int i=0; i<3; i++) - { + for (int i=0; i<3; i++) { builder->sorted_begin[i] = (RTBuilder::Object**)MEM_mallocN( sizeof(RTBuilder::Object*)*size,"RTBuilder.sorted_objects"); builder->sorted_end[i] = builder->sorted_begin[i]; } @@ -124,8 +123,7 @@ void rtbuild_add(RTBuilder *b, RayObject *o) b->primitives.end->obj = o; b->primitives.end->cost = RE_rayobject_cost(o); - for (int i=0; i<3; i++) - { + for (int i=0; i<3; i++) { *(b->sorted_end[i]) = b->primitives.end; b->sorted_end[i]++; } @@ -158,8 +156,7 @@ static void object_sort(Item *begin, Item *end, int axis) void rtbuild_done(RTBuilder *b, RayObjectControl* ctrl) { for (int i=0; i<3; i++) - if (b->sorted_begin[i]) - { + if (b->sorted_begin[i]) { if (RE_rayobjectcontrol_test_break(ctrl)) break; object_sort( b->sorted_begin[i], b->sorted_end[i], i ); } @@ -175,13 +172,11 @@ RTBuilder* rtbuild_get_child(RTBuilder *b, int child, RTBuilder *tmp) rtbuild_init( tmp ); for (int i=0; i<3; i++) - if (b->sorted_begin[i]) - { + if (b->sorted_begin[i]) { tmp->sorted_begin[i] = b->sorted_begin[i] + b->child_offset[child ]; tmp->sorted_end [i] = b->sorted_begin[i] + b->child_offset[child+1]; } - else - { + else { tmp->sorted_begin[i] = 0; tmp->sorted_end [i] = 0; } @@ -191,8 +186,7 @@ RTBuilder* rtbuild_get_child(RTBuilder *b, int child, RTBuilder *tmp) void rtbuild_calc_bb(RTBuilder *b) { - if (b->bb[0] == 1.0e30f) - { + if (b->bb[0] == 1.0e30f) { for (RTBuilder::Object **index = b->sorted_begin[0]; index != b->sorted_end[0]; index++) RE_rayobject_merge_bb( (*index)->obj , b->bb, b->bb+3); } @@ -337,30 +331,25 @@ int rtbuild_heuristic_object_split(RTBuilder *b, int nchilds) assert(size > 1); int baxis = -1, boffset = 0; - if (size > nchilds) - { + if (size > nchilds) { float bcost = FLT_MAX; baxis = -1, boffset = size/2; SweepCost *sweep = (SweepCost*)MEM_mallocN( sizeof(SweepCost)*size, "RTBuilder.HeuristicSweep" ); - for (int axis=0; axis<3; axis++) - { + for (int axis=0; axis<3; axis++) { SweepCost sweep_left; RTBuilder::Object **obj = b->sorted_begin[axis]; // float right_cost = 0; - for (int i=size-1; i>=0; i--) - { - if (i == size-1) - { + for (int i=size-1; i>=0; i--) { + if (i == size-1) { copy_v3_v3(sweep[i].bb, obj[i]->bb); copy_v3_v3(sweep[i].bb+3, obj[i]->bb+3); sweep[i].cost = obj[i]->cost; } - else - { + else { sweep[i].bb[0] = MIN2(obj[i]->bb[0], sweep[i+1].bb[0]); sweep[i].bb[1] = MIN2(obj[i]->bb[1], sweep[i+1].bb[1]); sweep[i].bb[2] = MIN2(obj[i]->bb[2], sweep[i+1].bb[2]); @@ -382,8 +371,7 @@ int rtbuild_heuristic_object_split(RTBuilder *b, int nchilds) // right_cost -= obj[0]->cost; if (right_cost < 0) right_cost = 0; - for (int i=1; i bcost) break; //No way we can find a better heuristic in this axis assert(hcost >= 0); - if ( hcost < bcost - || (hcost == bcost && axis < baxis)) //this makes sure the tree built is the same whatever is the order of the sorting axis - { + // this makes sure the tree built is the same whatever is the order of the sorting axis + if ( hcost < bcost || (hcost == bcost && axis < baxis)) { bcost = hcost; baxis = axis; boffset = i; @@ -423,13 +410,11 @@ int rtbuild_heuristic_object_split(RTBuilder *b, int nchilds) MEM_freeN(sweep); } - else if (size == 2) - { + else if (size == 2) { baxis = 0; boffset = 1; } - else if (size == 1) - { + else if (size == 1) { b->child_offset[0] = 0; b->child_offset[1] = 1; return 1; @@ -500,15 +485,13 @@ int bb_largest_axis(float *min, float *max) sub[0] = max[0]-min[0]; sub[1] = max[1]-min[1]; sub[2] = max[2]-min[2]; - if (sub[0] > sub[1]) - { + if (sub[0] > sub[1]) { if (sub[0] > sub[2]) return 0; else return 2; } - else - { + else { if (sub[1] > sub[2]) return 1; else diff --git a/source/blender/render/intern/raytrace/rayobject_svbvh.cpp b/source/blender/render/intern/raytrace/rayobject_svbvh.cpp index 4c2099eb1e3..cbec02ab798 100644 --- a/source/blender/render/intern/raytrace/rayobject_svbvh.cpp +++ b/source/blender/render/intern/raytrace/rayobject_svbvh.cpp @@ -79,12 +79,10 @@ void bvh_done(SVBVHTree *obj) BLI_memarena_use_align(arena2, 16); //Build and optimize the tree - if (0) - { + if (0) { VBVHNode *root = BuildBinaryVBVH(arena1, &obj->rayobj.control).transform(obj->builder); - if (RE_rayobjectcontrol_test_break(&obj->rayobj.control)) - { + if (RE_rayobjectcontrol_test_break(&obj->rayobj.control)) { BLI_memarena_free(arena1); BLI_memarena_free(arena2); return; @@ -100,14 +98,12 @@ void bvh_done(SVBVHTree *obj) obj->root = Reorganize_SVBVH(arena2).transform(root); } - else - { + else { //Finds the optimal packing of this tree using a given cost model //TODO this uses quite a lot of memory, find ways to reduce memory usage during building OVBVHNode *root = BuildBinaryVBVH(arena1,&obj->rayobj.control).transform(obj->builder); - if (RE_rayobjectcontrol_test_break(&obj->rayobj.control)) - { + if (RE_rayobjectcontrol_test_break(&obj->rayobj.control)) { BLI_memarena_free(arena1); BLI_memarena_free(arena2); return; diff --git a/source/blender/render/intern/raytrace/rayobject_vbvh.cpp b/source/blender/render/intern/raytrace/rayobject_vbvh.cpp index e82623f1da9..26a99794362 100644 --- a/source/blender/render/intern/raytrace/rayobject_vbvh.cpp +++ b/source/blender/render/intern/raytrace/rayobject_vbvh.cpp @@ -87,11 +87,9 @@ void bvh_done(VBVHTree *obj) BLI_memarena_use_malloc(arena1); //Build and optimize the tree - if (1) - { + if (1) { VBVHNode *root = BuildBinaryVBVH(arena1,&obj->rayobj.control).transform(obj->builder); - if (RE_rayobjectcontrol_test_break(&obj->rayobj.control)) - { + if (RE_rayobjectcontrol_test_break(&obj->rayobj.control)) { BLI_memarena_free(arena1); return; } @@ -108,8 +106,7 @@ void bvh_done(VBVHTree *obj) else obj->root = NULL; } - else - { + else { /* TODO MemArena *arena2 = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "vbvh arena2"); @@ -159,8 +156,7 @@ void bvh_hint_bb(Tree *tree, LCTSHint *hint, float *UNUSED(min), float *UNUSED(m void bfree(VBVHTree *tree) { - if (tot_pushup + tot_pushdown + tot_hints + tot_moves) - { + if (tot_pushup + tot_pushdown + tot_hints + tot_moves) { if (G.debug & G_DEBUG) { printf("tot pushups: %d\n", tot_pushup); printf("tot pushdowns: %d\n", tot_pushdown); diff --git a/source/blender/render/intern/raytrace/reorganize.h b/source/blender/render/intern/raytrace/reorganize.h index 68b2b22ecdd..1930e5bb32b 100644 --- a/source/blender/render/intern/raytrace/reorganize.h +++ b/source/blender/render/intern/raytrace/reorganize.h @@ -66,17 +66,15 @@ void reorganize_find_fittest_parent(Node *tree, Node *node, std::pair q; q.push(tree); - while(!q.empty()) - { + while (!q.empty()) { Node *parent = q.front(); q.pop(); - if(parent == node) continue; - if(node_fits_inside(node, parent) && RE_rayobject_isAligned(parent->child) ) - { + if (parent == node) continue; + if (node_fits_inside(node, parent) && RE_rayobject_isAligned(parent->child) ) { float pcost = bb_area(parent->bb, parent->bb+3); cost = std::min( cost, std::make_pair(pcost,parent) ); - for(Node *child = parent->child; child; child = child->sibling) + for (Node *child = parent->child; child; child = child->sibling) q.push(child); } } @@ -89,28 +87,23 @@ void reorganize(Node *root) std::queue q; q.push(root); - while(!q.empty()) - { + while (!q.empty()) { Node * node = q.front(); q.pop(); - if( RE_rayobject_isAligned(node->child) ) - { - for(Node **prev = &node->child; *prev; ) - { + if (RE_rayobject_isAligned(node->child)) { + for (Node **prev = &node->child; *prev; ) { assert( RE_rayobject_isAligned(*prev) ); q.push(*prev); std::pair best(FLT_MAX, root); reorganize_find_fittest_parent( root, *prev, best ); - if(best.second == node) - { + if (best.second == node) { //Already inside the fitnest BB prev = &(*prev)->sibling; } - else - { + else { Node *tmp = *prev; *prev = (*prev)->sibling; @@ -123,8 +116,7 @@ void reorganize(Node *root) } } - if(node != root) - { + if (node != root) { } } } @@ -137,29 +129,24 @@ void reorganize(Node *root) template void remove_useless(Node *node, Node **new_node) { - if( RE_rayobject_isAligned(node->child) ) - { + if ( RE_rayobject_isAligned(node->child) ) { - for(Node **prev = &node->child; *prev; ) - { + for (Node **prev = &node->child; *prev; ) { Node *next = (*prev)->sibling; remove_useless(*prev, prev); - if(*prev == NULL) + if (*prev == NULL) *prev = next; - else - { + else { (*prev)->sibling = next; prev = &((*prev)->sibling); } } } - if(node->child) - { - if(RE_rayobject_isAligned(node->child) && node->child->sibling == 0) + if (node->child) { + if (RE_rayobject_isAligned(node->child) && node->child->sibling == 0) *new_node = node->child; } - else if(node->child == NULL) - { + else if (node->child == NULL) { *new_node = NULL; } } @@ -171,18 +158,16 @@ void remove_useless(Node *node, Node **new_node) template void pushup(Node *parent) { - if(is_leaf(parent)) return; + if (is_leaf(parent)) return; float p_area = bb_area(parent->bb, parent->bb+3); Node **prev = &parent->child; - for(Node *child = parent->child; RE_rayobject_isAligned(child) && child; ) - { + for (Node *child = parent->child; RE_rayobject_isAligned(child) && child; ) { const float c_area = bb_area(child->bb, child->bb + 3); const int nchilds = count_childs(child); float original_cost = ((p_area != 0.0f)? (c_area / p_area)*nchilds: 1.0f) + 1; float flatten_cost = nchilds; - if(flatten_cost < original_cost && nchilds >= 2) - { + if (flatten_cost < original_cost && nchilds >= 2) { append_sibling(child, child->child); child = child->sibling; *prev = child; @@ -192,15 +177,14 @@ void pushup(Node *parent) // child = *prev; tot_pushup++; } - else - { + else { *prev = child; prev = &(*prev)->sibling; child = *prev; } } - for(Node *child = parent->child; RE_rayobject_isAligned(child) && child; child = child->sibling) + for (Node *child = parent->child; RE_rayobject_isAligned(child) && child; child = child->sibling) pushup(child); } @@ -210,30 +194,27 @@ void pushup(Node *parent) template void pushup_simd(Node *parent) { - if(is_leaf(parent)) return; + if (is_leaf(parent)) return; int n = count_childs(parent); Node **prev = &parent->child; - for(Node *child = parent->child; RE_rayobject_isAligned(child) && child; ) - { + for (Node *child = parent->child; RE_rayobject_isAligned(child) && child; ) { int cn = count_childs(child); - if(cn-1 <= (SSize - (n%SSize) ) % SSize && RE_rayobject_isAligned(child->child) ) - { + if (cn-1 <= (SSize - (n%SSize) ) % SSize && RE_rayobject_isAligned(child->child) ) { n += (cn - 1); append_sibling(child, child->child); child = child->sibling; *prev = child; } - else - { + else { *prev = child; prev = &(*prev)->sibling; child = *prev; } } - for(Node *child = parent->child; RE_rayobject_isAligned(child) && child; child = child->sibling) + for (Node *child = parent->child; RE_rayobject_isAligned(child) && child; child = child->sibling) pushup_simd(child); } @@ -248,19 +229,17 @@ void pushdown(Node *parent) Node **s_child = &parent->child; Node * child = parent->child; - while(child && RE_rayobject_isAligned(child)) - { + while (child && RE_rayobject_isAligned(child)) { Node *next = child->sibling; Node **next_s_child = &child->sibling; //assert(bb_fits_inside(parent->bb, parent->bb+3, child->bb, child->bb+3)); - for(Node *i = parent->child; RE_rayobject_isAligned(i) && i; i = i->sibling) - if(child != i && bb_fits_inside(i->bb, i->bb+3, child->bb, child->bb+3) && RE_rayobject_isAligned(i->child)) - { + for (Node *i = parent->child; RE_rayobject_isAligned(i) && i; i = i->sibling) + if (child != i && bb_fits_inside(i->bb, i->bb+3, child->bb, child->bb+3) && RE_rayobject_isAligned(i->child)) { // todo optimize (should the one with the smallest area?) // float ia = bb_area(i->bb, i->bb+3) -// if(child->i) +// if (child->i) *s_child = child->sibling; child->sibling = i->child; i->child = child; @@ -286,18 +265,17 @@ void pushdown(Node *parent) template float bvh_refit(Node *node) { - if(is_leaf(node)) return 0; - if(is_leaf(node->child)) return 0; + if (is_leaf(node)) return 0; + if (is_leaf(node->child)) return 0; float total = 0; - for(Node *child = node->child; child; child = child->sibling) + for (Node *child = node->child; child; child = child->sibling) total += bvh_refit(child); float old_area = bb_area(node->bb, node->bb+3); INIT_MINMAX(node->bb, node->bb+3); - for(Node *child = node->child; child; child = child->sibling) - { + for (Node *child = node->child; child; child = child->sibling) { DO_MIN(child->bb, node->bb); DO_MAX(child->bb+3, node->bb+3); } @@ -347,32 +325,27 @@ struct OVBVHNode int best_cutsize; void set_cut(int cutsize, OVBVHNode ***cut) { - if(cutsize == 1) - { + if (cutsize == 1) { **cut = this; *cut = &(**cut)->sibling; } - else - { - if(cutsize > MAX_CUT_SIZE) - { - for(OVBVHNode *child = this->child; child && RE_rayobject_isAligned(child); child = child->sibling) - { + else { + if (cutsize > MAX_CUT_SIZE) { + for (OVBVHNode *child = this->child; child && RE_rayobject_isAligned(child); child = child->sibling) { child->set_cut( 1, cut ); cutsize--; } assert(cutsize == 0); } else - for(OVBVHNode *child = this->child; child && RE_rayobject_isAligned(child); child = child->sibling) + for (OVBVHNode *child = this->child; child && RE_rayobject_isAligned(child); child = child->sibling) child->set_cut( child->get_cut_size( cutsize ), cut ); } } void optimize() { - if(RE_rayobject_isAligned(this->child)) - { + if (RE_rayobject_isAligned(this->child)) { //Calc new childs { OVBVHNode **cut = &(this->child); @@ -381,7 +354,7 @@ struct OVBVHNode } //Optimize new childs - for(OVBVHNode *child = this->child; child && RE_rayobject_isAligned(child); child = child->sibling) + for (OVBVHNode *child = this->child; child && RE_rayobject_isAligned(child); child = child->sibling) child->optimize(); } } @@ -415,8 +388,7 @@ struct VBVH_optimalPackSIMD //Fetch childs and needed data { float parent_area = bb_area(node->bb, node->bb+3); - for(Node *child = node->child; child && RE_rayobject_isAligned(child); child = child->sibling) - { + for (Node *child = node->child; child && RE_rayobject_isAligned(child); child = child->sibling) { this->child[nchilds] = child; this->child_hit_prob[nchilds] = (parent_area != 0.0f)? bb_area(child->bb, child->bb+3) / parent_area: 1.0f; nchilds++; @@ -427,36 +399,35 @@ struct VBVH_optimalPackSIMD //Build DP table to find minimum cost to represent this node with a given cutsize - int bt [MAX_OPTIMIZE_CHILDS+1][MAX_CUT_SIZE+1]; //backtrace table - float cost[MAX_OPTIMIZE_CHILDS+1][MAX_CUT_SIZE+1]; //cost table (can be reduced to float[2][MAX_CUT_COST]) + int bt [MAX_OPTIMIZE_CHILDS + 1][MAX_CUT_SIZE + 1]; //backtrace table + float cost[MAX_OPTIMIZE_CHILDS + 1][MAX_CUT_SIZE + 1]; //cost table (can be reduced to float[2][MAX_CUT_COST]) - for(int i=0; i<=nchilds; i++) - for(int j=0; j<=MAX_CUT_SIZE; j++) - cost[i][j] = INFINITY; + for (int i = 0; i <= nchilds; i++) { + for (int j = 0; j <= MAX_CUT_SIZE; j++) { + cost[i][j] = INFINITY; + } + } cost[0][0] = 0; - for(int i=1; i<=nchilds; i++) - for(int size=i-1; size/*+(nchilds-i)*/<=MAX_CUT_SIZE; size++) - for(int cut=1; cut+size/*+(nchilds-i)*/<=MAX_CUT_SIZE; cut++) - { - float new_cost = cost[i-1][size] + child_hit_prob[i-1]*child[i-1]->get_cost(cut); - if(new_cost < cost[i][size+cut]) - { - cost[i][size+cut] = new_cost; - bt[i][size+cut] = cut; + for (int i = 1; i<=nchilds; i++) { + for (int size = i - 1; size/*+(nchilds-i)*/<=MAX_CUT_SIZE; size++) { + for (int cut = 1; cut+size/*+(nchilds-i)*/<=MAX_CUT_SIZE; cut++) { + float new_cost = cost[i - 1][size] + child_hit_prob[i - 1] * child[i - 1]->get_cost(cut); + if (new_cost < cost[i][size+cut]) { + cost[i][size+cut] = new_cost; + bt[i][size+cut] = cut; + } + } } } //Save the ways to archieve the minimum cost with a given cutsize - for(int i = nchilds; i <= MAX_CUT_SIZE; i++) - { + for (int i = nchilds; i <= MAX_CUT_SIZE; i++) { node->cut_cost[i-1] = cost[nchilds][i]; - if(cost[nchilds][i] < INFINITY) - { + if (cost[nchilds][i] < INFINITY) { int current_size = i; - for(int j=nchilds; j>0; j--) - { + for (int j=nchilds; j>0; j--) { child[j-1]->cut_size[i-1] = bt[j][current_size]; current_size -= bt[j][current_size]; } @@ -468,26 +439,22 @@ struct VBVH_optimalPackSIMD void calc_costs(Node *node) { - if( RE_rayobject_isAligned(node->child) ) - { + if ( RE_rayobject_isAligned(node->child) ) { int nchilds = 0; - for(Node *child = node->child; child && RE_rayobject_isAligned(child); child = child->sibling) - { + for (Node *child = node->child; child && RE_rayobject_isAligned(child); child = child->sibling) { calc_costs(child); nchilds++; } - for(int i=0; icut_cost[i] = INFINITY; //We are not allowed to look on nodes with with so many childs - if(nchilds > MAX_CUT_SIZE) - { + if (nchilds > MAX_CUT_SIZE) { float cost = 0; float parent_area = bb_area(node->bb, node->bb+3); - for(Node *child = node->child; child && RE_rayobject_isAligned(child); child = child->sibling) - { + for (Node *child = node->child; child && RE_rayobject_isAligned(child); child = child->sibling) { cost += ((parent_area != 0.0f)? ( bb_area(child->bb, child->bb+3) / parent_area ): 1.0f) * child->get_cost(1); } @@ -495,16 +462,13 @@ struct VBVH_optimalPackSIMD node->cut_cost[0] = cost; node->best_cutsize = nchilds; } - else - { + else { calc_best calc(node); //calc expected cost if we optimaly pack this node - for(int cutsize=nchilds; cutsize<=MAX_CUT_SIZE; cutsize++) - { + for (int cutsize=nchilds; cutsize<=MAX_CUT_SIZE; cutsize++) { float m = node->get_cost(cutsize) + testcost(cutsize); - if(m < node->cut_cost[0]) - { + if (m < node->cut_cost[0]) { node->cut_cost[0] = m; node->best_cutsize = cutsize; } @@ -512,24 +476,22 @@ struct VBVH_optimalPackSIMD } assert(node->cut_cost[0] != INFINITY); } - else - { + else { node->cut_cost[0] = 1.0f; - for(int i=1; icut_cost[i] = INFINITY; } } Node *transform(Node *node) { - if(RE_rayobject_isAligned(node->child)) - { + if (RE_rayobject_isAligned(node->child)) { static int num = 0; bool first = false; - if(num == 0) { num++; first = true; } + if (num == 0) { num++; first = true; } calc_costs(node); - if((G.debug & G_DEBUG) && first) printf("expected cost = %f (%d)\n", node->cut_cost[0], node->best_cutsize ); + if ((G.debug & G_DEBUG) && first) printf("expected cost = %f (%d)\n", node->cut_cost[0], node->best_cutsize ); node->optimize(); } return node; diff --git a/source/blender/render/intern/raytrace/svbvh.h b/source/blender/render/intern/raytrace/svbvh.h index e0e96781f36..a4044db8208 100644 --- a/source/blender/render/intern/raytrace/svbvh.h +++ b/source/blender/render/intern/raytrace/svbvh.h @@ -94,9 +94,9 @@ static int svbvh_bb_intersect_test(const Isect *isec, const float *_bb) RE_RC_COUNT(isec->raycounter->bb.test); - if(t1x > t2y || t2x < t1y || t1x > t2z || t2x < t1z || t1y > t2z || t2y < t1z) return 0; - if(t2x < 0.0 || t2y < 0.0 || t2z < 0.0) return 0; - if(t1x > isec->dist || t1y > isec->dist || t1z > isec->dist) return 0; + if (t1x > t2y || t2x < t1y || t1x > t2z || t2x < t1z || t1y > t2z || t2y < t1z) return 0; + if (t2x < 0.0 || t2y < 0.0 || t2z < 0.0) return 0; + if (t1x > isec->dist || t1y > isec->dist || t1z > isec->dist) return 0; RE_RC_COUNT(isec->raycounter->bb.hit); @@ -116,40 +116,39 @@ static int svbvh_node_stack_raycast(SVBVHNode *root, Isect *isec) stack[stack_pos++] = root; - while(stack_pos) - { + while (stack_pos) { node = stack[--stack_pos]; - if(!svbvh_node_is_leaf(node)) - { + if (!svbvh_node_is_leaf(node)) { int nchilds= node->nchilds; - if(nchilds == 4) { + if (nchilds == 4) { float *child_bb= node->child_bb; int res = svbvh_bb_intersect_test_simd4(isec, ((__m128*) (child_bb))); SVBVHNode **child= node->child; RE_RC_COUNT(isec->raycounter->simd_bb.test); - if(res & 1) { stack[stack_pos++] = child[0]; RE_RC_COUNT(isec->raycounter->simd_bb.hit); } - if(res & 2) { stack[stack_pos++] = child[1]; RE_RC_COUNT(isec->raycounter->simd_bb.hit); } - if(res & 4) { stack[stack_pos++] = child[2]; RE_RC_COUNT(isec->raycounter->simd_bb.hit); } - if(res & 8) { stack[stack_pos++] = child[3]; RE_RC_COUNT(isec->raycounter->simd_bb.hit); } + if (res & 1) { stack[stack_pos++] = child[0]; RE_RC_COUNT(isec->raycounter->simd_bb.hit); } + if (res & 2) { stack[stack_pos++] = child[1]; RE_RC_COUNT(isec->raycounter->simd_bb.hit); } + if (res & 4) { stack[stack_pos++] = child[2]; RE_RC_COUNT(isec->raycounter->simd_bb.hit); } + if (res & 8) { stack[stack_pos++] = child[3]; RE_RC_COUNT(isec->raycounter->simd_bb.hit); } } else { float *child_bb= node->child_bb; SVBVHNode **child= node->child; int i; - for(i=0; i inline void bvh_node_merge_bb(SVBVHNode *node, float *min, float *max) { - if(is_leaf(node)) - { + if (is_leaf(node)) { RE_rayobject_merge_bb((RayObject*)node, min, max); } - else - { + else { int i=0; - while(i+4 <= node->nchilds) - { + while (i+4 <= node->nchilds) { float *res = node->child_bb + 6*i; - for(int j=0; j<3; j++) - { + for (int j = 0; j < 3; j++) { min[j] = MIN2(min[j], res[4*j+0]); min[j] = MIN2(min[j], res[4*j+1]); min[j] = MIN2(min[j], res[4*j+2]); min[j] = MIN2(min[j], res[4*j+3]); } - for(int j=0; j<3; j++) - { + for (int j = 0; j < 3; j++) { max[j] = MAX2(max[j], res[4*(j+3)+0]); max[j] = MAX2(max[j], res[4*(j+3)+1]); max[j] = MAX2(max[j], res[4*(j+3)+2]); @@ -188,10 +182,9 @@ inline void bvh_node_merge_bb(SVBVHNode *node, float *min, float *max i += 4; } - for(; inchilds; i++) - { - DO_MIN(node->child_bb+6*i , min); - DO_MAX(node->child_bb+3+6*i, max); + for ( ; i < node->nchilds; i++) { + DO_MIN(node->child_bb + 6 * i, min); + DO_MAX(node->child_bb + 3 + 6 * i, max); } } } @@ -218,17 +211,19 @@ struct Reorganize_SVBVH childs_per_node = 0; useless_bb = 0; - for(int i=0; i<16; i++) + for (int i = 0; i < 16; i++) { nodes_with_childs[i] = 0; + } } ~Reorganize_SVBVH() { - if(G.debug & G_DEBUG) { + if (G.debug & G_DEBUG) { printf("%f childs per node\n", childs_per_node / nodes); printf("%d childs BB are useless\n", useless_bb); - for(int i=0; i<16; i++) + for (int i = 0; i < 16; i++) { printf("%i childs per node: %d/%d = %f\n", i, nodes_with_childs[i], nodes, nodes_with_childs[i]/float(nodes)); + } } } @@ -248,14 +243,12 @@ struct Reorganize_SVBVH void prepare_for_simd(SVBVHNode *node) { int i=0; - while(i+4 <= node->nchilds) - { + while (i + 4 <= node->nchilds) { float vec_tmp[4*6]; float *res = node->child_bb+6*i; std::copy(res, res+6*4, vec_tmp); - for(int j=0; j<6; j++) - { + for (int j=0; j<6; j++) { res[4*j+0] = vec_tmp[6*0+j]; res[4*j+1] = vec_tmp[6*1+j]; res[4*j+2] = vec_tmp[6*2+j]; @@ -274,26 +267,25 @@ struct Reorganize_SVBVH SVBVHNode *transform(OldNode *old) { - if(is_leaf(old)) + if (is_leaf(old)) return (SVBVHNode*)old; - if(is_leaf(old->child)) + if (is_leaf(old->child)) return (SVBVHNode*)old->child; int nchilds = count_childs(old); int alloc_childs = nchilds; - if(nchilds % 4 > 2) + if (nchilds % 4 > 2) alloc_childs = padup(nchilds, 4); SVBVHNode *node = create_node(alloc_childs); childs_per_node += nchilds; nodes++; - if(nchilds < 16) + if (nchilds < 16) nodes_with_childs[nchilds]++; useless_bb += alloc_childs-nchilds; - while(alloc_childs > nchilds) - { + while (alloc_childs > nchilds) { const static float def_bb[6] = { FLT_MAX, FLT_MAX, FLT_MAX, FLT_MIN, FLT_MIN, FLT_MIN }; alloc_childs--; node->child[alloc_childs] = NULL; @@ -301,20 +293,17 @@ struct Reorganize_SVBVH } int i=nchilds; - for(OldNode *o_child = old->child; o_child; o_child = o_child->sibling) - { + for (OldNode *o_child = old->child; o_child; o_child = o_child->sibling) { i--; node->child[i] = transform(o_child); - if(is_leaf(o_child)) - { + if (is_leaf(o_child)) { float bb[6]; INIT_MINMAX(bb, bb+3); RE_rayobject_merge_bb((RayObject*)o_child, bb, bb+3); copy_bb(node->child_bb+i*6, bb); break; } - else - { + else { copy_bb(node->child_bb+i*6, o_child->bb); } } diff --git a/source/blender/render/intern/raytrace/vbvh.h b/source/blender/render/intern/raytrace/vbvh.h index 1c84cd23510..f916dd412f7 100644 --- a/source/blender/render/intern/raytrace/vbvh.h +++ b/source/blender/render/intern/raytrace/vbvh.h @@ -57,17 +57,14 @@ inline static void bvh_node_push_childs(Node *node, Isect *UNUSED(isec), Node ** { Node *child = node->child; - if(is_leaf(child)) - { + if (is_leaf(child)) { stack[stack_pos++] = child; } - else - { - while(child) - { + else { + while (child) { /* Skips BB tests on primitives */ #if 0 - if(is_leaf(child->child)) { + if (is_leaf(child->child)) { stack[stack_pos++] = child->child; } else @@ -86,10 +83,9 @@ template int count_childs(Node *parent) { int n = 0; - for(Node *i = parent->child; i; i = i->sibling) - { + for (Node *i = parent->child; i; i = i->sibling) { n++; - if(is_leaf(i)) + if (is_leaf(i)) break; } @@ -100,7 +96,7 @@ int count_childs(Node *parent) template void append_sibling(Node *node, Node *sibling) { - while(node->sibling) + while (node->sibling) node = node->sibling; node->sibling = sibling; @@ -118,7 +114,7 @@ struct BuildBinaryVBVH void test_break() { - if(RE_rayobjectcontrol_test_break(control)) + if (RE_rayobjectcontrol_test_break(control)) throw "Stop"; } @@ -160,19 +156,17 @@ struct BuildBinaryVBVH { int size = rtbuild_size(builder); - if(size == 0) { + if (size == 0) { return NULL; } - else if(size == 1) - { + else if (size == 1) { Node *node = create_node(); INIT_MINMAX(node->bb, node->bb+3); rtbuild_merge_bb(builder, node->bb, node->bb+3); node->child = (Node *) rtbuild_get_primitive(builder, 0); return node; } - else - { + else { test_break(); Node *node = create_node(); @@ -183,8 +177,7 @@ struct BuildBinaryVBVH INIT_MINMAX(node->bb, node->bb+3); assert(nc == 2); - for(int i=0; isibling; } *child_ptr = 0; diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 66ed0bd85a9..404901f2bb7 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -1472,7 +1472,7 @@ static void particle_normal_ren(short ren_as, ParticleSettings *part, Render *re if (ren_as != PART_DRAW_BB) mul_m4_v3(re->viewmat, loc); - switch(ren_as) { + switch (ren_as) { case PART_DRAW_LINE: sd->line = 1; sd->time = 0.0f; @@ -2630,8 +2630,7 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, sizeu--; sizev--; /* dec size for face array */ if (dl->flag & DL_CYCL_V) { - for (v = 0; v < sizev; v++) - { + for (v = 0; v < sizev; v++) { /* optimize! :*/ vlr= RE_findOrAddVlak(obr, UVTOINDEX(sizeu - 1, v)); vlr1= RE_findOrAddVlak(obr, UVTOINDEX(0, v)); @@ -2643,8 +2642,7 @@ static int dl_surf_to_renderdata(ObjectRen *obr, DispList *dl, Material **matar, } if (dl->flag & DL_CYCL_U) { - for (u = 0; u < sizeu; u++) - { + for (u = 0; u < sizeu; u++) { /* optimize! :*/ vlr= RE_findOrAddVlak(obr, UVTOINDEX(u, 0)); vlr1= RE_findOrAddVlak(obr, UVTOINDEX(u, sizev-1)); @@ -3486,8 +3484,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) if (need_nmap_tangent != 0) { const float * tangent = (const float *) layer->data; float * ftang = RE_vlakren_get_nmap_tangent(obr, vlr, 1); - for (vindex=0; vindexarea_sizey= lar->area_size; } else if (lar->type==LA_AREA) { - switch(lar->area_shape) { + switch (lar->area_shape) { case LA_AREA_SQUARE: lar->ray_totsamp= lar->ray_samp*lar->ray_samp; lar->ray_sampy= lar->ray_samp; diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c index f7f592c9407..3e82bec7e52 100644 --- a/source/blender/render/intern/source/initrender.c +++ b/source/blender/render/intern/source/initrender.c @@ -167,7 +167,7 @@ float RE_filter_value(int type, float x) x= ABS(x); - switch(type) { + switch (type) { case R_FILTER_BOX: if (x>1.0f) return 0.0f; return 1.0f; @@ -208,7 +208,7 @@ static float calc_weight(Render *re, float *weight, int i, int j) weight[a]= 0.0; /* Weighting choices */ - switch(re->r.filtertype) { + switch (re->r.filtertype) { case R_FILTER_BOX: if (i==0 && j==0) weight[a]= 1.0; break; diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c index 5d4f9db9a02..54474891810 100644 --- a/source/blender/render/intern/source/pointdensity.c +++ b/source/blender/render/intern/source/pointdensity.c @@ -221,7 +221,7 @@ static void pointdensity_cache_object(Render *re, PointDensity *pd, Object *ob) copy_v3_v3(co, mvert->co); - switch(pd->ob_cache_space) { + switch (pd->ob_cache_space) { case TEX_PD_OBJECTSPACE: break; case TEX_PD_OBJECTLOC: diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index 0c735c18c57..bb08911a1eb 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -87,8 +87,7 @@ static int test_break(void *data) static void RE_rayobject_config_control(RayObject *r, Render *re) { - if (RE_rayobject_isRayAPI(r)) - { + if (RE_rayobject_isRayAPI(r)) { r = RE_rayobject_align( r ); r->control.data = re; r->control.test_break = test_break; @@ -99,8 +98,7 @@ static RayObject* RE_rayobject_create(Render *re, int type, int size) { RayObject * res = NULL; - if (type == R_RAYSTRUCTURE_AUTO) - { + if (type == R_RAYSTRUCTURE_AUTO) { //TODO //if (detect_simd()) #ifdef __SSE__ @@ -111,8 +109,7 @@ static RayObject* RE_rayobject_create(Render *re, int type, int size) } #ifndef __SSE__ - if (type == R_RAYSTRUCTURE_SIMD_SVBVH || type == R_RAYSTRUCTURE_SIMD_QBVH) - { + if (type == R_RAYSTRUCTURE_SIMD_SVBVH || type == R_RAYSTRUCTURE_SIMD_QBVH) { puts("Warning: Using VBVH (SSE was disabled at compile time)"); type = R_RAYSTRUCTURE_VBVH; } @@ -148,37 +145,30 @@ void freeraytree(Render *re) { ObjectInstanceRen *obi; - if (re->raytree) - { + if (re->raytree) { RE_rayobject_free(re->raytree); re->raytree = NULL; } - if (re->rayfaces) - { + if (re->rayfaces) { MEM_freeN(re->rayfaces); re->rayfaces = NULL; } - if (re->rayprimitives) - { + if (re->rayprimitives) { MEM_freeN(re->rayprimitives); re->rayprimitives = NULL; } - for (obi=re->instancetable.first; obi; obi=obi->next) - { + for (obi=re->instancetable.first; obi; obi=obi->next) { ObjectRen *obr = obi->obr; - if (obr->raytree) - { + if (obr->raytree) { RE_rayobject_free(obr->raytree); obr->raytree = NULL; } - if (obr->rayfaces) - { + if (obr->rayfaces) { MEM_freeN(obr->rayfaces); obr->rayfaces = NULL; } - if (obi->raytree) - { + if (obi->raytree) { RE_rayobject_free(obi->raytree); obi->raytree = NULL; } @@ -232,8 +222,7 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi) // update render stats ObjectRen *obr = obi->obr; - if (obr->raytree == NULL) - { + if (obr->raytree == NULL) { RayObject *raytree; RayFace *face = NULL; VlakPrimitive *vlakprimitive = NULL; @@ -241,8 +230,7 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi) //Count faces int faces = 0; - for (v=0;vtotvlak;v++) - { + for (v=0;vtotvlak;v++) { VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255); if (is_raytraceable_vlr(re, vlr)) faces++; @@ -260,11 +248,9 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi) obr->rayobi = obi; - for (v=0;vtotvlak;v++) - { + for (v=0;vtotvlak;v++) { VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255); - if (is_raytraceable_vlr(re, vlr)) - { + if (is_raytraceable_vlr(re, vlr)) { if ((re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS)) { RE_rayobject_add( raytree, RE_vlakprimitive_from_vlak( vlakprimitive, obi, vlr ) ); vlakprimitive++; @@ -286,8 +272,7 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi) } if (obr->raytree) { - if ((obi->flag & R_TRANSFORMED) && obi->raytree == NULL) - { + if ((obi->flag & R_TRANSFORMED) && obi->raytree == NULL) { obi->transform_primitives = 0; obi->raytree = RE_rayobject_instance_create( obr->raytree, obi->mat, obi, obi->obr->rayobi ); } @@ -299,16 +284,13 @@ RayObject* makeraytree_object(Render *re, ObjectInstanceRen *obi) static int has_special_rayobject(Render *re, ObjectInstanceRen *obi) { - if ( (obi->flag & R_TRANSFORMED) && (re->r.raytrace_options & R_RAYTRACE_USE_INSTANCES) ) - { + if ( (obi->flag & R_TRANSFORMED) && (re->r.raytrace_options & R_RAYTRACE_USE_INSTANCES) ) { ObjectRen *obr = obi->obr; int v, faces = 0; - for (v=0;vtotvlak;v++) - { + for (v=0;vtotvlak;v++) { VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255); - if (is_raytraceable_vlr(re, vlr)) - { + if (is_raytraceable_vlr(re, vlr)) { faces++; if (faces > 4) return 1; @@ -329,8 +311,7 @@ static void makeraytree_single(Render *re) int faces = 0, obs = 0, special = 0; for (obi=re->instancetable.first; obi; obi=obi->next) - if (is_raytraceable(re, obi)) - { + if (is_raytraceable(re, obi)) { ObjectRen *obr = obi->obr; obs++; @@ -339,8 +320,7 @@ static void makeraytree_single(Render *re) } else { int v; - for (v=0;vtotvlak;v++) - { + for (v=0;vtotvlak;v++) { VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255); if (is_raytraceable_vlr(re, vlr)) faces++; @@ -348,8 +328,7 @@ static void makeraytree_single(Render *re) } } - if (faces + special == 0) - { + if (faces + special == 0) { re->raytree = RE_rayobject_empty_create(); return; } @@ -357,8 +336,7 @@ static void makeraytree_single(Render *re) //Create raytree raytree = re->raytree = RE_rayobject_create( re, re->r.raytrace_structure, faces+special ); - if ( (re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS) ) - { + if ( (re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS) ) { vlakprimitive = re->rayprimitives = (VlakPrimitive*)MEM_callocN(faces*sizeof(VlakPrimitive), "Raytrace vlak-primitives"); } else { @@ -366,8 +344,7 @@ static void makeraytree_single(Render *re) } for (obi=re->instancetable.first; obi; obi=obi->next) - if (is_raytraceable(re, obi)) - { + if (is_raytraceable(re, obi)) { if (test_break(re)) break; @@ -384,13 +361,11 @@ static void makeraytree_single(Render *re) int v; ObjectRen *obr = obi->obr; - if (obi->flag & R_TRANSFORMED) - { + if (obi->flag & R_TRANSFORMED) { obi->transform_primitives = 1; } - for (v=0;vtotvlak;v++) - { + for (v=0;vtotvlak;v++) { VlakRen *vlr = obr->vlaknodes[v>>8].vlak + (v&255); if (is_raytraceable_vlr(re, vlr)) { if ((re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS)) { @@ -400,8 +375,7 @@ static void makeraytree_single(Render *re) } else { RE_rayface_from_vlak(face, obi, vlr); - if ((obi->flag & R_TRANSFORMED)) - { + if ((obi->flag & R_TRANSFORMED)) { mul_m4_v3(obi->mat, face->v1); mul_m4_v3(obi->mat, face->v2); mul_m4_v3(obi->mat, face->v3); @@ -417,8 +391,7 @@ static void makeraytree_single(Render *re) } } - if (!test_break(re)) - { + if (!test_break(re)) { re->i.infostr= "Raytree.. building"; re->stats_draw(re->sdh, &re->i); @@ -452,8 +425,7 @@ void makeraytree(Render *re) //This is ONLY needed to kept a bogus behavior of SUN and HEMI lights INIT_MINMAX(min, max); RE_rayobject_merge_bb( re->raytree, min, max ); - for (i=0; i<3; i++) - { + for (i=0; i<3; i++) { min[i] += 0.01f; max[i] += 0.01f; sub[i] = max[i]-min[i]; @@ -1006,12 +978,10 @@ static void halton_sample(double *ht_invprimes, double *ht_nums, double *v) // "Instant Radiosity", Keller A. unsigned int i; - for (i = 0; i < 2; i++) - { + for (i = 0; i < 2; i++) { double r = fabs((1.0 - ht_nums[i]) - 1e-10); - if (ht_invprimes[i] >= r) - { + if (ht_invprimes[i] >= r) { double lasth; double h = ht_invprimes[i]; @@ -1065,8 +1035,7 @@ static struct QMCSampler *QMC_initSampler(int type, int tot) static void QMC_initPixel(QMCSampler *qsa, int thread) { - if (qsa->type==SAMP_TYPE_HAMMERSLEY) - { + if (qsa->type==SAMP_TYPE_HAMMERSLEY) { /* hammersley sequence is fixed, already created in QMCSampler init. * per pixel, gets a random offset. We create separate offsets per thread, for write-safety */ qsa->offs[thread][0] = 0.5f * BLI_thread_frand(thread); @@ -1377,8 +1346,7 @@ static void trace_refract(float col[4], ShadeInput *shi, ShadeResult *shr) samples++; /* adaptive sampling */ - if (adapt_thresh < 1.0f && samples > max_samples/2) - { + if (adapt_thresh < 1.0f && samples > max_samples/2) { if (adaptive_sample_variance(samples, col, colsq, adapt_thresh)) break; @@ -1479,8 +1447,7 @@ static void trace_reflect(float col[3], ShadeInput *shi, ShadeResult *shr, float samples++; /* adaptive sampling */ - if (adapt_thresh > 0.0f && samples > max_samples/3) - { + if (adapt_thresh > 0.0f && samples > max_samples/3) { if (adaptive_sample_variance(samples, col, colsq, adapt_thresh)) break; @@ -2267,8 +2234,7 @@ static void ray_shadow_qmc(ShadeInput *shi, LampRen *lar, const float lampco[3], QMC_initPixel(qsa, shi->thread); INIT_MINMAX(min, max); - for (i=0; itype) { + switch (tex->type) { case 0: texres->tin= 0.0f; @@ -1231,7 +1231,7 @@ static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, copy_v3_v3(tmpvec, texvec); mul_v3_fl(tmpvec, 1.0f/tex->noisesize); - switch(tex->stype) { + switch (tex->stype) { case TEX_MFRACTAL: case TEX_FBM: retval= mg_mFractalOrfBmTex(tex, tmpvec, texres); @@ -1389,7 +1389,7 @@ void texture_rgb_blend(float in[3], const float tex[3], const float out[3], floa { float facm, col; - switch(blendtype) { + switch (blendtype) { case MTEX_BLEND: fact*= facg; facm= 1.0f-fact; @@ -1530,7 +1530,7 @@ float texture_value_blend(float tex, float out, float fact, float facg, int blen facm= 1.0f-fact; if (flip) SWAP(float, fact, facm); - switch(blendtype) { + switch (blendtype) { case MTEX_BLEND: in= fact*tex + facm*out; break; @@ -3054,7 +3054,7 @@ void do_sky_tex(const float rco[3], float lo[3], const float dxyview[2], float h } /* Grab the mapping settings for this texture */ - switch(mtex->texco) { + switch (mtex->texco) { case TEXCO_ANGMAP: /* only works with texture being "real" */ /* use saacos(), fixes bug [#22398], float precision caused lo[2] to be slightly less then -1.0 */ diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index f5e36125299..c0267a3b44d 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -457,7 +457,7 @@ static void add_filt_passes(RenderLayer *rl, int curmask, int rectx, int offset, float *fp, *col= NULL; int pixsize= 3; - switch(rpass->passtype) { + switch (rpass->passtype) { case SCE_PASS_Z: fp= rpass->rect + offset; *fp= shr->z; @@ -569,7 +569,7 @@ static void add_passes(RenderLayer *rl, int offset, ShadeInput *shi, ShadeResult float *col= NULL, uvcol[3]; int a, pixsize= 3; - switch(rpass->passtype) { + switch (rpass->passtype) { case SCE_PASS_Z: fp= rpass->rect + offset; *fp= shr->z; diff --git a/source/blender/render/intern/source/renderdatabase.c b/source/blender/render/intern/source/renderdatabase.c index 6a0c8e3526f..f3b6bfb80ea 100644 --- a/source/blender/render/intern/source/renderdatabase.c +++ b/source/blender/render/intern/source/renderdatabase.c @@ -871,8 +871,7 @@ void free_renderdata_tables(Render *re) } if (re->objectinstance) { - for (obi=re->instancetable.first; obi; obi=obi->next) - { + for (obi=re->instancetable.first; obi; obi=obi->next) { if (obi->vectors) MEM_freeN(obi->vectors); @@ -1274,8 +1273,7 @@ void project_renderdata(Render *re, void (*projectfunc)(const float *, float mat else if (hoco[3]<0.0f) { har->miny= har->maxy= -10000; /* render clips it */ } - else /* do the projection...*/ - { + else { /* do the projection...*/ /* bring back hocos */ hoco[0]*= 2.0f; hoco[1]*= 2.0f; diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c index cf688982eda..e74041c9006 100644 --- a/source/blender/render/intern/source/shadeoutput.c +++ b/source/blender/render/intern/source/shadeoutput.c @@ -931,7 +931,7 @@ static void add_to_diffuse(float *diff, ShadeInput *shi, float is, float r, floa float fac; /* input */ - switch(ma->rampin_col) { + switch (ma->rampin_col) { case MA_RAMP_IN_ENERGY: /* should use 'rgb_to_grayscale' but we only have a vector version */ fac= 0.3f*r + 0.58f*g + 0.12f*b; @@ -1003,7 +1003,7 @@ static void do_specular_ramp(ShadeInput *shi, float is, float t, float spec[3]) float col[4]; /* input */ - switch(ma->rampin_spec) { + switch (ma->rampin_spec) { case MA_RAMP_IN_ENERGY: fac= t; break; @@ -1158,8 +1158,7 @@ float lamp_get_visibility(LampRen *lar, const float co[3], float lv[3], float *d // visifac= 0.0f; } else { - switch(lar->falloff_type) - { + switch (lar->falloff_type) { case LA_FALLOFF_CONSTANT: visifac = 1.0f; break; diff --git a/source/blender/render/intern/source/sunsky.c b/source/blender/render/intern/source/sunsky.c index 8097628e575..8aabfbfed09 100644 --- a/source/blender/render/intern/source/sunsky.c +++ b/source/blender/render/intern/source/sunsky.c @@ -338,8 +338,7 @@ static void ComputeAttenuatedSunlight(float theta, int turbidity, float fTau[3]) m = 1.0f/(cosf(theta) + 0.15f*powf(93.885f-theta/(float)M_PI*180.0f,-1.253f)); - for (i = 0; i < 3; i++) - { + for (i = 0; i < 3; i++) { // Rayleigh Scattering fTauR = expf( -m * 0.008735f * powf(fLambda[i], (float)(-4.08f))); @@ -393,8 +392,7 @@ void InitAtmosphere(struct SunSky *sunSky, float sun_intens, float mief, float r fLambda[0] = 1/650e-9f; fLambda[1] = 1/570e-9f; fLambda[2] = 1/475e-9f; - for (i=0; i < 3; i++) - { + for (i=0; i < 3; i++) { fLambda2[i] = fLambda[i]*fLambda[i]; fLambda4[i] = fLambda2[i]*fLambda2[i]; } diff --git a/source/blender/render/intern/source/volume_precache.c b/source/blender/render/intern/source/volume_precache.c index 8b059d4a564..1f5ada9b113 100644 --- a/source/blender/render/intern/source/volume_precache.c +++ b/source/blender/render/intern/source/volume_precache.c @@ -334,14 +334,10 @@ static void ms_diffuse(Render *re, int do_test_break, float *x0, float *x, float size_t size = n[0]*n[1]*n[2]; const float a = dt*diff*size; - for (l=0; l<20; l++) - { - for (k=1; k<=n[2]; k++) - { - for (j=1; j<=n[1]; j++) - { - for (i=1; i<=n[0]; i++) - { + for (l=0; l<20; l++) { + for (k=1; k<=n[2]; k++) { + for (j=1; j<=n[1]; j++) { + for (i=1; i<=n[0]; i++) { x[v_I_pad(i,j,k,n)] = (x0[v_I_pad(i,j,k,n)]) + a*( x0[v_I_pad(i-1,j,k,n)]+ x0[v_I_pad(i+1,j,k,n)]+ x0[v_I_pad(i,j-1,k,n)]+ x0[v_I_pad(i,j+1,k,n)]+ x0[v_I_pad(i,j,k-1,n)]+x0[v_I_pad(i,j,k+1,n)] ) / (1+6*a); @@ -384,15 +380,11 @@ static void multiple_scattering_diffusion(Render *re, VolumePrecache *vp, Materi energy_ss = total_ss_energy(re, do_test_break, vp); /* Scattering as diffusion pass */ - for (m=0; mfirst; go; go= go->next) - { + for (go=lights->first; go; go= go->next) { float lacol[3] = {0.f, 0.f, 0.f}; lar= go->lampren; diff --git a/source/blender/render/intern/source/voxeldata.c b/source/blender/render/intern/source/voxeldata.c index 1f49b654ef8..817e51f2020 100644 --- a/source/blender/render/intern/source/voxeldata.c +++ b/source/blender/render/intern/source/voxeldata.c @@ -171,8 +171,7 @@ static void load_frame_image_sequence(VoxelData *vd, Tex *tex) vd->resol[2] = iuser.frames; vd->dataset = MEM_mapallocN(sizeof(float)*vd_resol_size(vd), "voxel dataset"); - for (z=0; z < iuser.frames; z++) - { + for (z=0; z < iuser.frames; z++) { /* get a new ibuf for each frame */ if (z > 0) { iuser.framenr++; @@ -182,10 +181,8 @@ static void load_frame_image_sequence(VoxelData *vd, Tex *tex) } rf = ibuf->rect_float; - for (y=0; y < ibuf->y; y++) - { - for (x=0; x < ibuf->x; x++) - { + for (y=0; y < ibuf->y; y++) { + for (x=0; x < ibuf->x; x++) { /* currently averaged to monchrome */ vd->dataset[ V_I(x, y, z, vd->resol) ] = (rf[0] + rf[1] + rf[2])*0.333f; rf +=4; @@ -249,8 +246,7 @@ static void init_frame_smoke(VoxelData *vd, float cfra) heat = smoke_get_heat(smd->domain->fluid); - for (i=0; idataset[i] = (heat[i]+2.0f)/4.0f; } @@ -271,8 +267,7 @@ static void init_frame_smoke(VoxelData *vd, float cfra) yvel = smoke_get_velocity_y(smd->domain->fluid); zvel = smoke_get_velocity_z(smd->domain->fluid); - for (i=0; idataset[i] = sqrt(xvel[i]*xvel[i] + yvel[i]*yvel[i] + zvel[i]*zvel[i])*3.0f; } @@ -333,7 +328,7 @@ void cache_voxeldata(Tex *tex, int scene_frame) BLI_strncpy(path, vd->source_path, sizeof(path)); - switch(vd->file_format) { + switch (vd->file_format) { case TEX_VD_IMAGE_SEQUENCE: load_frame_image_sequence(vd, tex); return; diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c index 74c4bf19faf..06fc323e8d7 100644 --- a/source/blender/render/intern/source/zbuf.c +++ b/source/blender/render/intern/source/zbuf.c @@ -3529,7 +3529,7 @@ void merge_transp_passes(RenderLayer *rl, ShadeResult *shr) float *col= NULL; int pixsize= 3; - switch(rpass->passtype) { + switch (rpass->passtype) { case SCE_PASS_RGBA: col= shr->col; pixsize= 4; @@ -3629,7 +3629,7 @@ void add_transp_passes(RenderLayer *rl, int offset, ShadeResult *shr, float alph float *fp, *col= NULL; int pixsize= 3; - switch(rpass->passtype) { + switch (rpass->passtype) { case SCE_PASS_Z: fp= rpass->rect + offset; if (shr->z < *fp) diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index 48002029e56..cd7a8a93975 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -103,7 +103,9 @@ static int wm_keymap_item_equals_result(wmKeyMapItem *a, wmKeyMapItem *b) if (!((a->ptr == NULL && b->ptr == NULL) || (a->ptr && b->ptr && IDP_EqualsProperties(a->ptr->data, b->ptr->data)))) + { return 0; + } if ((a->flag & KMI_INACTIVE) != (b->flag & KMI_INACTIVE)) return 0; diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 514c159c87b..52a73988039 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -3200,9 +3200,12 @@ static int radial_control_get_properties(bContext *C, wmOperator *op) else { if (use_secondary_prop && RNA_property_boolean_get(&use_secondary_ptr, use_secondary_prop)) + { data_path = "data_path_secondary"; - else + } + else { data_path = "data_path_primary"; + } } if (!radial_control_get_path(&ctx_ptr, op, data_path, &rc->ptr, &rc->prop, 0, 0)) @@ -3225,7 +3228,9 @@ static int radial_control_get_properties(bContext *C, wmOperator *op) if (!radial_control_get_path(&ctx_ptr, op, "zoom_path", &rc->zoom_ptr, &rc->zoom_prop, 2, RC_PROP_REQUIRE_FLOAT | RC_PROP_ALLOW_MISSING)) + { return 0; + } if (!radial_control_get_path(&ctx_ptr, op, "image_id", &rc->image_id_ptr, NULL, 0, 0)) return 0; -- cgit v1.2.3 From d95887d756a7d869ed7089506a38149cec64255d Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 28 Apr 2012 06:40:12 +0000 Subject: Release Cycles for 2.64 begins. * BCon1: Alpha. --- source/blender/blenkernel/BKE_blender.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 5afe27f7be3..14f5c27c3df 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -51,7 +51,7 @@ extern "C" { /* can be left blank, otherwise a,b,c... etc with no quotes */ #define BLENDER_VERSION_CHAR /* alpha/beta/rc/release, docs use this */ -#define BLENDER_VERSION_CYCLE release +#define BLENDER_VERSION_CYCLE alpha extern char versionstr[]; /* from blender.c */ -- cgit v1.2.3 From f1d680d4b5406b65518df5e29ea3b62229077219 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 07:00:53 +0000 Subject: fix for crash when multires subdividing a mesh with no faces (new bug in bmesh grr!) --- source/blender/blenkernel/intern/multires.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index e2142c393a5..d7212e5eaf9 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -835,7 +835,7 @@ static void multires_subdivide(MultiresModifierData *mmd, Object *ob, int totlvl MDisps *mdisps; int lvl= mmd->totlvl; - if (totlvl > multires_max_levels) + if ((totlvl > multires_max_levels) || (me->totpoly == 0)) return; multires_force_update(ob); -- cgit v1.2.3 From 3553bf6db02b5e625ea9ee28b624fa6d5cd6d306 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 07:02:44 +0000 Subject: fix for incorrect selection check in opencollada integration. --- source/blender/collada/GeometryExporter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/collada/GeometryExporter.h b/source/blender/collada/GeometryExporter.h index 0085e3755aa..5d79fabb713 100644 --- a/source/blender/collada/GeometryExporter.h +++ b/source/blender/collada/GeometryExporter.h @@ -112,7 +112,7 @@ struct GeometryFunctor { Object *ob = base->object; if (ob->type == OB_MESH && ob->data && - !(export_selected && !(ob->flag && SELECT)) && + !(export_selected && !(ob->flag & SELECT)) && ((sce->lay & ob->lay)!=0)) { f(ob); -- cgit v1.2.3 From f8f7523fb2f38ae03e029ee1d279d5dc3c91390d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 07:43:21 +0000 Subject: fix memory leak in BM_face_copy() note that this doesnt run when duplicating faces normally, only way to cause this bug I could find was to knife cut a 33+ sided ngon with multi-res applied. also small improvement not to grow the array but allocate at once if needed. --- source/blender/bmesh/intern/bmesh_core.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index 756fd742fa6..f38c737b8ac 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -184,34 +184,32 @@ static BMLoop *bm_face_boundary_add(BMesh *bm, BMFace *f, BMVert *startv, BMEdge BMFace *BM_face_copy(BMesh *bm, BMFace *f, const short copyverts, const short copyedges) { - BMEdge **edges = NULL; BMVert **verts = NULL; - BLI_array_staticdeclare(edges, BM_NGON_STACK_SIZE); - BLI_array_staticdeclare(verts, BM_NGON_STACK_SIZE); + BMEdge **edges = NULL; + BLI_array_fixedstack_declare(verts, BM_NGON_STACK_SIZE, f->len, __func__); + BLI_array_fixedstack_declare(edges, BM_NGON_STACK_SIZE, f->len, __func__); BMLoop *l_iter; BMLoop *l_first; BMLoop *l_copy; BMFace *f_copy; int i; - /* BMESH_TODO - grow verts array in one go! (right here) */ l_iter = l_first = BM_FACE_FIRST_LOOP(f); + i = 0; do { if (copyverts) { - BMVert *v = BM_vert_create(bm, l_iter->v->co, l_iter->v); - BLI_array_append(verts, v); + verts[i] = BM_vert_create(bm, l_iter->v->co, l_iter->v); } else { - BLI_array_append(verts, l_iter->v); + verts[i] = l_iter->v; } + i++; } while ((l_iter = l_iter->next) != l_first); - /* BMESH_TODO - grow edges array in one go! (right here) */ l_iter = l_first = BM_FACE_FIRST_LOOP(f); i = 0; do { if (copyedges) { - BMEdge *e; BMVert *v1, *v2; if (l_iter->e->v1 == verts[i]) { @@ -223,13 +221,11 @@ BMFace *BM_face_copy(BMesh *bm, BMFace *f, const short copyverts, const short co v1 = verts[(i + 1) % f->len]; } - e = BM_edge_create(bm, v1, v2, l_iter->e, FALSE); - BLI_array_append(edges, e); + edges[i] = BM_edge_create(bm, v1, v2, l_iter->e, FALSE); } else { - BLI_array_append(edges, l_iter->e); + edges[i] = l_iter->e; } - i++; } while ((l_iter = l_iter->next) != l_first); @@ -243,7 +239,10 @@ BMFace *BM_face_copy(BMesh *bm, BMFace *f, const short copyverts, const short co BM_elem_attrs_copy(bm, bm, l_iter, l_copy); l_copy = l_copy->next; } while ((l_iter = l_iter->next) != l_first); - + + BLI_array_fixedstack_free(verts); + BLI_array_fixedstack_free(edges); + return f_copy; } -- cgit v1.2.3 From 0281ff408d7cda003b086169ae66a61b4cf9a02c Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 28 Apr 2012 08:27:09 +0000 Subject: Plugin system: * Remove RNA, Operator and UI for Texture and Sequence plugins. Since 2.5x no effort has been done to bring that back, so there is simply no reason in keeping that code and the UI for that ;-) * Low Level code still exists and is unchanged. --- release/scripts/startup/bl_ui/space_sequencer.py | 5 +---- release/scripts/startup/bl_ui/space_userpref.py | 2 -- .../editors/space_sequencer/sequencer_edit.c | 1 - source/blender/makesrna/intern/rna_actuator.c | 16 ---------------- source/blender/makesrna/intern/rna_sequencer.c | 22 ---------------------- source/blender/makesrna/intern/rna_texture.c | 14 -------------- source/blender/makesrna/intern/rna_ui.c | 2 +- source/blender/makesrna/intern/rna_userdef.c | 15 --------------- 8 files changed, 2 insertions(+), 75 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index aae950519a4..43d675c1417 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -220,7 +220,6 @@ class SEQUENCER_MT_add_effect(Menu): layout.operator("sequencer.effect_strip_add", text="Gamma Cross").type = 'GAMMA_CROSS' layout.operator("sequencer.effect_strip_add", text="Multiply").type = 'MULTIPLY' layout.operator("sequencer.effect_strip_add", text="Over Drop").type = 'OVER_DROP' - layout.operator("sequencer.effect_strip_add", text="Plugin").type = 'PLUGIN' layout.operator("sequencer.effect_strip_add", text="Wipe").type = 'WIPE' layout.operator("sequencer.effect_strip_add", text="Glow").type = 'GLOW' layout.operator("sequencer.effect_strip_add", text="Transform").type = 'TRANSFORM' @@ -488,7 +487,7 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel): col = layout.column(align=True) if strip.type == 'SPEED': col.prop(strip, "multiply_speed") - elif strip.type in {'CROSS', 'GAMMA_CROSS', 'PLUGIN', 'WIPE'}: + elif strip.type in {'CROSS', 'GAMMA_CROSS', 'WIPE'}: col.prop(strip, "use_default_fade", "Default fade") if not strip.use_default_fade: col.prop(strip, "effect_fader", text="Effect fader") @@ -553,7 +552,6 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel): return strip.type in {'MOVIE', 'IMAGE', 'SCENE', 'MOVIECLIP', 'META', 'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER', 'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP', - 'PLUGIN', 'WIPE', 'GLOW', 'TRANSFORM', 'MULTICAM', 'SPEED', 'ADJUSTMENT'} @@ -716,7 +714,6 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel, Panel): return strip.type in {'MOVIE', 'IMAGE', 'SCENE', 'MOVIECLIP', 'META', 'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER', 'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP', - 'PLUGIN', 'WIPE', 'GLOW', 'TRANSFORM', 'COLOR', 'MULTICAM', 'SPEED', 'ADJUSTMENT'} diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 7010c4f07cf..3c279502b02 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -797,8 +797,6 @@ class USERPREF_PT_file(Panel): sub = col1.column() sub.prop(paths, "font_directory", text="") sub.prop(paths, "texture_directory", text="") - sub.prop(paths, "texture_plugin_directory", text="") - sub.prop(paths, "sequence_plugin_directory", text="") sub.prop(paths, "render_output_directory", text="") sub.prop(paths, "script_directory", text="") sub.prop(paths, "sound_directory", text="") diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index bd306f2d646..5bd1ba4dcf2 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -87,7 +87,6 @@ EnumPropertyItem sequencer_prop_effect_types[] = { {SEQ_GAMCROSS, "GAMMA_CROSS", 0, "Gamma Cross", "Gamma Cross effect strip type"}, {SEQ_MUL, "MULTIPLY", 0, "Multiply", "Multiply effect strip type"}, {SEQ_OVERDROP, "OVER_DROP", 0, "Alpha Over Drop", "Alpha Over Drop effect strip type"}, - {SEQ_PLUGIN, "PLUGIN", 0, "Plugin", "Plugin effect strip type"}, {SEQ_WIPE, "WIPE", 0, "Wipe", "Wipe effect strip type"}, {SEQ_GLOW, "GLOW", 0, "Glow", "Glow effect strip type"}, {SEQ_TRANSFORM, "TRANSFORM", 0, "Transform", "Transform effect strip type"}, diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c index e564c03df14..e8eed526a7c 100644 --- a/source/blender/makesrna/intern/rna_actuator.c +++ b/source/blender/makesrna/intern/rna_actuator.c @@ -1451,22 +1451,6 @@ static void rna_def_scene_actuator(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Scene", "Scene to be added/removed/paused/resumed"); RNA_def_property_update(prop, NC_LOGIC, NULL); - - /* XXX no need for those tooltips. to remove soon - * Originally we had different 'scene' tooltips for different values of 'type'. - * They were: - * ACT_SCENE_RESTART "" - * ACT_SCENE_CAMERA "" - * ACT_SCENE_SET "Set this Scene" - * ACT_SCENE_ADD_FRONT "Add an Overlay Scene" - * ACT_SCENE_ADD_BACK "Add a Background Scene" - * ACT_SCENE_REMOVE "Remove a Scene" - * ACT_SCENE_SUSPEND "Pause a Scene" - * ACT_SCENE_RESUME "Unpause a Scene" - * - * It can be done in the ui script if still needed. - */ - } static void rna_def_random_actuator(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index c94d420da8a..7fecbb83fa5 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -414,8 +414,6 @@ static StructRNA* rna_Sequence_refine(struct PointerRNA *ptr) return &RNA_MulticamSequence; case SEQ_ADJUSTMENT: return &RNA_AdjustmentSequence; - case SEQ_PLUGIN: - return &RNA_PluginSequence; case SEQ_WIPE: return &RNA_WipeSequence; case SEQ_GLOW: @@ -1588,25 +1586,6 @@ static void rna_def_adjustment(BlenderRNA *brna) rna_def_input(srna); } -static void rna_def_plugin(BlenderRNA *brna) -{ - StructRNA *srna; - PropertyRNA *prop; - - srna = RNA_def_struct(brna, "PluginSequence", "EffectSequence"); - RNA_def_struct_ui_text(srna, "Plugin Sequence", - "Sequence strip applying an effect, loaded from an external plugin"); - RNA_def_struct_sdna_from(srna, "PluginSeq", "plugin"); - - prop = RNA_def_property(srna, "filename", PROP_STRING, PROP_FILENAME); - RNA_def_property_string_sdna(prop, NULL, "name"); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Filename", ""); - RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); - - /* plugin properties need custom wrapping code like ID properties */ -} - static void rna_def_wipe(BlenderRNA *brna) { StructRNA *srna; @@ -1848,7 +1827,6 @@ void RNA_def_sequencer(BlenderRNA *brna) rna_def_effect(brna); rna_def_multicam(brna); rna_def_adjustment(brna); - rna_def_plugin(brna); rna_def_wipe(brna); rna_def_glow(brna); rna_def_transform(brna); diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index fab80997d08..c314e9be0ba 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -134,8 +134,6 @@ static StructRNA *rna_Texture_refine(struct PointerRNA *ptr) return &RNA_MusgraveTexture; case TEX_NOISE: return &RNA_NoiseTexture; - case TEX_PLUGIN: - return &RNA_PluginTexture; case TEX_POINTDENSITY: return &RNA_PointDensityTexture; case TEX_STUCCI: @@ -1302,17 +1300,6 @@ static void rna_def_texture_image(BlenderRNA *brna) RNA_def_property_update(prop, 0, "rna_Texture_update"); } -static void rna_def_texture_plugin(BlenderRNA *brna) -{ - StructRNA *srna; - - srna = RNA_def_struct(brna, "PluginTexture", "Texture"); - RNA_def_struct_ui_text(srna, "Plugin", "External plugin texture"); - RNA_def_struct_sdna(srna, "Tex"); - - /* XXX: todo */ -} - static void rna_def_texture_environment_map(BlenderRNA *brna) { StructRNA *srna; @@ -2013,7 +2000,6 @@ static void rna_def_texture(BlenderRNA *brna) rna_def_texture_stucci(brna); rna_def_texture_noise(brna); rna_def_texture_image(brna); - rna_def_texture_plugin(brna); rna_def_texture_environment_map(brna); rna_def_texture_musgrave(brna); rna_def_texture_voronoi(brna); diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 635dfb48b27..44ece727912 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -723,7 +723,7 @@ static void rna_def_panel(BlenderRNA *brna) prop = RNA_def_property(srna, "bl_context", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "type->context"); - RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); /* should this be optional? - Campbell */ + RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); /* Only used in Properties Editor and 3D View - Thomas */ RNA_def_property_ui_text(prop, "Context", "The context in which the panel belongs to. (TODO: explain the " "possible combinations bl_context/bl_region_type/bl_space_type)"); diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index ae236da6952..2e56d1a2a4d 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -1769,12 +1769,6 @@ static void rna_def_userdef_theme_space_seq(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Effect Strip", ""); RNA_def_property_update(prop, 0, "rna_userdef_update"); - prop = RNA_def_property(srna, "plugin_strip", PROP_FLOAT, PROP_COLOR_GAMMA); - RNA_def_property_float_sdna(prop, NULL, "plugin"); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Plugin Strip", ""); - RNA_def_property_update(prop, 0, "rna_userdef_update"); - prop = RNA_def_property(srna, "transition_strip", PROP_FLOAT, PROP_COLOR_GAMMA); RNA_def_property_float_sdna(prop, NULL, "transition"); RNA_def_property_array(prop, 3); @@ -3373,15 +3367,6 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna) RNA_def_property_string_sdna(prop, NULL, "textudir"); RNA_def_property_ui_text(prop, "Textures Directory", "The default directory to search for textures"); - prop = RNA_def_property(srna, "texture_plugin_directory", PROP_STRING, PROP_DIRPATH); - RNA_def_property_string_sdna(prop, NULL, "plugtexdir"); - RNA_def_property_ui_text(prop, "Texture Plugin Directory", "The default directory to search for texture plugins"); - - prop = RNA_def_property(srna, "sequence_plugin_directory", PROP_STRING, PROP_DIRPATH); - RNA_def_property_string_sdna(prop, NULL, "plugseqdir"); - RNA_def_property_ui_text(prop, "Sequence Plugin Directory", - "The default directory to search for sequence plugins"); - prop = RNA_def_property(srna, "render_output_directory", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_sdna(prop, NULL, "renderdir"); RNA_def_property_ui_text(prop, "Render Output Directory", -- cgit v1.2.3 From 950ed6929792952044a57cad00833bddc8d39f45 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 08:29:20 +0000 Subject: code cleanup: - replace inline face UV center calc. - use const float[3] for mesh and uv functions. - remove unused define --- source/blender/blenkernel/BKE_lattice.h | 2 +- source/blender/blenkernel/intern/dynamicpaint.c | 2 +- source/blender/blenkernel/intern/lattice.c | 2 +- source/blender/blenlib/intern/math_rotation.c | 2 +- .../editors/animation/anim_channels_defines.c | 38 ++++++++-------- source/blender/editors/include/ED_anim_api.h | 2 +- source/blender/editors/include/ED_mesh.h | 8 ++-- source/blender/editors/include/ED_uvedit.h | 5 +- source/blender/editors/mesh/editface.c | 8 ++-- source/blender/editors/mesh/editmesh_bvh.c | 18 ++++---- source/blender/editors/mesh/editmesh_bvh.h | 5 +- source/blender/editors/mesh/editmesh_knife.c | 2 +- source/blender/editors/mesh/editmesh_rip.c | 3 +- source/blender/editors/mesh/editmesh_utils.c | 2 +- source/blender/editors/mesh/meshtools.c | 10 ++-- source/blender/editors/sculpt_paint/sculpt.c | 2 +- source/blender/editors/uvedit/uvedit_intern.h | 11 +++-- source/blender/editors/uvedit/uvedit_ops.c | 53 +++++++++------------- source/blender/modifiers/intern/MOD_hook.c | 2 +- 19 files changed, 85 insertions(+), 92 deletions(-) diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h index 29c78510fd8..a0075c4d6be 100644 --- a/source/blender/blenkernel/BKE_lattice.h +++ b/source/blender/blenkernel/BKE_lattice.h @@ -49,7 +49,7 @@ void make_local_lattice(struct Lattice *lt); void calc_lat_fudu(int flag, int res, float *fu, float *du); void init_latt_deform(struct Object *oblatt, struct Object *ob); -void calc_latt_deform(struct Object *, float *co, float weight); +void calc_latt_deform(struct Object *, float co[3], float weight); void end_latt_deform(struct Object *); int object_deform_mball(struct Object *ob, struct ListBase *dispbase); diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index 31544dd5ca0..e6f38a3a334 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -2791,7 +2791,7 @@ static void mesh_faces_spherecast_dp(void *userdata, int index, const BVHTreeRay * To optimize brush detection speed this doesn't calculate hit normal. * If ray hit the second half of a quad, no[0] is set to 1.0f, else 0.0f */ -static void mesh_faces_nearest_point_dp(void *userdata, int index, const float *co, BVHTreeNearest *nearest) +static void mesh_faces_nearest_point_dp(void *userdata, int index, const float co[3], BVHTreeNearest *nearest) { const BVHTreeFromMesh *data = (BVHTreeFromMesh*) userdata; MVert *vert = data->vert; diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c index f182d7bcb7c..12f11a9dee1 100644 --- a/source/blender/blenkernel/intern/lattice.c +++ b/source/blender/blenkernel/intern/lattice.c @@ -342,7 +342,7 @@ void init_latt_deform(Object *oblatt, Object *ob) } } -void calc_latt_deform(Object *ob, float *co, float weight) +void calc_latt_deform(Object *ob, float co[3], float weight) { Lattice *lt= ob->data; float u, v, w, tu[4], tv[4], tw[4]; diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c index ec5fd39cd87..bb3265bdf33 100644 --- a/source/blender/blenlib/intern/math_rotation.c +++ b/source/blender/blenlib/intern/math_rotation.c @@ -1615,7 +1615,7 @@ void normalize_dq(DualQuat *dq, float totweight) } } -void mul_v3m3_dq(float *co, float mat[][3], DualQuat *dq) +void mul_v3m3_dq(float co[3], float mat[][3], DualQuat *dq) { float M[3][3], t[3], scalemat[3][3], len2; float w = dq->quat[0], x = dq->quat[1], y = dq->quat[2], z = dq->quat[3]; diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c index 01ab36133fd..fbed5cc539a 100644 --- a/source/blender/editors/animation/anim_channels_defines.c +++ b/source/blender/editors/animation/anim_channels_defines.c @@ -98,10 +98,10 @@ /* Draw Backdrop ---------------------------------- */ /* get backdrop color for top-level widgets (Scene and Object only) */ -static void acf_generic_root_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float *color) +static void acf_generic_root_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) { /* darker blue for top-level widgets */ - UI_GetThemeColor3fv(TH_DOPESHEET_CHANNELOB, color); + UI_GetThemeColor3fv(TH_DOPESHEET_CHANNELOB, r_color); } /* backdrop for top-level widgets (Scene and Object only) */ @@ -124,10 +124,10 @@ static void acf_generic_root_backdrop(bAnimContext *ac, bAnimListElem *ale, floa /* get backdrop color for data expanders under top-level Scene/Object */ -static void acf_generic_dataexpand_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float *color) +static void acf_generic_dataexpand_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) { /* lighter color than top-level widget */ - UI_GetThemeColor3fv(TH_DOPESHEET_CHANNELSUBOB, color); + UI_GetThemeColor3fv(TH_DOPESHEET_CHANNELSUBOB, r_color); } /* backdrop for data expanders under top-level Scene/Object */ @@ -147,7 +147,7 @@ static void acf_generic_dataexpand_backdrop(bAnimContext *ac, bAnimListElem *ale } /* get backdrop color for generic channels */ -static void acf_generic_channel_color(bAnimContext *ac, bAnimListElem *ale, float *color) +static void acf_generic_channel_color(bAnimContext *ac, bAnimListElem *ale, float r_color[3]) { bAnimChannelType *acf= ANIM_channel_get_typeinfo(ale); SpaceAction *saction = NULL; @@ -183,12 +183,12 @@ static void acf_generic_channel_color(bAnimContext *ac, bAnimListElem *ale, floa } /* copy the colors over, transforming from bytes to floats */ - rgb_uchar_to_float(color, cp); + rgb_uchar_to_float(r_color, cp); } else { // FIXME: what happens when the indention is 1 greater than what it should be (due to grouping)? int colOfs= 20 - 20*indent; - UI_GetThemeColorShade3fv(TH_HEADER, colOfs, color); + UI_GetThemeColorShade3fv(TH_HEADER, colOfs, r_color); } } @@ -374,13 +374,13 @@ static short acf_generic_dataexpand_setting_valid(bAnimContext *ac, bAnimListEle /* Animation Summary ----------------------------------- */ /* get backdrop color for summary widget */ -static void acf_summary_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float *color) +static void acf_summary_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) { // FIXME: hardcoded color - same as the 'action' line in NLA // reddish color - color[0] = 0.8f; - color[1] = 0.2f; - color[2] = 0.0f; + r_color[0] = 0.8f; + r_color[1] = 0.2f; + r_color[2] = 0.0f; } /* backdrop for summary widget */ @@ -730,13 +730,13 @@ static bAnimChannelType ACF_OBJECT = /* Group ------------------------------------------- */ /* get backdrop color for group widget */ -static void acf_group_color(bAnimContext *UNUSED(ac), bAnimListElem *ale, float *color) +static void acf_group_color(bAnimContext *UNUSED(ac), bAnimListElem *ale, float r_color[3]) { /* highlight only for action group channels */ if (ale->flag & AGRP_ACTIVE) - UI_GetThemeColorShade3fv(TH_GROUP_ACTIVE, 10, color); + UI_GetThemeColorShade3fv(TH_GROUP_ACTIVE, 10, r_color); else - UI_GetThemeColorShade3fv(TH_GROUP, 20, color); + UI_GetThemeColorShade3fv(TH_GROUP, 20, r_color); } /* backdrop for group widget */ @@ -2322,10 +2322,10 @@ static bAnimChannelType ACF_SHAPEKEY= /* GPencil Datablock ------------------------------------------- */ /* get backdrop color for gpencil datablock widget */ -static void acf_gpd_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float *color) +static void acf_gpd_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) { /* these are ID-blocks, but not exactly standalone... */ - UI_GetThemeColorShade3fv(TH_DOPESHEET_CHANNELSUBOB, 20, color); + UI_GetThemeColorShade3fv(TH_DOPESHEET_CHANNELSUBOB, 20, r_color); } // TODO: just get this from RNA? @@ -3043,7 +3043,8 @@ static void achannel_setting_slider_shapekey_cb(bContext *C, void *key_poin, voi } /* Draw a widget for some setting */ -static void draw_setting_widget (bAnimContext *ac, bAnimListElem *ale, bAnimChannelType *acf, uiBlock *block, int xpos, int ypos, int setting) +static void draw_setting_widget(bAnimContext *ac, bAnimListElem *ale, bAnimChannelType *acf, + uiBlock *block, int xpos, int ypos, int setting) { short negflag, ptrsize /* , enabled */ /* UNUSED */, butType; int flag, icon; @@ -3222,7 +3223,8 @@ void ANIM_channel_draw_widgets (bContext *C, bAnimContext *ac, bAnimListElem *al uiBlockSetEmboss(block, UI_EMBOSS); - but = uiDefButR(block, TEX, 1, "", offset+3, yminc, RENAME_TEXT_WIDTH, channel_height, &ptr, RNA_property_identifier(prop), -1, 0, 0, -1, -1, NULL); + but = uiDefButR(block, TEX, 1, "", offset+3, yminc, RENAME_TEXT_WIDTH, channel_height, + &ptr, RNA_property_identifier(prop), -1, 0, 0, -1, -1, NULL); uiButSetFunc(but, achannel_setting_rename_done_cb, ac->ads, NULL); uiButActiveOnly(C, block, but); diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index a9affbcd342..391286a2a88 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -366,7 +366,7 @@ typedef struct bAnimChannelType { /* drawing */ /* get RGB color that is used to draw the majority of the backdrop */ - void (*get_backdrop_color)(bAnimContext *ac, bAnimListElem *ale, float *color); + void (*get_backdrop_color)(bAnimContext *ac, bAnimListElem *ale, float r_color[3]); /* draw backdrop strip for channel */ void (*draw_backdrop)(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc); /* get depth of indention (relative to the depth channel is nested at) */ diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h index 4c503a2687c..71d37d5c6ea 100644 --- a/source/blender/editors/include/ED_mesh.h +++ b/source/blender/editors/include/ED_mesh.h @@ -71,7 +71,7 @@ struct Material; struct Object; struct rcti; -intptr_t mesh_octree_table(struct Object *ob, struct BMEditMesh *em, float *co, char mode); +intptr_t mesh_octree_table(struct Object *ob, struct BMEditMesh *em, const float co[3], char mode); int mesh_mirrtopo_table(struct Object *ob, char mode); /* editmesh_utils.c */ @@ -139,7 +139,7 @@ struct MTexPoly *EDBM_mtexpoly_active_get(struct BMEditMesh *em, struct BMFace * void EDBM_uv_vert_map_free(struct UvVertMap *vmap); struct UvMapVert *EDBM_uv_vert_map_at_index(struct UvVertMap *vmap, unsigned int v); -struct UvVertMap *EDBM_uv_vert_map_create(struct BMEditMesh *em, int selected, int do_face_idx_array, float *limit); +struct UvVertMap *EDBM_uv_vert_map_create(struct BMEditMesh *em, int selected, int do_face_idx_array, const float limit[2]); void EDBM_data_layer_add(struct BMEditMesh *em, struct CustomData *data, int type, const char *name); void EDBM_data_layer_free(struct BMEditMesh *em, struct CustomData *data, int type); @@ -158,7 +158,7 @@ extern unsigned int bm_vertoffs, bm_solidoffs, bm_wireoffs; int mouse_mesh(struct bContext *C, const int mval[2], short extend); -struct BMVert *editbmesh_get_x_mirror_vert(struct Object *ob, struct BMEditMesh *em, struct BMVert *eve, float *co, int index); +struct BMVert *editbmesh_get_x_mirror_vert(struct Object *ob, struct BMEditMesh *em, struct BMVert *eve, const float co[3], int index); int mesh_get_x_mirror_vert(struct Object *ob, int index); int *mesh_get_x_mirror_faces(struct Object *ob, struct BMEditMesh *em); @@ -188,7 +188,7 @@ int paintface_mouse_select(struct bContext *C, struct Object *ob, const int mval int do_paintface_box_select(struct ViewContext *vc, struct rcti *rect, int select, int extend); void paintface_deselect_all_visible(struct Object *ob, int action, short flush_flags); void paintface_select_linked(struct bContext *C, struct Object *ob, int mval[2], int mode); -int paintface_minmax(struct Object *ob, float *min, float *max); +int paintface_minmax(struct Object *ob, float r_min[3], float r_max[3]); void paintface_hide(struct Object *ob, const int unselected); void paintface_reveal(struct Object *ob); diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h index 3569c0e8243..2427ed1a333 100644 --- a/source/blender/editors/include/ED_uvedit.h +++ b/source/blender/editors/include/ED_uvedit.h @@ -51,7 +51,7 @@ void ED_operatortypes_uvedit(void); void ED_keymap_uvedit(struct wmKeyConfig *keyconf); void ED_uvedit_assign_image(struct Main *bmain, struct Scene *scene, struct Object *obedit, struct Image *ima, struct Image *previma); -int ED_uvedit_minmax(struct Scene *scene, struct Image *ima, struct Object *obedit, float *min, float *max); +int ED_uvedit_minmax(struct Scene *scene, struct Image *ima, struct Object *obedit, float min[2], float max[2]); int ED_object_get_active_image(struct Object *ob, int mat_nr, struct Image **ima, struct ImageUser **iuser, struct bNode **node); void ED_object_assign_active_image(struct Main *bmain, struct Object *ob, int mat_nr, struct Image *ima); @@ -71,7 +71,8 @@ void uvedit_edge_select_disable(struct BMEditMesh *em, struct Scene *scene, stru void uvedit_uv_select_enable(struct BMEditMesh *em, struct Scene *scene, struct BMLoop *l, const short do_history); void uvedit_uv_select_disable(struct BMEditMesh *em, struct Scene *scene, struct BMLoop *l); -int ED_uvedit_nearest_uv(struct Scene *scene, struct Object *obedit, struct Image *ima, float co[2], float uv[2]); +int ED_uvedit_nearest_uv(struct Scene *scene, struct Object *obedit, struct Image *ima, + const float co[2], float r_uv[2]); /* uvedit_unwrap_ops.c */ void ED_uvedit_live_unwrap_begin(struct Scene *scene, struct Object *obedit); diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c index 294a39eddf8..cfc9e11879e 100644 --- a/source/blender/editors/mesh/editface.c +++ b/source/blender/editors/mesh/editface.c @@ -400,14 +400,14 @@ void paintface_deselect_all_visible(Object *ob, int action, short flush_flags) } } -int paintface_minmax(Object *ob, float *min, float *max) +int paintface_minmax(Object *ob, float r_min[3], float r_max[3]) { Mesh *me; MPoly *mp; MTexPoly *tf; MLoop *ml; MVert *mvert; - int a, b, ok = 0; + int a, b, ok = FALSE; float vec[3], bmat[3][3]; me = get_mesh(ob); @@ -427,10 +427,10 @@ int paintface_minmax(Object *ob, float *min, float *max) copy_v3_v3(vec, (mvert[ml->v].co)); mul_m3_v3(bmat, vec); add_v3_v3v3(vec, vec, ob->obmat[3]); - DO_MINMAX(vec, min, max); + DO_MINMAX(vec, r_min, r_max); } - ok = 1; + ok = TRUE; } return ok; diff --git a/source/blender/editors/mesh/editmesh_bvh.c b/source/blender/editors/mesh/editmesh_bvh.c index 6155ad1be1c..6d740812f27 100644 --- a/source/blender/editors/mesh/editmesh_bvh.c +++ b/source/blender/editors/mesh/editmesh_bvh.c @@ -239,7 +239,8 @@ static void raycallback(void *userdata, int index, const BVHTreeRay *ray, BVHTre } } -BMFace *BMBVH_RayCast(BMBVHTree *tree, float *co, float *dir, float *hitout, float *cagehit) +BMFace *BMBVH_RayCast(BMBVHTree *tree, const float co[3], const float dir[3], + float r_hitout[3], float r_cagehit[3]) { BVHTreeRayHit hit; @@ -250,10 +251,9 @@ BMFace *BMBVH_RayCast(BMBVHTree *tree, float *co, float *dir, float *hitout, flo BLI_bvhtree_ray_cast(tree->tree, co, dir, 0.0f, &hit, raycallback, tree); if (hit.dist != FLT_MAX && hit.index != -1) { - if (hitout) { + if (r_hitout) { if (tree->flag & BMBVH_RETURN_ORIG) { BMVert *v1, *v2, *v3; - float co[3]; int i; v1 = tree->em->looptris[hit.index][0]->v; @@ -261,17 +261,17 @@ BMFace *BMBVH_RayCast(BMBVHTree *tree, float *co, float *dir, float *hitout, flo v3 = tree->em->looptris[hit.index][2]->v; for (i = 0; i < 3; i++) { - co[i] = v1->co[i] + ((v2->co[i] - v1->co[i]) * tree->uv[0]) + - ((v3->co[i] - v1->co[i]) * tree->uv[1]); + r_hitout[i] = v1->co[i] + ((v2->co[i] - v1->co[i]) * tree->uv[0]) + + ((v3->co[i] - v1->co[i]) * tree->uv[1]); } - copy_v3_v3(hitout, co); } else { - copy_v3_v3(hitout, hit.co); + copy_v3_v3(r_hitout, hit.co); } - if (cagehit) - copy_v3_v3(cagehit, hit.co); + if (r_cagehit) { + copy_v3_v3(r_cagehit, hit.co); + } } return tree->em->looptris[hit.index][0]->f; diff --git a/source/blender/editors/mesh/editmesh_bvh.h b/source/blender/editors/mesh/editmesh_bvh.h index e2b45062e41..6512f054c1b 100644 --- a/source/blender/editors/mesh/editmesh_bvh.h +++ b/source/blender/editors/mesh/editmesh_bvh.h @@ -50,13 +50,12 @@ struct BMBVHTree *BMBVH_NewBVH(struct BMEditMesh *em, int flag, struct Scene *sc void BMBVH_FreeBVH(struct BMBVHTree *tree); struct BVHTree *BMBVH_BVHTree(struct BMBVHTree *tree); -struct BMFace *BMBVH_RayCast(struct BMBVHTree *tree, float *co, float *dir, float *hitout, float *cagehit); +struct BMFace *BMBVH_RayCast(struct BMBVHTree *tree, const float co[3], const float dir[3], + float r_hitout[3], float r_cagehit[3]); int BMBVH_EdgeVisible(struct BMBVHTree *tree, struct BMEdge *e, struct ARegion *ar, struct View3D *v3d, struct Object *obedit); -#define BM_SEARCH_MAXDIST 0.4f - /*find a vert closest to co in a sphere of radius maxdist*/ struct BMVert *BMBVH_FindClosestVert(struct BMBVHTree *tree, float *co, float maxdist); diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index b3bc0a1ffa9..6f33fcd05b7 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -277,7 +277,7 @@ static void knife_add_to_vert_edges(KnifeTool_OpData *kcd, KnifeEdge *kfe) knife_append_list(kcd, &kfe->v2->edges, kfe); } -static KnifeVert *new_knife_vert(KnifeTool_OpData *kcd, float *co, float *cageco) +static KnifeVert *new_knife_vert(KnifeTool_OpData *kcd, const float co[3], float *cageco) { KnifeVert *kfv = BLI_mempool_calloc(kcd->kverts); diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index e755df1f076..b5f486947b4 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -56,7 +56,8 @@ #include "mesh_intern.h" /* helper to find edge for edge_rip */ -static float edbm_rip_rip_edgedist(ARegion *ar, float mat[][4], float *co1, float *co2, const float mvalf[2]) +static float edbm_rip_rip_edgedist(ARegion *ar, float mat[][4], + const float co1[3], const float co2[2], const float mvalf[2]) { float vec1[3], vec2[3]; diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c index 4ec3c22d1df..2ebeb9ca224 100644 --- a/source/blender/editors/mesh/editmesh_utils.c +++ b/source/blender/editors/mesh/editmesh_utils.c @@ -567,7 +567,7 @@ void undo_push_mesh(bContext *C, const char *name) } /* write comment here */ -UvVertMap *EDBM_uv_vert_map_create(BMEditMesh *em, int selected, int do_face_idx_array, float *limit) +UvVertMap *EDBM_uv_vert_map_create(BMEditMesh *em, int selected, int do_face_idx_array, const float limit[2]) { BMVert *ev; BMFace *efa; diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index 0a6368daf74..b3ac3069cd9 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -641,7 +641,7 @@ typedef struct MocNode { intptr_t index[MOC_NODE_RES]; } MocNode; -static int mesh_octree_get_base_offs(float *co, float *offs, float *div) +static int mesh_octree_get_base_offs(const float co[3], const float offs[3], const float div[3]) { int vx, vy, vz; @@ -736,7 +736,7 @@ static void mesh_octree_add_nodes(MocNode **basetable, float *co, float *offs, f } -static intptr_t mesh_octree_find_index(MocNode **bt, MVert *mvert, float *co) +static intptr_t mesh_octree_find_index(MocNode **bt, MVert *mvert, const float co[3]) { float *vec; int a; @@ -773,7 +773,7 @@ static struct { /* mode is 's' start, or 'e' end, or 'u' use */ /* if end, ob can be NULL */ -intptr_t mesh_octree_table(Object *ob, BMEditMesh *em, float *co, char mode) +intptr_t mesh_octree_table(Object *ob, BMEditMesh *em, const float co[3], char mode) { MocNode **bt; @@ -920,7 +920,7 @@ int mesh_get_x_mirror_vert(Object *ob, int index) return 0; } -static BMVert *editbmesh_get_x_mirror_vert_spacial(Object *ob, BMEditMesh *em, float *co) +static BMVert *editbmesh_get_x_mirror_vert_spacial(Object *ob, BMEditMesh *em, const float co[3]) { float vec[3]; intptr_t poinval; @@ -972,7 +972,7 @@ static BMVert *editbmesh_get_x_mirror_vert_topo(Object *ob, struct BMEditMesh *e return NULL; } -BMVert *editbmesh_get_x_mirror_vert(Object *ob, struct BMEditMesh *em, BMVert *eve, float *co, int index) +BMVert *editbmesh_get_x_mirror_vert(Object *ob, struct BMEditMesh *em, BMVert *eve, const float co[3], int index) { if (((Mesh *)ob->data)->editflag & ME_EDIT_MIRROR_TOPO) { return editbmesh_get_x_mirror_vert_topo(ob, em, eve, index); diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 507fbe0f4b8..8d2dfc8dbfa 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -766,7 +766,7 @@ static int sculpt_search_sphere_cb(PBVHNode *node, void *data_v) } /* Handles clipping against a mirror modifier and SCULPT_LOCK axis flags */ -static void sculpt_clip(Sculpt *sd, SculptSession *ss, float *co, const float val[3]) +static void sculpt_clip(Sculpt *sd, SculptSession *ss, float co[3], const float val[3]) { int i; diff --git a/source/blender/editors/uvedit/uvedit_intern.h b/source/blender/editors/uvedit/uvedit_intern.h index 04d20b3ba09..d258d271833 100644 --- a/source/blender/editors/uvedit/uvedit_intern.h +++ b/source/blender/editors/uvedit/uvedit_intern.h @@ -55,8 +55,8 @@ int uvedit_face_visible_nolocal(struct Scene *scene, struct BMFace *efa); /* geometric utilities */ float uv_poly_area(float uv[][2], int len); -void uv_poly_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy, int len); -void uv_poly_center(struct BMEditMesh *em, struct BMFace *f, float cent[2]); +void uv_poly_copy_aspect(float uv_orig [][2], float uv[][2], float aspx, float aspy, int len); +void uv_poly_center(struct BMEditMesh *em, struct BMFace *f, float r_cent[2]); /* find nearest */ @@ -69,8 +69,10 @@ typedef struct NearestHit { int vert1, vert2; //index in mesh of edge vertices } NearestHit; -void uv_find_nearest_vert(struct Scene *scene, struct Image *ima, struct BMEditMesh *em, float co[2], float penalty[2], struct NearestHit *hit); -void uv_find_nearest_edge(struct Scene *scene, struct Image *ima, struct BMEditMesh *em, float co[2], struct NearestHit *hit); +void uv_find_nearest_vert(struct Scene *scene, struct Image *ima, struct BMEditMesh *em, + const float co[2], const float penalty[2], struct NearestHit *hit); +void uv_find_nearest_edge(struct Scene *scene, struct Image *ima, struct BMEditMesh *em, + const float co[2], struct NearestHit *hit); /* utility tool functions */ @@ -115,4 +117,3 @@ void UV_OT_unwrap(struct wmOperatorType *ot); void UV_OT_stitch(struct wmOperatorType *ot); #endif /* __UVEDIT_INTERN_H__ */ - diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 4a115465932..7883fac3ec2 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -523,20 +523,20 @@ void uvedit_live_unwrap_update(SpaceImage *sima, Scene *scene, Object *obedit) } /*********************** geometric utilities ***********************/ -void uv_poly_center(BMEditMesh *em, BMFace *f, float cent[2]) +void uv_poly_center(BMEditMesh *em, BMFace *f, float r_cent[2]) { BMLoop *l; MLoopUV *luv; BMIter liter; - zero_v2(cent); + zero_v2(r_cent); BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); - add_v2_v2(cent, luv->uv); + add_v2_v2(r_cent, luv->uv); } - mul_v2_fl(cent, 1.0f / (float)f->len); + mul_v2_fl(r_cent, 1.0f / (float)f->len); } float uv_poly_area(float uv[][2], int len) @@ -561,7 +561,7 @@ void uv_poly_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float as } } -int ED_uvedit_minmax(Scene *scene, Image *ima, Object *obedit, float *min, float *max) +int ED_uvedit_minmax(Scene *scene, Image *ima, Object *obedit, float r_min[2], float r_max[2]) { BMEditMesh *em = BMEdit_FromObject(obedit); BMFace *efa; @@ -571,7 +571,7 @@ int ED_uvedit_minmax(Scene *scene, Image *ima, Object *obedit, float *min, float MLoopUV *luv; int sel; - INIT_MINMAX2(min, max); + INIT_MINMAX2(r_min, r_max); sel = 0; BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { @@ -582,7 +582,7 @@ int ED_uvedit_minmax(Scene *scene, Image *ima, Object *obedit, float *min, float BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { if (uvedit_uv_select_test(em, scene, l)) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); - DO_MINMAX2(luv->uv, min, max); + DO_MINMAX2(luv->uv, r_min, r_max); sel = 1; } } @@ -643,7 +643,7 @@ static int uvedit_center(Scene *scene, Image *ima, Object *obedit, float cent[2] /************************** find nearest ****************************/ -void uv_find_nearest_edge(Scene *scene, Image *ima, BMEditMesh *em, float co[2], NearestHit *hit) +void uv_find_nearest_edge(Scene *scene, Image *ima, BMEditMesh *em, const float co[2], NearestHit *hit) { MTexPoly *tf; BMFace *efa; @@ -690,13 +690,11 @@ void uv_find_nearest_edge(Scene *scene, Image *ima, BMEditMesh *em, float co[2], } } -static void find_nearest_uv_face(Scene *scene, Image *ima, BMEditMesh *em, float co[2], NearestHit *hit) +static void find_nearest_uv_face(Scene *scene, Image *ima, BMEditMesh *em, const float co[2], NearestHit *hit) { MTexPoly *tf; BMFace *efa; - BMLoop *l; - BMIter iter, liter; - MLoopUV *luv; + BMIter iter; float mindist, dist, cent[2]; mindist = 1e10f; @@ -711,16 +709,9 @@ static void find_nearest_uv_face(Scene *scene, Image *ima, BMEditMesh *em, float tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); if (!uvedit_face_visible_test(scene, ima, efa, tf)) continue; - - cent[0] = cent[1] = 0.0f; - BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { - luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); - add_v2_v2(cent, luv->uv); - } + uv_poly_center(em, efa, cent); - cent[0] /= efa->len; - cent[1] /= efa->len; dist = fabs(co[0] - cent[0]) + fabs(co[1] - cent[1]); if (dist < mindist) { @@ -732,7 +723,7 @@ static void find_nearest_uv_face(Scene *scene, Image *ima, BMEditMesh *em, float } static int nearest_uv_between(BMEditMesh *em, BMFace *efa, int UNUSED(nverts), int id, - float co[2], float uv[2]) + const float co[2], const float uv[2]) { BMLoop *l; MLoopUV *luv; @@ -778,7 +769,7 @@ static int nearest_uv_between(BMEditMesh *em, BMFace *efa, int UNUSED(nverts), i } void uv_find_nearest_vert(Scene *scene, Image *ima, BMEditMesh *em, - float co[2], float penalty[2], NearestHit *hit) + float const co[2], const float penalty[2], NearestHit *hit) { BMFace *efa; BMLoop *l; @@ -836,7 +827,7 @@ void uv_find_nearest_vert(Scene *scene, Image *ima, BMEditMesh *em, } } -int ED_uvedit_nearest_uv(Scene *scene, Object *obedit, Image *ima, float co[2], float uv[2]) +int ED_uvedit_nearest_uv(Scene *scene, Object *obedit, Image *ima, const float co[2], float r_uv[2]) { BMEditMesh *em = BMEdit_FromObject(obedit); BMFace *efa; @@ -845,11 +836,10 @@ int ED_uvedit_nearest_uv(Scene *scene, Object *obedit, Image *ima, float co[2], MTexPoly *tf; MLoopUV *luv; float mindist, dist; - int found = 0; + int found = FALSE; mindist = 1e10f; - uv[0] = co[0]; - uv[1] = co[1]; + copy_v2_v2(r_uv, co); BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) { tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY); @@ -863,9 +853,8 @@ int ED_uvedit_nearest_uv(Scene *scene, Object *obedit, Image *ima, float co[2], if (dist <= mindist) { mindist = dist; - uv[0] = luv->uv[0]; - uv[1] = luv->uv[1]; - found = 1; + copy_v2_v2(r_uv, luv->uv); + found = TRUE; } } } @@ -1085,7 +1074,7 @@ static int select_edgeloop(Scene *scene, Image *ima, BMEditMesh *em, NearestHit /*********************** linked select ***********************/ -static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, float limit[2], NearestHit *hit, int extend) +static void select_linked(Scene *scene, Image *ima, BMEditMesh *em, const float limit[2], NearestHit *hit, int extend) { BMFace *efa; BMLoop *l; @@ -1696,7 +1685,7 @@ static int sticky_select(float *limit, int hitv[4], int v, float *hituv[4], floa return 0; } -static int mouse_select(bContext *C, float co[2], int extend, int loop) +static int mouse_select(bContext *C, const float co[2], int extend, int loop) { SpaceImage *sima = CTX_wm_space_image(C); Scene *scene = CTX_data_scene(C); @@ -2768,7 +2757,7 @@ void UV_OT_select_lasso(wmOperatorType *ot) /* ******************** snap cursor operator **************** */ -static void snap_uv_to_pixel(float *uvco, float w, float h) +static void snap_uv_to_pixel(float uvco[2], float w, float h) { uvco[0] = ((float)((int)((uvco[0] * w) + 0.5f))) / w; uvco[1] = ((float)((int)((uvco[1] * h) + 0.5f))) / h; diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c index d8fbb6f468f..b115e5bb244 100644 --- a/source/blender/modifiers/intern/MOD_hook.c +++ b/source/blender/modifiers/intern/MOD_hook.c @@ -128,7 +128,7 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, } } -static float hook_falloff(float *co_1, float *co_2, const float falloff_squared, float fac) +static float hook_falloff(const float co_1[3], const float co_2[3], const float falloff_squared, float fac) { if (falloff_squared) { float len_squared = len_squared_v3v3(co_1, co_2); -- cgit v1.2.3 From de923eba57846e8a91b24347917f988cbfa97999 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 28 Apr 2012 08:32:00 +0000 Subject: * UI fix for last commit, forgot to remove the plugin text strings. --- release/scripts/startup/bl_ui/space_userpref.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 3c279502b02..6ae66481fa1 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -785,8 +785,6 @@ class USERPREF_PT_file(Panel): sub = col1.column() sub.label(text="Fonts:") sub.label(text="Textures:") - sub.label(text="Texture Plugins:") - sub.label(text="Sequence Plugins:") sub.label(text="Render Output:") sub.label(text="Scripts:") sub.label(text="Sounds:") -- cgit v1.2.3 From 3cceab304aaee5e5f11f224b39960f0c58f68727 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 28 Apr 2012 08:43:24 +0000 Subject: Style cleanup in own compositor nodes --- .../composite/nodes/node_composite_movieclip.c | 62 +++++++++++----------- .../nodes/node_composite_moviedistortion.c | 50 ++++++++--------- .../composite/nodes/node_composite_stabilize2d.c | 12 ++--- .../composite/nodes/node_composite_transform.c | 36 ++++++------- 4 files changed, 80 insertions(+), 80 deletions(-) diff --git a/source/blender/nodes/composite/nodes/node_composite_movieclip.c b/source/blender/nodes/composite/nodes/node_composite_movieclip.c index dd2c169fe9a..2f017b52676 100644 --- a/source/blender/nodes/composite/nodes/node_composite_movieclip.c +++ b/source/blender/nodes/composite/nodes/node_composite_movieclip.c @@ -33,7 +33,7 @@ #include "node_composite_util.h" -static bNodeSocketTemplate cmp_node_movieclip_out[]= { +static bNodeSocketTemplate cmp_node_movieclip_out[] = { { SOCK_RGBA, 0, "Image"}, { SOCK_FLOAT, 1, "Offset X"}, { SOCK_FLOAT, 1, "Offset Y"}, @@ -49,50 +49,50 @@ static CompBuf *node_composit_get_movieclip(RenderData *rd, MovieClip *clip, Mov int type; float *rect; - int alloc= FALSE; + int alloc = FALSE; - orig_ibuf= BKE_movieclip_get_ibuf(clip, user); + orig_ibuf = BKE_movieclip_get_ibuf(clip, user); - if (orig_ibuf==NULL || (orig_ibuf->rect==NULL && orig_ibuf->rect_float==NULL)) { + if (orig_ibuf == NULL || (orig_ibuf->rect == NULL && orig_ibuf->rect_float == NULL)) { IMB_freeImBuf(orig_ibuf); return NULL; } - ibuf= IMB_dupImBuf(orig_ibuf); + ibuf = IMB_dupImBuf(orig_ibuf); IMB_freeImBuf(orig_ibuf); - if (ibuf->rect_float == NULL || ibuf->userflags&IB_RECT_INVALID) { + if (ibuf->rect_float == NULL || (ibuf->userflags & IB_RECT_INVALID)) { IMB_float_from_rect(ibuf); - ibuf->userflags&= ~IB_RECT_INVALID; + ibuf->userflags &= ~IB_RECT_INVALID; } /* now we need a float buffer from the image with matching color management */ if (ibuf->channels == 4) { - rect= node_composit_get_float_buffer(rd, ibuf, &alloc); + rect = node_composit_get_float_buffer(rd, ibuf, &alloc); } else { /* non-rgba passes can't use color profiles */ - rect= ibuf->rect_float; + rect = ibuf->rect_float; } /* done coercing into the correct color management */ if (!alloc) { - rect= MEM_dupallocN(rect); - alloc= 1; + rect = MEM_dupallocN(rect); + alloc = TRUE; } - type= ibuf->channels; + type = ibuf->channels; if (rd->scemode & R_COMP_CROP) { - stackbuf= get_cropped_compbuf(&rd->disprect, rect, ibuf->x, ibuf->y, type); + stackbuf = get_cropped_compbuf(&rd->disprect, rect, ibuf->x, ibuf->y, type); if (alloc) MEM_freeN(rect); } else { /* we put imbuf copy on stack, cbuf knows rect is from other ibuf when freed! */ - stackbuf= alloc_compbuf(ibuf->x, ibuf->y, type, FALSE); - stackbuf->rect= rect; - stackbuf->malloc= alloc; + stackbuf = alloc_compbuf(ibuf->x, ibuf->y, type, FALSE); + stackbuf->rect = rect; + stackbuf->malloc = alloc; } IMB_freeImBuf(ibuf); @@ -103,32 +103,32 @@ static CompBuf *node_composit_get_movieclip(RenderData *rd, MovieClip *clip, Mov static void node_composit_exec_movieclip(void *data, bNode *node, bNodeStack **UNUSED(in), bNodeStack **out) { if (node->id) { - RenderData *rd= data; - MovieClip *clip= (MovieClip *)node->id; - MovieClipUser *user= (MovieClipUser *)node->storage; - CompBuf *stackbuf= NULL; + RenderData *rd = data; + MovieClip *clip = (MovieClip *)node->id; + MovieClipUser *user = (MovieClipUser *)node->storage; + CompBuf *stackbuf = NULL; BKE_movieclip_user_set_frame(user, rd->cfra); - stackbuf= node_composit_get_movieclip(rd, clip, user); + stackbuf = node_composit_get_movieclip(rd, clip, user); if (stackbuf) { - MovieTrackingStabilization *stab= &clip->tracking.stabilization; + MovieTrackingStabilization *stab = &clip->tracking.stabilization; /* put image on stack */ - out[0]->data= stackbuf; + out[0]->data = stackbuf; - if (stab->flag&TRACKING_2D_STABILIZATION) { + if (stab->flag & TRACKING_2D_STABILIZATION) { float loc[2], scale, angle; BKE_tracking_stabilization_data(&clip->tracking, rd->cfra, stackbuf->x, stackbuf->y, loc, &scale, &angle); - out[1]->vec[0]= loc[0]; - out[2]->vec[0]= loc[1]; + out[1]->vec[0] = loc[0]; + out[2]->vec[0] = loc[1]; - out[3]->vec[0]= scale; - out[4]->vec[0]= angle; + out[3]->vec[0] = scale; + out[4]->vec[0] = angle; } /* generate preview */ @@ -139,10 +139,10 @@ static void node_composit_exec_movieclip(void *data, bNode *node, bNodeStack **U static void init(bNodeTree *UNUSED(ntree), bNode *node, bNodeTemplate *UNUSED(ntemp)) { - MovieClipUser *user= MEM_callocN(sizeof(MovieClipUser), "node movie clip user"); + MovieClipUser *user = MEM_callocN(sizeof(MovieClipUser), "node movie clip user"); - node->storage= user; - user->framenr= 1; + node->storage = user; + user->framenr = 1; } void register_node_type_cmp_movieclip(bNodeTreeType *ttype) diff --git a/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c b/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c index d9f0da9b8aa..f6ffc783b08 100644 --- a/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c +++ b/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -37,12 +37,12 @@ /* **************** Translate ******************** */ -static bNodeSocketTemplate cmp_node_moviedistortion_in[]= { +static bNodeSocketTemplate cmp_node_moviedistortion_in[] = { { SOCK_RGBA, 1, "Image", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f}, { -1, 0, "" } }; -static bNodeSocketTemplate cmp_node_moviedistortion_out[]= { +static bNodeSocketTemplate cmp_node_moviedistortion_out[] = { { SOCK_RGBA, 0, "Image"}, { -1, 0, "" } }; @@ -51,63 +51,63 @@ static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out) { if (in[0]->data) { if (node->id) { - MovieClip *clip= (MovieClip *)node->id; - CompBuf *cbuf= typecheck_compbuf(in[0]->data, CB_RGBA); - CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 0); + MovieClip *clip = (MovieClip *)node->id; + CompBuf *cbuf = typecheck_compbuf(in[0]->data, CB_RGBA); + CompBuf *stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 0); ImBuf *ibuf; - ibuf= IMB_allocImBuf(cbuf->x, cbuf->y, 32, 0); + ibuf = IMB_allocImBuf(cbuf->x, cbuf->y, 32, 0); if (ibuf) { - RenderData *rd= data; + RenderData *rd = data; ImBuf *obuf; - MovieTracking *tracking= &clip->tracking; + MovieTracking *tracking = &clip->tracking; int width, height; - float overscan= 0.0f; - MovieClipUser user= {0}; + float overscan = 0.0f; + MovieClipUser user = {0}; BKE_movieclip_user_set_frame(&user, rd->cfra); - ibuf->rect_float= cbuf->rect; + ibuf->rect_float = cbuf->rect; BKE_movieclip_get_size(clip, &user, &width, &height); if (!node->storage) - node->storage= BKE_tracking_distortion_create(); + node->storage = BKE_tracking_distortion_create(); - if (node->custom1==0) + if (node->custom1 == 0) obuf= BKE_tracking_distortion_exec(node->storage, tracking, ibuf, width, height, overscan, 1); else obuf= BKE_tracking_distortion_exec(node->storage, tracking, ibuf, width, height, overscan, 0); - stackbuf->rect= obuf->rect_float; - stackbuf->malloc= 1; + stackbuf->rect = obuf->rect_float; + stackbuf->malloc = TRUE; - obuf->mall&= ~IB_rectfloat; - obuf->rect_float= NULL; + obuf->mall &= ~IB_rectfloat; + obuf->rect_float = NULL; IMB_freeImBuf(ibuf); IMB_freeImBuf(obuf); } /* pass on output and free */ - out[0]->data= stackbuf; + out[0]->data = stackbuf; - if (cbuf!=in[0]->data) + if (cbuf != in[0]->data) free_compbuf(cbuf); } else { - CompBuf *cbuf= in[0]->data; - CompBuf *stackbuf= pass_on_compbuf(cbuf); + CompBuf *cbuf = in[0]->data; + CompBuf *stackbuf = pass_on_compbuf(cbuf); - out[0]->data= stackbuf; + out[0]->data = stackbuf; } } } static const char *label(bNode *node) { - if (node->custom1==0) + if (node->custom1 == 0) return IFACE_("Undistortion"); else return IFACE_("Distortion"); @@ -124,7 +124,7 @@ static void storage_free(bNode *node) static void storage_copy(bNode *orig_node, bNode *new_node) { if (orig_node->storage) - new_node->storage= BKE_tracking_distortion_copy(orig_node->storage); + new_node->storage = BKE_tracking_distortion_copy(orig_node->storage); } void register_node_type_cmp_moviedistortion(bNodeTreeType *ttype) diff --git a/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c b/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c index 0eac85c4030..e5d8fe16d51 100644 --- a/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c +++ b/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c @@ -48,20 +48,20 @@ static bNodeSocketTemplate cmp_node_stabilize2d_out[]= { static void node_composit_exec_stabilize2d(void *data, bNode *node, bNodeStack **in, bNodeStack **out) { if (in[0]->data && node->id) { - RenderData *rd= data; - MovieClip *clip= (MovieClip *)node->id; - CompBuf *cbuf= typecheck_compbuf(in[0]->data, CB_RGBA); + RenderData *rd = data; + MovieClip *clip = (MovieClip *)node->id; + CompBuf *cbuf = typecheck_compbuf(in[0]->data, CB_RGBA); CompBuf *stackbuf; float loc[2], scale, angle; BKE_tracking_stabilization_data(&clip->tracking, rd->cfra, cbuf->x, cbuf->y, loc, &scale, &angle); - stackbuf= node_composit_transform(cbuf, loc[0], loc[1], angle, scale, node->custom1); + stackbuf = node_composit_transform(cbuf, loc[0], loc[1], angle, scale, node->custom1); /* pass on output and free */ - out[0]->data= stackbuf; + out[0]->data = stackbuf; - if (cbuf!=in[0]->data) + if (cbuf != in[0]->data) free_compbuf(cbuf); } } diff --git a/source/blender/nodes/composite/nodes/node_composite_transform.c b/source/blender/nodes/composite/nodes/node_composite_transform.c index a7906cf3e46..2c2a352017a 100644 --- a/source/blender/nodes/composite/nodes/node_composite_transform.c +++ b/source/blender/nodes/composite/nodes/node_composite_transform.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -34,7 +34,7 @@ /* **************** Transform ******************** */ -static bNodeSocketTemplate cmp_node_transform_in[]= { +static bNodeSocketTemplate cmp_node_transform_in[] = { { SOCK_RGBA, 1, "Image", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f}, { SOCK_FLOAT, 1, "X", 0.0f, 0.0f, 0.0f, 0.0f, -10000.0f, 10000.0f}, { SOCK_FLOAT, 1, "Y", 0.0f, 0.0f, 0.0f, 0.0f, -10000.0f, 10000.0f}, @@ -43,17 +43,17 @@ static bNodeSocketTemplate cmp_node_transform_in[]= { { -1, 0, "" } }; -static bNodeSocketTemplate cmp_node_transform_out[]= { +static bNodeSocketTemplate cmp_node_transform_out[] = { { SOCK_RGBA, 0, "Image"}, { -1, 0, "" } }; CompBuf* node_composit_transform(CompBuf *cbuf, float x, float y, float angle, float scale, int filter_type) { - CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); + CompBuf *stackbuf = alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, TRUE); ImBuf *ibuf, *obuf; float mat[4][4], lmat[4][4], rmat[4][4], smat[4][4], cmat[4][4], icmat[4][4]; - float svec[3]= {scale, scale, scale}, loc[2]= {x, y}; + float svec[3] = {scale, scale, scale}, loc[2] = {x, y}; unit_m4(rmat); unit_m4(lmat); @@ -61,8 +61,8 @@ CompBuf* node_composit_transform(CompBuf *cbuf, float x, float y, float angle, f unit_m4(cmat); /* image center as rotation center */ - cmat[3][0]= (float)cbuf->x/2.0f; - cmat[3][1]= (float)cbuf->y/2.0f; + cmat[3][0] = (float)cbuf->x/2.0f; + cmat[3][1] = (float)cbuf->y/2.0f; invert_m4_m4(icmat, cmat); size_to_mat4(smat, svec); /* scale matrix */ @@ -74,18 +74,18 @@ CompBuf* node_composit_transform(CompBuf *cbuf, float x, float y, float angle, f invert_m4(mat); - ibuf= IMB_allocImBuf(cbuf->x, cbuf->y, 32, 0); - obuf= IMB_allocImBuf(stackbuf->x, stackbuf->y, 32, 0); + ibuf = IMB_allocImBuf(cbuf->x, cbuf->y, 32, 0); + obuf = IMB_allocImBuf(stackbuf->x, stackbuf->y, 32, 0); if (ibuf && obuf) { int i, j; - ibuf->rect_float= cbuf->rect; - obuf->rect_float= stackbuf->rect; + ibuf->rect_float = cbuf->rect; + obuf->rect_float = stackbuf->rect; - for (j=0; jy; j++) { - for (i=0; ix;i++) { - float vec[3]= {i, j, 0}; + for (j = 0; j < cbuf->y; j++) { + for (i = 0; i < cbuf->x; i++) { + float vec[3] = {i, j, 0}; mul_v3_m4v3(vec, mat, vec); @@ -114,15 +114,15 @@ CompBuf* node_composit_transform(CompBuf *cbuf, float x, float y, float angle, f static void node_composit_exec_transform(void *UNUSED(data), bNode *node, bNodeStack **in, bNodeStack **out) { if (in[0]->data) { - CompBuf *cbuf= typecheck_compbuf(in[0]->data, CB_RGBA); + CompBuf *cbuf = typecheck_compbuf(in[0]->data, CB_RGBA); CompBuf *stackbuf; - stackbuf= node_composit_transform(cbuf, in[1]->vec[0], in[2]->vec[0], in[3]->vec[0], in[4]->vec[0], node->custom1); + stackbuf = node_composit_transform(cbuf, in[1]->vec[0], in[2]->vec[0], in[3]->vec[0], in[4]->vec[0], node->custom1); /* pass on output and free */ - out[0]->data= stackbuf; + out[0]->data = stackbuf; - if (cbuf!=in[0]->data) + if (cbuf != in[0]->data) free_compbuf(cbuf); } } -- cgit v1.2.3 From 5d70a6aedfa246e6a6ac137cdc2be088950b7875 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sat, 28 Apr 2012 08:45:55 +0000 Subject: Add MingW as "platform" --- build_files/buildbot/master_unpack.py | 3 ++- build_files/scons/tools/btools.py | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/build_files/buildbot/master_unpack.py b/build_files/buildbot/master_unpack.py index 3df22ad8745..f67bd294496 100644 --- a/build_files/buildbot/master_unpack.py +++ b/build_files/buildbot/master_unpack.py @@ -48,7 +48,8 @@ def get_platform(filename): tokens = filename.split("-") platforms = ('osx', 'mac', 'bsd', 'win', 'linux', 'source', - 'solaris') + 'solaris', + 'mingw') platform_tokens = [] found = False diff --git a/build_files/scons/tools/btools.py b/build_files/scons/tools/btools.py index efc80fcd3c5..c9d31d75e18 100644 --- a/build_files/scons/tools/btools.py +++ b/build_files/scons/tools/btools.py @@ -622,7 +622,13 @@ def buildslave(target=None, source=None, env=None): else: extension = '.tar.bz2' - platform = env['OURPLATFORM'].split('-')[0] + if env['OURPLATFORM'] == 'win32-mingw': + platform = 'mingw32' + elif env['OURPLATFORM'] == 'win32-mingw': + platform = 'mingw64' + else: + platform = env['OURPLATFORM'].split('-')[0] + if platform == 'linux': import platform -- cgit v1.2.3 From fd2439f47aaaea00abb55e29b8eac39694d6ced8 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sat, 28 Apr 2012 08:47:37 +0000 Subject: bump commit count, mingw32 -> mingw64 --- build_files/scons/tools/btools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_files/scons/tools/btools.py b/build_files/scons/tools/btools.py index c9d31d75e18..65593d559ed 100644 --- a/build_files/scons/tools/btools.py +++ b/build_files/scons/tools/btools.py @@ -624,7 +624,7 @@ def buildslave(target=None, source=None, env=None): if env['OURPLATFORM'] == 'win32-mingw': platform = 'mingw32' - elif env['OURPLATFORM'] == 'win32-mingw': + elif env['OURPLATFORM'] == 'win64-mingw': platform = 'mingw64' else: platform = env['OURPLATFORM'].split('-')[0] -- cgit v1.2.3 From 07b2241fb12db6731ae1a54c6f98f4743e35fd2d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 28 Apr 2012 08:53:59 +0000 Subject: Cycles: merging features from tomato branch. === BVH build time optimizations === * BVH building was multithreaded. Not all building is multithreaded, packing and the initial bounding/splitting is still single threaded, but recursive splitting is, which was the main bottleneck. * Object splitting now uses binning rather than sorting of all elements, using code from the Embree raytracer from Intel. http://software.intel.com/en-us/articles/embree-photo-realistic-ray-tracing-kernels/ * Other small changes to avoid allocations, pack memory more tightly, avoid some unnecessary operations, ... These optimizations do not work yet when Spatial Splits are enabled, for that more work is needed. There's also other optimizations still needed, in particular for the case of many low poly objects, the packing step and node memory allocation. BVH raytracing time should remain about the same, but BVH build time should be significantly reduced, test here show speedup of about 5x to 10x on a dual core and 5x to 25x on an 8-core machine, depending on the scene. === Threads === Centralized task scheduler for multithreading, which is basically the CPU device threading code wrapped into something reusable. Basic idea is that there is a single TaskScheduler that keeps a pool of threads, one for each core. Other places in the code can then create a TaskPool that they can drop Tasks in to be executed by the scheduler, and wait for them to complete or cancel them early. === Normal ==== Added a Normal output to the texture coordinate node. This currently gives the object space normal, which is the same under object animation. In the future this might become a "generated" normal so it's also stable for deforming objects, but for now it's already useful for non-deforming objects. === Render Layers === Per render layer Samples control, leaving it to 0 will use the common scene setting. Environment pass will now render environment even if film is set to transparent. Exclude Layers" added. Scene layers (all object that influence the render, directly or indirectly) are shared between all render layers. However sometimes it's useful to leave out some object influence for a particular render layer. That's what this option allows you to do. === Filter Glossy === When using a value higher than 0.0, this will blur glossy reflections after blurry bounces, to reduce noise at the cost of accuracy. 1.0 is a good starting value to tweak. Some light paths have a low probability of being found while contributing much light to the pixel. As a result these light paths will be found in some pixels and not in others, causing fireflies. An example of such a difficult path might be a small light that is causing a small specular highlight on a sharp glossy material, which we are seeing through a rough glossy material. With path tracing it is difficult to find the specular highlight, but if we increase the roughness on the material the highlight gets bigger and softer, and so easier to find. Often this blurring will be hardly noticeable, because we are seeing it through a blurry material anyway, but there are also cases where this will lead to a loss of detail in lighting. --- intern/cycles/blender/addon/properties.py | 8 +- intern/cycles/blender/addon/ui.py | 23 +- intern/cycles/blender/blender_session.cpp | 7 +- intern/cycles/blender/blender_sync.cpp | 6 +- intern/cycles/blender/blender_sync.h | 5 +- intern/cycles/bvh/CMakeLists.txt | 4 + intern/cycles/bvh/bvh.cpp | 4 +- intern/cycles/bvh/bvh_binning.cpp | 223 ++ intern/cycles/bvh/bvh_binning.h | 86 + intern/cycles/bvh/bvh_build.cpp | 636 ++--- intern/cycles/bvh/bvh_build.h | 110 +- intern/cycles/bvh/bvh_node.cpp | 22 +- intern/cycles/bvh/bvh_node.h | 18 +- intern/cycles/bvh/bvh_params.h | 91 +- intern/cycles/bvh/bvh_sort.cpp | 16 +- intern/cycles/bvh/bvh_sort.h | 2 +- intern/cycles/bvh/bvh_split.cpp | 293 ++ intern/cycles/bvh/bvh_split.h | 110 + intern/cycles/device/device.cpp | 9 - intern/cycles/device/device.h | 4 +- intern/cycles/device/device_cpu.cpp | 63 +- intern/cycles/device/device_multi.cpp | 7 +- intern/cycles/kernel/kernel_accumulate.h | 9 +- intern/cycles/kernel/kernel_path.h | 33 +- intern/cycles/kernel/kernel_types.h | 4 +- intern/cycles/kernel/svm/svm_tex_coord.h | 27 + intern/cycles/kernel/svm/svm_types.h | 1 + intern/cycles/render/integrator.cpp | 4 + intern/cycles/render/integrator.h | 1 + intern/cycles/render/mesh.cpp | 7 +- intern/cycles/render/nodes.cpp | 7 + intern/cycles/render/object.cpp | 1 + intern/cycles/render/session.cpp | 5 + intern/cycles/subd/subd_patch.cpp | 12 +- intern/cycles/util/CMakeLists.txt | 2 + intern/cycles/util/util_boundbox.h | 86 +- intern/cycles/util/util_math.h | 485 +++- intern/cycles/util/util_task.cpp | 223 ++ intern/cycles/util/util_task.h | 122 + intern/cycles/util/util_thread.h | 127 - intern/cycles/util/util_transform.cpp | 23 +- intern/cycles/util/util_types.h | 268 +- source/blender/gpu/intern/gpu_shader_material.glsl | 5 +- .../blender/gpu/intern/gpu_shader_material.glsl.c | 2913 ++++++++++---------- source/blender/makesdna/DNA_scene_types.h | 10 +- source/blender/makesrna/intern/rna_scene.c | 13 + source/blender/render/extern/include/RE_pipeline.h | 2 +- .../blender/render/intern/source/render_result.c | 1 + 48 files changed, 3795 insertions(+), 2343 deletions(-) create mode 100644 intern/cycles/bvh/bvh_binning.cpp create mode 100644 intern/cycles/bvh/bvh_binning.h create mode 100644 intern/cycles/bvh/bvh_split.cpp create mode 100644 intern/cycles/bvh/bvh_split.h create mode 100644 intern/cycles/util/util_task.cpp create mode 100644 intern/cycles/util/util_task.h diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index cb99ea3b499..35f97bf629f 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -85,10 +85,10 @@ class CyclesRenderSettings(bpy.types.PropertyGroup): description="Leave out caustics, resulting in a darker image with less noise", default=False, ) - cls.blur_caustics = FloatProperty( - name="Blur Caustics", - description="Blur caustics to reduce noise", - min=0.0, max=1.0, + cls.blur_glossy = FloatProperty( + name="Filter Glossy", + description="Adaptively blur glossy shaders after blurry bounces, to reduce noise at the cost of accuracy", + min=0.0, max=10.0, default=0.0, ) diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 624d00b377d..0ed08589327 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -87,11 +87,11 @@ class CyclesRender_PT_integrator(CyclesButtonsPanel, Panel): sub.prop(cscene, "diffuse_bounces", text="Diffuse") sub.prop(cscene, "glossy_bounces", text="Glossy") sub.prop(cscene, "transmission_bounces", text="Transmission") - sub.prop(cscene, "no_caustics") - #row = col.row() - #row.prop(cscene, "blur_caustics") - #row.active = not cscene.no_caustics + col.separator() + + col.prop(cscene, "no_caustics") + col.prop(cscene, "blur_glossy") class CyclesRender_PT_film(CyclesButtonsPanel, Panel): @@ -178,10 +178,7 @@ class CyclesRender_PT_layers(CyclesButtonsPanel, Panel): col = split.column() col.prop(scene, "layers", text="Scene") - col.label(text="Material:") - col.prop(rl, "material_override", text="") - - col.prop(rl, "use_sky", "Use Environment") + col.prop(rl, "layers_exclude", text="Exclude") col = split.column() col.prop(rl, "layers", text="Layer") @@ -190,6 +187,16 @@ class CyclesRender_PT_layers(CyclesButtonsPanel, Panel): split = layout.split() + col = split.column() + col.label(text="Material:") + col.prop(rl, "material_override", text="") + + col = split.column() + col.prop(rl, "samples") + col.prop(rl, "use_sky", "Use Environment") + + split = layout.split() + col = split.column() col.label(text="Passes:") col.prop(rl, "use_pass_combined") diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index dc6c69e2904..5ece7aa26e2 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -218,12 +218,13 @@ void BlenderSession::render() scene->film->passes = passes; scene->film->tag_update(scene); - /* update session */ - session->reset(buffer_params, session_params.samples); - /* update scene */ sync->sync_data(b_v3d, b_iter->name().c_str()); + /* update session */ + int samples = sync->get_layer_samples(); + session->reset(buffer_params, (samples == 0)? session_params.samples: samples); + /* render */ session->start(); session->wait(); diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index 5a286298774..41cd200d003 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -153,6 +153,8 @@ void BlenderSync::sync_integrator() integrator->transparent_shadows = get_boolean(cscene, "use_transparent_shadows"); integrator->no_caustics = get_boolean(cscene, "no_caustics"); + integrator->filter_glossy = get_float(cscene, "blur_glossy"); + integrator->seed = get_int(cscene, "seed"); integrator->layer_flag = render_layer.layer; @@ -208,6 +210,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) render_layer.holdout_layer = 0; render_layer.material_override = PointerRNA_NULL; render_layer.use_background = true; + render_layer.samples = 0; return; } } @@ -220,12 +223,13 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) for(r.layers.begin(b_rlay); b_rlay != r.layers.end(); ++b_rlay) { if((!layer && first_layer) || (layer && b_rlay->name() == layer)) { render_layer.name = b_rlay->name(); - render_layer.scene_layer = get_layer(b_scene.layers()); + render_layer.scene_layer = get_layer(b_scene.layers()) & ~get_layer(b_rlay->layers_exclude()); render_layer.layer = get_layer(b_rlay->layers()); render_layer.holdout_layer = get_layer(b_rlay->layers_zmask()); render_layer.layer |= render_layer.holdout_layer; render_layer.material_override = b_rlay->material_override(); render_layer.use_background = b_rlay->use_sky(); + render_layer.samples = b_rlay->samples(); } first_layer = false; diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index d2550a1ffd7..ab8e4bd8d00 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -57,6 +57,7 @@ public: void sync_data(BL::SpaceView3D b_v3d, const char *layer = 0); void sync_camera(BL::Object b_override, int width, int height); void sync_view(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, int width, int height); + int get_layer_samples() { return render_layer.samples; } /* get parameters */ static SceneParams get_scene_params(BL::Scene b_scene, bool background); @@ -108,7 +109,8 @@ private: RenderLayerInfo() : scene_layer(0), layer(0), holdout_layer(0), material_override(PointerRNA_NULL), - use_background(true) + use_background(true), + samples(0) {} string name; @@ -117,6 +119,7 @@ private: uint holdout_layer; BL::Material material_override; bool use_background; + int samples; } render_layer; }; diff --git a/intern/cycles/bvh/CMakeLists.txt b/intern/cycles/bvh/CMakeLists.txt index decc576fe51..131a7a1f750 100644 --- a/intern/cycles/bvh/CMakeLists.txt +++ b/intern/cycles/bvh/CMakeLists.txt @@ -10,17 +10,21 @@ set(INC set(SRC bvh.cpp + bvh_binning.cpp bvh_build.cpp bvh_node.cpp bvh_sort.cpp + bvh_split.cpp ) set(SRC_HEADERS bvh.h + bvh_binning.h bvh_build.h bvh_node.h bvh_params.h bvh_sort.h + bvh_split.h ) include_directories(${INC}) diff --git a/intern/cycles/bvh/bvh.cpp b/intern/cycles/bvh/bvh.cpp index c9bfa964332..15695dddf45 100644 --- a/intern/cycles/bvh/bvh.cpp +++ b/intern/cycles/bvh/bvh.cpp @@ -530,7 +530,7 @@ void RegularBVH::refit_nodes() { assert(!params.top_level); - BoundBox bbox; + BoundBox bbox = BoundBox::empty; uint visibility = 0; refit_node(0, (pack.is_leaf[0])? true: false, bbox, visibility); } @@ -572,7 +572,7 @@ void RegularBVH::refit_node(int idx, bool leaf, BoundBox& bbox, uint& visibility } else { /* refit inner node, set bbox from children */ - BoundBox bbox0, bbox1; + BoundBox bbox0 = BoundBox::empty, bbox1 = BoundBox::empty; uint visibility0 = 0, visibility1 = 0; refit_node((c0 < 0)? -c0-1: c0, (c0 < 0), bbox0, visibility0); diff --git a/intern/cycles/bvh/bvh_binning.cpp b/intern/cycles/bvh/bvh_binning.cpp new file mode 100644 index 00000000000..661541a8d23 --- /dev/null +++ b/intern/cycles/bvh/bvh_binning.cpp @@ -0,0 +1,223 @@ +/* + * Adapted from code copyright 2009-2011 Intel Corporation + * Modifications Copyright 2012, Blender Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +//#define __KERNEL_SSE__ + +#include + +#include "bvh_binning.h" + +#include "util_algorithm.h" +#include "util_boundbox.h" +#include "util_types.h" + +CCL_NAMESPACE_BEGIN + +/* SSE replacements */ + +__forceinline void prefetch_L1 (const void* ptr) { } +__forceinline void prefetch_L2 (const void* ptr) { } +__forceinline void prefetch_L3 (const void* ptr) { } +__forceinline void prefetch_NTA(const void* ptr) { } + +template __forceinline float extract(const int4& b) +{ return b[src]; } +template __forceinline const float4 insert(const float4& a, const float b) +{ float4 r = a; r[dst] = b; return r; } + +__forceinline int get_best_dimension(const float4& bestSAH) +{ + // return (int)__bsf(movemask(reduce_min(bestSAH) == bestSAH)); + + float minSAH = min(bestSAH.x, min(bestSAH.y, bestSAH.z)); + + if(bestSAH.x == minSAH) return 0; + else if(bestSAH.y == minSAH) return 1; + else return 2; +} + +/* BVH Object Binning */ + +BVHObjectBinning::BVHObjectBinning(const BVHRange& job, BVHReference *prims) +: BVHRange(job), splitSAH(FLT_MAX), dim(0), pos(0) +{ + /* compute number of bins to use and precompute scaling factor for binning */ + num_bins = min(size_t(MAX_BINS), size_t(4.0f + 0.05f*size())); + scale = rcp(cent_bounds().size()) * make_float3((float)num_bins); + + /* initialize binning counter and bounds */ + BoundBox bin_bounds[MAX_BINS][4]; /* bounds for every bin in every dimension */ + int4 bin_count[MAX_BINS]; /* number of primitives mapped to bin */ + + for(size_t i = 0; i < num_bins; i++) { + bin_count[i] = make_int4(0); + bin_bounds[i][0] = bin_bounds[i][1] = bin_bounds[i][2] = BoundBox::empty; + } + + /* map geometry to bins, unrolled once */ + { + ssize_t i; + + for(i = 0; i < ssize_t(size()) - 1; i += 2) { + prefetch_L2(&prims[start() + i + 8]); + + /* map even and odd primitive to bin */ + BVHReference prim0 = prims[start() + i + 0]; + BVHReference prim1 = prims[start() + i + 1]; + + int4 bin0 = get_bin(prim0.bounds()); + int4 bin1 = get_bin(prim1.bounds()); + + /* increase bounds for bins for even primitive */ + int b00 = extract<0>(bin0); bin_count[b00][0]++; bin_bounds[b00][0].grow(prim0.bounds()); + int b01 = extract<1>(bin0); bin_count[b01][1]++; bin_bounds[b01][1].grow(prim0.bounds()); + int b02 = extract<2>(bin0); bin_count[b02][2]++; bin_bounds[b02][2].grow(prim0.bounds()); + + /* increase bounds of bins for odd primitive */ + int b10 = extract<0>(bin1); bin_count[b10][0]++; bin_bounds[b10][0].grow(prim1.bounds()); + int b11 = extract<1>(bin1); bin_count[b11][1]++; bin_bounds[b11][1].grow(prim1.bounds()); + int b12 = extract<2>(bin1); bin_count[b12][2]++; bin_bounds[b12][2].grow(prim1.bounds()); + } + + /* for uneven number of primitives */ + if(i < ssize_t(size())) { + /* map primitive to bin */ + BVHReference prim0 = prims[start() + i]; + int4 bin0 = get_bin(prim0.bounds()); + + /* increase bounds of bins */ + int b00 = extract<0>(bin0); bin_count[b00][0]++; bin_bounds[b00][0].grow(prim0.bounds()); + int b01 = extract<1>(bin0); bin_count[b01][1]++; bin_bounds[b01][1].grow(prim0.bounds()); + int b02 = extract<2>(bin0); bin_count[b02][2]++; bin_bounds[b02][2].grow(prim0.bounds()); + } + } + + /* sweep from right to left and compute parallel prefix of merged bounds */ + float4 r_area[MAX_BINS]; /* area of bounds of primitives on the right */ + float4 r_count[MAX_BINS]; /* number of primitives on the right */ + int4 count = make_int4(0); + + BoundBox bx = BoundBox::empty; + BoundBox by = BoundBox::empty; + BoundBox bz = BoundBox::empty; + + for(size_t i = num_bins - 1; i > 0; i--) { + count = count + bin_count[i]; + r_count[i] = blocks(count); + + bx = merge(bx,bin_bounds[i][0]); r_area[i][0] = bx.half_area(); + by = merge(by,bin_bounds[i][1]); r_area[i][1] = by.half_area(); + bz = merge(bz,bin_bounds[i][2]); r_area[i][2] = bz.half_area(); + } + + /* sweep from left to right and compute SAH */ + int4 ii = make_int4(1); + float4 bestSAH = make_float4(FLT_MAX); + int4 bestSplit = make_int4(-1); + + count = make_int4(0); + + bx = BoundBox::empty; + by = BoundBox::empty; + bz = BoundBox::empty; + + for(size_t i = 1; i < num_bins; i++, ii += make_int4(1)) { + count = count + bin_count[i-1]; + + bx = merge(bx,bin_bounds[i-1][0]); float Ax = bx.half_area(); + by = merge(by,bin_bounds[i-1][1]); float Ay = by.half_area(); + bz = merge(bz,bin_bounds[i-1][2]); float Az = bz.half_area(); + + float4 lCount = blocks(count); + float4 lArea = make_float4(Ax,Ay,Az,Az); + float4 sah = lArea*lCount + r_area[i]*r_count[i]; + + bestSplit = select(sah < bestSAH,ii,bestSplit); + bestSAH = min(sah,bestSAH); + } + + int4 mask = float3_to_float4(cent_bounds().size()) <= make_float4(0.0f); + bestSAH = insert<3>(select(mask, make_float4(FLT_MAX), bestSAH), FLT_MAX); + + /* find best dimension */ + dim = get_best_dimension(bestSAH); + splitSAH = bestSAH[dim]; + pos = bestSplit[dim]; + leafSAH = bounds().half_area() * blocks(size()); +} + +void BVHObjectBinning::split(BVHReference* prims, BVHObjectBinning& left_o, BVHObjectBinning& right_o) const +{ + size_t N = size(); + + BoundBox lgeom_bounds = BoundBox::empty; + BoundBox rgeom_bounds = BoundBox::empty; + BoundBox lcent_bounds = BoundBox::empty; + BoundBox rcent_bounds = BoundBox::empty; + + ssize_t l = 0, r = N-1; + + while(l <= r) { + prefetch_L2(&prims[start() + l + 8]); + prefetch_L2(&prims[start() + r - 8]); + + BVHReference prim = prims[start() + l]; + float3 center = prim.bounds().center2(); + + if(get_bin(center)[dim] < pos) { + lgeom_bounds.grow(prim.bounds()); + lcent_bounds.grow(center); + l++; + } + else { + rgeom_bounds.grow(prim.bounds()); + rcent_bounds.grow(center); + swap(prims[start()+l],prims[start()+r]); + r--; + } + } + + /* finish */ + if(l != 0 && N-1-r != 0) { + right_o = BVHObjectBinning(BVHRange(rgeom_bounds, rcent_bounds, start() + l, N-1-r), prims); + left_o = BVHObjectBinning(BVHRange(lgeom_bounds, lcent_bounds, start(), l), prims); + return; + } + + /* object medium split if we did not make progress, can happen when all + primitives have same centroid */ + lgeom_bounds = BoundBox::empty; + rgeom_bounds = BoundBox::empty; + lcent_bounds = BoundBox::empty; + rcent_bounds = BoundBox::empty; + + for(size_t i = 0; i < N/2; i++) { + lgeom_bounds.grow(prims[start()+i].bounds()); + lcent_bounds.grow(prims[start()+i].bounds().center2()); + } + + for(size_t i = N/2; i < N; i++) { + rgeom_bounds.grow(prims[start()+i].bounds()); + rcent_bounds.grow(prims[start()+i].bounds().center2()); + } + + right_o = BVHObjectBinning(BVHRange(rgeom_bounds, rcent_bounds, start() + N/2, N/2 + N%2), prims); + left_o = BVHObjectBinning(BVHRange(lgeom_bounds, lcent_bounds, start(), N/2), prims); +} + +CCL_NAMESPACE_END + diff --git a/intern/cycles/bvh/bvh_binning.h b/intern/cycles/bvh/bvh_binning.h new file mode 100644 index 00000000000..60742157055 --- /dev/null +++ b/intern/cycles/bvh/bvh_binning.h @@ -0,0 +1,86 @@ +/* + * Adapted from code copyright 2009-2011 Intel Corporation + * Modifications Copyright 2012, Blender Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __BVH_BINNING_H__ +#define __BVH_BINNING_H__ + +#include "bvh_params.h" + +#include "util_types.h" + +CCL_NAMESPACE_BEGIN + +/* Single threaded object binner. Finds the split with the best SAH heuristic + * by testing for each dimension multiple partitionings for regular spaced + * partition locations. A partitioning for a partition location is computed, + * by putting primitives whose centroid is on the left and right of the split + * location to different sets. The SAH is evaluated by computing the number of + * blocks occupied by the primitives in the partitions. */ + +class BVHObjectBinning : public BVHRange +{ +public: + __forceinline BVHObjectBinning() {} + BVHObjectBinning(const BVHRange& job, BVHReference *prims); + + void split(BVHReference *prims, BVHObjectBinning& left_o, BVHObjectBinning& right_o) const; + + float splitSAH; /* SAH cost of the best split */ + float leafSAH; /* SAH cost of creating a leaf */ + +protected: + int dim; /* best split dimension */ + int pos; /* best split position */ + size_t num_bins; /* actual number of bins to use */ + float3 scale; /* scaling factor to compute bin */ + + enum { MAX_BINS = 32 }; + enum { LOG_BLOCK_SIZE = 2 }; + + /* computes the bin numbers for each dimension for a box. */ + __forceinline int4 get_bin(const BoundBox& box) const + { + int4 a = make_int4((box.center2() - cent_bounds().min)*scale - make_float3(0.5f)); + int4 mn = make_int4(0); + int4 mx = make_int4((int)num_bins-1); + + return clamp(a, mn, mx); + } + + /* computes the bin numbers for each dimension for a point. */ + __forceinline int4 get_bin(const float3& c) const + { + return make_int4((c - cent_bounds().min)*scale - make_float3(0.5f)); + } + + /* compute the number of blocks occupied for each dimension. */ + __forceinline float4 blocks(const int4& a) const + { + return make_float4((a + make_int4((1 << LOG_BLOCK_SIZE)-1)) >> LOG_BLOCK_SIZE); + } + + /* compute the number of blocks occupied in one dimension. */ + __forceinline int blocks(size_t a) const + { + return (int)((a+((1LL << LOG_BLOCK_SIZE)-1)) >> LOG_BLOCK_SIZE); + } +}; + +CCL_NAMESPACE_END + +#endif + diff --git a/intern/cycles/bvh/bvh_build.cpp b/intern/cycles/bvh/bvh_build.cpp index 38674c2c561..c5b4f1d01ae 100644 --- a/intern/cycles/bvh/bvh_build.cpp +++ b/intern/cycles/bvh/bvh_build.cpp @@ -15,22 +15,36 @@ * limitations under the License. */ +#include "bvh_binning.h" #include "bvh_build.h" #include "bvh_node.h" #include "bvh_params.h" -#include "bvh_sort.h" +#include "bvh_split.h" #include "mesh.h" #include "object.h" #include "scene.h" -#include "util_algorithm.h" +#include "util_debug.h" #include "util_foreach.h" #include "util_progress.h" #include "util_time.h" CCL_NAMESPACE_BEGIN +/* BVH Build Task */ + +class BVHBuildTask : public Task { +public: + BVHBuildTask(InnerNode *node_, int child_, BVHObjectBinning& range_, int level_) + : node(node_), child(child_), level(level_), range(range_) {} + + InnerNode *node; + int child; + int level; + BVHObjectBinning range; +}; + /* Constructor / Destructor */ BVHBuild::BVHBuild(const vector& objects_, @@ -41,10 +55,10 @@ BVHBuild::BVHBuild(const vector& objects_, prim_object(prim_object_), params(params_), progress(progress_), - progress_start_time(0.0) + progress_start_time(0.0), + task_pool(function_bind(&BVHBuild::thread_build_node, this, _1, _2)) { spatial_min_overlap = 0.0f; - progress_num_duplicates = 0; } BVHBuild::~BVHBuild() @@ -53,57 +67,63 @@ BVHBuild::~BVHBuild() /* Adding References */ -void BVHBuild::add_reference_mesh(NodeSpec& root, Mesh *mesh, int i) +void BVHBuild::add_reference_mesh(BoundBox& root, BoundBox& center, Mesh *mesh, int i) { for(uint j = 0; j < mesh->triangles.size(); j++) { Mesh::Triangle t = mesh->triangles[j]; - Reference ref; + BoundBox bounds = BoundBox::empty; for(int k = 0; k < 3; k++) { float3 pt = mesh->verts[t.v[k]]; - ref.bounds.grow(pt); + bounds.grow(pt); } - if(ref.bounds.valid()) { - ref.prim_index = j; - ref.prim_object = i; - - references.push_back(ref); - root.bounds.grow(ref.bounds); + if(bounds.valid()) { + references.push_back(BVHReference(bounds, j, i)); + root.grow(bounds); + center.grow(bounds.center2()); } } } -void BVHBuild::add_reference_object(NodeSpec& root, Object *ob, int i) +void BVHBuild::add_reference_object(BoundBox& root, BoundBox& center, Object *ob, int i) { - Reference ref; - - ref.prim_index = -1; - ref.prim_object = i; - ref.bounds = ob->bounds; - - references.push_back(ref); - root.bounds.grow(ref.bounds); + references.push_back(BVHReference(ob->bounds, -1, i)); + root.grow(ob->bounds); + center.grow(ob->bounds.center2()); } -void BVHBuild::add_references(NodeSpec& root) +void BVHBuild::add_references(BVHRange& root) { - /* init root spec */ - root.num = 0; - root.bounds = BoundBox(); + /* reserve space for references */ + size_t num_alloc_references = 0; + + foreach(Object *ob, objects) { + if(params.top_level) { + if(ob->mesh->transform_applied) + num_alloc_references += ob->mesh->triangles.size(); + else + num_alloc_references++; + } + else + num_alloc_references += ob->mesh->triangles.size(); + } + + references.reserve(num_alloc_references); - /* add objects */ + /* add references from objects */ + BoundBox bounds = BoundBox::empty, center = BoundBox::empty; int i = 0; foreach(Object *ob, objects) { if(params.top_level) { if(ob->mesh->transform_applied) - add_reference_mesh(root, ob->mesh, i); + add_reference_mesh(bounds, center, ob->mesh, i); else - add_reference_object(root, ob, i); + add_reference_object(bounds, center, ob, i); } else - add_reference_mesh(root, ob->mesh, i); + add_reference_mesh(bounds, center, ob->mesh, i); i++; @@ -111,129 +131,213 @@ void BVHBuild::add_references(NodeSpec& root) } /* happens mostly on empty meshes */ - if(!root.bounds.valid()) - root.bounds.grow(make_float3(0.0f, 0.0f, 0.0f)); + if(!bounds.valid()) + bounds.grow(make_float3(0.0f, 0.0f, 0.0f)); - root.num = references.size(); + root = BVHRange(bounds, center, 0, references.size()); } /* Build */ BVHNode* BVHBuild::run() { - NodeSpec root; + BVHRange root; /* add references */ add_references(root); - if(progress.get_cancel()) return NULL; + if(progress.get_cancel()) + return NULL; /* init spatial splits */ if(params.top_level) /* todo: get rid of this */ params.use_spatial_split = false; - spatial_min_overlap = root.bounds.area() * params.spatial_split_alpha; + spatial_min_overlap = root.bounds().safe_area() * params.spatial_split_alpha; spatial_right_bounds.clear(); - spatial_right_bounds.resize(max(root.num, (int)BVHParams::NUM_SPATIAL_BINS) - 1); + spatial_right_bounds.resize(max(root.size(), (int)BVHParams::NUM_SPATIAL_BINS) - 1); /* init progress updates */ - progress_num_duplicates = 0; progress_start_time = time_dt(); + progress_count = 0; + progress_total = references.size(); + progress_original_total = progress_total; + + prim_index.resize(references.size()); + prim_object.resize(references.size()); /* build recursively */ - return build_node(root, 0, 0.0f, 1.0f); + BVHNode *rootnode; + + if(params.use_spatial_split) { + /* singlethreaded spatial split build */ + rootnode = build_node(root, 0); + } + else { + /* multithreaded binning build */ + BVHObjectBinning rootbin(root, &references[0]); + rootnode = build_node(rootbin, 0); + task_pool.wait(); + } + + /* delete if we cancelled */ + if(rootnode) { + if(progress.get_cancel()) { + rootnode->deleteSubtree(); + rootnode = NULL; + } + else if(!params.use_spatial_split) { + /*rotate(rootnode, 4, 5);*/ + rootnode->update_visibility(); + } + } + + return rootnode; } -void BVHBuild::progress_update(float progress_start, float progress_end) +void BVHBuild::progress_update() { if(time_dt() - progress_start_time < 0.25f) return; + + double progress_start = (double)progress_count/(double)progress_total; + double duplicates = (double)(progress_total - progress_original_total)/(double)progress_total; - float duplicates = (float)progress_num_duplicates/(float)references.size(); string msg = string_printf("Building BVH %.0f%%, duplicates %.0f%%", progress_start*100.0f, duplicates*100.0f); progress.set_substatus(msg); - progress_start_time = time_dt(); + progress_start_time = time_dt(); } -BVHNode* BVHBuild::build_node(const NodeSpec& spec, int level, float progress_start, float progress_end) +void BVHBuild::thread_build_node(Task *task_, int thread_id) { - /* progress update */ - progress_update(progress_start, progress_end); - if(progress.get_cancel()) return NULL; + if(progress.get_cancel()) + return; - /* small enough or too deep => create leaf. */ - if(spec.num <= params.min_leaf_size || level >= BVHParams::MAX_DEPTH) - return create_leaf_node(spec); - - /* find split candidates. */ - float area = spec.bounds.area(); - float leafSAH = area * params.triangle_cost(spec.num); - float nodeSAH = area * params.node_cost(2); - ObjectSplit object = find_object_split(spec, nodeSAH); - SpatialSplit spatial; - - if(params.use_spatial_split && level < BVHParams::MAX_SPATIAL_DEPTH) { - BoundBox overlap = object.left_bounds; - overlap.intersect(object.right_bounds); - - if(overlap.area() >= spatial_min_overlap) - spatial = find_spatial_split(spec, nodeSAH); - } + /* build nodes */ + BVHBuildTask *task = (BVHBuildTask*)task_; + BVHNode *node = build_node(task->range, task->level); + + /* set child in inner node */ + task->node->children[task->child] = node; - /* leaf SAH is the lowest => create leaf. */ - float minSAH = min(min(leafSAH, object.sah), spatial.sah); + /* update progress */ + if(task->range.size() < THREAD_TASK_SIZE) { + /*rotate(node, INT_MAX, 5);*/ - if(minSAH == leafSAH && spec.num <= params.max_leaf_size) - return create_leaf_node(spec); + thread_scoped_lock lock(build_mutex); - /* perform split. */ - NodeSpec left, right; + progress_count += task->range.size(); + progress_update(); + } +} + +/* multithreaded binning builder */ +BVHNode* BVHBuild::build_node(const BVHObjectBinning& range, int level) +{ + size_t size = range.size(); + float leafSAH = params.sah_triangle_cost * range.leafSAH; + float splitSAH = params.sah_node_cost * range.bounds().half_area() + params.sah_triangle_cost * range.splitSAH; - if(params.use_spatial_split && minSAH == spatial.sah) - do_spatial_split(left, right, spec, spatial); - if(!left.num || !right.num) - do_object_split(left, right, spec, object); + /* make leaf node when threshold reached or SAH tells us */ + if(params.small_enough_for_leaf(size, level) || (size <= params.max_leaf_size && leafSAH < splitSAH)) + return create_leaf_node(range); + + /* perform split */ + BVHObjectBinning left, right; + range.split(&references[0], left, right); /* create inner node. */ - progress_num_duplicates += left.num + right.num - spec.num; + InnerNode *inner; - float progress_mid = lerp(progress_start, progress_end, (float)right.num / (float)(left.num + right.num)); + if(range.size() < THREAD_TASK_SIZE) { + /* local build */ + BVHNode *leftnode = build_node(left, level + 1); + BVHNode *rightnode = build_node(right, level + 1); - BVHNode* rightNode = build_node(right, level + 1, progress_start, progress_mid); - if(progress.get_cancel()) { - if(rightNode) rightNode->deleteSubtree(); - return NULL; + inner = new InnerNode(range.bounds(), leftnode, rightnode); } + else { + /* threaded build */ + inner = new InnerNode(range.bounds()); + + task_pool.push(new BVHBuildTask(inner, 0, left, level + 1), true); + task_pool.push(new BVHBuildTask(inner, 1, right, level + 1), true); + } + + return inner; +} - BVHNode* leftNode = build_node(left, level + 1, progress_mid, progress_end); - if(progress.get_cancel()) { - if(leftNode) leftNode->deleteSubtree(); +/* single threaded spatial split builder */ +BVHNode* BVHBuild::build_node(const BVHRange& range, int level) +{ + /* progress update */ + progress_update(); + if(progress.get_cancel()) return NULL; + + /* small enough or too deep => create leaf. */ + if(params.small_enough_for_leaf(range.size(), level)) { + progress_count += range.size(); + return create_leaf_node(range); + } + + /* splitting test */ + BVHMixedSplit split(this, range, level); + + if(split.no_split) { + progress_count += range.size(); + return create_leaf_node(range); } + + /* do split */ + BVHRange left, right; + split.split(this, left, right, range); + + progress_total += left.size() + right.size() - range.size(); + size_t total = progress_total; + + /* leaft node */ + BVHNode *leftnode = build_node(left, level + 1); + + /* right node (modify start for splits) */ + right.set_start(right.start() + progress_total - total); + BVHNode *rightnode = build_node(right, level + 1); - return new InnerNode(spec.bounds, leftNode, rightNode); + /* inner node */ + return new InnerNode(range.bounds(), leftnode, rightnode); } -BVHNode *BVHBuild::create_object_leaf_nodes(const Reference *ref, int num) +/* Create Nodes */ + +BVHNode *BVHBuild::create_object_leaf_nodes(const BVHReference *ref, int start, int num) { if(num == 0) { - BoundBox bounds; + BoundBox bounds = BoundBox::empty; return new LeafNode(bounds, 0, 0, 0); } else if(num == 1) { - prim_index.push_back(ref[0].prim_index); - prim_object.push_back(ref[0].prim_object); - uint visibility = objects[ref[0].prim_object]->visibility; - return new LeafNode(ref[0].bounds, visibility, prim_index.size()-1, prim_index.size()); + if(start == prim_index.size()) { + assert(params.use_spatial_split); + + prim_index.push_back(ref->prim_index()); + prim_object.push_back(ref->prim_object()); + } + else { + prim_index[start] = ref->prim_index(); + prim_object[start] = ref->prim_object(); + } + + uint visibility = objects[ref->prim_object()]->visibility; + return new LeafNode(ref->bounds(), visibility, start, start+1); } else { int mid = num/2; - BVHNode *leaf0 = create_object_leaf_nodes(ref, mid); - BVHNode *leaf1 = create_object_leaf_nodes(ref+mid, num-mid); + BVHNode *leaf0 = create_object_leaf_nodes(ref, start, mid); + BVHNode *leaf1 = create_object_leaf_nodes(ref+mid, start+mid, num-mid); - BoundBox bounds; + BoundBox bounds = BoundBox::empty; bounds.grow(leaf0->m_bounds); bounds.grow(leaf1->m_bounds); @@ -241,310 +345,136 @@ BVHNode *BVHBuild::create_object_leaf_nodes(const Reference *ref, int num) } } -BVHNode* BVHBuild::create_leaf_node(const NodeSpec& spec) +BVHNode* BVHBuild::create_leaf_node(const BVHRange& range) { vector& p_index = prim_index; vector& p_object = prim_object; - BoundBox bounds; - int num = 0; + BoundBox bounds = BoundBox::empty; + int num = 0, ob_num = 0; uint visibility = 0; - for(int i = 0; i < spec.num; i++) { - if(references.back().prim_index != -1) { - p_index.push_back(references.back().prim_index); - p_object.push_back(references.back().prim_object); - bounds.grow(references.back().bounds); - visibility |= objects[references.back().prim_object]->visibility; - references.pop_back(); + for(int i = 0; i < range.size(); i++) { + BVHReference& ref = references[range.start() + i]; + + if(ref.prim_index() != -1) { + if(range.start() + num == prim_index.size()) { + assert(params.use_spatial_split); + + p_index.push_back(ref.prim_index()); + p_object.push_back(ref.prim_object()); + } + else { + p_index[range.start() + num] = ref.prim_index(); + p_object[range.start() + num] = ref.prim_object(); + } + + bounds.grow(ref.bounds()); + visibility |= objects[ref.prim_object()]->visibility; num++; } + else { + if(ob_num < i) + references[range.start() + ob_num] = ref; + ob_num++; + } } BVHNode *leaf = NULL; if(num > 0) { - leaf = new LeafNode(bounds, visibility, p_index.size() - num, p_index.size()); + leaf = new LeafNode(bounds, visibility, range.start(), range.start() + num); - if(num == spec.num) + if(num == range.size()) return leaf; } /* while there may be multiple triangles in a leaf, for object primitives - * we want them to be the only one, so we */ - int ob_num = spec.num - num; - const Reference *ref = (ob_num)? &references.back() - (ob_num - 1): NULL; - BVHNode *oleaf = create_object_leaf_nodes(ref, ob_num); - for(int i = 0; i < ob_num; i++) - references.pop_back(); + * we want there to be the only one, so we keep splitting */ + const BVHReference *ref = (ob_num)? &references[range.start()]: NULL; + BVHNode *oleaf = create_object_leaf_nodes(ref, range.start() + num, ob_num); if(leaf) - return new InnerNode(spec.bounds, leaf, oleaf); + return new InnerNode(range.bounds(), leaf, oleaf); else return oleaf; } -/* Object Split */ +/* Tree Rotations */ -BVHBuild::ObjectSplit BVHBuild::find_object_split(const NodeSpec& spec, float nodeSAH) +void BVHBuild::rotate(BVHNode *node, int max_depth, int iterations) { - ObjectSplit split; - const Reference *ref_ptr = &references[references.size() - spec.num]; - - for(int dim = 0; dim < 3; dim++) { - /* sort references */ - bvh_reference_sort(references.size() - spec.num, references.size(), &references[0], dim); - - /* sweep right to left and determine bounds. */ - BoundBox right_bounds; - - for(int i = spec.num - 1; i > 0; i--) { - right_bounds.grow(ref_ptr[i].bounds); - spatial_right_bounds[i - 1] = right_bounds; - } - - /* sweep left to right and select lowest SAH. */ - BoundBox left_bounds; - - for(int i = 1; i < spec.num; i++) { - left_bounds.grow(ref_ptr[i - 1].bounds); - right_bounds = spatial_right_bounds[i - 1]; - - float sah = nodeSAH + - left_bounds.area() * params.triangle_cost(i) + - right_bounds.area() * params.triangle_cost(spec.num - i); - - if(sah < split.sah) { - split.sah = sah; - split.dim = dim; - split.num_left = i; - split.left_bounds = left_bounds; - split.right_bounds = right_bounds; - } - } - } - - return split; + /* in tested scenes, this resulted in slightly slower raytracing, so disabled + * it for now. could be implementation bug, or depend on the scene */ + if(node) + for(int i = 0; i < iterations; i++) + rotate(node, max_depth); } -void BVHBuild::do_object_split(NodeSpec& left, NodeSpec& right, const NodeSpec& spec, const ObjectSplit& split) +void BVHBuild::rotate(BVHNode *node, int max_depth) { - /* sort references according to split */ - int start = references.size() - spec.num; - int end = references.size(); /* todo: is this right? */ - - bvh_reference_sort(start, end, &references[0], split.dim); - - /* split node specs */ - left.num = split.num_left; - left.bounds = split.left_bounds; - right.num = spec.num - split.num_left; - right.bounds = split.right_bounds; -} - -/* Spatial Split */ - -BVHBuild::SpatialSplit BVHBuild::find_spatial_split(const NodeSpec& spec, float nodeSAH) -{ - /* initialize bins. */ - float3 origin = spec.bounds.min; - float3 binSize = (spec.bounds.max - origin) * (1.0f / (float)BVHParams::NUM_SPATIAL_BINS); - float3 invBinSize = 1.0f / binSize; - - for(int dim = 0; dim < 3; dim++) { - for(int i = 0; i < BVHParams::NUM_SPATIAL_BINS; i++) { - SpatialBin& bin = spatial_bins[dim][i]; - - bin.bounds = BoundBox(); - bin.enter = 0; - bin.exit = 0; - } - } - - /* chop references into bins. */ - for(unsigned int refIdx = references.size() - spec.num; refIdx < references.size(); refIdx++) { - const Reference& ref = references[refIdx]; - float3 firstBinf = (ref.bounds.min - origin) * invBinSize; - float3 lastBinf = (ref.bounds.max - origin) * invBinSize; - int3 firstBin = make_int3((int)firstBinf.x, (int)firstBinf.y, (int)firstBinf.z); - int3 lastBin = make_int3((int)lastBinf.x, (int)lastBinf.y, (int)lastBinf.z); + /* nothing to rotate if we reached a leaf node. */ + if(node->is_leaf() || max_depth < 0) + return; + + InnerNode *parent = (InnerNode*)node; - firstBin = clamp(firstBin, 0, BVHParams::NUM_SPATIAL_BINS - 1); - lastBin = clamp(lastBin, firstBin, BVHParams::NUM_SPATIAL_BINS - 1); + /* rotate all children first */ + for(size_t c = 0; c < 2; c++) + rotate(parent->children[c], max_depth-1); - for(int dim = 0; dim < 3; dim++) { - Reference currRef = ref; + /* compute current area of all children */ + BoundBox bounds0 = parent->children[0]->m_bounds; + BoundBox bounds1 = parent->children[1]->m_bounds; - for(int i = firstBin[dim]; i < lastBin[dim]; i++) { - Reference leftRef, rightRef; + float area0 = bounds0.half_area(); + float area1 = bounds1.half_area(); + float4 child_area = make_float4(area0, area1, 0.0f, 0.0f); - split_reference(leftRef, rightRef, currRef, dim, origin[dim] + binSize[dim] * (float)(i + 1)); - spatial_bins[dim][i].bounds.grow(leftRef.bounds); - currRef = rightRef; - } + /* find best rotation. we pick a target child of a first child, and swap + * this with an other child. we perform the best such swap. */ + float best_cost = FLT_MAX; + int best_child = -1, bets_target = -1, best_other = -1; - spatial_bins[dim][lastBin[dim]].bounds.grow(currRef.bounds); - spatial_bins[dim][firstBin[dim]].enter++; - spatial_bins[dim][lastBin[dim]].exit++; - } - } + for(size_t c = 0; c < 2; c++) { + /* ignore leaf nodes as we cannot descent into */ + if(parent->children[c]->is_leaf()) + continue; - /* select best split plane. */ - SpatialSplit split; + InnerNode *child = (InnerNode*)parent->children[c]; + BoundBox& other = (c == 0)? bounds1: bounds0; - for(int dim = 0; dim < 3; dim++) { - /* sweep right to left and determine bounds. */ - BoundBox right_bounds; + /* transpose child bounds */ + BoundBox target0 = child->children[0]->m_bounds; + BoundBox target1 = child->children[1]->m_bounds; - for(int i = BVHParams::NUM_SPATIAL_BINS - 1; i > 0; i--) { - right_bounds.grow(spatial_bins[dim][i].bounds); - spatial_right_bounds[i - 1] = right_bounds; - } + /* compute cost for both possible swaps */ + float cost0 = merge(other, target1).half_area() - child_area[c]; + float cost1 = merge(target0, other).half_area() - child_area[c]; - /* sweep left to right and select lowest SAH. */ - BoundBox left_bounds; - int leftNum = 0; - int rightNum = spec.num; + if(min(cost0,cost1) < best_cost) { + best_child = (int)c; + best_other = (int)(1-c); - for(int i = 1; i < BVHParams::NUM_SPATIAL_BINS; i++) { - left_bounds.grow(spatial_bins[dim][i - 1].bounds); - leftNum += spatial_bins[dim][i - 1].enter; - rightNum -= spatial_bins[dim][i - 1].exit; - - float sah = nodeSAH + - left_bounds.area() * params.triangle_cost(leftNum) + - spatial_right_bounds[i - 1].area() * params.triangle_cost(rightNum); - - if(sah < split.sah) { - split.sah = sah; - split.dim = dim; - split.pos = origin[dim] + binSize[dim] * (float)i; + if(cost0 < cost1) { + best_cost = cost0; + bets_target = 0; + } + else { + best_cost = cost0; + bets_target = 1; } } } - return split; -} - -void BVHBuild::do_spatial_split(NodeSpec& left, NodeSpec& right, const NodeSpec& spec, const SpatialSplit& split) -{ - /* Categorize references and compute bounds. - * - * Left-hand side: [left_start, left_end[ - * Uncategorized/split: [left_end, right_start[ - * Right-hand side: [right_start, refs.size()[ */ - - vector& refs = references; - int left_start = refs.size() - spec.num; - int left_end = left_start; - int right_start = refs.size(); - - left.bounds = right.bounds = BoundBox(); - - for(int i = left_end; i < right_start; i++) { - if(refs[i].bounds.max[split.dim] <= split.pos) { - /* entirely on the left-hand side */ - left.bounds.grow(refs[i].bounds); - swap(refs[i], refs[left_end++]); - } - else if(refs[i].bounds.min[split.dim] >= split.pos) { - /* entirely on the right-hand side */ - right.bounds.grow(refs[i].bounds); - swap(refs[i--], refs[--right_start]); - } - } - - /* duplicate or unsplit references intersecting both sides. */ - while(left_end < right_start) { - /* split reference. */ - Reference lref, rref; - - split_reference(lref, rref, refs[left_end], split.dim, split.pos); - - /* compute SAH for duplicate/unsplit candidates. */ - BoundBox lub = left.bounds; // Unsplit to left: new left-hand bounds. - BoundBox rub = right.bounds; // Unsplit to right: new right-hand bounds. - BoundBox ldb = left.bounds; // Duplicate: new left-hand bounds. - BoundBox rdb = right.bounds; // Duplicate: new right-hand bounds. - - lub.grow(refs[left_end].bounds); - rub.grow(refs[left_end].bounds); - ldb.grow(lref.bounds); - rdb.grow(rref.bounds); - - float lac = params.triangle_cost(left_end - left_start); - float rac = params.triangle_cost(refs.size() - right_start); - float lbc = params.triangle_cost(left_end - left_start + 1); - float rbc = params.triangle_cost(refs.size() - right_start + 1); - - float unsplitLeftSAH = lub.area() * lbc + right.bounds.area() * rac; - float unsplitRightSAH = left.bounds.area() * lac + rub.area() * rbc; - float duplicateSAH = ldb.area() * lbc + rdb.area() * rbc; - float minSAH = min(min(unsplitLeftSAH, unsplitRightSAH), duplicateSAH); - - if(minSAH == unsplitLeftSAH) { - /* unsplit to left */ - left.bounds = lub; - left_end++; - } - else if(minSAH == unsplitRightSAH) { - /* unsplit to right */ - right.bounds = rub; - swap(refs[left_end], refs[--right_start]); - } - else { - /* duplicate */ - left.bounds = ldb; - right.bounds = rdb; - refs[left_end++] = lref; - refs.push_back(rref); - } - } - - left.num = left_end - left_start; - right.num = refs.size() - right_start; -} + /* if we did not find a swap that improves the SAH then do nothing */ + if(best_cost >= 0) + return; -void BVHBuild::split_reference(Reference& left, Reference& right, const Reference& ref, int dim, float pos) -{ - /* initialize references. */ - left.prim_index = right.prim_index = ref.prim_index; - left.prim_object = right.prim_object = ref.prim_object; - left.bounds = right.bounds = BoundBox(); - - /* loop over vertices/edges. */ - Object *ob = objects[ref.prim_object]; - const Mesh *mesh = ob->mesh; - const int *inds = mesh->triangles[ref.prim_index].v; - const float3 *verts = &mesh->verts[0]; - const float3* v1 = &verts[inds[2]]; - - for(int i = 0; i < 3; i++) { - const float3* v0 = v1; - int vindex = inds[i]; - v1 = &verts[vindex]; - float v0p = (*v0)[dim]; - float v1p = (*v1)[dim]; - - /* insert vertex to the boxes it belongs to. */ - if(v0p <= pos) - left.bounds.grow(*v0); - - if(v0p >= pos) - right.bounds.grow(*v0); - - /* edge intersects the plane => insert intersection to both boxes. */ - if((v0p < pos && v1p > pos) || (v0p > pos && v1p < pos)) { - float3 t = lerp(*v0, *v1, clamp((pos - v0p) / (v1p - v0p), 0.0f, 1.0f)); - left.bounds.grow(t); - right.bounds.grow(t); - } - } + /* perform the best found tree rotation */ + InnerNode *child = (InnerNode*)parent->children[best_child]; - /* intersect with original bounds. */ - left.bounds.max[dim] = pos; - right.bounds.min[dim] = pos; - left.bounds.intersect(ref.bounds); - right.bounds.intersect(ref.bounds); + swap(parent->children[best_other], child->children[bets_target]); + child->m_bounds = merge(child->children[0]->m_bounds, child->children[1]->m_bounds); } CCL_NAMESPACE_END diff --git a/intern/cycles/bvh/bvh_build.h b/intern/cycles/bvh/bvh_build.h index 1fa1951d7f2..84e14632b4b 100644 --- a/intern/cycles/bvh/bvh_build.h +++ b/intern/cycles/bvh/bvh_build.h @@ -21,8 +21,10 @@ #include #include "bvh.h" +#include "bvh_binning.h" #include "util_boundbox.h" +#include "util_task.h" #include "util_vector.h" CCL_NAMESPACE_BEGIN @@ -37,28 +39,7 @@ class Progress; class BVHBuild { public: - struct Reference - { - int prim_index; - int prim_object; - BoundBox bounds; - - Reference() - { - } - }; - - struct NodeSpec - { - int num; - BoundBox bounds; - - NodeSpec() - { - num = 0; - } - }; - + /* Constructor/Destructor */ BVHBuild( const vector& objects, vector& prim_index, @@ -70,63 +51,37 @@ public: BVHNode *run(); protected: + friend class BVHMixedSplit; + friend class BVHObjectSplit; + friend class BVHSpatialSplit; + /* adding references */ - void add_reference_mesh(NodeSpec& root, Mesh *mesh, int i); - void add_reference_object(NodeSpec& root, Object *ob, int i); - void add_references(NodeSpec& root); + void add_reference_mesh(BoundBox& root, BoundBox& center, Mesh *mesh, int i); + void add_reference_object(BoundBox& root, BoundBox& center, Object *ob, int i); + void add_references(BVHRange& root); /* building */ - BVHNode *build_node(const NodeSpec& spec, int level, float progress_start, float progress_end); - BVHNode *create_leaf_node(const NodeSpec& spec); - BVHNode *create_object_leaf_nodes(const Reference *ref, int num); - - void progress_update(float progress_start, float progress_end); - - /* object splits */ - struct ObjectSplit - { - float sah; - int dim; - int num_left; - BoundBox left_bounds; - BoundBox right_bounds; - - ObjectSplit() - : sah(FLT_MAX), dim(0), num_left(0) - { - } - }; - - ObjectSplit find_object_split(const NodeSpec& spec, float nodeSAH); - void do_object_split(NodeSpec& left, NodeSpec& right, const NodeSpec& spec, const ObjectSplit& split); - - /* spatial splits */ - struct SpatialSplit - { - float sah; - int dim; - float pos; - - SpatialSplit() - : sah(FLT_MAX), dim(0), pos(0.0f) - { - } - }; - - struct SpatialBin - { - BoundBox bounds; - int enter; - int exit; - }; - - SpatialSplit find_spatial_split(const NodeSpec& spec, float nodeSAH); - void do_spatial_split(NodeSpec& left, NodeSpec& right, const NodeSpec& spec, const SpatialSplit& split); - void split_reference(Reference& left, Reference& right, const Reference& ref, int dim, float pos); + BVHNode *build_node(const BVHRange& range, int level); + BVHNode *build_node(const BVHObjectBinning& range, int level); + BVHNode *create_leaf_node(const BVHRange& range); + BVHNode *create_object_leaf_nodes(const BVHReference *ref, int start, int num); + + /* threads */ + enum { THREAD_TASK_SIZE = 4096 }; + void thread_build_node(Task *task_, int thread_id); + thread_mutex build_mutex; + + /* progress */ + void progress_update(); + + /* tree rotations */ + void rotate(BVHNode *node, int max_depth); + void rotate(BVHNode *node, int max_depth, int iterations); /* objects and primitive references */ vector objects; - vector references; + vector references; + int num_original_references; /* output primitive indexes and objects */ vector& prim_index; @@ -138,12 +93,17 @@ protected: /* progress reporting */ Progress& progress; double progress_start_time; - int progress_num_duplicates; + size_t progress_count; + size_t progress_total; + size_t progress_original_total; /* spatial splitting */ float spatial_min_overlap; vector spatial_right_bounds; - SpatialBin spatial_bins[3][BVHParams::NUM_SPATIAL_BINS]; + BVHSpatialBin spatial_bins[3][BVHParams::NUM_SPATIAL_BINS]; + + /* threads */ + TaskPool task_pool; }; CCL_NAMESPACE_END diff --git a/intern/cycles/bvh/bvh_node.cpp b/intern/cycles/bvh/bvh_node.cpp index 63683bae4a3..4edfb4b70a4 100644 --- a/intern/cycles/bvh/bvh_node.cpp +++ b/intern/cycles/bvh/bvh_node.cpp @@ -24,6 +24,8 @@ CCL_NAMESPACE_BEGIN +/* BVH Node */ + int BVHNode::getSubtreeSize(BVH_STAT stat) const { int cnt = 0; @@ -59,7 +61,8 @@ int BVHNode::getSubtreeSize(BVH_STAT stat) const void BVHNode::deleteSubtree() { for(int i=0;ideleteSubtree(); + if(get_child(i)) + get_child(i)->deleteSubtree(); delete this; } @@ -70,12 +73,27 @@ float BVHNode::computeSubtreeSAHCost(const BVHParams& p, float probability) cons for(int i=0;icomputeSubtreeSAHCost(p, probability * child->m_bounds.area()/m_bounds.area()); + SAH += child->computeSubtreeSAHCost(p, probability * child->m_bounds.safe_area()/m_bounds.safe_area()); } return SAH; } +uint BVHNode::update_visibility() +{ + if(!is_leaf() && m_visibility == 0) { + InnerNode *inner = (InnerNode*)this; + BVHNode *child0 = inner->children[0]; + BVHNode *child1 = inner->children[1]; + + m_visibility = child0->update_visibility()|child1->update_visibility(); + } + + return m_visibility; +} + +/* Inner Node */ + void InnerNode::print(int depth) const { for(int i = 0; i < depth; i++) diff --git a/intern/cycles/bvh/bvh_node.h b/intern/cycles/bvh/bvh_node.h index 5e0a17a1193..5c00f7b7a38 100644 --- a/intern/cycles/bvh/bvh_node.h +++ b/intern/cycles/bvh/bvh_node.h @@ -49,8 +49,6 @@ public: virtual int num_triangles() const { return 0; } virtual void print(int depth = 0) const = 0; - float getArea() const { return m_bounds.area(); } - BoundBox m_bounds; uint m_visibility; @@ -58,6 +56,8 @@ public: int getSubtreeSize(BVH_STAT stat=BVH_STAT_NODE_COUNT) const; float computeSubtreeSAHCost(const BVHParams& p, float probability = 1.0f) const; void deleteSubtree(); + + uint update_visibility(); }; class InnerNode : public BVHNode @@ -66,9 +66,21 @@ public: InnerNode(const BoundBox& bounds, BVHNode* child0, BVHNode* child1) { m_bounds = bounds; - m_visibility = child0->m_visibility|child1->m_visibility; children[0] = child0; children[1] = child1; + + if(child0 && child1) + m_visibility = child0->m_visibility|child1->m_visibility; + else + m_visibility = 0; /* happens on build cancel */ + } + + InnerNode(const BoundBox& bounds) + { + m_bounds = bounds; + m_visibility = 0; + children[0] = NULL; + children[1] = NULL; } bool is_leaf() const { return false; } diff --git a/intern/cycles/bvh/bvh_params.h b/intern/cycles/bvh/bvh_params.h index 38093438500..0cf5e905fea 100644 --- a/intern/cycles/bvh/bvh_params.h +++ b/intern/cycles/bvh/bvh_params.h @@ -18,6 +18,8 @@ #ifndef __BVH_PARAMS_H__ #define __BVH_PARAMS_H__ +#include "util_boundbox.h" + CCL_NAMESPACE_BEGIN /* BVH Parameters */ @@ -73,14 +75,97 @@ public: } /* SAH costs */ - float cost(int num_nodes, int num_tris) const + __forceinline float cost(int num_nodes, int num_tris) const { return node_cost(num_nodes) + triangle_cost(num_tris); } - float triangle_cost(int n) const + __forceinline float triangle_cost(int n) const { return n*sah_triangle_cost; } - float node_cost(int n) const + __forceinline float node_cost(int n) const { return n*sah_node_cost; } + + __forceinline bool small_enough_for_leaf(int size, int level) + { return (size <= min_leaf_size || level >= MAX_DEPTH); } +}; + +/* BVH Reference + * + * Reference to a primitive. Primitive index and object are sneakily packed + * into BoundBox to reduce memory usage and align nicely */ + +class BVHReference +{ +public: + __forceinline BVHReference() {} + + __forceinline BVHReference(const BoundBox& bounds_, int prim_index, int prim_object) + : rbounds(bounds_) + { + rbounds.min.w = __int_as_float(prim_index); + rbounds.max.w = __int_as_float(prim_object); + } + + __forceinline const BoundBox& bounds() const { return rbounds; } + __forceinline int prim_index() const { return __float_as_int(rbounds.min.w); } + __forceinline int prim_object() const { return __float_as_int(rbounds.max.w); } + +protected: + BoundBox rbounds; +}; + +/* BVH Range + * + * Build range used during construction, to indicate the bounds and place in + * the reference array of a subset of pirmitives Again uses trickery to pack + * integers into BoundBox for alignment purposes. */ + +class BVHRange +{ +public: + __forceinline BVHRange() + { + rbounds.min.w = __int_as_float(0); + rbounds.max.w = __int_as_float(0); + } + + __forceinline BVHRange(const BoundBox& bounds_, int start_, int size_) + : rbounds(bounds_) + { + rbounds.min.w = __int_as_float(start_); + rbounds.max.w = __int_as_float(size_); + } + + __forceinline BVHRange(const BoundBox& bounds_, const BoundBox& cbounds_, int start_, int size_) + : rbounds(bounds_), cbounds(cbounds_) + { + rbounds.min.w = __int_as_float(start_); + rbounds.max.w = __int_as_float(size_); + } + + __forceinline void set_start(int start_) { rbounds.min.w = __int_as_float(start_); } + + __forceinline const BoundBox& bounds() const { return rbounds; } + __forceinline const BoundBox& cent_bounds() const { return cbounds; } + __forceinline int start() const { return __float_as_int(rbounds.min.w); } + __forceinline int size() const { return __float_as_int(rbounds.max.w); } + __forceinline int end() const { return start() + size(); } + +protected: + BoundBox rbounds; + BoundBox cbounds; +}; + +/* BVH Spatial Bin */ + +struct BVHSpatialBin +{ + BoundBox bounds; + int enter; + int exit; + + __forceinline BVHSpatialBin() + { + } }; CCL_NAMESPACE_END diff --git a/intern/cycles/bvh/bvh_sort.cpp b/intern/cycles/bvh/bvh_sort.cpp index ee4531a4843..bef384be592 100644 --- a/intern/cycles/bvh/bvh_sort.cpp +++ b/intern/cycles/bvh/bvh_sort.cpp @@ -32,23 +32,23 @@ public: dim = dim_; } - bool operator()(const BVHBuild::Reference& ra, const BVHBuild::Reference& rb) + bool operator()(const BVHReference& ra, const BVHReference& rb) { - float ca = ra.bounds.min[dim] + ra.bounds.max[dim]; - float cb = rb.bounds.min[dim] + rb.bounds.max[dim]; + float ca = ra.bounds().min[dim] + ra.bounds().max[dim]; + float cb = rb.bounds().min[dim] + rb.bounds().max[dim]; if(ca < cb) return true; else if(ca > cb) return false; - else if(ra.prim_object < rb.prim_object) return true; - else if(ra.prim_object > rb.prim_object) return false; - else if(ra.prim_index < rb.prim_index) return true; - else if(ra.prim_index > rb.prim_index) return false; + else if(ra.prim_object() < rb.prim_object()) return true; + else if(ra.prim_object() > rb.prim_object()) return false; + else if(ra.prim_index() < rb.prim_index()) return true; + else if(ra.prim_index() > rb.prim_index()) return false; return false; } }; -void bvh_reference_sort(int start, int end, BVHBuild::Reference *data, int dim) +void bvh_reference_sort(int start, int end, BVHReference *data, int dim) { sort(data+start, data+end, BVHReferenceCompare(dim)); } diff --git a/intern/cycles/bvh/bvh_sort.h b/intern/cycles/bvh/bvh_sort.h index f0676948146..ba35ba3fae7 100644 --- a/intern/cycles/bvh/bvh_sort.h +++ b/intern/cycles/bvh/bvh_sort.h @@ -20,7 +20,7 @@ CCL_NAMESPACE_BEGIN -void bvh_reference_sort(int start, int end, BVHBuild::Reference *data, int dim); +void bvh_reference_sort(int start, int end, BVHReference *data, int dim); CCL_NAMESPACE_END diff --git a/intern/cycles/bvh/bvh_split.cpp b/intern/cycles/bvh/bvh_split.cpp new file mode 100644 index 00000000000..263c5834428 --- /dev/null +++ b/intern/cycles/bvh/bvh_split.cpp @@ -0,0 +1,293 @@ +/* + * Adapted from code copyright 2009-2010 NVIDIA Corporation + * Modifications Copyright 2011, Blender Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bvh_build.h" +#include "bvh_split.h" +#include "bvh_sort.h" + +#include "mesh.h" +#include "object.h" + +#include "util_algorithm.h" + +CCL_NAMESPACE_BEGIN + +/* Object Split */ + +BVHObjectSplit::BVHObjectSplit(BVHBuild *builder, const BVHRange& range, float nodeSAH) +: sah(FLT_MAX), dim(0), num_left(0), left_bounds(BoundBox::empty), right_bounds(BoundBox::empty) +{ + const BVHReference *ref_ptr = &builder->references[range.start()]; + float min_sah = FLT_MAX; + + for(int dim = 0; dim < 3; dim++) { + /* sort references */ + bvh_reference_sort(range.start(), range.end(), &builder->references[0], dim); + + /* sweep right to left and determine bounds. */ + BoundBox right_bounds = BoundBox::empty; + + for(int i = range.size() - 1; i > 0; i--) { + right_bounds.grow(ref_ptr[i].bounds()); + builder->spatial_right_bounds[i - 1] = right_bounds; + } + + /* sweep left to right and select lowest SAH. */ + BoundBox left_bounds = BoundBox::empty; + + for(int i = 1; i < range.size(); i++) { + left_bounds.grow(ref_ptr[i - 1].bounds()); + right_bounds = builder->spatial_right_bounds[i - 1]; + + float sah = nodeSAH + + left_bounds.safe_area() * builder->params.triangle_cost(i) + + right_bounds.safe_area() * builder->params.triangle_cost(range.size() - i); + + if(sah < min_sah) { + min_sah = sah; + + this->sah = sah; + this->dim = dim; + this->num_left = i; + this->left_bounds = left_bounds; + this->right_bounds = right_bounds; + } + } + } +} + +void BVHObjectSplit::split(BVHBuild *builder, BVHRange& left, BVHRange& right, const BVHRange& range) +{ + /* sort references according to split */ + bvh_reference_sort(range.start(), range.end(), &builder->references[0], this->dim); + + /* split node ranges */ + left = BVHRange(this->left_bounds, range.start(), this->num_left); + right = BVHRange(this->right_bounds, left.end(), range.size() - this->num_left); + +} + +/* Spatial Split */ + +BVHSpatialSplit::BVHSpatialSplit(BVHBuild *builder, const BVHRange& range, float nodeSAH) +: sah(FLT_MAX), dim(0), pos(0.0f) +{ + /* initialize bins. */ + float3 origin = range.bounds().min; + float3 binSize = (range.bounds().max - origin) * (1.0f / (float)BVHParams::NUM_SPATIAL_BINS); + float3 invBinSize = 1.0f / binSize; + + for(int dim = 0; dim < 3; dim++) { + for(int i = 0; i < BVHParams::NUM_SPATIAL_BINS; i++) { + BVHSpatialBin& bin = builder->spatial_bins[dim][i]; + + bin.bounds = BoundBox::empty; + bin.enter = 0; + bin.exit = 0; + } + } + + /* chop references into bins. */ + for(unsigned int refIdx = range.start(); refIdx < range.end(); refIdx++) { + const BVHReference& ref = builder->references[refIdx]; + float3 firstBinf = (ref.bounds().min - origin) * invBinSize; + float3 lastBinf = (ref.bounds().max - origin) * invBinSize; + int3 firstBin = make_int3((int)firstBinf.x, (int)firstBinf.y, (int)firstBinf.z); + int3 lastBin = make_int3((int)lastBinf.x, (int)lastBinf.y, (int)lastBinf.z); + + firstBin = clamp(firstBin, 0, BVHParams::NUM_SPATIAL_BINS - 1); + lastBin = clamp(lastBin, firstBin, BVHParams::NUM_SPATIAL_BINS - 1); + + for(int dim = 0; dim < 3; dim++) { + BVHReference currRef = ref; + + for(int i = firstBin[dim]; i < lastBin[dim]; i++) { + BVHReference leftRef, rightRef; + + split_reference(builder, leftRef, rightRef, currRef, dim, origin[dim] + binSize[dim] * (float)(i + 1)); + builder->spatial_bins[dim][i].bounds.grow(leftRef.bounds()); + currRef = rightRef; + } + + builder->spatial_bins[dim][lastBin[dim]].bounds.grow(currRef.bounds()); + builder->spatial_bins[dim][firstBin[dim]].enter++; + builder->spatial_bins[dim][lastBin[dim]].exit++; + } + } + + /* select best split plane. */ + for(int dim = 0; dim < 3; dim++) { + /* sweep right to left and determine bounds. */ + BoundBox right_bounds = BoundBox::empty; + + for(int i = BVHParams::NUM_SPATIAL_BINS - 1; i > 0; i--) { + right_bounds.grow(builder->spatial_bins[dim][i].bounds); + builder->spatial_right_bounds[i - 1] = right_bounds; + } + + /* sweep left to right and select lowest SAH. */ + BoundBox left_bounds = BoundBox::empty; + int leftNum = 0; + int rightNum = range.size(); + + for(int i = 1; i < BVHParams::NUM_SPATIAL_BINS; i++) { + left_bounds.grow(builder->spatial_bins[dim][i - 1].bounds); + leftNum += builder->spatial_bins[dim][i - 1].enter; + rightNum -= builder->spatial_bins[dim][i - 1].exit; + + float sah = nodeSAH + + left_bounds.safe_area() * builder->params.triangle_cost(leftNum) + + builder->spatial_right_bounds[i - 1].safe_area() * builder->params.triangle_cost(rightNum); + + if(sah < this->sah) { + this->sah = sah; + this->dim = dim; + this->pos = origin[dim] + binSize[dim] * (float)i; + } + } + } +} + +void BVHSpatialSplit::split(BVHBuild *builder, BVHRange& left, BVHRange& right, const BVHRange& range) +{ + /* Categorize references and compute bounds. + * + * Left-hand side: [left_start, left_end[ + * Uncategorized/split: [left_end, right_start[ + * Right-hand side: [right_start, refs.size()[ */ + + vector& refs = builder->references; + int left_start = range.start(); + int left_end = left_start; + int right_start = range.end(); + int right_end = range.end(); + BoundBox left_bounds = BoundBox::empty; + BoundBox right_bounds = BoundBox::empty; + + for(int i = left_end; i < right_start; i++) { + if(refs[i].bounds().max[this->dim] <= this->pos) { + /* entirely on the left-hand side */ + left_bounds.grow(refs[i].bounds()); + swap(refs[i], refs[left_end++]); + } + else if(refs[i].bounds().min[this->dim] >= this->pos) { + /* entirely on the right-hand side */ + right_bounds.grow(refs[i].bounds()); + swap(refs[i--], refs[--right_start]); + } + } + + /* duplicate or unsplit references intersecting both sides. */ + while(left_end < right_start) { + /* split reference. */ + BVHReference lref, rref; + + split_reference(builder, lref, rref, refs[left_end], this->dim, this->pos); + + /* compute SAH for duplicate/unsplit candidates. */ + BoundBox lub = left_bounds; // Unsplit to left: new left-hand bounds. + BoundBox rub = right_bounds; // Unsplit to right: new right-hand bounds. + BoundBox ldb = left_bounds; // Duplicate: new left-hand bounds. + BoundBox rdb = right_bounds; // Duplicate: new right-hand bounds. + + lub.grow(refs[left_end].bounds()); + rub.grow(refs[left_end].bounds()); + ldb.grow(lref.bounds()); + rdb.grow(rref.bounds()); + + float lac = builder->params.triangle_cost(left_end - left_start); + float rac = builder->params.triangle_cost(right_end - right_start); + float lbc = builder->params.triangle_cost(left_end - left_start + 1); + float rbc = builder->params.triangle_cost(right_end - right_start + 1); + + float unsplitLeftSAH = lub.safe_area() * lbc + right_bounds.safe_area() * rac; + float unsplitRightSAH = left_bounds.safe_area() * lac + rub.safe_area() * rbc; + float duplicateSAH = ldb.safe_area() * lbc + rdb.safe_area() * rbc; + float minSAH = min(min(unsplitLeftSAH, unsplitRightSAH), duplicateSAH); + + if(minSAH == unsplitLeftSAH) { + /* unsplit to left */ + left_bounds = lub; + left_end++; + } + else if(minSAH == unsplitRightSAH) { + /* unsplit to right */ + right_bounds = rub; + swap(refs[left_end], refs[--right_start]); + } + else { + /* duplicate */ + left_bounds = ldb; + right_bounds = rdb; + refs[left_end++] = lref; + refs.insert(refs.begin() + right_end, rref); + right_end++; + } + } + + left = BVHRange(left_bounds, left_start, left_end - left_start); + right = BVHRange(right_bounds, right_start, right_end - right_start); +} + +void BVHSpatialSplit::split_reference(BVHBuild *builder, BVHReference& left, BVHReference& right, const BVHReference& ref, int dim, float pos) +{ + /* initialize boundboxes */ + BoundBox left_bounds = BoundBox::empty; + BoundBox right_bounds = BoundBox::empty; + + /* loop over vertices/edges. */ + Object *ob = builder->objects[ref.prim_object()]; + const Mesh *mesh = ob->mesh; + const int *inds = mesh->triangles[ref.prim_index()].v; + const float3 *verts = &mesh->verts[0]; + const float3* v1 = &verts[inds[2]]; + + for(int i = 0; i < 3; i++) { + const float3* v0 = v1; + int vindex = inds[i]; + v1 = &verts[vindex]; + float v0p = (*v0)[dim]; + float v1p = (*v1)[dim]; + + /* insert vertex to the boxes it belongs to. */ + if(v0p <= pos) + left_bounds.grow(*v0); + + if(v0p >= pos) + right_bounds.grow(*v0); + + /* edge intersects the plane => insert intersection to both boxes. */ + if((v0p < pos && v1p > pos) || (v0p > pos && v1p < pos)) { + float3 t = lerp(*v0, *v1, clamp((pos - v0p) / (v1p - v0p), 0.0f, 1.0f)); + left_bounds.grow(t); + right_bounds.grow(t); + } + } + + /* intersect with original bounds. */ + left_bounds.max[dim] = pos; + right_bounds.min[dim] = pos; + left_bounds.intersect(ref.bounds()); + right_bounds.intersect(ref.bounds()); + + /* set referecnes */ + left = BVHReference(left_bounds, ref.prim_index(), ref.prim_object()); + right = BVHReference(right_bounds, ref.prim_index(), ref.prim_object()); +} + +CCL_NAMESPACE_END + diff --git a/intern/cycles/bvh/bvh_split.h b/intern/cycles/bvh/bvh_split.h new file mode 100644 index 00000000000..1f4befbe8e2 --- /dev/null +++ b/intern/cycles/bvh/bvh_split.h @@ -0,0 +1,110 @@ +/* + * Adapted from code copyright 2009-2010 NVIDIA Corporation + * Modifications Copyright 2011, Blender Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __BVH_SPLIT_H__ +#define __BVH_SPLIT_H__ + +#include "bvh_build.h" +#include "bvh_params.h" + +CCL_NAMESPACE_BEGIN + +class BVHBuild; + +/* Object Split */ + +class BVHObjectSplit +{ +public: + float sah; + int dim; + int num_left; + BoundBox left_bounds; + BoundBox right_bounds; + + BVHObjectSplit() {} + BVHObjectSplit(BVHBuild *builder, const BVHRange& range, float nodeSAH); + + void split(BVHBuild *builder, BVHRange& left, BVHRange& right, const BVHRange& range); +}; + +/* Spatial Split */ + +class BVHSpatialSplit +{ +public: + float sah; + int dim; + float pos; + + BVHSpatialSplit() : sah(FLT_MAX), dim(0), pos(0.0f) {} + BVHSpatialSplit(BVHBuild *builder, const BVHRange& range, float nodeSAH); + + void split(BVHBuild *builder, BVHRange& left, BVHRange& right, const BVHRange& range); + void split_reference(BVHBuild *builder, BVHReference& left, BVHReference& right, const BVHReference& ref, int dim, float pos); +}; + +/* Mixed Object-Spatial Split */ + +class BVHMixedSplit +{ +public: + BVHObjectSplit object; + BVHSpatialSplit spatial; + + float leafSAH; + float nodeSAH; + float minSAH; + + bool no_split; + + __forceinline BVHMixedSplit(BVHBuild *builder, const BVHRange& range, int level) + { + /* find split candidates. */ + float area = range.bounds().safe_area(); + + leafSAH = area * builder->params.triangle_cost(range.size()); + nodeSAH = area * builder->params.node_cost(2); + + object = BVHObjectSplit(builder, range, nodeSAH); + + if(builder->params.use_spatial_split && level < BVHParams::MAX_SPATIAL_DEPTH) { + BoundBox overlap = object.left_bounds; + overlap.intersect(object.right_bounds); + + if(overlap.safe_area() >= builder->spatial_min_overlap) + spatial = BVHSpatialSplit(builder, range, nodeSAH); + } + + /* leaf SAH is the lowest => create leaf. */ + minSAH = min(min(leafSAH, object.sah), spatial.sah); + no_split = (minSAH == leafSAH && range.size() <= builder->params.max_leaf_size); + } + + __forceinline void split(BVHBuild *builder, BVHRange& left, BVHRange& right, const BVHRange& range) + { + if(builder->params.use_spatial_split && minSAH == spatial.sah) + spatial.split(builder, left, right, range); + if(!left.size() || !right.size()) + object.split(builder, left, right, range); + } +}; + +CCL_NAMESPACE_END + +#endif /* __BVH_SPLIT_H__ */ + diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp index cceec8b8e5c..42dda1180c7 100644 --- a/intern/cycles/device/device.cpp +++ b/intern/cycles/device/device.cpp @@ -58,15 +58,6 @@ void DeviceTask::split_max_size(list& tasks, int max_size) split(tasks, num); } -void DeviceTask::split(ThreadQueue& queue, int num) -{ - list tasks; - split(tasks, num); - - foreach(DeviceTask& task, tasks) - queue.push(task); -} - void DeviceTask::split(list& tasks, int num) { if(type == SHADER) { diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h index af2567498d9..87f255e54e7 100644 --- a/intern/cycles/device/device.h +++ b/intern/cycles/device/device.h @@ -25,6 +25,7 @@ #include "util_list.h" #include "util_string.h" +#include "util_task.h" #include "util_thread.h" #include "util_types.h" #include "util_vector.h" @@ -66,7 +67,7 @@ public: /* Device Task */ -class DeviceTask { +class DeviceTask : public Task { public: typedef enum { PATH_TRACE, TONEMAP, SHADER } Type; Type type; @@ -87,7 +88,6 @@ public: DeviceTask(Type type = PATH_TRACE); void split(list& tasks, int num); - void split(ThreadQueue& tasks, int num); void split_max_size(list& tasks, int max_size); }; diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp index da977ed8472..ec84047c44f 100644 --- a/intern/cycles/device/device_cpu.cpp +++ b/intern/cycles/device/device_cpu.cpp @@ -40,35 +40,21 @@ CCL_NAMESPACE_BEGIN class CPUDevice : public Device { public: - vector threads; - ThreadQueue tasks; + TaskPool task_pool; KernelGlobals *kg; CPUDevice(int threads_num) + : task_pool(function_bind(&CPUDevice::thread_run, this, _1, _2)) { kg = kernel_globals_create(); /* do now to avoid thread issues */ system_cpu_support_optimized(); - - if(threads_num == 0) - threads_num = system_cpu_thread_count(); - - threads.resize(threads_num); - - for(size_t i = 0; i < threads.size(); i++) - threads[i] = new thread(function_bind(&CPUDevice::thread_run, this, i)); } ~CPUDevice() { - tasks.stop(); - - foreach(thread *t, threads) { - t->join(); - delete t; - } - + task_pool.stop(); kernel_globals_free(kg); } @@ -127,25 +113,21 @@ public: #endif } - void thread_run(int t) + void thread_run(Task *task_, int thread_id) { - DeviceTask task; - - while(tasks.worker_wait_pop(task)) { - if(task.type == DeviceTask::PATH_TRACE) - thread_path_trace(task); - else if(task.type == DeviceTask::TONEMAP) - thread_tonemap(task); - else if(task.type == DeviceTask::SHADER) - thread_shader(task); - - tasks.worker_done(); - } + DeviceTask *task = (DeviceTask*)task_; + + if(task->type == DeviceTask::PATH_TRACE) + thread_path_trace(*task); + else if(task->type == DeviceTask::TONEMAP) + thread_tonemap(*task); + else if(task->type == DeviceTask::SHADER) + thread_shader(*task); } void thread_path_trace(DeviceTask& task) { - if(tasks.worker_cancel()) + if(task_pool.cancelled()) return; #ifdef WITH_OSL @@ -160,7 +142,7 @@ public: kernel_cpu_optimized_path_trace(kg, (float*)task.buffer, (unsigned int*)task.rng_state, task.sample, x, y, task.offset, task.stride); - if(tasks.worker_cancel()) + if(task_pool.cancelled()) break; } } @@ -172,7 +154,7 @@ public: kernel_cpu_path_trace(kg, (float*)task.buffer, (unsigned int*)task.rng_state, task.sample, x, y, task.offset, task.stride); - if(tasks.worker_cancel()) + if(task_pool.cancelled()) break; } } @@ -214,7 +196,7 @@ public: for(int x = task.shader_x; x < task.shader_x + task.shader_w; x++) { kernel_cpu_optimized_shader(kg, (uint4*)task.shader_input, (float4*)task.shader_output, task.shader_eval_type, x); - if(tasks.worker_cancel()) + if(task_pool.cancelled()) break; } } @@ -224,7 +206,7 @@ public: for(int x = task.shader_x; x < task.shader_x + task.shader_w; x++) { kernel_cpu_shader(kg, (uint4*)task.shader_input, (float4*)task.shader_output, task.shader_eval_type, x); - if(tasks.worker_cancel()) + if(task_pool.cancelled()) break; } } @@ -239,17 +221,22 @@ public: { /* split task into smaller ones, more than number of threads for uneven workloads where some parts of the image render slower than others */ - task.split(tasks, threads.size()*10); + list tasks; + + task.split(tasks, TaskScheduler::num_threads()*10); + + foreach(DeviceTask& task, tasks) + task_pool.push(new DeviceTask(task)); } void task_wait() { - tasks.wait_done(); + task_pool.wait(); } void task_cancel() { - tasks.cancel(); + task_pool.cancel(); } }; diff --git a/intern/cycles/device/device_multi.cpp b/intern/cycles/device/device_multi.cpp index 1f69f2c53fa..9f7d65e640b 100644 --- a/intern/cycles/device/device_multi.cpp +++ b/intern/cycles/device/device_multi.cpp @@ -257,13 +257,14 @@ public: void task_add(DeviceTask& task) { - ThreadQueue tasks; + list tasks; task.split(tasks, devices.size()); foreach(SubDevice& sub, devices) { - DeviceTask subtask; + if(!tasks.empty()) { + DeviceTask subtask = tasks.front(); + tasks.pop_front(); - if(tasks.worker_wait_pop(subtask)) { if(task.buffer) subtask.buffer = sub.ptr_map[task.buffer]; if(task.rng_state) subtask.rng_state = sub.ptr_map[task.rng_state]; if(task.rgba) subtask.rgba = sub.ptr_map[task.rgba]; diff --git a/intern/cycles/kernel/kernel_accumulate.h b/intern/cycles/kernel/kernel_accumulate.h index 9a52531eec0..6c3ade1c531 100644 --- a/intern/cycles/kernel/kernel_accumulate.h +++ b/intern/cycles/kernel/kernel_accumulate.h @@ -266,7 +266,7 @@ __device_inline void path_radiance_accum_background(PathRadiance *L, float3 thro #endif } -__device_inline float3 path_radiance_sum(PathRadiance *L) +__device_inline float3 path_radiance_sum(KernelGlobals *kg, PathRadiance *L) { #ifdef __PASSES__ if(L->use_light_pass) { @@ -283,9 +283,14 @@ __device_inline float3 path_radiance_sum(PathRadiance *L) L->indirect_glossy *= L->indirect; L->indirect_transmission *= L->indirect; - return L->emission + L->background + float3 L_sum = L->emission + L->direct_diffuse + L->direct_glossy + L->direct_transmission + L->indirect_diffuse + L->indirect_glossy + L->indirect_transmission; + + if(!kernel_data.background.transparent) + L_sum += L->background; + + return L_sum; } else return L->emission; diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h index ff12e85375c..8ebac177277 100644 --- a/intern/cycles/kernel/kernel_path.h +++ b/intern/cycles/kernel/kernel_path.h @@ -223,6 +223,7 @@ __device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample, R path_radiance_init(&L, kernel_data.film.use_light_pass); + float min_ray_pdf = FLT_MAX; float ray_pdf = 0.0f; PathState state; int rng_offset = PRNG_BASE_NUM; @@ -239,13 +240,17 @@ __device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample, R /* eval background shader if nothing hit */ if(kernel_data.background.transparent && (state.flag & PATH_RAY_CAMERA)) { L_transparent += average(throughput); + +#ifdef __PASSES__ + if(!(kernel_data.film.pass_flag & PASS_BACKGROUND)) +#endif + break; } + #ifdef __BACKGROUND__ - else { - /* sample background shader */ - float3 L_background = indirect_background(kg, &ray, state.flag, ray_pdf); - path_radiance_accum_background(&L, throughput, L_background, state.bounce); - } + /* sample background shader */ + float3 L_background = indirect_background(kg, &ray, state.flag, ray_pdf); + path_radiance_accum_background(&L, throughput, L_background, state.bounce); #endif break; @@ -259,6 +264,18 @@ __device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample, R kernel_write_data_passes(kg, buffer, &L, &sd, sample, state.flag, throughput); + /* blurring of bsdf after bounces, for rays that have a small likelihood + of following this particular path (diffuse, rough glossy) */ + if(kernel_data.integrator.filter_glossy != FLT_MAX) { + float blur_pdf = kernel_data.integrator.filter_glossy*min_ray_pdf; + + if(blur_pdf < 1.0f) { + float blur_roughness = sqrtf(1.0f - blur_pdf)*0.5f; + shader_bsdf_blur(kg, &sd, blur_roughness); + } + } + + /* holdout */ #ifdef __HOLDOUT__ if((sd.flag & SD_HOLDOUT) && (state.flag & PATH_RAY_CAMERA)) { float3 holdout_weight = shader_holdout_eval(kg, &sd); @@ -378,8 +395,10 @@ __device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample, R path_radiance_bsdf_bounce(&L, &throughput, &bsdf_eval, bsdf_pdf, state.bounce, label); /* set labels */ - if(!(label & LABEL_TRANSPARENT)) + if(!(label & LABEL_TRANSPARENT)) { ray_pdf = bsdf_pdf; + min_ray_pdf = fminf(bsdf_pdf, min_ray_pdf); + } /* update path state */ path_state_next(kg, &state, label); @@ -394,7 +413,7 @@ __device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample, R #endif } - float3 L_sum = path_radiance_sum(&L); + float3 L_sum = path_radiance_sum(kg, &L); #ifdef __CLAMP_SAMPLE__ path_radiance_clamp(&L, &L_sum, kernel_data.integrator.sample_clamp); diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index 391dcd12dad..102a2bb036d 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -516,6 +516,7 @@ typedef struct KernelIntegrator { /* caustics */ int no_caustics; + float filter_glossy; /* seed */ int seed; @@ -525,9 +526,6 @@ typedef struct KernelIntegrator { /* clamp */ float sample_clamp; - - /* padding */ - int pad; } KernelIntegrator; typedef struct KernelBVH { diff --git a/intern/cycles/kernel/svm/svm_tex_coord.h b/intern/cycles/kernel/svm/svm_tex_coord.h index f494b6d66e1..98f8734aed2 100644 --- a/intern/cycles/kernel/svm/svm_tex_coord.h +++ b/intern/cycles/kernel/svm/svm_tex_coord.h @@ -40,6 +40,15 @@ __device void svm_node_tex_coord(KernelGlobals *kg, ShaderData *sd, float *stack data = sd->P; break; } + case NODE_TEXCO_NORMAL: { + if(sd->object != ~0) { + Transform tfm = object_fetch_transform(kg, sd->object, OBJECT_INVERSE_TRANSFORM); + data = transform_direction(&tfm, sd->N); + } + else + data = sd->N; + break; + } case NODE_TEXCO_CAMERA: { Transform tfm = kernel_data.cam.worldtocamera; @@ -85,6 +94,15 @@ __device void svm_node_tex_coord_bump_dx(KernelGlobals *kg, ShaderData *sd, floa data = sd->P + sd->dP.dx; break; } + case NODE_TEXCO_NORMAL: { + if(sd->object != ~0) { + Transform tfm = object_fetch_transform(kg, sd->object, OBJECT_INVERSE_TRANSFORM); + data = transform_direction(&tfm, sd->N); + } + else + data = sd->N; + break; + } case NODE_TEXCO_CAMERA: { Transform tfm = kernel_data.cam.worldtocamera; @@ -133,6 +151,15 @@ __device void svm_node_tex_coord_bump_dy(KernelGlobals *kg, ShaderData *sd, floa data = sd->P + sd->dP.dy; break; } + case NODE_TEXCO_NORMAL: { + if(sd->object != ~0) { + Transform tfm = object_fetch_transform(kg, sd->object, OBJECT_INVERSE_TRANSFORM); + data = normalize(transform_direction(&tfm, sd->N)); + } + else + data = sd->N; + break; + } case NODE_TEXCO_CAMERA: { Transform tfm = kernel_data.cam.worldtocamera; diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h index 68eb39bdd29..fa7c211b5f9 100644 --- a/intern/cycles/kernel/svm/svm_types.h +++ b/intern/cycles/kernel/svm/svm_types.h @@ -119,6 +119,7 @@ typedef enum NodeLightPath { } NodeLightPath; typedef enum NodeTexCoord { + NODE_TEXCO_NORMAL, NODE_TEXCO_OBJECT, NODE_TEXCO_CAMERA, NODE_TEXCO_WINDOW, diff --git a/intern/cycles/render/integrator.cpp b/intern/cycles/render/integrator.cpp index 6e6d30f3879..c1f066df10c 100644 --- a/intern/cycles/render/integrator.cpp +++ b/intern/cycles/render/integrator.cpp @@ -41,6 +41,7 @@ Integrator::Integrator() transparent_shadows = false; no_caustics = false; + filter_glossy = 0.0f; seed = 0; layer_flag = ~0; sample_clamp = 0.0f; @@ -81,6 +82,8 @@ void Integrator::device_update(Device *device, DeviceScene *dscene) kintegrator->transparent_shadows = transparent_shadows; kintegrator->no_caustics = no_caustics; + kintegrator->filter_glossy = (filter_glossy == 0.0f)? FLT_MAX: 1.0f/filter_glossy; + kintegrator->seed = hash_int(seed); kintegrator->layer_flag = layer_flag << PATH_RAY_LAYER_SHIFT; @@ -119,6 +122,7 @@ bool Integrator::modified(const Integrator& integrator) transparent_probalistic == integrator.transparent_probalistic && transparent_shadows == integrator.transparent_shadows && no_caustics == integrator.no_caustics && + filter_glossy == integrator.filter_glossy && layer_flag == integrator.layer_flag && seed == integrator.seed && sample_clamp == integrator.sample_clamp); diff --git a/intern/cycles/render/integrator.h b/intern/cycles/render/integrator.h index abbbaca894c..0817fcaa457 100644 --- a/intern/cycles/render/integrator.h +++ b/intern/cycles/render/integrator.h @@ -41,6 +41,7 @@ public: bool transparent_shadows; bool no_caustics; + float filter_glossy; int seed; int layer_flag; diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp index a7eb365f983..0ce16e65621 100644 --- a/intern/cycles/render/mesh.cpp +++ b/intern/cycles/render/mesh.cpp @@ -43,6 +43,7 @@ Mesh::Mesh() transform_applied = false; transform_negative_scaled = false; displacement_method = DISPLACE_BUMP; + bounds = BoundBox::empty; bvh = NULL; @@ -96,7 +97,7 @@ void Mesh::add_triangle(int v0, int v1, int v2, int shader_, bool smooth_) void Mesh::compute_bounds() { - BoundBox bnds; + BoundBox bnds = BoundBox::empty; size_t verts_size = verts.size(); for(size_t i = 0; i < verts_size; i++) @@ -697,6 +698,8 @@ void MeshManager::device_update(Device *device, DeviceScene *dscene, Scene *scen progress.set_status(msg, "Building BVH"); mesh->compute_bvh(&scene->params, progress); + + i++; } if(progress.get_cancel()) return; @@ -704,8 +707,6 @@ void MeshManager::device_update(Device *device, DeviceScene *dscene, Scene *scen mesh->need_update = false; mesh->need_update_rebuild = false; } - - i++; } foreach(Shader *shader, scene->shaders) diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index db696993737..d71438ebae1 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -1503,6 +1503,7 @@ TextureCoordinateNode::TextureCoordinateNode() { add_input("Normal", SHADER_SOCKET_NORMAL, ShaderInput::NORMAL, true); add_output("Generated", SHADER_SOCKET_POINT); + add_output("Normal", SHADER_SOCKET_NORMAL); add_output("UV", SHADER_SOCKET_POINT); add_output("Object", SHADER_SOCKET_POINT); add_output("Camera", SHADER_SOCKET_POINT); @@ -1551,6 +1552,12 @@ void TextureCoordinateNode::compile(SVMCompiler& compiler) } } + out = output("Normal"); + if(!out->links.empty()) { + compiler.stack_assign(out); + compiler.add_node(texco_node, NODE_TEXCO_NORMAL, out->stack_offset); + } + out = output("UV"); if(!out->links.empty()) { int attr = compiler.attribute(Attribute::STD_UV); diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp index 5f7a5810c09..28645d856a8 100644 --- a/intern/cycles/render/object.cpp +++ b/intern/cycles/render/object.cpp @@ -37,6 +37,7 @@ Object::Object() tfm = transform_identity(); visibility = ~0; pass_id = 0; + bounds = BoundBox::empty; } Object::~Object() diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp index 676f42be790..34a0c0ff877 100644 --- a/intern/cycles/render/session.cpp +++ b/intern/cycles/render/session.cpp @@ -27,6 +27,7 @@ #include "util_foreach.h" #include "util_function.h" +#include "util_task.h" #include "util_time.h" CCL_NAMESPACE_BEGIN @@ -37,6 +38,8 @@ Session::Session(const SessionParams& params_) { device_use_gl = ((params.device.type != DEVICE_CPU) && !params.background); + TaskScheduler::init(params.threads); + device = Device::create(params.device, params.background, params.threads); buffers = new RenderBuffers(device); display = new DisplayBuffer(device); @@ -88,6 +91,8 @@ Session::~Session() delete display; delete scene; delete device; + + TaskScheduler::exit(); } void Session::start() diff --git a/intern/cycles/subd/subd_patch.cpp b/intern/cycles/subd/subd_patch.cpp index ff477296c7e..f6acc358959 100644 --- a/intern/cycles/subd/subd_patch.cpp +++ b/intern/cycles/subd/subd_patch.cpp @@ -93,7 +93,7 @@ void LinearQuadPatch::eval(float3 *P, float3 *dPdu, float3 *dPdv, float u, float BoundBox LinearQuadPatch::bound() { - BoundBox bbox; + BoundBox bbox = BoundBox::empty; for(int i = 0; i < 4; i++) bbox.grow(hull[i]); @@ -115,7 +115,7 @@ void LinearTrianglePatch::eval(float3 *P, float3 *dPdu, float3 *dPdv, float u, f BoundBox LinearTrianglePatch::bound() { - BoundBox bbox; + BoundBox bbox = BoundBox::empty; for(int i = 0; i < 3; i++) bbox.grow(hull[i]); @@ -132,7 +132,7 @@ void BicubicPatch::eval(float3 *P, float3 *dPdu, float3 *dPdv, float u, float v) BoundBox BicubicPatch::bound() { - BoundBox bbox; + BoundBox bbox = BoundBox::empty; for(int i = 0; i < 16; i++) bbox.grow(hull[i]); @@ -152,7 +152,7 @@ void BicubicTangentPatch::eval(float3 *P, float3 *dPdu, float3 *dPdv, float u, f BoundBox BicubicTangentPatch::bound() { - BoundBox bbox; + BoundBox bbox = BoundBox::empty; for(int i = 0; i < 16; i++) bbox.grow(hull[i]); @@ -205,7 +205,7 @@ void GregoryQuadPatch::eval(float3 *P, float3 *dPdu, float3 *dPdv, float u, floa BoundBox GregoryQuadPatch::bound() { - BoundBox bbox; + BoundBox bbox = BoundBox::empty; for(int i = 0; i < 20; i++) bbox.grow(hull[i]); @@ -276,7 +276,7 @@ void GregoryTrianglePatch::eval(float3 *P, float3 *dPdu, float3 *dPdv, float u, BoundBox GregoryTrianglePatch::bound() { - BoundBox bbox; + BoundBox bbox = BoundBox::empty; for(int i = 0; i < 20; i++) bbox.grow(hull[i]); diff --git a/intern/cycles/util/CMakeLists.txt b/intern/cycles/util/CMakeLists.txt index 9182ee4cbe1..87bd84b4e0f 100644 --- a/intern/cycles/util/CMakeLists.txt +++ b/intern/cycles/util/CMakeLists.txt @@ -15,6 +15,7 @@ set(SRC util_path.cpp util_string.cpp util_system.cpp + util_task.cpp util_time.cpp util_transform.cpp ) @@ -50,6 +51,7 @@ set(SRC_HEADERS util_set.h util_string.h util_system.h + util_task.h util_thread.h util_time.h util_transform.h diff --git a/intern/cycles/util/util_boundbox.h b/intern/cycles/util/util_boundbox.h index bb1df0b220f..9511b48e103 100644 --- a/intern/cycles/util/util_boundbox.h +++ b/intern/cycles/util/util_boundbox.h @@ -23,6 +23,7 @@ #include #include "util_math.h" +#include "util_string.h" #include "util_transform.h" #include "util_types.h" @@ -35,45 +36,81 @@ class BoundBox public: float3 min, max; - BoundBox(void) + __forceinline BoundBox() { - min = make_float3(FLT_MAX, FLT_MAX, FLT_MAX); - max = make_float3(-FLT_MAX, -FLT_MAX, -FLT_MAX); } - BoundBox(const float3& min_, const float3& max_) + __forceinline BoundBox(const float3& pt) + : min(pt), max(pt) + { + } + + __forceinline BoundBox(const float3& min_, const float3& max_) : min(min_), max(max_) { } - void grow(const float3& pt) + static struct empty_t {} empty; + + __forceinline BoundBox(empty_t) + : min(make_float3(FLT_MAX, FLT_MAX, FLT_MAX)), max(make_float3(-FLT_MAX, -FLT_MAX, -FLT_MAX)) + { + } + + __forceinline void grow(const float3& pt) { min = ccl::min(min, pt); max = ccl::max(max, pt); } - void grow(const BoundBox& bbox) + __forceinline void grow(const BoundBox& bbox) { grow(bbox.min); grow(bbox.max); } - void intersect(const BoundBox& bbox) + __forceinline void intersect(const BoundBox& bbox) { min = ccl::max(min, bbox.min); max = ccl::min(max, bbox.max); } - float area(void) const + /* todo: avoid using this */ + __forceinline float safe_area() const { - if(!valid()) + if(!((min.x <= max.x) && (min.y <= max.y) && (min.z <= max.z))) return 0.0f; + return area(); + } + + __forceinline float area() const + { + return half_area()*2.0f; + } + + __forceinline float half_area() const + { float3 d = max - min; - return dot(d, d)*2.0f; + return (d.x*d.z + d.y*d.z + d.x*d.y); + } + + __forceinline float3 center() const + { + return 0.5f*(min + max); } - bool valid(void) const + __forceinline float3 center2() const + { + return min + max; + } + + __forceinline float3 size() const + { + return max - min; + } + + __forceinline bool valid() const { return (min.x <= max.x) && (min.y <= max.y) && (min.z <= max.z) && (isfinite(min.x) && isfinite(min.y) && isfinite(min.z)) && @@ -82,7 +119,7 @@ public: BoundBox transformed(const Transform *tfm) { - BoundBox result; + BoundBox result = BoundBox::empty; for(int i = 0; i < 8; i++) { float3 p; @@ -98,6 +135,31 @@ public: } }; +__forceinline BoundBox merge(const BoundBox& bbox, const float3& pt) +{ + return BoundBox(min(bbox.min, pt), max(bbox.max, pt)); +} + +__forceinline BoundBox merge(const BoundBox& a, const BoundBox& b) +{ + return BoundBox(min(a.min, b.min), max(a.max, b.max)); +} + +__forceinline BoundBox merge(const BoundBox& a, const BoundBox& b, const BoundBox& c, const BoundBox& d) +{ + return merge(merge(a, b), merge(c, d)); +} + +__forceinline BoundBox intersect(const BoundBox& a, const BoundBox& b) +{ + return BoundBox(max(a.min, b.min), min(a.max, b.max)); +} + +__forceinline BoundBox intersect(const BoundBox& a, const BoundBox& b, const BoundBox& c) +{ + return intersect(a, intersect(b, c)); +} + CCL_NAMESPACE_END #endif /* __UTIL_BOUNDBOX_H__ */ diff --git a/intern/cycles/util/util_math.h b/intern/cycles/util/util_math.h index 019dede07fa..25d81481d12 100644 --- a/intern/cycles/util/util_math.h +++ b/intern/cycles/util/util_math.h @@ -182,93 +182,74 @@ __device_inline float average(const float2 a) __device_inline float2 operator-(const float2 a) { - float2 r = {-a.x, -a.y}; - return r; + return make_float2(-a.x, -a.y); } __device_inline float2 operator*(const float2 a, const float2 b) { - float2 r = {a.x*b.x, a.y*b.y}; - return r; + return make_float2(a.x*b.x, a.y*b.y); } __device_inline float2 operator*(const float2 a, float f) { - float2 r = {a.x*f, a.y*f}; - return r; + return make_float2(a.x*f, a.y*f); } __device_inline float2 operator*(float f, const float2 a) { - float2 r = {a.x*f, a.y*f}; - return r; + return make_float2(a.x*f, a.y*f); } __device_inline float2 operator/(float f, const float2 a) { - float2 r = {f/a.x, f/a.y}; - return r; + return make_float2(f/a.x, f/a.y); } __device_inline float2 operator/(const float2 a, float f) { float invf = 1.0f/f; - float2 r = {a.x*invf, a.y*invf}; - return r; + return make_float2(a.x*invf, a.y*invf); } __device_inline float2 operator/(const float2 a, const float2 b) { - float2 r = {a.x/b.x, a.y/b.y}; - return r; + return make_float2(a.x/b.x, a.y/b.y); } __device_inline float2 operator+(const float2 a, const float2 b) { - float2 r = {a.x+b.x, a.y+b.y}; - return r; + return make_float2(a.x+b.x, a.y+b.y); } __device_inline float2 operator-(const float2 a, const float2 b) { - float2 r = {a.x-b.x, a.y-b.y}; - return r; + return make_float2(a.x-b.x, a.y-b.y); } __device_inline float2 operator+=(float2& a, const float2 b) { - a.x += b.x; - a.y += b.y; - return a; + return a = a + b; } __device_inline float2 operator*=(float2& a, const float2 b) { - a.x *= b.x; - a.y *= b.y; - return a; + return a = a * b; } __device_inline float2 operator*=(float2& a, float f) { - a.x *= f; - a.y *= f; - return a; + return a = a * f; } __device_inline float2 operator/=(float2& a, const float2 b) { - a.x /= b.x; - a.y /= b.y; - return a; + return a = a / b; } __device_inline float2 operator/=(float2& a, float f) { float invf = 1.0f/f; - a.x *= invf; - a.y *= invf; - return a; + return a = a * invf; } @@ -314,14 +295,12 @@ __device_inline bool operator!=(const float2 a, const float2 b) __device_inline float2 min(float2 a, float2 b) { - float2 r = {min(a.x, b.x), min(a.y, b.y)}; - return r; + return make_float2(min(a.x, b.x), min(a.y, b.y)); } __device_inline float2 max(float2 a, float2 b) { - float2 r = {max(a.x, b.x), max(a.y, b.y)}; - return r; + return make_float2(max(a.x, b.x), max(a.y, b.y)); } __device_inline float2 clamp(float2 a, float2 mn, float2 mx) @@ -361,112 +340,78 @@ __device_inline float2 interp(float2 a, float2 b, float t) /* Float3 Vector */ -__device_inline bool is_zero(const float3 a) -{ - return (a.x == 0.0f && a.y == 0.0f && a.z == 0.0f); -} - -__device_inline float average(const float3 a) -{ - return (a.x + a.y + a.z)*(1.0f/3.0f); -} - #ifndef __KERNEL_OPENCL__ __device_inline float3 operator-(const float3 a) { - float3 r = make_float3(-a.x, -a.y, -a.z); - return r; + return make_float3(-a.x, -a.y, -a.z); } __device_inline float3 operator*(const float3 a, const float3 b) { - float3 r = make_float3(a.x*b.x, a.y*b.y, a.z*b.z); - return r; + return make_float3(a.x*b.x, a.y*b.y, a.z*b.z); } __device_inline float3 operator*(const float3 a, float f) { - float3 r = make_float3(a.x*f, a.y*f, a.z*f); - return r; + return make_float3(a.x*f, a.y*f, a.z*f); } __device_inline float3 operator*(float f, const float3 a) { - float3 r = make_float3(a.x*f, a.y*f, a.z*f); - return r; + return make_float3(a.x*f, a.y*f, a.z*f); } __device_inline float3 operator/(float f, const float3 a) { - float3 r = make_float3(f/a.x, f/a.y, f/a.z); - return r; + return make_float3(f/a.x, f/a.y, f/a.z); } __device_inline float3 operator/(const float3 a, float f) { float invf = 1.0f/f; - float3 r = make_float3(a.x*invf, a.y*invf, a.z*invf); - return r; + return make_float3(a.x*invf, a.y*invf, a.z*invf); } __device_inline float3 operator/(const float3 a, const float3 b) { - float3 r = make_float3(a.x/b.x, a.y/b.y, a.z/b.z); - return r; + return make_float3(a.x/b.x, a.y/b.y, a.z/b.z); } __device_inline float3 operator+(const float3 a, const float3 b) { - float3 r = make_float3(a.x+b.x, a.y+b.y, a.z+b.z); - return r; + return make_float3(a.x+b.x, a.y+b.y, a.z+b.z); } __device_inline float3 operator-(const float3 a, const float3 b) { - float3 r = make_float3(a.x-b.x, a.y-b.y, a.z-b.z); - return r; + return make_float3(a.x-b.x, a.y-b.y, a.z-b.z); } __device_inline float3 operator+=(float3& a, const float3 b) { - a.x += b.x; - a.y += b.y; - a.z += b.z; - return a; + return a = a + b; } __device_inline float3 operator*=(float3& a, const float3 b) { - a.x *= b.x; - a.y *= b.y; - a.z *= b.z; - return a; + return a = a * b; } __device_inline float3 operator*=(float3& a, float f) { - a.x *= f; - a.y *= f; - a.z *= f; - return a; + return a = a * f; } __device_inline float3 operator/=(float3& a, const float3 b) { - a.x /= b.x; - a.y /= b.y; - a.z /= b.z; - return a; + return a = a / b; } __device_inline float3 operator/=(float3& a, float f) { float invf = 1.0f/f; - a.x *= invf; - a.y *= invf; - a.z *= invf; - return a; + return a = a * invf; } __device_inline float dot(const float3 a, const float3 b) @@ -506,7 +451,11 @@ __device_inline float3 normalize_len(const float3 a, float *t) __device_inline bool operator==(const float3 a, const float3 b) { +#ifdef __KERNEL_SSE__ + return (_mm_movemask_ps(_mm_cmpeq_ps(a.m128, b.m128)) & 7) == 7; +#else return (a.x == b.x && a.y == b.y && a.z == b.z); +#endif } __device_inline bool operator!=(const float3 a, const float3 b) @@ -516,14 +465,20 @@ __device_inline bool operator!=(const float3 a, const float3 b) __device_inline float3 min(float3 a, float3 b) { - float3 r = make_float3(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z)); - return r; +#ifdef __KERNEL_SSE__ + return _mm_min_ps(a.m128, b.m128); +#else + return make_float3(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z)); +#endif } __device_inline float3 max(float3 a, float3 b) { - float3 r = make_float3(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z)); - return r; +#ifdef __KERNEL_SSE__ + return _mm_max_ps(a.m128, b.m128); +#else + return make_float3(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z)); +#endif } __device_inline float3 clamp(float3 a, float3 mn, float3 mx) @@ -533,7 +488,12 @@ __device_inline float3 clamp(float3 a, float3 mn, float3 mx) __device_inline float3 fabs(float3 a) { +#ifdef __KERNEL_SSE__ + __m128 mask = _mm_castsi128_ps(_mm_set1_epi32(0x7fffffff)); + return _mm_and_ps(a.m128, mask); +#else return make_float3(fabsf(a.x), fabsf(a.y), fabsf(a.z)); +#endif } #endif @@ -555,6 +515,25 @@ __device_inline void print_float3(const char *label, const float3& a) printf("%s: %.8f %.8f %.8f\n", label, a.x, a.y, a.z); } +__device_inline float reduce_add(const float3& a) +{ +#ifdef __KERNEL_SSE__ + return (a.x + a.y + a.z); +#else + return (a.x + a.y + a.z); +#endif +} + +__device_inline float3 rcp(const float3& a) +{ +#ifdef __KERNEL_SSE__ + float4 r = _mm_rcp_ps(a.m128); + return _mm_sub_ps(_mm_add_ps(r, r), _mm_mul_ps(_mm_mul_ps(r, r), a)); +#else + return make_float3(1.0f/a.x, 1.0f/a.y, 1.0f/a.z); +#endif +} + #endif __device_inline float3 interp(float3 a, float3 b, float t) @@ -562,122 +541,258 @@ __device_inline float3 interp(float3 a, float3 b, float t) return a + t*(b - a); } +__device_inline bool is_zero(const float3 a) +{ +#ifdef __KERNEL_SSE__ + return a == make_float3(0.0f); +#else + return (a.x == 0.0f && a.y == 0.0f && a.z == 0.0f); +#endif +} + +__device_inline float average(const float3 a) +{ + return reduce_add(a)*(1.0f/3.0f); +} + /* Float4 Vector */ -#ifndef __KERNEL_OPENCL__ +#ifdef __KERNEL_SSE__ -__device_inline bool is_zero(const float4& a) +template __forceinline const float4 shuffle(const float4& b) { - return (a.x == 0.0f && a.y == 0.0f && a.z == 0.0f && a.w == 0.0f); + return _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(b), _MM_SHUFFLE(index_3, index_2, index_1, index_0))); } -__device_inline float average(const float4& a) +template<> __forceinline const float4 shuffle<0, 0, 2, 2>(const float4& b) { - return (a.x + a.y + a.z + a.w)*(1.0f/4.0f); + return _mm_moveldup_ps(b); } +template<> __forceinline const float4 shuffle<1, 1, 3, 3>(const float4& b) +{ + return _mm_movehdup_ps(b); +} + +template<> __forceinline const float4 shuffle<0, 1, 0, 1>(const float4& b) +{ + return _mm_castpd_ps(_mm_movedup_pd(_mm_castps_pd(b))); +} + +#endif + +#ifndef __KERNEL_OPENCL__ + __device_inline float4 operator-(const float4& a) { - float4 r = {-a.x, -a.y, -a.z, -a.w}; - return r; +#ifdef __KERNEL_SSE__ + __m128 mask = _mm_castsi128_ps(_mm_set1_epi32(0x80000000)); + return _mm_xor_ps(a.m128, mask); +#else + return make_float4(-a.x, -a.y, -a.z, -a.w); +#endif } __device_inline float4 operator*(const float4& a, const float4& b) { - float4 r = {a.x*b.x, a.y*b.y, a.z*b.z, a.w*b.w}; - return r; +#ifdef __KERNEL_SSE__ + return _mm_mul_ps(a.m128, b.m128); +#else + return make_float4(a.x*b.x, a.y*b.y, a.z*b.z, a.w*b.w); +#endif } __device_inline float4 operator*(const float4& a, float f) { - float4 r = {a.x*f, a.y*f, a.z*f, a.w*f}; - return r; +#ifdef __KERNEL_SSE__ + return a * make_float4(f); +#else + return make_float4(a.x*f, a.y*f, a.z*f, a.w*f); +#endif } __device_inline float4 operator*(float f, const float4& a) { - float4 r = {a.x*f, a.y*f, a.z*f, a.w*f}; - return r; + return a * f; +} + +__device_inline float4 rcp(const float4& a) +{ +#ifdef __KERNEL_SSE__ + float4 r = _mm_rcp_ps(a.m128); + return _mm_sub_ps(_mm_add_ps(r, r), _mm_mul_ps(_mm_mul_ps(r, r), a)); +#else + return make_float4(1.0f/a.x, 1.0f/a.y, 1.0f/a.z, 1.0f/a.w); +#endif } __device_inline float4 operator/(const float4& a, float f) { - float invf = 1.0f/f; - float4 r = {a.x*invf, a.y*invf, a.z*invf, a.w*invf}; - return r; + return a * (1.0f/f); } __device_inline float4 operator/(const float4& a, const float4& b) { - float4 r = {a.x/b.x, a.y/b.y, a.z/b.z, a.w/b.w}; - return r; +#ifdef __KERNEL_SSE__ + return a * rcp(b); +#else + return make_float4(a.x/b.x, a.y/b.y, a.z/b.z, a.w/b.w); +#endif + } __device_inline float4 operator+(const float4& a, const float4& b) { - float4 r = {a.x+b.x, a.y+b.y, a.z+b.z, a.w+b.w}; - return r; +#ifdef __KERNEL_SSE__ + return _mm_add_ps(a.m128, b.m128); +#else + return make_float4(a.x+b.x, a.y+b.y, a.z+b.z, a.w+b.w); +#endif } __device_inline float4 operator-(const float4& a, const float4& b) { - float4 r = {a.x-b.x, a.y-b.y, a.z-b.z, a.w-b.w}; - return r; +#ifdef __KERNEL_SSE__ + return _mm_sub_ps(a.m128, b.m128); +#else + return make_float4(a.x-b.x, a.y-b.y, a.z-b.z, a.w-b.w); +#endif } __device_inline float4 operator+=(float4& a, const float4& b) { - a.x += b.x; - a.y += b.y; - a.z += b.z; - a.w += b.w; - return a; + return a = a + b; } __device_inline float4 operator*=(float4& a, const float4& b) { - a.x *= b.x; - a.y *= b.y; - a.z *= b.z; - a.w *= b.w; - return a; + return a = a * b; } __device_inline float4 operator/=(float4& a, float f) { - float invf = 1.0f/f; - a.x *= invf; - a.y *= invf; - a.z *= invf; - a.w *= invf; - return a; + return a = a / f; } -__device_inline float dot(const float4& a, const float4& b) +__device_inline int4 operator<(const float4& a, const float4& b) { - return a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; +#ifdef __KERNEL_SSE__ + return _mm_cvtps_epi32(_mm_cmplt_ps(a.m128, b.m128)); /* todo: avoid cvt */ +#else + return make_int4(a.x < b.x, a.y < b.y, a.z < b.z, a.w < b.w); +#endif +} + +__device_inline int4 operator>=(float4 a, float4 b) +{ +#ifdef __KERNEL_SSE__ + return _mm_cvtps_epi32(_mm_cmpge_ps(a.m128, b.m128)); /* todo: avoid cvt */ +#else + return make_int4(a.x >= b.x, a.y >= b.y, a.z >= b.z, a.w >= b.w); +#endif +} + +__device_inline int4 operator<=(const float4& a, const float4& b) +{ +#ifdef __KERNEL_SSE__ + return _mm_cvtps_epi32(_mm_cmple_ps(a.m128, b.m128)); /* todo: avoid cvt */ +#else + return make_int4(a.x <= b.x, a.y <= b.y, a.z <= b.z, a.w <= b.w); +#endif +} + +__device_inline bool operator==(const float4 a, const float4 b) +{ +#ifdef __KERNEL_SSE__ + return (_mm_movemask_ps(_mm_cmpeq_ps(a.m128, b.m128)) & 15) == 15; +#else + return (a.x == b.x && a.y == b.y && a.z == b.z && a.w == b.w); +#endif } __device_inline float4 cross(const float4& a, const float4& b) { - float4 r = {a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x, 0.0f}; - return r; +#ifdef __KERNEL_SSE__ + return (shuffle<1,2,0,0>(a)*shuffle<2,0,1,0>(b)) - (shuffle<2,0,1,0>(a)*shuffle<1,2,0,0>(b)); +#else + return make_float4(a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x, 0.0f); +#endif } __device_inline float4 min(float4 a, float4 b) { +#ifdef __KERNEL_SSE__ + return _mm_min_ps(a.m128, b.m128); +#else return make_float4(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z), min(a.w, b.w)); +#endif } __device_inline float4 max(float4 a, float4 b) { +#ifdef __KERNEL_SSE__ + return _mm_max_ps(a.m128, b.m128); +#else return make_float4(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z), max(a.w, b.w)); +#endif } #endif #ifndef __KERNEL_GPU__ +__device_inline float4 select(const int4& mask, const float4& a, const float4& b) +{ +#ifdef __KERNEL_SSE__ + /* blendv is sse4, and apparently broken on vs2008 */ + return _mm_or_ps(_mm_and_ps(_mm_cvtepi32_ps(mask), a), _mm_andnot_ps(_mm_cvtepi32_ps(mask), b)); /* todo: avoid cvt */ +#else + return make_float4((mask.x)? a.x: b.x, (mask.y)? a.y: b.y, (mask.z)? a.z: b.z, (mask.w)? a.w: b.w); +#endif +} + +__device_inline float4 reduce_min(const float4& a) +{ +#ifdef __KERNEL_SSE__ + float4 h = min(shuffle<1,0,3,2>(a), a); + return min(shuffle<2,3,0,1>(h), h); +#else + return make_float4(min(min(a.x, a.y), min(a.z, a.w))); +#endif +} + +__device_inline float4 reduce_max(const float4& a) +{ +#ifdef __KERNEL_SSE__ + float4 h = max(shuffle<1,0,3,2>(a), a); + return max(shuffle<2,3,0,1>(h), h); +#else + return make_float4(max(max(a.x, a.y), max(a.z, a.w))); +#endif +} + +#if 0 +__device_inline float4 reduce_add(const float4& a) +{ +#ifdef __KERNEL_SSE__ + float4 h = shuffle<1,0,3,2>(a) + a; + return shuffle<2,3,0,1>(h) + h; +#else + return make_float4((a.x + a.y) + (a.z + a.w)); +#endif +} +#endif + +__device_inline float reduce_add(const float4& a) +{ +#ifdef __KERNEL_SSE__ + float4 h = shuffle<1,0,3,2>(a) + a; + return _mm_cvtss_f32(shuffle<2,3,0,1>(h) + h); /* todo: efficiency? */ +#else + return ((a.x + a.y) + (a.z + a.w)); +#endif +} + __device_inline void print_float4(const char *label, const float4& a) { printf("%s: %.8f %.8f %.8f %.8f\n", label, a.x, a.y, a.z, a.w); @@ -685,26 +800,67 @@ __device_inline void print_float4(const char *label, const float4& a) #endif +#ifndef __KERNEL_OPENCL__ + +__device_inline bool is_zero(const float4& a) +{ +#ifdef __KERNEL_SSE__ + return a == make_float4(0.0f); +#else + return (a.x == 0.0f && a.y == 0.0f && a.z == 0.0f && a.w == 0.0f); +#endif +} + +__device_inline float average(const float4& a) +{ + return reduce_add(a) * 0.25f; +} + +__device_inline float dot(const float4& a, const float4& b) +{ + return reduce_add(a * b); +} + +#endif + /* Int3 */ #ifndef __KERNEL_OPENCL__ +__device_inline int3 min(int3 a, int3 b) +{ +#ifdef __KERNEL_SSE__ + return _mm_min_epi32(a.m128, b.m128); +#else + return make_int3(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z)); +#endif +} + __device_inline int3 max(int3 a, int3 b) { - int3 r = {max(a.x, b.x), max(a.y, b.y), max(a.z, b.z)}; - return r; +#ifdef __KERNEL_SSE__ + return _mm_max_epi32(a.m128, b.m128); +#else + return make_int3(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z)); +#endif } __device_inline int3 clamp(const int3& a, int mn, int mx) { - int3 r = {clamp(a.x, mn, mx), clamp(a.y, mn, mx), clamp(a.z, mn, mx)}; - return r; +#ifdef __KERNEL_SSE__ + return min(max(a, make_int3(mn)), make_int3(mx)); +#else + return make_int3(clamp(a.x, mn, mx), clamp(a.y, mn, mx), clamp(a.z, mn, mx)); +#endif } __device_inline int3 clamp(const int3& a, int3& mn, int mx) { - int3 r = {clamp(a.x, mn.x, mx), clamp(a.y, mn.y, mx), clamp(a.z, mn.z, mx)}; - return r; +#ifdef __KERNEL_SSE__ + return min(max(a, mn), make_int3(mx)); +#else + return make_int3(clamp(a.x, mn.x, mx), clamp(a.y, mn.y, mx), clamp(a.z, mn.z, mx)); +#endif } #endif @@ -720,16 +876,63 @@ __device_inline void print_int3(const char *label, const int3& a) /* Int4 */ -#ifndef __KERNEL_OPENCL__ +#ifndef __KERNEL_GPU__ -__device_inline int4 operator>=(float4 a, float4 b) +__device_inline int4 operator+(const int4& a, const int4& b) { - return make_int4(a.x >= b.x, a.y >= b.y, a.z >= b.z, a.w >= b.w); +#ifdef __KERNEL_SSE__ + return _mm_add_epi32(a.m128, b.m128); +#else + return make_int4(a.x+b.x, a.y+b.y, a.z+b.z, a.w+b.w); +#endif +} + +__device_inline int4 operator+=(int4& a, const int4& b) +{ + return a = a + b; } +__device_inline int4 operator>>(const int4& a, int i) +{ +#ifdef __KERNEL_SSE__ + return _mm_srai_epi32(a.m128, i); +#else + return make_int4(a.x >> i, a.y >> i, a.z >> i, a.w >> i); #endif +} -#ifndef __KERNEL_GPU__ +__device_inline int4 min(int4 a, int4 b) +{ +#ifdef __KERNEL_SSE__ + return _mm_min_epi32(a.m128, b.m128); +#else + return make_int4(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z), min(a.w, b.w)); +#endif +} + +__device_inline int4 max(int4 a, int4 b) +{ +#ifdef __KERNEL_SSE__ + return _mm_max_epi32(a.m128, b.m128); +#else + return make_int4(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z), max(a.w, b.w)); +#endif +} + +__device_inline int4 clamp(const int4& a, const int4& mn, const int4& mx) +{ + return min(max(a, mn), mx); +} + +__device_inline int4 select(const int4& mask, const int4& a, const int4& b) +{ +#ifdef __KERNEL_SSE__ + __m128 m = _mm_cvtepi32_ps(mask); + return _mm_castps_si128(_mm_or_ps(_mm_and_ps(m, _mm_castsi128_ps(a)), _mm_andnot_ps(m, _mm_castsi128_ps(b)))); /* todo: avoid cvt */ +#else + return make_int4((mask.x)? a.x: b.x, (mask.y)? a.y: b.y, (mask.z)? a.z: b.z, (mask.w)? a.w: b.w); +#endif +} __device_inline void print_int4(const char *label, const int4& a) { diff --git a/intern/cycles/util/util_task.cpp b/intern/cycles/util/util_task.cpp new file mode 100644 index 00000000000..6da9a70ec0c --- /dev/null +++ b/intern/cycles/util/util_task.cpp @@ -0,0 +1,223 @@ +/* + * Copyright 2011, Blender Foundation. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "util_debug.h" +#include "util_foreach.h" +#include "util_system.h" +#include "util_task.h" + +CCL_NAMESPACE_BEGIN + +/* Task Pool */ + +TaskPool::TaskPool(const TaskRunFunction& run_) +{ + num = 0; + num_done = 0; + + do_cancel = false; + + run = run_; +} + +TaskPool::~TaskPool() +{ + stop(); +} + +void TaskPool::push(Task *task, bool front) +{ + TaskScheduler::Entry entry; + + entry.task = task; + entry.pool = this; + + TaskScheduler::push(entry, front); +} + +void TaskPool::wait() +{ + thread_scoped_lock lock(done_mutex); + + while(num_done != num) + done_cond.wait(lock); +} + +void TaskPool::cancel() +{ + TaskScheduler::clear(this); + + do_cancel = true; + wait(); + do_cancel = false; +} + +void TaskPool::stop() +{ + TaskScheduler::clear(this); + + assert(num_done == num); +} + +bool TaskPool::cancelled() +{ + return do_cancel; +} + +void TaskPool::done_increase(int done) +{ + done_mutex.lock(); + num_done += done; + done_mutex.unlock(); + + assert(num_done <= num); + done_cond.notify_all(); +} + +/* Task Scheduler */ + +thread_mutex TaskScheduler::mutex; +int TaskScheduler::users = 0; +vector TaskScheduler::threads; +volatile bool TaskScheduler::do_exit = false; + +list TaskScheduler::queue; +thread_mutex TaskScheduler::queue_mutex; +thread_condition_variable TaskScheduler::queue_cond; + +void TaskScheduler::init(int num_threads) +{ + thread_scoped_lock lock(mutex); + + /* multiple cycles instances can use this task scheduler, sharing the same + threads, so we keep track of the number of users. */ + if(users == 0) { + do_exit = false; + + /* launch threads that will be waiting for work */ + if(num_threads == 0) + num_threads = system_cpu_thread_count(); + + threads.resize(num_threads); + + for(size_t i = 0; i < threads.size(); i++) + threads[i] = new thread(function_bind(&TaskScheduler::thread_run, i)); + } + + users++; +} + +void TaskScheduler::exit() +{ + thread_scoped_lock lock(mutex); + + users--; + + if(users == 0) { + /* stop all waiting threads */ + do_exit = true; + TaskScheduler::queue_cond.notify_all(); + + /* delete threads */ + foreach(thread *t, threads) { + t->join(); + delete t; + } + + threads.clear(); + } +} + +bool TaskScheduler::thread_wait_pop(Entry& entry) +{ + thread_scoped_lock lock(queue_mutex); + + while(queue.empty() && !do_exit) + queue_cond.wait(lock); + + if(queue.empty()) { + assert(do_exit); + return false; + } + + entry = queue.front(); + queue.pop_front(); + + return true; +} + +void TaskScheduler::thread_run(int thread_id) +{ + Entry entry; + + /* todo: test affinity/denormal mask */ + + /* keep popping off tasks */ + while(thread_wait_pop(entry)) { + /* run task */ + entry.pool->run(entry.task, thread_id); + + /* delete task */ + delete entry.task; + + /* notify pool task was done */ + entry.pool->done_increase(1); + } +} + +void TaskScheduler::push(Entry& entry, bool front) +{ + /* add entry to queue */ + TaskScheduler::queue_mutex.lock(); + if(front) + TaskScheduler::queue.push_front(entry); + else + TaskScheduler::queue.push_back(entry); + entry.pool->num++; + TaskScheduler::queue_mutex.unlock(); + + TaskScheduler::queue_cond.notify_one(); +} + +void TaskScheduler::clear(TaskPool *pool) +{ + thread_scoped_lock lock(TaskScheduler::queue_mutex); + + /* erase all tasks from this pool from the queue */ + list::iterator it = TaskScheduler::queue.begin(); + int done = 0; + + while(it != TaskScheduler::queue.end()) { + TaskScheduler::Entry& entry = *it; + + if(entry.pool == pool) { + done++; + delete entry.task; + + it = TaskScheduler::queue.erase(it); + } + else + it++; + } + + /* notify done */ + pool->done_increase(done); +} + +CCL_NAMESPACE_END + diff --git a/intern/cycles/util/util_task.h b/intern/cycles/util/util_task.h new file mode 100644 index 00000000000..acdb2cb50a2 --- /dev/null +++ b/intern/cycles/util/util_task.h @@ -0,0 +1,122 @@ +/* + * Copyright 2011, Blender Foundation. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __UTIL_TASK_H__ +#define __UTIL_TASK_H__ + +#include "util_list.h" +#include "util_thread.h" +#include "util_vector.h" + +CCL_NAMESPACE_BEGIN + +class Task; +class TaskPool; +class TaskScheduler; + +typedef boost::function TaskRunFunction; + +/* Task + * + * Base class for tasks to be executed in threads. */ + +class Task +{ +public: + Task() {}; + virtual ~Task() {} +}; + +/* Task Pool + * + * Pool of tasks that will be executed by the central TaskScheduler.For each + * pool, we can wait for all tasks to be done, or cancel them before they are + * done. + * + * The run callback that actually executes the task may be create like this: + * function_bind(&MyClass::task_execute, this, _1, _2) */ + +class TaskPool +{ +public: + TaskPool(const TaskRunFunction& run); + ~TaskPool(); + + void push(Task *task, bool front = false); + + void wait(); /* wait until all tasks are done */ + void cancel(); /* cancel all tasks, keep worker threads running */ + void stop(); /* stop all worker threads */ + + bool cancelled(); /* for worker threads, test if cancelled */ + +protected: + friend class TaskScheduler; + + void done_increase(int done); + + TaskRunFunction run; + + thread_mutex done_mutex; + thread_condition_variable done_cond; + + volatile int num, num_done; + volatile bool do_cancel; +}; + +/* Task Scheduler + * + * Central scheduler that holds running threads ready to execute tasks. A singe + * queue holds the task from all pools. */ + +class TaskScheduler +{ +public: + static void init(int num_threads = 0); + static void exit(); + + static int num_threads() { return threads.size(); } + +protected: + friend class TaskPool; + + struct Entry { + Task *task; + TaskPool *pool; + }; + + static thread_mutex mutex; + static int users; + static vector threads; + static volatile bool do_exit; + + static list queue; + static thread_mutex queue_mutex; + static thread_condition_variable queue_cond; + + static void thread_run(int thread_id); + static bool thread_wait_pop(Entry& entry); + + static void push(Entry& entry, bool front); + static void clear(TaskPool *pool); +}; + +CCL_NAMESPACE_END + +#endif + diff --git a/intern/cycles/util/util_thread.h b/intern/cycles/util/util_thread.h index 6836be203f5..3d15b342fe5 100644 --- a/intern/cycles/util/util_thread.h +++ b/intern/cycles/util/util_thread.h @@ -69,133 +69,6 @@ protected: bool joined; }; -/* Thread Safe Queue to pass tasks from one thread to another. Tasks should be - * pushed into the queue, while the worker thread waits to pop the next task - * off the queue. Once all tasks are into the queue, calling stop() will stop - * the worker threads from waiting for more tasks once all tasks are done. */ - -template class ThreadQueue -{ -public: - ThreadQueue() - { - tot = 0; - tot_done = 0; - do_stop = false; - do_cancel = false; - } - - /* Main thread functions */ - - /* push a task to be executed */ - void push(const T& value) - { - thread_scoped_lock lock(queue_mutex); - queue.push(value); - tot++; - lock.unlock(); - - queue_cond.notify_one(); - } - - /* wait until all tasks are done */ - void wait_done() - { - thread_scoped_lock lock(done_mutex); - - while(tot_done != tot) - done_cond.wait(lock); - } - - /* stop all worker threads */ - void stop() - { - clear(); - do_stop = true; - queue_cond.notify_all(); - } - - /* cancel all tasks, but keep worker threads running */ - void cancel() - { - clear(); - do_cancel = true; - wait_done(); - do_cancel = false; - } - - /* Worker thread functions - * - * while(queue.worker_wait_pop(task)) { - * for(..) { - * ... do work ... - * - * if(queue.worker_cancel()) - * break; - * } - * - * queue.worker_done(); - * } - */ - - bool worker_wait_pop(T& value) - { - thread_scoped_lock lock(queue_mutex); - - while(queue.empty() && !do_stop) - queue_cond.wait(lock); - - if(queue.empty()) - return false; - - value = queue.front(); - queue.pop(); - - return true; - } - - void worker_done() - { - thread_scoped_lock lock(done_mutex); - tot_done++; - lock.unlock(); - - assert(tot_done <= tot); - - done_cond.notify_all(); - } - - bool worker_cancel() - { - return do_cancel; - } - -protected: - void clear() - { - thread_scoped_lock lock(queue_mutex); - - while(!queue.empty()) { - thread_scoped_lock done_lock(done_mutex); - tot_done++; - done_lock.unlock(); - - queue.pop(); - } - - done_cond.notify_all(); - } - - std::queue queue; - thread_mutex queue_mutex; - thread_mutex done_mutex; - thread_condition_variable queue_cond; - thread_condition_variable done_cond; - volatile bool do_stop; - volatile bool do_cancel; - volatile int tot, tot_done; -}; - /* Thread Local Storage * * Boost implementation is a bit slow, and Mac OS X __thread is not supported diff --git a/intern/cycles/util/util_transform.cpp b/intern/cycles/util/util_transform.cpp index 61bc36ae888..0fd26825911 100644 --- a/intern/cycles/util/util_transform.cpp +++ b/intern/cycles/util/util_transform.cpp @@ -129,23 +129,26 @@ static bool transform_matrix4_gj_inverse(float R[][4], float M[][4]) Transform transform_inverse(const Transform& tfm) { - union { Transform T; float M[4][4]; } R, M; - - R.T = transform_identity(); - M.T = tfm; + Transform tfmR = transform_identity(); + float M[4][4], R[4][4]; - if(!transform_matrix4_gj_inverse(R.M, M.M)) { + memcpy(R, &tfmR, sizeof(R)); + memcpy(M, &tfm, sizeof(M)); + + if(!transform_matrix4_gj_inverse(R, M)) { /* matrix is degenerate (e.g. 0 scale on some axis), ideally we should never be in this situation, but try to invert it anyway with tweak */ - M.M[0][0] += 1e-8f; - M.M[1][1] += 1e-8f; - M.M[2][2] += 1e-8f; + M[0][0] += 1e-8f; + M[1][1] += 1e-8f; + M[2][2] += 1e-8f; - if(!transform_matrix4_gj_inverse(R.M, M.M)) + if(!transform_matrix4_gj_inverse(R, M)) return transform_identity(); } - return R.T; + memcpy(&tfmR, R, sizeof(R)); + + return tfmR; } CCL_NAMESPACE_END diff --git a/intern/cycles/util/util_types.h b/intern/cycles/util/util_types.h index efdda98571a..cf167707e47 100644 --- a/intern/cycles/util/util_types.h +++ b/intern/cycles/util/util_types.h @@ -36,23 +36,37 @@ #define __shared #define __constant -#ifdef __GNUC__ -#define __device_inline static inline __attribute__((always_inline)) -#else +#ifdef _WIN32 #define __device_inline static __forceinline +#define __align(...) __declspec(align(__VA_ARGS__)) +#else +#define __device_inline static inline __attribute__((always_inline)) +#define __forceinline inline __attribute__((always_inline)) +#define __align(...) __attribute__((aligned(__VA_ARGS__))) #endif #endif +/* Bitness */ + +#if defined(__ppc64__) || defined(__PPC64__) || defined(__x86_64__) || defined(__ia64__) || defined(_M_X64) +#define __KERNEL_64_BIT__ +#endif + /* SIMD Types */ -/* not needed yet, will be for qbvh -#ifndef __KERNEL_GPU__ +/* not enabled, globally applying it just gives slowdown, + * but useful for testing. */ +//#define __KERNEL_SSE__ +#ifdef __KERNEL_SSE__ -#include -#include +#include /* SSE 1 */ +#include /* SSE 2 */ +#include /* SSE 3 */ +#include /* SSE 3 */ +#include /* SSE 4 */ -#endif*/ +#endif #ifndef _WIN32 #ifndef __KERNEL_GPU__ @@ -97,6 +111,12 @@ typedef unsigned int uint32_t; typedef long long int64_t; typedef unsigned long long uint64_t; +#ifdef __KERNEL_64_BIT__ +typedef int64_t ssize_t; +#else +typedef int32_t ssize_t; +#endif + #endif /* Generic Memory Pointer */ @@ -108,89 +128,137 @@ typedef uint64_t device_ptr; struct uchar2 { uchar x, y; - uchar operator[](int i) const { return *(&x + i); } - uchar& operator[](int i) { return *(&x + i); } + __forceinline uchar operator[](int i) const { return *(&x + i); } + __forceinline uchar& operator[](int i) { return *(&x + i); } }; struct uchar3 { uchar x, y, z; - uchar operator[](int i) const { return *(&x + i); } - uchar& operator[](int i) { return *(&x + i); } + __forceinline uchar operator[](int i) const { return *(&x + i); } + __forceinline uchar& operator[](int i) { return *(&x + i); } }; struct uchar4 { uchar x, y, z, w; - uchar operator[](int i) const { return *(&x + i); } - uchar& operator[](int i) { return *(&x + i); } + __forceinline uchar operator[](int i) const { return *(&x + i); } + __forceinline uchar& operator[](int i) { return *(&x + i); } }; struct int2 { int x, y; - int operator[](int i) const { return *(&x + i); } - int& operator[](int i) { return *(&x + i); } + __forceinline int operator[](int i) const { return *(&x + i); } + __forceinline int& operator[](int i) { return *(&x + i); } }; +#ifdef __KERNEL_SSE__ +struct __align(16) int3 { + union { + __m128i m128; + struct { int x, y, z, w; }; + }; + + __forceinline int3() {} + __forceinline int3(const __m128i a) : m128(a) {} + __forceinline operator const __m128i&(void) const { return m128; } + __forceinline operator __m128i&(void) { return m128; } +#else struct int3 { - int x, y, z; + int x, y, z, w; +#endif - int operator[](int i) const { return *(&x + i); } - int& operator[](int i) { return *(&x + i); } + __forceinline int operator[](int i) const { return *(&x + i); } + __forceinline int& operator[](int i) { return *(&x + i); } }; +#ifdef __KERNEL_SSE__ +struct __align(16) int4 { + union { + __m128i m128; + struct { int x, y, z, w; }; + }; + + __forceinline int4() {} + __forceinline int4(const __m128i a) : m128(a) {} + __forceinline operator const __m128i&(void) const { return m128; } + __forceinline operator __m128i&(void) { return m128; } +#else struct int4 { int x, y, z, w; +#endif - int operator[](int i) const { return *(&x + i); } - int& operator[](int i) { return *(&x + i); } + __forceinline int operator[](int i) const { return *(&x + i); } + __forceinline int& operator[](int i) { return *(&x + i); } }; struct uint2 { uint x, y; - uint operator[](int i) const { return *(&x + i); } - uint& operator[](int i) { return *(&x + i); } + __forceinline uint operator[](uint i) const { return *(&x + i); } + __forceinline uint& operator[](uint i) { return *(&x + i); } }; struct uint3 { uint x, y, z; - uint operator[](int i) const { return *(&x + i); } - uint& operator[](int i) { return *(&x + i); } + __forceinline uint operator[](uint i) const { return *(&x + i); } + __forceinline uint& operator[](uint i) { return *(&x + i); } }; struct uint4 { uint x, y, z, w; - uint operator[](int i) const { return *(&x + i); } - uint& operator[](int i) { return *(&x + i); } + __forceinline uint operator[](uint i) const { return *(&x + i); } + __forceinline uint& operator[](uint i) { return *(&x + i); } }; struct float2 { float x, y; - float operator[](int i) const { return *(&x + i); } - float& operator[](int i) { return *(&x + i); } + __forceinline float operator[](int i) const { return *(&x + i); } + __forceinline float& operator[](int i) { return *(&x + i); } }; +#ifdef __KERNEL_SSE__ +struct __align(16) float3 { + union { + __m128 m128; + struct { float x, y, z, w; }; + }; + + __forceinline float3() {} + __forceinline float3(const __m128 a) : m128(a) {} + __forceinline operator const __m128&(void) const { return m128; } + __forceinline operator __m128&(void) { return m128; } +#else struct float3 { - float x, y, z; - -#ifdef WITH_OPENCL - float w; + float x, y, z, w; #endif - float operator[](int i) const { return *(&x + i); } - float& operator[](int i) { return *(&x + i); } + __forceinline float operator[](int i) const { return *(&x + i); } + __forceinline float& operator[](int i) { return *(&x + i); } }; +#ifdef __KERNEL_SSE__ +struct __align(16) float4 { + union { + __m128 m128; + struct { float x, y, z, w; }; + }; + + __forceinline float4() {} + __forceinline float4(const __m128 a) : m128(a) {} + __forceinline operator const __m128&(void) const { return m128; } + __forceinline operator __m128&(void) { return m128; } +#else struct float4 { float x, y, z, w; +#endif - float operator[](int i) const { return *(&x + i); } - float& operator[](int i) { return *(&x + i); } + __forceinline float operator[](int i) const { return *(&x + i); } + __forceinline float& operator[](int i) { return *(&x + i); } }; #endif @@ -201,87 +269,179 @@ struct float4 { * * OpenCL does not support C++ class, so we use these instead. */ -__device uchar2 make_uchar2(uchar x, uchar y) +__device_inline uchar2 make_uchar2(uchar x, uchar y) { uchar2 a = {x, y}; return a; } -__device uchar3 make_uchar3(uchar x, uchar y, uchar z) +__device_inline uchar3 make_uchar3(uchar x, uchar y, uchar z) { uchar3 a = {x, y, z}; return a; } -__device uchar4 make_uchar4(uchar x, uchar y, uchar z, uchar w) +__device_inline uchar4 make_uchar4(uchar x, uchar y, uchar z, uchar w) { uchar4 a = {x, y, z, w}; return a; } -__device int2 make_int2(int x, int y) +__device_inline int2 make_int2(int x, int y) { int2 a = {x, y}; return a; } -__device int3 make_int3(int x, int y, int z) +__device_inline int3 make_int3(int x, int y, int z) { - int3 a = {x, y, z}; +#ifdef __KERNEL_SSE__ + int3 a; + a.m128 = _mm_set_epi32(0, z, y, x); +#else + int3 a = {x, y, z, 0}; +#endif + return a; } -__device int4 make_int4(int x, int y, int z, int w) +__device_inline int4 make_int4(int x, int y, int z, int w) { +#ifdef __KERNEL_SSE__ + int4 a; + a.m128 = _mm_set_epi32(w, z, y, x); +#else int4 a = {x, y, z, w}; +#endif + return a; } -__device uint2 make_uint2(uint x, uint y) +__device_inline uint2 make_uint2(uint x, uint y) { uint2 a = {x, y}; return a; } -__device uint3 make_uint3(uint x, uint y, uint z) +__device_inline uint3 make_uint3(uint x, uint y, uint z) { uint3 a = {x, y, z}; return a; } -__device uint4 make_uint4(uint x, uint y, uint z, uint w) +__device_inline uint4 make_uint4(uint x, uint y, uint z, uint w) { uint4 a = {x, y, z, w}; return a; } -__device float2 make_float2(float x, float y) +__device_inline float2 make_float2(float x, float y) { float2 a = {x, y}; return a; } -__device float3 make_float3(float x, float y, float z) +__device_inline float3 make_float3(float x, float y, float z) { -#ifdef WITH_OPENCL - float3 a = {x, y, z, 0.0f}; +#ifdef __KERNEL_SSE__ + float3 a; + a.m128 = _mm_set_ps(0.0f, z, y, x); #else - float3 a = {x, y, z}; + float3 a = {x, y, z, 0.0f}; #endif + return a; } -__device float4 make_float4(float x, float y, float z, float w) +__device_inline float4 make_float4(float x, float y, float z, float w) { +#ifdef __KERNEL_SSE__ + float4 a; + a.m128 = _mm_set_ps(w, z, y, x); +#else float4 a = {x, y, z, w}; +#endif + return a; } -__device int align_up(int offset, int alignment) +__device_inline int align_up(int offset, int alignment) { return (offset + alignment - 1) & ~(alignment - 1); } +__device_inline int3 make_int3(int i) +{ +#ifdef __KERNEL_SSE__ + int3 a; + a.m128 = _mm_set1_epi32(i); +#else + int3 a = {i, i, i, i}; +#endif + + return a; +} + +__device_inline int4 make_int4(int i) +{ +#ifdef __KERNEL_SSE__ + int4 a; + a.m128 = _mm_set1_epi32(i); +#else + int4 a = {i, i, i, i}; +#endif + + return a; +} + +__device_inline float3 make_float3(float f) +{ +#ifdef __KERNEL_SSE__ + float3 a; + a.m128 = _mm_set1_ps(f); +#else + float3 a = {f, f, f, f}; +#endif + + return a; +} + +__device_inline float4 make_float4(float f) +{ +#ifdef __KERNEL_SSE__ + float4 a; + a.m128 = _mm_set1_ps(f); +#else + float4 a = {f, f, f, f}; +#endif + + return a; +} + +__device_inline float4 make_float4(const int4& i) +{ +#ifdef __KERNEL_SSE__ + float4 a; + a.m128 = _mm_cvtepi32_ps(i.m128); +#else + float4 a = {(float)i.x, (float)i.y, (float)i.z, (float)i.w}; +#endif + + return a; +} + +__device_inline int4 make_int4(const float3& f) +{ +#ifdef __KERNEL_SSE__ + int4 a; + a.m128 = _mm_cvtps_epi32(f.m128); +#else + int4 a = {(int)f.x, (int)f.y, (int)f.z, (int)f.w}; +#endif + + return a; +} + #endif CCL_NAMESPACE_END diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl b/source/blender/gpu/intern/gpu_shader_material.glsl index 2ac99e2eee2..76dacd4a10d 100644 --- a/source/blender/gpu/intern/gpu_shader_material.glsl +++ b/source/blender/gpu/intern/gpu_shader_material.glsl @@ -2041,12 +2041,13 @@ void node_geometry(vec3 I, vec3 N, mat4 toworld, backfacing = 0.0; } -void node_tex_coord(vec3 I, vec3 N, mat4 toworld, +void node_tex_coord(vec3 I, vec3 N, mat4 viewinvmat, mat4 obinvmat, vec3 attr_orco, vec3 attr_uv, - out vec3 generated, out vec3 uv, out vec3 object, + out vec3 generated, out vec3 normal, out vec3 uv, out vec3 object, out vec3 camera, out vec3 window, out vec3 reflection) { generated = attr_orco; + normal = normalize((obinvmat*(viewinvmat*vec4(N, 0.0))).xyz); uv = attr_uv; object = I; camera = I; diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl.c b/source/blender/gpu/intern/gpu_shader_material.glsl.c index a6d962a7bb9..6a6db7eadbb 100644 --- a/source/blender/gpu/intern/gpu_shader_material.glsl.c +++ b/source/blender/gpu/intern/gpu_shader_material.glsl.c @@ -1,1484 +1,1487 @@ /* DataToC output of file */ -int datatoc_gpu_shader_material_glsl_size= 49395; -char datatoc_gpu_shader_material_glsl[]= { - 10,102,108,111, 97,116, 32,101,120,112, 95, 98,108,101,110,100,101,114, 40, -102,108,111, 97,116, 32,102, 41, 10,123, 10, 9,114,101,116,117,114,110, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, - 50, 56, 52, 54, 44, 32,102, 41, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, - 52, 32,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, - 32, 99,109, 97,120, 44, 32, 99,109,105,110, 44, 32,104, 44, 32,115, 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 10, 9,118, -101, 99, 51, 32, 99, 59, 10, 10, 9, 99,109, 97,120, 32, 61, 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40, -114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, - 98, 91, 48, 93, 44, 32,109,105,110, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,100,101, -108,116, 97, 32, 61, 32, 99,109, 97,120, 45, 99,109,105,110, 59, 10, 10, 9,118, 32, 61, 32, 99,109, 97,120, 59, 10, 9,105,102, - 32, 40, 99,109, 97,120, 33, 61, 48, 46, 48, 41, 10, 9, 9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 10, - 9,101,108,115,101, 32,123, 10, 9, 9,115, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, - 10, 10, 9,105,102, 32, 40,115, 32, 61, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, - 10, 9,101,108,115,101, 32,123, 10, 9, 9, 99, 32, 61, 32, 40,118,101, 99, 51, 40, 99,109, 97,120, 44, 32, 99,109, 97,120, 44, - 32, 99,109, 97,120, 41, 32, 45, 32,114,103, 98, 46,120,121,122, 41, 47, 99,100,101,108,116, 97, 59, 10, 10, 9, 9,105,102, 32, - 40,114,103, 98, 46,120, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 99, 91, 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 10, 9, - 9,101,108,115,101, 32,105,102, 32, 40,114,103, 98, 46,121, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, - 32, 99, 91, 48, 93, 32, 45, 32, 32, 99, 91, 50, 93, 59, 10, 9, 9,101,108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, - 99, 91, 49, 93, 32, 45, 32, 99, 91, 48, 93, 59, 10, 10, 9, 9,104, 32, 47, 61, 32, 54, 46, 48, 59, 10, 10, 9, 9,105,102, 32, - 40,104, 60, 48, 46, 48, 41, 10, 9, 9, 9,104, 32, 43, 61, 32, 49, 46, 48, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, - 32, 61, 32,118,101, 99, 52, 40,104, 44, 32,115, 44, 32,118, 44, 32,114,103, 98, 46,119, 41, 59, 10,125, 10, 10,118,111,105,100, - 32,104,115,118, 95,116,111, 95,114,103, 98, 40,118,101, 99, 52, 32,104,115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111, -117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,105, 44, 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, - 44, 32,115, 44, 32,118, 59, 10, 9,118,101, 99, 51, 32,114,103, 98, 59, 10, 10, 9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, - 10, 9,115, 32, 61, 32,104,115,118, 91, 49, 93, 59, 10, 9,118, 32, 61, 32,104,115,118, 91, 50, 93, 59, 10, 10, 9,105,102, 40, -115, 61, 61, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, - 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,105,102, 40,104, 61, 61, 49, 46, 48, 41, 10, 9, 9, 9,104, 32, 61, 32, - 48, 46, 48, 59, 10, 9, 9, 10, 9, 9,104, 32, 42, 61, 32, 54, 46, 48, 59, 10, 9, 9,105, 32, 61, 32,102,108,111,111,114, 40, -104, 41, 59, 10, 9, 9,102, 32, 61, 32,104, 32, 45, 32,105, 59, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,102, 44, - 32,102, 44, 32,102, 41, 59, 10, 9, 9,112, 32, 61, 32,118, 42, 40, 49, 46, 48, 45,115, 41, 59, 10, 9, 9,113, 32, 61, 32,118, - 42, 40, 49, 46, 48, 45, 40,115, 42,102, 41, 41, 59, 10, 9, 9,116, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, - 46, 48, 45,102, 41, 41, 41, 59, 10, 9, 9, 10, 9, 9,105,102, 32, 40,105, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, - 61, 32,118,101, 99, 51, 40,118, 44, 32,116, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, - 32, 49, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,113, 44, 32,118, 44, 32,112, 41, 59, 10, 9, 9,101,108,115, -101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 50, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, - 32,116, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32, -118,101, 99, 51, 40,112, 44, 32,113, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, - 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,116, 44, 32,112, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32, -114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,112, 44, 32,113, 41, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, - 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 44, 32,104,115,118, 46,119, 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,115,114, -103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,102,108,111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102, 40, 99, - 32, 60, 32, 48, 46, 48, 52, 48, 52, 53, 41, 10, 9, 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, - 48, 46, 48, 58, 32, 99, 32, 42, 32, 40, 49, 46, 48, 47, 49, 50, 46, 57, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101, -116,117,114,110, 32,112,111,119, 40, 40, 99, 32, 43, 32, 48, 46, 48, 53, 53, 41, 42, 40, 49, 46, 48, 47, 49, 46, 48, 53, 53, 41, - 44, 32, 50, 46, 52, 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114, -103, 98, 40,102,108,111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102, 40, 99, 32, 60, 32, 48, 46, 48, 48, 51, 49, 51, 48, 56, 41, - 10, 9, 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, 48, 58, 32, 99, 32, 42, 32, 49, 50, - 46, 57, 50, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101,116,117,114,110, 32, 49, 46, 48, 53, 53, 32, 42, 32,112,111,119, 40, - 99, 44, 32, 49, 46, 48, 47, 50, 46, 52, 41, 32, 45, 32, 48, 46, 48, 53, 53, 59, 10,125, 10, 10,118,111,105,100, 32,115,114,103, - 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 95,102,114,111,109, 44, 32,111,117, -116, 32,118,101, 99, 52, 32, 99,111,108, 95,116,111, 41, 10,123, 10, 9, 99,111,108, 95,116,111, 46,114, 32, 61, 32,115,114,103, - 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,114, 41, 59, 10, 9, 99,111,108, - 95,116,111, 46,103, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114, -111,109, 46,103, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 98, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97, -114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46, 98, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111, -108, 95,102,114,111,109, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115, -114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 95,102,114,111,109, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 95, -116,111, 41, 10,123, 10, 9, 99,111,108, 95,116,111, 46,114, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115, -114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,114, 41, 59, 10, 9, 99,111,108, 95,116,111, 46,103, 32, 61, 32,108,105,110, -101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,103, 41, 59, 10, 9, 99,111,108, - 95,116,111, 46, 98, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114, -111,109, 46, 98, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 10,125, - 10, 10, 35,100,101,102,105,110,101, 32, 77, 95, 80, 73, 32, 51, 46, 49, 52, 49, 53, 57, 50, 54, 53, 51, 53, 56, 57, 55, 57, 51, - 50, 51, 56, 52, 54, 10, 35,100,101,102,105,110,101, 32, 77, 95, 49, 95, 80, 73, 32, 48, 46, 51, 49, 56, 51, 48, 57, 56, 56, 54, - 49, 56, 51, 55, 57, 48, 54, 57, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, - 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,118, 99,111,108, 95, - 97,116,116,114,105, 98,117,116,101, 40,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, - 32,118, 99,111,108, 41, 10,123, 10, 9,118, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 97,116,116,118, 99,111,108, 46,120, 47, - 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,121, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46, -122, 47, 50, 53, 53, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,117,118, 95, 97,116,116,114,105, 98, -117,116,101, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 41, 10,123, 10, 9, -117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, - 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,103,101,111,109, 40,118,101, 99, 51, 32, 99,111, - 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, - 51, 32, 97,116,116,111,114, 99,111, 44, 32,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,118,101, 99, 52, 32, 97,116,116,118, - 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108, -111, 99, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,114, - 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, - 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 99,111,108, 95, - 97,108,112,104, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102,114,111,110,116, 98, 97, 99,107, 41, 10,123, 10, 9,108, -111, 99, 97,108, 32, 61, 32, 99,111, 59, 10, 9,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,111, 99, - 97,108, 41, 59, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, -108,111, 99, 97,108, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99, -111, 59, 10, 9,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116,116,117,118, 44, 32,117,118, 41, 59, 10, 9,110,111, -114,109, 97,108, 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,110,111,114, 41, 59, 9, 47, 42, 32, 98,108,101,110,100, -101,114, 32,114,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9, -118, 99,111,108, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116,116,118, 99,111,108, 44, 32,118, 99,111,108, 41, 59, 10, 9, -118, 99,111,108, 95, 97,108,112,104, 97, 32, 61, 32, 97,116,116,118, 99,111,108, 46, 97, 59, 10, 9,102,114,111,110,116, 98, 97, - 99,107, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118, -101, 99, 44, 32,109, 97,116, 52, 32,109, 97,116, 44, 32,118,101, 99, 51, 32,109,105,110,118,101, 99, 44, 32,118,101, 99, 51, 32, -109, 97,120,118,101, 99, 44, 32,102,108,111, 97,116, 32,100,111,109,105,110, 44, 32,102,108,111, 97,116, 32,100,111,109, 97,120, - 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 40, -109, 97,116, 32, 42, 32,118,101, 99, 52, 40,118,101, 99, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,105,102, 40,100, -111,109,105,110, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109, 97,120, 40,111,117,116,118, -101, 99, 44, 32,109,105,110,118,101, 99, 41, 59, 10, 9,105,102, 40,100,111,109, 97,120, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, - 9,111,117,116,118,101, 99, 32, 61, 32,109,105,110, 40,111,117,116,118,101, 99, 44, 32,109, 97,120,118,101, 99, 41, 59, 10,125, - 10, 10,118,111,105,100, 32, 99, 97,109,101,114, 97, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32, -111,117,116,118,105,101,119, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,101,112,116,104, 44, 32,111,117,116, - 32,102,108,111, 97,116, 32,111,117,116,100,105,115,116, 41, 10,123, 10, 9,111,117,116,100,101,112,116,104, 32, 61, 32, 97, 98, -115, 40, 99,111, 46,122, 41, 59, 10, 9,111,117,116,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40, 99,111, 41, 59, 10, - 9,111,117,116,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 59, 10,125, 10, 10,118,111,105, -100, 32,109, 97,116,104, 95, 97,100,100, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, - 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, - 32,118, 97,108, 49, 32, 43, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,117, 98,116,114, - 97, 99,116, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32, -102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 45, - 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,117,108,116,105,112,108,121, 40,102,108,111, - 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111, -117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 42, 32,118, 97,108, 50, 59, 10, -125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32, -102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, - 9,105,102, 32, 40,118, 97,108, 50, 32, 61, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, - 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 47, 32,118, 97,108, 50, 59, 10, -125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, - 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,115,105,110, 40,118, - 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 99,111,115,105,110,101, 40,102,108,111, 97,116, 32,118, - 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, - 61, 32, 99,111,115, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,116, 97,110,103,101,110,116, +int datatoc_gpu_shader_material_glsl_size = 49493; +char datatoc_gpu_shader_material_glsl[] = { + 10,102,108,111, 97,116, 32,101,120,112, 95, 98,108,101,110,100,101,114, 40,102,108, +111, 97,116, 32,102, 41, 10,123, 10, 9,114,101,116,117,114,110, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, + 52, 54, 44, 32,102, 41, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32, +114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 99, +109, 97,120, 44, 32, 99,109,105,110, 44, 32,104, 44, 32,115, 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 10, 9,118,101, 99, + 51, 32, 99, 59, 10, 10, 9, 99,109, 97,120, 32, 61, 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, + 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, + 48, 93, 44, 32,109,105,110, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10, 9, 99,100,101,108,116, + 97, 32, 61, 32, 99,109, 97,120, 45, 99,109,105,110, 59, 10, 10, 9,118, 32, 61, 32, 99,109, 97,120, 59, 10, 9,105,102, 32, 40, + 99,109, 97,120, 33, 61, 48, 46, 48, 41, 10, 9, 9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 10, 9,101, +108,115,101, 32,123, 10, 9, 9,115, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 10, + 9,105,102, 32, 40,115, 32, 61, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,104, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9, +101,108,115,101, 32,123, 10, 9, 9, 99, 32, 61, 32, 40,118,101, 99, 51, 40, 99,109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99, +109, 97,120, 41, 32, 45, 32,114,103, 98, 46,120,121,122, 41, 47, 99,100,101,108,116, 97, 59, 10, 10, 9, 9,105,102, 32, 40,114, +103, 98, 46,120, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 99, 91, 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 10, 9, 9,101, +108,115,101, 32,105,102, 32, 40,114,103, 98, 46,121, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, + 91, 48, 93, 32, 45, 32, 32, 99, 91, 50, 93, 59, 10, 9, 9,101,108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, + 49, 93, 32, 45, 32, 99, 91, 48, 93, 59, 10, 10, 9, 9,104, 32, 47, 61, 32, 54, 46, 48, 59, 10, 10, 9, 9,105,102, 32, 40,104, + 60, 48, 46, 48, 41, 10, 9, 9, 9,104, 32, 43, 61, 32, 49, 46, 48, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, + 32,118,101, 99, 52, 40,104, 44, 32,115, 44, 32,118, 44, 32,114,103, 98, 46,119, 41, 59, 10,125, 10, 10,118,111,105,100, 32,104, +115,118, 95,116,111, 95,114,103, 98, 40,118,101, 99, 52, 32,104,115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, + 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,105, 44, 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32, +115, 44, 32,118, 59, 10, 9,118,101, 99, 51, 32,114,103, 98, 59, 10, 10, 9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, 10, 9, +115, 32, 61, 32,104,115,118, 91, 49, 93, 59, 10, 9,118, 32, 61, 32,104,115,118, 91, 50, 93, 59, 10, 10, 9,105,102, 40,115, 61, + 61, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, 10, 9, +125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,105,102, 40,104, 61, 61, 49, 46, 48, 41, 10, 9, 9, 9,104, 32, 61, 32, 48, 46, + 48, 59, 10, 9, 9, 10, 9, 9,104, 32, 42, 61, 32, 54, 46, 48, 59, 10, 9, 9,105, 32, 61, 32,102,108,111,111,114, 40,104, 41, + 59, 10, 9, 9,102, 32, 61, 32,104, 32, 45, 32,105, 59, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,102, 44, 32,102, + 44, 32,102, 41, 59, 10, 9, 9,112, 32, 61, 32,118, 42, 40, 49, 46, 48, 45,115, 41, 59, 10, 9, 9,113, 32, 61, 32,118, 42, 40, + 49, 46, 48, 45, 40,115, 42,102, 41, 41, 59, 10, 9, 9,116, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, + 45,102, 41, 41, 41, 59, 10, 9, 9, 10, 9, 9,105,102, 32, 40,105, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32, +118,101, 99, 51, 40,118, 44, 32,116, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, + 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,113, 44, 32,118, 44, 32,112, 41, 59, 10, 9, 9,101,108,115,101, 32, +105,102, 32, 40,105, 32, 61, 61, 32, 50, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, + 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, + 99, 51, 40,112, 44, 32,113, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, + 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,116, 44, 32,112, 44, 32,118, 41, 59, 10, 9, 9,101,108,115,101, 32,114,103, + 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,112, 44, 32,113, 41, 59, 10, 9,125, 10, 10, 9,111,117,116, 99,111,108, 32, 61, + 32,118,101, 99, 52, 40,114,103, 98, 44, 32,104,115,118, 46,119, 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,115,114,103, 98, + 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,102,108,111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102, 40, 99, 32, 60, + 32, 48, 46, 48, 52, 48, 52, 53, 41, 10, 9, 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, + 48, 58, 32, 99, 32, 42, 32, 40, 49, 46, 48, 47, 49, 50, 46, 57, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101,116,117, +114,110, 32,112,111,119, 40, 40, 99, 32, 43, 32, 48, 46, 48, 53, 53, 41, 42, 40, 49, 46, 48, 47, 49, 46, 48, 53, 53, 41, 44, 32, + 50, 46, 52, 41, 59, 10,125, 10, 10,102,108,111, 97,116, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, + 40,102,108,111, 97,116, 32, 99, 41, 10,123, 10, 9,105,102, 40, 99, 32, 60, 32, 48, 46, 48, 48, 51, 49, 51, 48, 56, 41, 10, 9, + 9,114,101,116,117,114,110, 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, 48, 58, 32, 99, 32, 42, 32, 49, 50, 46, 57, + 50, 59, 10, 9,101,108,115,101, 10, 9, 9,114,101,116,117,114,110, 32, 49, 46, 48, 53, 53, 32, 42, 32,112,111,119, 40, 99, 44, + 32, 49, 46, 48, 47, 50, 46, 52, 41, 32, 45, 32, 48, 46, 48, 53, 53, 59, 10,125, 10, 10,118,111,105,100, 32,115,114,103, 98, 95, +116,111, 95,108,105,110,101, 97,114,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108, 95,102,114,111,109, 44, 32,111,117,116, 32, +118,101, 99, 52, 32, 99,111,108, 95,116,111, 41, 10,123, 10, 9, 99,111,108, 95,116,111, 46,114, 32, 61, 32,115,114,103, 98, 95, +116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,114, 41, 59, 10, 9, 99,111,108, 95,116, +111, 46,103, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, + 46,103, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 98, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101, 97,114,114, +103, 98, 40, 99,111,108, 95,102,114,111,109, 46, 98, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95, +102,114,111,109, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, + 98, 40,118,101, 99, 52, 32, 99,111,108, 95,102,114,111,109, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 95,116,111, + 41, 10,123, 10, 9, 99,111,108, 95,116,111, 46,114, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, + 98, 40, 99,111,108, 95,102,114,111,109, 46,114, 41, 59, 10, 9, 99,111,108, 95,116,111, 46,103, 32, 61, 32,108,105,110,101, 97, +114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,103, 41, 59, 10, 9, 99,111,108, 95,116, +111, 46, 98, 32, 61, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98, 40, 99,111,108, 95,102,114,111,109, + 46, 98, 41, 59, 10, 9, 99,111,108, 95,116,111, 46, 97, 32, 61, 32, 99,111,108, 95,102,114,111,109, 46, 97, 59, 10,125, 10, 10, + 35,100,101,102,105,110,101, 32, 77, 95, 80, 73, 32, 51, 46, 49, 52, 49, 53, 57, 50, 54, 53, 51, 53, 56, 57, 55, 57, 51, 50, 51, + 56, 52, 54, 10, 35,100,101,102,105,110,101, 32, 77, 95, 49, 95, 80, 73, 32, 48, 46, 51, 49, 56, 51, 48, 57, 56, 56, 54, 49, 56, + 51, 55, 57, 48, 54, 57, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, + 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,118, 99,111,108, 95, 97,116, +116,114,105, 98,117,116,101, 40,118,101, 99, 52, 32, 97,116,116,118, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,118, + 99,111,108, 41, 10,123, 10, 9,118, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 97,116,116,118, 99,111,108, 46,120, 47, 50, 53, + 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,121, 47, 50, 53, 53, 46, 48, 44, 32, 97,116,116,118, 99,111,108, 46,122, 47, + 50, 53, 53, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,117,118, 95, 97,116,116,114,105, 98,117,116, +101, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 41, 10,123, 10, 9,117,118, + 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, + 48, 41, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,103,101,111,109, 40,118,101, 99, 51, 32, 99,111, 44, 32, +118,101, 99, 51, 32,110,111,114, 44, 32,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, + 97,116,116,111,114, 99,111, 44, 32,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,118,101, 99, 52, 32, 97,116,116,118, 99,111, +108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,103,108,111, 98, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,111, 99, + 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,114, 99,111, + 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32, +111,117,116, 32,118,101, 99, 52, 32,118, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 99,111,108, 95, 97,108, +112,104, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102,114,111,110,116, 98, 97, 99,107, 41, 10,123, 10, 9,108,111, 99, + 97,108, 32, 61, 32, 99,111, 59, 10, 9,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108,111, 99, 97,108, + 41, 59, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40,108,111, + 99, 97,108, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, + 10, 9,117,118, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116,116,117,118, 44, 32,117,118, 41, 59, 10, 9,110,111,114,109, + 97,108, 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,110,111,114, 41, 59, 9, 47, 42, 32, 98,108,101,110,100,101,114, + 32,114,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,118, 99, +111,108, 95, 97,116,116,114,105, 98,117,116,101, 40, 97,116,116,118, 99,111,108, 44, 32,118, 99,111,108, 41, 59, 10, 9,118, 99, +111,108, 95, 97,108,112,104, 97, 32, 61, 32, 97,116,116,118, 99,111,108, 46, 97, 59, 10, 9,102,114,111,110,116, 98, 97, 99,107, + 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, + 44, 32,109, 97,116, 52, 32,109, 97,116, 44, 32,118,101, 99, 51, 32,109,105,110,118,101, 99, 44, 32,118,101, 99, 51, 32,109, 97, +120,118,101, 99, 44, 32,102,108,111, 97,116, 32,100,111,109,105,110, 44, 32,102,108,111, 97,116, 32,100,111,109, 97,120, 44, 32, +111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 40,109, 97, +116, 32, 42, 32,118,101, 99, 52, 40,118,101, 99, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,105,102, 40,100,111,109, +105,110, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32,109, 97,120, 40,111,117,116,118,101, 99, + 44, 32,109,105,110,118,101, 99, 41, 59, 10, 9,105,102, 40,100,111,109, 97,120, 32, 61, 61, 32, 49, 46, 48, 41, 10, 9, 9,111, +117,116,118,101, 99, 32, 61, 32,109,105,110, 40,111,117,116,118,101, 99, 44, 32,109, 97,120,118,101, 99, 41, 59, 10,125, 10, 10, +118,111,105,100, 32, 99, 97,109,101,114, 97, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117, +116,118,105,101,119, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,101,112,116,104, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,111,117,116,100,105,115,116, 41, 10,123, 10, 9,111,117,116,100,101,112,116,104, 32, 61, 32, 97, 98,115, 40, + 99,111, 46,122, 41, 59, 10, 9,111,117,116,100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40, 99,111, 41, 59, 10, 9,111, +117,116,118,105,101,119, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 59, 10,125, 10, 10,118,111,105,100, 32, +109, 97,116,104, 95, 97,100,100, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, + 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, + 97,108, 49, 32, 43, 32,118, 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,115,117, 98,116,114, 97, 99, +116, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108, +111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 45, 32,118, + 97,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,117,108,116,105,112,108,121, 40,102,108,111, 97,116, + 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, +118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 42, 32,118, 97,108, 50, 59, 10,125, 10, + 10,118,111,105,100, 32,109, 97,116,104, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108, +111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105, +102, 32, 40,118, 97,108, 50, 32, 61, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10, + 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 49, 32, 47, 32,118, 97,108, 50, 59, 10,125, 10, + 10,118,111,105,100, 32,109, 97,116,104, 95,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,115,105,110, 40,118, 97,108, + 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 99,111,115,105,110,101, 40,102,108,111, 97,116, 32,118, 97,108, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, + 99,111,115, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,116, 97,110,103,101,110,116, 40,102, +108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111, +117,116,118, 97,108, 32, 61, 32,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, +115,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, + 10,123, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, + 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97,115,105,110, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, + 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, 99,111,115, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, - 9,111,117,116,118, 97,108, 32, 61, 32,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, - 95, 97,115,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97, -108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, - 49, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97,115,105,110, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, - 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97, 99, -111,115, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10, -123, 10, 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, - 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97, 99,111,115, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9, -111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,116, 97,110, 40, -102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9, -111,117,116,118, 97,108, 32, 61, 32, 97,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, - 95,112,111,119, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, - 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 49, 32, 62, 61, 32, 48, 46, - 48, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,112,111,119, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10, 9, -101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116, -104, 95,108,111,103, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117, -116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32, 48, 46, 48, - 32, 32, 38, 38, 32,118, 97,108, 50, 32, 62, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 61, 32,108,111,103, 50, 40, -118, 97,108, 49, 41, 32, 47, 32,108,111,103, 50, 40,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, - 97,108, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109, 97,120, 40,102,108,111, 97,116, 32, -118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, - 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, - 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108, -111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111, -117,116,118, 97,108, 32, 61, 32,109,105,110, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, - 32,109, 97,116,104, 95,114,111,117,110,100, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, - 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 61, 32,102,108,111,111,114, 40,118, 97,108, 32, 43, 32, - 48, 46, 53, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,101,115,115, 95,116,104, 97,110, 40,102,108,111, - 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111, -117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 60, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, - 97,108, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10, -125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,103,114,101, 97,116,101,114, 95,116,104, 97,110, 40,102,108,111, 97,116, 32, -118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, - 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, - 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10, -118,111,105,100, 32,115,113,117,101,101,122,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,102,108,111, 97,116, 32,119,105, -100,116,104, 44, 32,102,108,111, 97,116, 32, 99,101,110,116,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, -118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 47, 40, 49, 46, 48, 32, 43, 32,112,111,119, 40, - 50, 46, 55, 49, 56, 50, 56, 49, 56, 51, 44, 32, 45, 40, 40,118, 97,108, 45, 99,101,110,116,101,114, 41, 42,119,105,100,116,104, - 41, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,100,100, 40,118,101, 99, 51, 32,118, - 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, - 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32, -118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, - 97, 98,115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, - 47, 51, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,115,117, 98, 40,118,101, 99, 51, 32, -118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117, -116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 45, - 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, - 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, - 41, 47, 51, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,118,101,114, 97,103,101, 40, -118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, - 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, - 32,118, 49, 32, 43, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, - 99, 41, 59, 10, 9,111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,118,101, 99, 41, 59, - 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,100,111,116, 40,118,101, 99, 51, 32,118, 49, 44, 32,118, -101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, - 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 44, 32, 48, - 44, 32, 48, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,100,111,116, 40,118, 49, 44, 32,118, 50, 41, 59, 10,125, 10, 10, -118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 99,114,111,115,115, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, + 9,105,102, 32, 40,118, 97,108, 32, 60, 61, 32, 49, 46, 48, 32, 38, 38, 32,118, 97,108, 32, 62, 61, 32, 45, 49, 46, 48, 41, 10, + 9, 9,111,117,116,118, 97,108, 32, 61, 32, 97, 99,111,115, 40,118, 97,108, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117, +116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, 97,116, 97,110, 40,102,108, +111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117, +116,118, 97,108, 32, 61, 32, 97,116, 97,110, 40,118, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,112, +111,119, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 32, 40,118, 97,108, 49, 32, 62, 61, 32, 48, 46, 48, 41, + 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32,112,111,119, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10, 9,101,108, +115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95, +108,111,103, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32, +102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32, 48, 46, 48, 32, 32, + 38, 38, 32,118, 97,108, 50, 32, 62, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116,118, 97,108, 61, 32,108,111,103, 50, 40,118, 97, +108, 49, 41, 32, 47, 32,108,111,103, 50, 40,118, 97,108, 50, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, + 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109, 97,120, 40,102,108,111, 97,116, 32,118, 97, +108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, + 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, + 10, 10,118,111,105,100, 32,109, 97,116,104, 95,109,105,110, 40,102,108,111, 97,116, 32,118, 97,108, 49, 44, 32,102,108,111, 97, +116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116, +118, 97,108, 32, 61, 32,109,105,110, 40,118, 97,108, 49, 44, 32,118, 97,108, 50, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, + 97,116,104, 95,114,111,117,110,100, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111, +117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 61, 32,102,108,111,111,114, 40,118, 97,108, 32, 43, 32, 48, 46, + 53, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109, 97,116,104, 95,108,101,115,115, 95,116,104, 97,110, 40,102,108,111, 97,116, + 32,118, 97,108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, +118, 97,108, 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 60, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, + 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, + 10,118,111,105,100, 32,109, 97,116,104, 95,103,114,101, 97,116,101,114, 95,116,104, 97,110, 40,102,108,111, 97,116, 32,118, 97, +108, 49, 44, 32,102,108,111, 97,116, 32,118, 97,108, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, + 41, 10,123, 10, 9,105,102, 40,118, 97,108, 49, 32, 62, 32,118, 97,108, 50, 41, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, + 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116,118, 97,108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111, +105,100, 32,115,113,117,101,101,122,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,102,108,111, 97,116, 32,119,105,100,116, +104, 44, 32,102,108,111, 97,116, 32, 99,101,110,116,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97, +108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 47, 40, 49, 46, 48, 32, 43, 32,112,111,119, 40, 50, 46, + 55, 49, 56, 50, 56, 49, 56, 51, 44, 32, 45, 40, 40,118, 97,108, 45, 99,101,110,116,101,114, 41, 42,119,105,100,116,104, 41, 41, + 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,100,100, 40,118,101, 99, 51, 32,118, 49, 44, + 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 43, 32,118, 50, + 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, 98, +115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, 51, + 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,115,117, 98, 40,118,101, 99, 51, 32,118, 49, + 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32, +102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, 49, 32, 45, 32,118, + 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, 97, 98,115, 40,111,117,116,118,101, 99, 91, 48, 93, 41, 32, 43, 32, 97, + 98,115, 40,111,117,116,118,101, 99, 91, 49, 93, 41, 32, 43, 32, 97, 98,115, 40,111,117,116,118,101, 99, 91, 50, 93, 41, 41, 47, + 51, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 97,118,101,114, 97,103,101, 40,118,101, + 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, + 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118, + 49, 32, 43, 32,118, 50, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, + 59, 10, 9,111,117,116,118,101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,118,101, 99, 41, 59, 10,125, + 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,100,111,116, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32,118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, - 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 99,114,111,115,115, 40,118, 49, 44, 32,118, - 50, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, - 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,110,111,114,109, 97,108,105,122,101, 40,118,101, 99, 51, 32,118, 44, - 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, - 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,118, 41, 59, 10, 9,111,117,116,118, -101, 99, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, - 97,116,104, 95,110,101,103, 97,116,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, - 41, 10,123, 10, 9,111,117,116,118, 32, 61, 32, 45,118, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,114,109, 97,108, 40,118, -101, 99, 51, 32,100,105,114, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110, -111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,111,116, 41, 10,123, 10, 9,111,117,116,110,111,114, 32, - 61, 32,110,111,114, 59, 10, 9,111,117,116,100,111,116, 32, 61, 32, 45,100,111,116, 40,100,105,114, 44, 32,110,111,114, 41, 59, - 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,118,101, 99, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118, -101, 99, 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, - 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 46,120, 32, 61, 32,116,101,120,116, -117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 40,118,101, 99, 46,120, 32, 43, 32, 49, 46, - 48, 41, 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,120, 59, 10, 9,111,117,116,118,101, 99, 46,121, 32, 61, 32,116,101,120, -116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 40,118,101, 99, 46,121, 32, 43, 32, 49, - 46, 48, 41, 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,121, 59, 10, 9,111,117,116,118,101, 99, 46,122, 32, 61, 32,116,101, -120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 40,118,101, 99, 46,122, 32, 43, 32, - 49, 46, 48, 41, 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,122, 59, 10, 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, - 49, 46, 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32, 40,111,117,116,118,101, 99, 42,102, 97, 99, 41, 32, 43, 32, 40, -118,101, 99, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95, -114,103, 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,115, 97,109,112,108,101,114, - 50, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, - 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32, -118,101, 99, 50, 40,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111, -108, 46,114, 44, 32, 48, 46, 48, 41, 41, 46, 97, 44, 32, 48, 46, 48, 41, 41, 46,114, 59, 10, 9,111,117,116, 99,111,108, 46,103, - 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,116,101,120,116, -117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111,108, 46,103, 44, 32, 48, 46, 48, 41, - 41, 46, 97, 44, 32, 48, 46, 48, 41, 41, 46,103, 59, 10, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,101,120,116,117,114, -101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114, -118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111,108, 46, 98, 44, 32, 48, 46, 48, 41, 41, 46, 97, 44, 32, 48, 46, 48, 41, - 41, 46, 98, 59, 10, 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 32, - 61, 32, 40,111,117,116, 99,111,108, 42,102, 97, 99, 41, 32, 43, 32, 40, 99,111,108, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, - 59, 10, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,115,101, -116, 95,118, 97,108,117,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, -118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101, -116, 95,114,103, 98, 40,118,101, 99, 51, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, - 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, - 98, 97, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, - 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101, - 95,122,101,114,111, 40,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97, -108, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 95,111,110,101, 40,111, -117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, - 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 51, 32, -111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10,125, - 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 97, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 52, 32,111,117, -116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 52, 40, 48, 46, 48, 41, 59, 10,125, 10, 10, -118,111,105,100, 32,109,105,120, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99, -111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, - 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, - 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, - 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, - 97,100,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99, -111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99, -108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109, -105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, - 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,109,117,108,116, + 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 44, 32, 48, 44, 32, + 48, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,100,111,116, 40,118, 49, 44, 32,118, 50, 41, 59, 10,125, 10, 10,118,111, +105,100, 32,118,101, 99, 95,109, 97,116,104, 95, 99,114,111,115,115, 40,118,101, 99, 51, 32,118, 49, 44, 32,118,101, 99, 51, 32, +118, 50, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111, +117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32, 99,114,111,115,115, 40,118, 49, 44, 32,118, 50, 41, + 59, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,111,117,116,118,101, 99, 41, 59, 10,125, 10, 10,118, +111,105,100, 32,118,101, 99, 95,109, 97,116,104, 95,110,111,114,109, 97,108,105,122,101, 40,118,101, 99, 51, 32,118, 44, 32,111, +117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, + 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,108,101,110,103,116,104, 40,118, 41, 59, 10, 9,111,117,116,118,101, 99, + 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118,101, 99, 95,109, 97,116, +104, 95,110,101,103, 97,116,101, 40,118,101, 99, 51, 32,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, 41, 10, +123, 10, 9,111,117,116,118, 32, 61, 32, 45,118, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,114,109, 97,108, 40,118,101, 99, + 51, 32,100,105,114, 44, 32,118,101, 99, 51, 32,110,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,100,111,116, 41, 10,123, 10, 9,111,117,116,110,111,114, 32, 61, 32, +110,111,114, 59, 10, 9,111,117,116,100,111,116, 32, 61, 32, 45,100,111,116, 40,100,105,114, 44, 32,110,111,114, 41, 59, 10,125, + 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,118,101, 99, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, + 51, 32,118,101, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118, +101, 99, 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 46,120, 32, 61, 32,116,101,120,116,117,114, +101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 40,118,101, 99, 46,120, 32, 43, 32, 49, 46, 48, 41, + 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,120, 59, 10, 9,111,117,116,118,101, 99, 46,121, 32, 61, 32,116,101,120,116,117, +114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 40,118,101, 99, 46,121, 32, 43, 32, 49, 46, 48, + 41, 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,121, 59, 10, 9,111,117,116,118,101, 99, 46,122, 32, 61, 32,116,101,120,116, +117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 40,118,101, 99, 46,122, 32, 43, 32, 49, 46, + 48, 41, 42, 48, 46, 53, 44, 32, 48, 46, 48, 41, 41, 46,122, 59, 10, 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, + 48, 41, 10, 9, 9,111,117,116,118,101, 99, 32, 61, 32, 40,111,117,116,118,101, 99, 42,102, 97, 99, 41, 32, 43, 32, 40,118,101, + 99, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, 10,125, 10, 10,118,111,105,100, 32, 99,117,114,118,101,115, 95,114,103, + 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,115, 97,109,112,108,101,114, 50, 68, + 32, 99,117,114,118,101,109, 97,112, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111, +117,116, 99,111,108, 46,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, + 99, 50, 40,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111,108, 46, +114, 44, 32, 48, 46, 48, 41, 41, 46, 97, 44, 32, 48, 46, 48, 41, 41, 46,114, 59, 10, 9,111,117,116, 99,111,108, 46,103, 32, 61, + 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,116,101,120,116,117,114, +101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111,108, 46,103, 44, 32, 48, 46, 48, 41, 41, 46, + 97, 44, 32, 48, 46, 48, 41, 41, 46,103, 59, 10, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,101,120,116,117,114,101, 50, + 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101, +109, 97,112, 44, 32,118,101, 99, 50, 40, 99,111,108, 46, 98, 44, 32, 48, 46, 48, 41, 41, 46, 97, 44, 32, 48, 46, 48, 41, 41, 46, + 98, 59, 10, 10, 9,105,102, 32, 40,102, 97, 99, 32, 33, 61, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32, + 40,111,117,116, 99,111,108, 42,102, 97, 99, 41, 32, 43, 32, 40, 99,111,108, 42, 40, 49, 46, 48, 45,102, 97, 99, 41, 41, 59, 10, + 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95, +118, 97,108,117,101, 40,102,108,111, 97,116, 32,118, 97,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97, +108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118, 97,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95, +114,103, 98, 40,118,101, 99, 51, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, + 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 97, + 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111, +117,116, 99,111,108, 32, 61, 32, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 95,122, +101,114,111, 40,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, + 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,116, 95,118, 97,108,117,101, 95,111,110,101, 40,111,117,116, + 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 49, 46, 48, 59, 10, +125, 10, 10,118,111,105,100, 32,115,101,116, 95,114,103, 98, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 51, 32,111,117, +116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10,125, 10, 10, +118,111,105,100, 32,115,101,116, 95,114,103, 98, 97, 95,122,101,114,111, 40,111,117,116, 32,118,101, 99, 52, 32,111,117,116,118, + 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,118,101, 99, 52, 40, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111, +105,100, 32,109,105,120, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, + 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, + 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111, +117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111, +117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 97,100, +100, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, + 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97, +109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, + 40, 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111, +108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,109,117,108,116, 40,102, +108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32, +111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40, +102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111, +108, 49, 44, 32, 99,111,108, 49, 32, 42, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, + 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115, 99,114,101,101,110, 40,102,108, +111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111, +117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, + 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, + 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 40, +118,101, 99, 52, 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111, +108, 50, 41, 41, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 49, 41, 59, 10, 9,111,117,116, 99,111,108, + 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,111,118,101,114,108, 97,121, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109, -112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, - 99,111,108, 49, 44, 32, 99,111,108, 49, 32, 42, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, - 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115, 99,114,101,101,110, 40, -102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, - 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, - 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, - 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, - 32, 40,118,101, 99, 52, 40,102, 97, 99,109, 41, 32, 43, 32,102, 97, 99, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, - 99,111,108, 50, 41, 41, 42, 40,118,101, 99, 52, 40, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 49, 41, 59, 10, 9,111,117,116, 99, -111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,111,118,101,114,108, - 97,121, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111, -108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, - 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, - 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9, -105,102, 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 42, 61, - 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,101,108,115,101, 10, 9, 9, -111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, - 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,114, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, - 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, - 46,103, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,101,108, -115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, - 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,103, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, - 99,111,108, 46,103, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111, -117,116, 99,111,108, 46, 98, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46, 98, - 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, - 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, - 45, 32,111,117,116, 99,111,108, 46, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115,117, 98, 40,102,108,111, - 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117, -116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, - 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, - 44, 32, 99,111,108, 49, 32, 45, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, - 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,105,118, 40,102,108,111, 97,116, 32,102, - 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, - 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, - 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, - 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,114, 32, - 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,114, - 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,114, 47, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40, 99,111,108, 50, - 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,103, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111, -108, 46,103, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,103, 47, 99,111,108, 50, 46,103, 59, 10, 9,105,102, 40, 99, -111,108, 50, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,117, -116, 99,111,108, 46, 98, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46, 98, 47, 99,111,108, 50, 46, 98, 59, 10,125, 10, - 10,118,111,105,100, 32,109,105,120, 95,100,105,102,102, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99, +112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, + 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, + 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 42, 61, 32,102, + 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117, +116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 40, + 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,114, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 59, + 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, + 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,101,108,115,101, + 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42, +102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46,103, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111, +108, 46,103, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, + 99,111,108, 46, 98, 32, 42, 61, 32,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, + 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, + 32, 50, 46, 48, 42,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32, 99,111,108, 50, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32, +111,117,116, 99,111,108, 46, 98, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115,117, 98, 40,102,108,111, 97,116, + 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32, +118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, + 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, + 99,111,108, 49, 32, 45, 32, 99,111,108, 50, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99, +111,108, 49, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,105,118, 40,102,108,111, 97,116, 32,102, 97, 99, + 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, + 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, + 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, + 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,114, 32, 33, 61, + 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,114, 32, 43, + 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,114, 47, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40, 99,111,108, 50, 46,103, + 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46,103, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46, +103, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46,103, 47, 99,111,108, 50, 46,103, 59, 10, 9,105,102, 40, 99,111,108, + 50, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,111,117,116, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99, +111,108, 46, 98, 32, 43, 32,102, 97, 99, 42,111,117,116, 99,111,108, 46, 98, 47, 99,111,108, 50, 46, 98, 59, 10,125, 10, 10,118, +111,105,100, 32,109,105,120, 95,100,105,102,102, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, + 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, + 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111, +117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 97, 98,115, 40, 99,111,108, 49, 32, 45, 32, 99,111,108, + 50, 41, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, 10, + 10,118,111,105,100, 32,109,105,120, 95,100, 97,114,107, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99, 111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, - 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 49, 44, 32, 97, 98,115, 40, 99,111,108, 49, 32, 45, 32, 99, -111,108, 50, 41, 44, 32,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, -125, 10, 10,118,111,105,100, 32,109,105,120, 95,100, 97,114,107, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, + 9,111,117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109,105,110, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, 99,111,108, 50, + 46,114,103, 98, 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10,125, + 10, 10,118,111,105,100, 32,109,105,120, 95,108,105,103,104,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111, 108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, - 59, 10, 9,111,117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109,105,110, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, 99,111, + 59, 10, 9,111,117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109, 97,120, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, 99,111, 108, 50, 46,114,103, 98, 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, - 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,108,105,103,104,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, + 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,111,100,103,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, - 48, 41, 59, 10, 9,111,117,116, 99,111,108, 46,114,103, 98, 32, 61, 32,109, 97,120, 40, 99,111,108, 49, 46,114,103, 98, 44, 32, - 99,111,108, 50, 46,114,103, 98, 42,102, 97, 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, - 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,100,111,100,103,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32, -118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111, -117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, - 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111, -108, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, - 45, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, - 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, - 32, 61, 32,111,117,116, 99,111,108, 46,114, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111, -108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, -116,109,112, 59, 10, 9,125, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, - 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9, - 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, - 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32,111,117,116, 99,111,108, 46,103, 47,116,109,112, - 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108, -115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10, 9,125, 10, 9,105,102, 40,111,117,116, - 99,111,108, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, - 48, 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, - 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116, -109,112, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, - 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32, - 61, 32,116,109,112, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 98,117,114,110, 40,102,108,111, 97,116, - 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32, -118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, - 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,116,109,112, 44, 32,102, 97, 99,109, 32, 61, 32, 49, - 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,116,109,112, - 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40,116,109,112, 32, 60, 61, - 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, - 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 47, -116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10, 9, -101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, - 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,109,112, 59, 10, 10, 9,116, -109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,105,102, 40,116,109,112, 32, - 60, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32, -105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,103, - 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, - 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, - 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10, 10, - 9,116,109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9,105,102, 40,116,109, -112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115, -101, 32,105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, - 46, 98, 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, - 48, 59, 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, - 98, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,109,112, 59, - 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,104,117,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, - 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111, -108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, - 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, - 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109, -112, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,102, - 40,104,115,118, 50, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111, -117,116, 99,111,108, 44, 32,104,115,118, 41, 59, 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10, 9, - 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32, 10, 10, 9, 9,111,117,116, 99,111, -108, 32, 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, 41, 59, 10, 9, 9,111,117,116, - 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115, - 97,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111, -108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, - 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, - 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9, -118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99, -111,108, 44, 32,104,115,118, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, - 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9, 9,104,115,118, 46, -121, 32, 61, 32,102, 97, 99,109, 42,104,115,118, 46,121, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,121, 59, 10, 9, 9,104, -115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10, 9,125, 10,125, 10, 10,118,111, -105,100, 32,109,105,120, 95,118, 97,108, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, - 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9, -102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, - 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, - 32,104,115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 49, 44, 32,104,115,118, 41, 59, 10, 9, -114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,104,115,118, 46,122, 32, - 61, 32,102, 97, 99,109, 42,104,115,118, 46,122, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,122, 59, 10, 9,104,115,118, 95, -116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, - 95, 99,111,108,111,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, - 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, - 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, - 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, - 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, 10, 9,114,103, 98, 95,116,111, - 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 50, 46,121, 32, 33, 61, - 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, 44, 32,104,115,118, - 41, 59, 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10, 9, 9,104,115,118, 46,121, 32, 61, 32,104, -115,118, 50, 46,121, 59, 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32, 10, - 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, - 41, 59, 10, 9, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,111, -105,100, 32,109,105,120, 95,115,111,102,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, - 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, - 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108, -111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99, 52, 32,111,110,101, - 61, 32,118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10, 9,118,101, 99, 52, 32,115, 99,114, 61, 32,111,110,101, 32, 45, 32, 40,111, -110,101, 32, 45, 32, 99,111,108, 50, 41, 42, 40,111,110,101, 32, 45, 32, 99,111,108, 49, 41, 59, 10, 9,111,117,116, 99,111,108, - 32, 61, 32,102, 97, 99,109, 42, 99,111,108, 49, 32, 43, 32,102, 97, 99, 42, 40, 40,111,110,101, 32, 45, 32, 99,111,108, 49, 41, - 42, 99,111,108, 50, 42, 99,111,108, 49, 32, 43, 32, 99,111,108, 49, 42,115, 99,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32, -109,105,120, 95,108,105,110,101, 97,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, - 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9, -102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 10, 9,111,117, -116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,114, 32, 62, 32, 48, 46, 53, 41, 10, - 9, 9,111,117,116, 99,111,108, 46,114, 61, 32, 99,111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99, -111,108, 50, 46,114, 32, 45, 32, 48, 46, 53, 41, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 61, - 32, 99,111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,114, 41, 32, 45, 32, 49, 46, - 48, 41, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,103, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46, -103, 61, 32, 99,111,108, 49, 46,103, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 32, 45, 32, 48, - 46, 53, 41, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 61, 32, 99,111,108, 49, 46,103, 32, 43, - 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10, 10, 9,105,102, 40, - 99,111,108, 50, 46, 98, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46, 98, - 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46, 98, 32, 45, 32, 48, 46, 53, 41, 41, 59, 10, 9,101,108, -115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46, 98, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, - 42, 40, 99,111,108, 50, 46, 98, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118, 97,108,116,111,114, -103, 98, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, 99,111,108,111,114,109, 97,112, - 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, - 97,108,112,104, 97, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,111,108, -111,114,109, 97,112, 44, 32,118,101, 99, 50, 40,102, 97, 99, 44, 32, 48, 46, 48, 41, 41, 59, 10, 9,111,117,116, 97,108,112,104, - 97, 32, 61, 32,111,117,116, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98,116,111, 98,119, 40,118,101, - 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 32, 32, 10,123, 10, - 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,108,111,114, 46,114, 42, 48, 46, 51, 53, 32, 43, 32, 99,111,108,111,114, 46,103, - 42, 48, 46, 52, 53, 32, 43, 32, 99,111,108,111,114, 46, 98, 42, 48, 46, 50, 59, 32, 47, 42, 32,107,101,101,112, 32,116,104,101, -115,101, 32,102, 97, 99,116,111,114,115, 32,105,110, 32,115,121,110, 99, 32,119,105,116,104, 32,116,101,120,116,117,114,101, 46, -104, 58, 82, 71, 66, 84, 79, 66, 87, 32, 42, 47, 10,125, 10, 10,118,111,105,100, 32,105,110,118,101,114,116, 40,102,108,111, 97, -116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, - 41, 10,123, 10, 9,111,117,116, 99,111,108, 46,120,121,122, 32, 61, 32,109,105,120, 40, 99,111,108, 46,120,121,122, 44, 32,118, -101, 99, 51, 40, 49, 46, 48, 44, 32, 49, 46, 48, 44, 32, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 46,120,121,122, 44, 32,102, 97, - 99, 41, 59, 10, 9,111,117,116, 99,111,108, 46,119, 32, 61, 32, 99,111,108, 46,119, 59, 10,125, 10, 10,118,111,105,100, 32,104, -117,101, 95,115, 97,116, 40,102,108,111, 97,116, 32,104,117,101, 44, 32,102,108,111, 97,116, 32,115, 97,116, 44, 32,102,108,111, - 97,116, 32,118, 97,108,117,101, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111, -117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32,104,115,118, 59, 10, 10, 9,114, -103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 44, 32,104,115,118, 41, 59, 10, 10, 9,104,115,118, 91, 48, 93, 32, 43, 61, - 32, 40,104,117,101, 32, 45, 32, 48, 46, 53, 41, 59, 10, 9,105,102, 40,104,115,118, 91, 48, 93, 62, 49, 46, 48, 41, 32,104,115, -118, 91, 48, 93, 45, 61, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 48, 93, 60, 48, 46, 48, 41, 32,104, -115,118, 91, 48, 93, 43, 61, 32, 49, 46, 48, 59, 10, 9,104,115,118, 91, 49, 93, 32, 42, 61, 32,115, 97,116, 59, 10, 9,105,102, - 40,104,115,118, 91, 49, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105, -102, 40,104,115,118, 91, 49, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 48, 46, 48, 59, 10, 9,104,115,118, 91, - 50, 93, 32, 42, 61, 32,118, 97,108,117,101, 59, 10, 9,105,102, 40,104,115,118, 91, 50, 93, 62, 49, 46, 48, 41, 32,104,115,118, - 91, 50, 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 50, 93, 60, 48, 46, 48, 41, 32,104,115, -118, 91, 50, 93, 61, 32, 48, 46, 48, 59, 10, 10, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, - 99,111,108, 41, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 44, 32,111,117,116, 99,111,108, - 44, 32,102, 97, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,112, 97,114, 97,116,101, 95,114,103, 98, 40,118,101, 99, - 52, 32, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,103, 44, - 32,111,117,116, 32,102,108,111, 97,116, 32, 98, 41, 10,123, 10, 9,114, 32, 61, 32, 99,111,108, 46,114, 59, 10, 9,103, 32, 61, - 32, 99,111,108, 46,103, 59, 10, 9, 98, 32, 61, 32, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32, 99,111,109, 98, -105,110,101, 95,114,103, 98, 40,102,108,111, 97,116, 32,114, 44, 32,102,108,111, 97,116, 32,103, 44, 32,102,108,111, 97,116, 32, - 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 41, 10,123, 10, 9, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114, - 44, 32,103, 44, 32, 98, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,111,117,116,112,117,116, 95,110,111,100, -101, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 44, 32,111,117,116, 32,118,101, 99, - 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 46,114, -103, 98, 44, 32, 97,108,112,104, 97, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 84, 69, 88, 84, - 85, 82, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,116,101,120,116, -117,114,101, 95,102,108,105,112, 95, 98,108,101,110,100, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, - 51, 32,111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 46,121,120,122, 59, 10,125, - 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95, 98,108,101,110,100, 95,108,105,110, 40,118,101, 99, 51, 32,118,101, - 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, - 32, 40, 49, 46, 48, 43,118,101, 99, 46,120, 41, 47, 50, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114, -101, 95, 98,108,101,110,100, 95,113,117, 97,100, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, - 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40, 40, 49, 46, 48, 43,118,101, - 99, 46,120, 41, 47, 50, 46, 48, 44, 32, 48, 46, 48, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 42, 61, 32,111,117,116,118, 97, -108, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,119,111,111,100, 95,115,105,110, 40,118,101, 99, 51, - 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, - 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 9,102,108,111, 97,116, - 32, 97, 32, 61, 32,115,113,114,116, 40,118,101, 99, 46,120, 42,118,101, 99, 46,120, 32, 43, 32,118,101, 99, 46,121, 42,118,101, - 99, 46,121, 32, 43, 32,118,101, 99, 46,122, 42,118,101, 99, 46,122, 41, 42, 50, 48, 46, 48, 59, 10, 9,102,108,111, 97,116, 32, -119,105, 32, 61, 32, 48, 46, 53, 32, 43, 32, 48, 46, 53, 42,115,105,110, 40, 97, 41, 59, 10, 10, 9,118, 97,108,117,101, 32, 61, - 32,119,105, 59, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40,119,105, 44, 32,119,105, 44, 32,119,105, 44, 32, 49, - 46, 48, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, - 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32,118, -101, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108, -117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114, -109, 97,108, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 40, -118,101, 99, 46,120,121, 32, 43, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 41, 42, 48, 46, 53, 41, 59, 10, 9, -118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 59, 10, 10, 9,110,111,114,109, 97,108, 46,120, 32, 61, 32, 50, 46, 48, 42, 40, 99, -111,108,111,114, 46,114, 32, 45, 32, 48, 46, 53, 41, 59, 10, 9,110,111,114,109, 97,108, 46,121, 32, 61, 32, 50, 46, 48, 42, 40, - 48, 46, 53, 32, 45, 32, 99,111,108,111,114, 46,103, 41, 59, 10, 9,110,111,114,109, 97,108, 46,122, 32, 61, 32, 50, 46, 48, 42, - 40, 99,111,108,111,114, 46, 98, 32, 45, 32, 48, 46, 53, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 32, 77, 84, 69, 88, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, - 32,116,101,120, 99,111, 95,111,114, 99,111, 40,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,111,117,116, 32,118,101, - 99, 51, 32,111,114, 99,111, 41, 10,123, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 10,125, 10, 10,118, -111,105,100, 32,116,101,120, 99,111, 95,117,118, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, - 51, 32,117,118, 41, 10,123, 10, 9, 47, 42, 32,100,105,115, 97, 98,108,101,100, 32,102,111,114, 32,110,111,119, 44, 32,119,111, -114,107,115, 32,116,111,103,101,116,104,101,114, 32,119,105,116,104, 32,108,101, 97,118,105,110,103, 32,111,117,116, 32,109,116, -101,120, 95, 50,100, 95,109, 97,112,112,105,110,103, 10, 9, 32, 32, 32,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117, -118, 42, 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 32, 42, 47, - 10, 9,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, - 32,116,101,120, 99,111, 95,110,111,114,109, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, - 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 42, 32, 99,111,114,114,101,115,112,111,110,100,115, 32,116, -111, 32,115,104,105, 45, 62,111,114,110, 44, 32,119,104,105, 99,104, 32,105,115, 32,110,101,103, 97,116,101,100, 32,115,111, 32, - 99, 97,110, 99,101,108,115, 10, 9, 32, 32, 32,111,117,116, 32, 98,108,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,110, -101,103, 97,116,105,111,110, 32, 42, 47, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122, -101, 40,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,116, 97,110,103,101,110,116, - 40,118,101, 99, 52, 32,116, 97,110,103,101,110,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116, 97,110,103,101, -110,116, 41, 10,123, 10, 9,111,117,116,116, 97,110,103,101,110,116, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,116, 97, -110,103,101,110,116, 46,120,121,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,103,108,111, 98, 97,108, - 40,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118, -101, 99, 51, 32,103,108,111, 98, 97,108, 41, 10,123, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118, -109, 97,116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10,125, 10, 10,118,111,105,100, 32, -116,101,120, 99,111, 95,111, 98,106,101, 99,116, 40,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,109, 97, -116, 52, 32,111, 98,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111, - 98,106,101, 99,116, 41, 10,123, 10, 9,111, 98,106,101, 99,116, 32, 61, 32, 40,111, 98,105,110,118,109, 97,116, 42, 40,118,105, -101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 41, 46,120,121,122, 59, 10,125, 10, - 10,118,111,105,100, 32,116,101,120, 99,111, 95,114,101,102,108, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,118, -105,101,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,114,101,102, 41, 10,123, 10, 9,114,101,102, 32, 61, 32,118,105,101,119, - 32, 45, 32, 50, 46, 48, 42,100,111,116, 40,118,110, 44, 32,118,105,101,119, 41, 42,118,110, 59, 10,125, 10, 10,118,111,105,100, - 32,115,104, 97,100,101, 95,110,111,114,109, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, - 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101, -114, 32,110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,111,117,116,110,111,114,109, 97, -108, 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32, -109,116,101,120, 95,114,103, 98, 95, 98,108,101,110,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, - 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, - 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, - 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, - 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,102, 97, 99,109, 42,111, -117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,109,117,108, 40,118,101, 99, 51, - 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, - 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, - 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, - 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32, 40,102, 97, 99,109, 32, 43, - 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, -101,120, 95,114,103, 98, 95,115, 99,114,101,101,110, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32, -116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32, -111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, - 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, - 10, 10, 9,105,110, 99,111,108, 32, 61, 32,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32, 40,118,101, 99, 51, 40,102, 97, 99, -109, 41, 32, 43, 32,102, 97, 99,116, 42, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, - 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, -101,120, 95,114,103, 98, 95,111,118,101,114,108, 97,121, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, - 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, - 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, - 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, - 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46,114, - 32, 61, 32,111,117,116, 99,111,108, 46,114, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, - 99,111,108, 46,114, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, - 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,114, - 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, - 46,103, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 42, 40, -102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 41, 59, 10, 9,101,108,115,101, - 10, 9, 9,105,110, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, - 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,103, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, - 99,111,108, 46,103, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105, -110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, - 99,116, 42,116,101,120, 99,111,108, 46, 98, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46, 98, 32, 61, 32, - 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101, -120, 99,111,108, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, 41, 59, 10,125, 10, 10,118,111, -105,100, 32,109,116,101,120, 95,114,103, 98, 95,115,117, 98, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, - 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, - 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,105,110, 99,111,108, 32, 61, 32, 45,102, 97, - 99,116, 42,102, 97, 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, - 32,109,116,101,120, 95,114,103, 98, 95, 97,100,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32, + 48, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, +114, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32, +102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9, +111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, + 32,111,117,116, 99,111,108, 46,114, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46, +114, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,109, +112, 59, 10, 9,125, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102, +108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9, 9,105, +102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, + 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, 32, 61, 32,111,117,116, 99,111,108, 46,103, 47,116,109,112, 41, 32, + 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, + 10, 9, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10, 9,125, 10, 9,105,102, 40,111,117,116, 99,111, +108, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32, 49, 46, 48, 32, + 45, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, 46, 48, 41, 10, 9, + 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40, 40,116,109,112, + 32, 61, 32,111,117,116, 99,111,108, 46, 98, 47,116,109,112, 41, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9, 9,111,117,116, 99,111, +108, 46, 98, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9,101,108,115,101, 10, 9, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, +116,109,112, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 98,117,114,110, 40,102,108,111, 97,116, 32,102, + 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, + 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, + 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,116,109,112, 44, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, + 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,116,109,112, 32, 61, + 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,114, 59, 10, 9,105,102, 40,116,109,112, 32, 60, 61, 32, 48, + 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 40, +116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 47,116,109, +112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108, +115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32, 49, 46, + 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 32, 61, 32,116,109,112, 59, 10, 10, 9,116,109,112, + 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46,103, 59, 10, 9,105,102, 40,116,109,112, 32, 60, 61, + 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, + 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,103, 41, 47, +116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, 48, 46, 48, 59, 10, 9, +101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32, + 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 32, 61, 32,116,109,112, 59, 10, 10, 9,116, +109,112, 32, 61, 32,102, 97, 99,109, 32, 43, 32,102, 97, 99, 42, 99,111,108, 50, 46, 98, 59, 10, 9,105,102, 40,116,109,112, 32, + 60, 61, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32, +105,102, 40, 40,116,109,112, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, + 41, 47,116,109,112, 41, 41, 32, 60, 32, 48, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32, 48, 46, 48, 59, + 10, 9,101,108,115,101, 32,105,102, 40,116,109,112, 32, 62, 32, 49, 46, 48, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, + 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 32, 61, 32,116,109,112, 59, 10,125, + 10, 10,118,111,105,100, 32,109,105,120, 95,104,117,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99, +111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, + 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, + 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111, +108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, + 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,102, 40,104, +115,118, 50, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, + 99,111,108, 44, 32,104,115,118, 41, 59, 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10, 9, 9,104, +115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32, 10, 10, 9, 9,111,117,116, 99,111,108, 32, + 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, 41, 59, 10, 9, 9,111,117,116, 99,111, +108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95,115, 97,116, + 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, + 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109, +112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 32, 61, 32, + 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,118,101, + 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, + 44, 32,104,115,118, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 46,121, 32, 33, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114, +103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9, 9,104,115,118, 46,121, 32, + 61, 32,102, 97, 99,109, 42,104,115,118, 46,121, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,121, 59, 10, 9, 9,104,115,118, + 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, + 32,109,105,120, 95,118, 97,108, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118, +101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, + 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, + 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104, +115,118, 50, 59, 10, 9,114,103, 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 49, 44, 32,104,115,118, 41, 59, 10, 9,114,103, + 98, 95,116,111, 95,104,115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,104,115,118, 46,122, 32, 61, 32, +102, 97, 99,109, 42,104,115,118, 46,122, 32, 43, 32,102, 97, 99, 42,104,115,118, 50, 46,122, 59, 10, 9,104,115,118, 95,116,111, + 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105,120, 95, 99, +111,108,111,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, + 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, 99, 32, 61, 32, + 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 97, 99, +109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 59, 10, + 10, 9,118,101, 99, 52, 32,104,115,118, 44, 32,104,115,118, 50, 44, 32,116,109,112, 59, 10, 9,114,103, 98, 95,116,111, 95,104, +115,118, 40, 99,111,108, 50, 44, 32,104,115,118, 50, 41, 59, 10, 10, 9,105,102, 40,104,115,118, 50, 46,121, 32, 33, 61, 32, 48, + 46, 48, 41, 32,123, 10, 9, 9,114,103, 98, 95,116,111, 95,104,115,118, 40,111,117,116, 99,111,108, 44, 32,104,115,118, 41, 59, + 10, 9, 9,104,115,118, 46,120, 32, 61, 32,104,115,118, 50, 46,120, 59, 10, 9, 9,104,115,118, 46,121, 32, 61, 32,104,115,118, + 50, 46,121, 59, 10, 9, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,116,109,112, 41, 59, 32, 10, 10, 9, + 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40,111,117,116, 99,111,108, 44, 32,116,109,112, 44, 32,102, 97, 99, 41, 59, + 10, 9, 9,111,117,116, 99,111,108, 46, 97, 32, 61, 32, 99,111,108, 49, 46, 97, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, + 32,109,105,120, 95,115,111,102,116, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32, +118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, + 97, 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,102,108,111, 97, +116, 32,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99, 59, 10, 10, 9,118,101, 99, 52, 32,111,110,101, 61, 32, +118,101, 99, 52, 40, 49, 46, 48, 41, 59, 10, 9,118,101, 99, 52, 32,115, 99,114, 61, 32,111,110,101, 32, 45, 32, 40,111,110,101, + 32, 45, 32, 99,111,108, 50, 41, 42, 40,111,110,101, 32, 45, 32, 99,111,108, 49, 41, 59, 10, 9,111,117,116, 99,111,108, 32, 61, + 32,102, 97, 99,109, 42, 99,111,108, 49, 32, 43, 32,102, 97, 99, 42, 40, 40,111,110,101, 32, 45, 32, 99,111,108, 49, 41, 42, 99, +111,108, 50, 42, 99,111,108, 49, 32, 43, 32, 99,111,108, 49, 42,115, 99,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,105, +120, 95,108,105,110,101, 97,114, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118, +101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102, 97, + 99, 32, 61, 32, 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 10, 9,111,117,116, 99, +111,108, 32, 61, 32, 99,111,108, 49, 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,114, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9, +111,117,116, 99,111,108, 46,114, 61, 32, 99,111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, + 50, 46,114, 32, 45, 32, 48, 46, 53, 41, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,114, 61, 32, 99, +111,108, 49, 46,114, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,114, 41, 32, 45, 32, 49, 46, 48, 41, + 59, 10, 10, 9,105,102, 40, 99,111,108, 50, 46,103, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46,103, 61, + 32, 99,111,108, 49, 46,103, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 32, 45, 32, 48, 46, 53, + 41, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111,117,116, 99,111,108, 46,103, 61, 32, 99,111,108, 49, 46,103, 32, 43, 32,102, + 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46,103, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10, 10, 9,105,102, 40, 99,111, +108, 50, 46, 98, 32, 62, 32, 48, 46, 53, 41, 10, 9, 9,111,117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46, 98, 32, 43, + 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, 99,111,108, 50, 46, 98, 32, 45, 32, 48, 46, 53, 41, 41, 59, 10, 9,101,108,115,101, + 10, 9, 9,111,117,116, 99,111,108, 46, 98, 61, 32, 99,111,108, 49, 46, 98, 32, 43, 32,102, 97, 99, 42, 40, 50, 46, 48, 42, 40, + 99,111,108, 50, 46, 98, 41, 32, 45, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,118, 97,108,116,111,114,103, 98, + 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, 99,111,108,111,114,109, 97,112, 44, 32, +111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116, 97,108, +112,104, 97, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,111,108,111,114, +109, 97,112, 44, 32,118,101, 99, 50, 40,102, 97, 99, 44, 32, 48, 46, 48, 41, 41, 59, 10, 9,111,117,116, 97,108,112,104, 97, 32, + 61, 32,111,117,116, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98,116,111, 98,119, 40,118,101, 99, 52, + 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 32, 32, 10,123, 10, 9,111, +117,116,118, 97,108, 32, 61, 32, 99,111,108,111,114, 46,114, 42, 48, 46, 51, 53, 32, 43, 32, 99,111,108,111,114, 46,103, 42, 48, + 46, 52, 53, 32, 43, 32, 99,111,108,111,114, 46, 98, 42, 48, 46, 50, 59, 32, 47, 42, 32,107,101,101,112, 32,116,104,101,115,101, + 32,102, 97, 99,116,111,114,115, 32,105,110, 32,115,121,110, 99, 32,119,105,116,104, 32,116,101,120,116,117,114,101, 46,104, 58, + 82, 71, 66, 84, 79, 66, 87, 32, 42, 47, 10,125, 10, 10,118,111,105,100, 32,105,110,118,101,114,116, 40,102,108,111, 97,116, 32, +102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10, +123, 10, 9,111,117,116, 99,111,108, 46,120,121,122, 32, 61, 32,109,105,120, 40, 99,111,108, 46,120,121,122, 44, 32,118,101, 99, + 51, 40, 49, 46, 48, 44, 32, 49, 46, 48, 44, 32, 49, 46, 48, 41, 32, 45, 32, 99,111,108, 46,120,121,122, 44, 32,102, 97, 99, 41, + 59, 10, 9,111,117,116, 99,111,108, 46,119, 32, 61, 32, 99,111,108, 46,119, 59, 10,125, 10, 10,118,111,105,100, 32,104,117,101, + 95,115, 97,116, 40,102,108,111, 97,116, 32,104,117,101, 44, 32,102,108,111, 97,116, 32,115, 97,116, 44, 32,102,108,111, 97,116, + 32,118, 97,108,117,101, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, + 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32,104,115,118, 59, 10, 10, 9,114,103, 98, + 95,116,111, 95,104,115,118, 40, 99,111,108, 44, 32,104,115,118, 41, 59, 10, 10, 9,104,115,118, 91, 48, 93, 32, 43, 61, 32, 40, +104,117,101, 32, 45, 32, 48, 46, 53, 41, 59, 10, 9,105,102, 40,104,115,118, 91, 48, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, + 48, 93, 45, 61, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 48, 93, 60, 48, 46, 48, 41, 32,104,115,118, + 91, 48, 93, 43, 61, 32, 49, 46, 48, 59, 10, 9,104,115,118, 91, 49, 93, 32, 42, 61, 32,115, 97,116, 59, 10, 9,105,102, 40,104, +115,118, 91, 49, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40, +104,115,118, 91, 49, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, 49, 93, 61, 32, 48, 46, 48, 59, 10, 9,104,115,118, 91, 50, 93, + 32, 42, 61, 32,118, 97,108,117,101, 59, 10, 9,105,102, 40,104,115,118, 91, 50, 93, 62, 49, 46, 48, 41, 32,104,115,118, 91, 50, + 93, 61, 32, 49, 46, 48, 59, 32,101,108,115,101, 32,105,102, 40,104,115,118, 91, 50, 93, 60, 48, 46, 48, 41, 32,104,115,118, 91, + 50, 93, 61, 32, 48, 46, 48, 59, 10, 10, 9,104,115,118, 95,116,111, 95,114,103, 98, 40,104,115,118, 44, 32,111,117,116, 99,111, +108, 41, 59, 10, 10, 9,111,117,116, 99,111,108, 32, 61, 32,109,105,120, 40, 99,111,108, 44, 32,111,117,116, 99,111,108, 44, 32, +102, 97, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,101,112, 97,114, 97,116,101, 95,114,103, 98, 40,118,101, 99, 52, 32, + 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,103, 44, 32,111, +117,116, 32,102,108,111, 97,116, 32, 98, 41, 10,123, 10, 9,114, 32, 61, 32, 99,111,108, 46,114, 59, 10, 9,103, 32, 61, 32, 99, +111,108, 46,103, 59, 10, 9, 98, 32, 61, 32, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32, 99,111,109, 98,105,110, +101, 95,114,103, 98, 40,102,108,111, 97,116, 32,114, 44, 32,102,108,111, 97,116, 32,103, 44, 32,102,108,111, 97,116, 32, 98, 44, + 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108, 41, 10,123, 10, 9, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114, 44, 32, +103, 44, 32, 98, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,111,117,116,112,117,116, 95,110,111,100,101, 40, +118,101, 99, 52, 32,114,103, 98, 44, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 44, 32,111,117,116, 32,118,101, 99, 52, 32, +111,117,116,114,103, 98, 41, 10,123, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 46,114,103, 98, + 44, 32, 97,108,112,104, 97, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 84, 69, 88, 84, 85, 82, + 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,116,101,120,116,117,114, +101, 95,102,108,105,112, 95, 98,108,101,110,100, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32, +111,117,116,118,101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 46,121,120,122, 59, 10,125, 10, 10, +118,111,105,100, 32,116,101,120,116,117,114,101, 95, 98,108,101,110,100, 95,108,105,110, 40,118,101, 99, 51, 32,118,101, 99, 44, + 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 40, + 49, 46, 48, 43,118,101, 99, 46,120, 41, 47, 50, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95, + 98,108,101,110,100, 95,113,117, 97,100, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111, +117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32,109, 97,120, 40, 40, 49, 46, 48, 43,118,101, 99, 46, +120, 41, 47, 50, 46, 48, 44, 32, 48, 46, 48, 41, 59, 10, 9,111,117,116,118, 97,108, 32, 42, 61, 32,111,117,116,118, 97,108, 59, + 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,119,111,111,100, 95,115,105,110, 40,118,101, 99, 51, 32,118, +101, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111, +108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32, 97, + 32, 61, 32,115,113,114,116, 40,118,101, 99, 46,120, 42,118,101, 99, 46,120, 32, 43, 32,118,101, 99, 46,121, 42,118,101, 99, 46, +121, 32, 43, 32,118,101, 99, 46,122, 42,118,101, 99, 46,122, 41, 42, 50, 48, 46, 48, 59, 10, 9,102,108,111, 97,116, 32,119,105, + 32, 61, 32, 48, 46, 53, 32, 43, 32, 48, 46, 53, 42,115,105,110, 40, 97, 41, 59, 10, 10, 9,118, 97,108,117,101, 32, 61, 32,119, +105, 59, 10, 9, 99,111,108,111,114, 32, 61, 32,118,101, 99, 52, 40,119,105, 44, 32,119,105, 44, 32,119,105, 44, 32, 49, 46, 48, + 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, + 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120,116,117,114,101, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32,118,101, 99, + 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, + 44, 32,111,117,116, 32,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97, +108, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 40,118,101, + 99, 46,120,121, 32, 43, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 41, 42, 48, 46, 53, 41, 59, 10, 9,118, 97, +108,117,101, 32, 61, 32, 49, 46, 48, 59, 10, 10, 9,110,111,114,109, 97,108, 46,120, 32, 61, 32, 50, 46, 48, 42, 40, 99,111,108, +111,114, 46,114, 32, 45, 32, 48, 46, 53, 41, 59, 10, 9,110,111,114,109, 97,108, 46,121, 32, 61, 32, 50, 46, 48, 42, 40, 48, 46, + 53, 32, 45, 32, 99,111,108,111,114, 46,103, 41, 59, 10, 9,110,111,114,109, 97,108, 46,122, 32, 61, 32, 50, 46, 48, 42, 40, 99, +111,108,111,114, 46, 98, 32, 45, 32, 48, 46, 53, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 32, 77, 84, 69, 88, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,116, +101,120, 99,111, 95,111,114, 99,111, 40,118,101, 99, 51, 32, 97,116,116,111,114, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, + 32,111,114, 99,111, 41, 10,123, 10, 9,111,114, 99,111, 32, 61, 32, 97,116,116,111,114, 99,111, 59, 10,125, 10, 10,118,111,105, +100, 32,116,101,120, 99,111, 95,117,118, 40,118,101, 99, 50, 32, 97,116,116,117,118, 44, 32,111,117,116, 32,118,101, 99, 51, 32, +117,118, 41, 10,123, 10, 9, 47, 42, 32,100,105,115, 97, 98,108,101,100, 32,102,111,114, 32,110,111,119, 44, 32,119,111,114,107, +115, 32,116,111,103,101,116,104,101,114, 32,119,105,116,104, 32,108,101, 97,118,105,110,103, 32,111,117,116, 32,109,116,101,120, + 95, 50,100, 95,109, 97,112,112,105,110,103, 10, 9, 32, 32, 32,117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 42, + 50, 46, 48, 32, 45, 32,118,101, 99, 50, 40, 49, 46, 48, 44, 32, 49, 46, 48, 41, 44, 32, 48, 46, 48, 41, 59, 32, 42, 47, 10, 9, +117,118, 32, 61, 32,118,101, 99, 51, 40, 97,116,116,117,118, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116, +101,120, 99,111, 95,110,111,114,109, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32, +111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 42, 32, 99,111,114,114,101,115,112,111,110,100,115, 32,116,111, 32, +115,104,105, 45, 62,111,114,110, 44, 32,119,104,105, 99,104, 32,105,115, 32,110,101,103, 97,116,101,100, 32,115,111, 32, 99, 97, +110, 99,101,108,115, 10, 9, 32, 32, 32,111,117,116, 32, 98,108,101,110,100,101,114, 32,110,111,114,109, 97,108, 32,110,101,103, + 97,116,105,111,110, 32, 42, 47, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, +110,111,114,109, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,116, 97,110,103,101,110,116, 40,118, +101, 99, 52, 32,116, 97,110,103,101,110,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116, 97,110,103,101,110,116, + 41, 10,123, 10, 9,111,117,116,116, 97,110,103,101,110,116, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,116, 97,110,103, +101,110,116, 46,120,121,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,120, 99,111, 95,103,108,111, 98, 97,108, 40,109, + 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, + 51, 32,103,108,111, 98, 97,108, 41, 10,123, 10, 9,103,108,111, 98, 97,108, 32, 61, 32, 40,118,105,101,119,105,110,118,109, 97, +116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10,125, 10, 10,118,111,105,100, 32,116,101, +120, 99,111, 95,111, 98,106,101, 99,116, 40,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,109, 97,116, 52, + 32,111, 98,105,110,118,109, 97,116, 44, 32,118,101, 99, 51, 32, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111, 98,106, +101, 99,116, 41, 10,123, 10, 9,111, 98,106,101, 99,116, 32, 61, 32, 40,111, 98,105,110,118,109, 97,116, 42, 40,118,105,101,119, +105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 99,111, 44, 32, 49, 46, 48, 41, 41, 41, 46,120,121,122, 59, 10,125, 10, 10,118, +111,105,100, 32,116,101,120, 99,111, 95,114,101,102,108, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,118,105,101, +119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,114,101,102, 41, 10,123, 10, 9,114,101,102, 32, 61, 32,118,105,101,119, 32, 45, + 32, 50, 46, 48, 42,100,111,116, 40,118,110, 44, 32,118,105,101,119, 41, 42,118,110, 59, 10,125, 10, 10,118,111,105,100, 32,115, +104, 97,100,101, 95,110,111,114,109, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32, +111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 42, 32, 98,108,101,110,100,101,114, 32,114,101,110,100,101,114, 32, +110,111,114,109, 97,108, 32,105,115, 32,110,101,103, 97,116,101,100, 32, 42, 47, 10, 9,111,117,116,110,111,114,109, 97,108, 32, + 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, +101,120, 95,114,103, 98, 95, 98,108,101,110,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116, +101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111, +117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9, +102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, + 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, + 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,109,117,108, 40,118,101, 99, 51, 32,111, +117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32, +102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102, +108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, + 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32, 40,102, 97, 99,109, 32, 43, 32,102, + 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, + 95,114,103, 98, 95,115, 99,114,101,101,110, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101, +120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117, +116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, + 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, 10, + 9,105,110, 99,111,108, 32, 61, 32,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32, 40,118,101, 99, 51, 40,102, 97, 99,109, 41, + 32, 43, 32,102, 97, 99,116, 42, 40,118,101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, 40,118, +101, 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, + 95,114,103, 98, 95,111,118,101,114,108, 97,121, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116, +101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111, +117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9, +102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,103, 59, 10, + 10, 9,105,102, 40,111,117,116, 99,111,108, 46,114, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, + 32,111,117,116, 99,111,108, 46,114, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111, +108, 46,114, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46,114, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, + 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,114, 41, 41, + 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46,114, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46,103, + 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 42, 40,102, 97, + 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,103, 41, 59, 10, 9,101,108,115,101, 10, 9, + 9,105,110, 99,111,108, 46,103, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99, +116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 46,103, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111, +108, 46,103, 41, 59, 10, 10, 9,105,102, 40,111,117,116, 99,111,108, 46, 98, 32, 60, 32, 48, 46, 53, 41, 10, 9, 9,105,110, 99, +111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 42, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, + 42,116,101,120, 99,111,108, 46, 98, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 46, 98, 32, 61, 32, 49, 46, + 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32, 50, 46, 48, 42,102, 97, 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99, +111,108, 46, 98, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 46, 98, 41, 59, 10,125, 10, 10,118,111,105,100, + 32,109,116,101,120, 95,114,103, 98, 95,115,117, 98, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32, 116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32, -111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42, -102, 97, 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, -101,120, 95,114,103, 98, 95,100,105,118, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, - 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, - 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, - 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9, -105,102, 40,116,101,120, 99,111,108, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32,102, 97, - 99,109, 42,111,117,116, 99,111,108, 46,114, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46,114, 47,116,101,120, 99, -111,108, 46,114, 59, 10, 9,105,102, 40,116,101,120, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, - 46,103, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,103, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, - 46,103, 47,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40,116,101,120, 99,111,108, 46, 98, 32, 33, 61, 32, 48, 46, 48, - 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46, 98, 32, 43, 32,102, 97, 99,116, - 42,111,117,116, 99,111,108, 46, 98, 47,116,101,120, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, - 95,114,103, 98, 95,100,105,102,102, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99, -111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32, -118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99, -116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105, -110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42, 97, 98,115, 40,116,101, -120, 99,111,108, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, - 95,100, 97,114,107, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32, -102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, - 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32, 99,111,108, 59, 10, 10, 9,102, 97, - 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9, - 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111, -117,116, 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99, -111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, - 99,111,108, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46,103, 41, 32,105,110, 99,111,108, - 46,103, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46, -103, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 59, 10, 9,105,102, 40, 99,111,108, - 32, 60, 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, - 32,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101, -120, 95,114,103, 98, 95,108,105,103,104,116, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101, +111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,105,110, 99,111,108, 32, 61, 32, 45,102, 97, 99,116, + 42,102, 97, 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109, +116,101,120, 95,114,103, 98, 95, 97,100,100, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101, 120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117, -116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32, 99,111,108, - 59, 10, 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, - 99,116, 59, 10, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40, 99, -111,108, 32, 62, 32,111,117,116, 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,111,108, 59, 32,101,108, -115,101, 32,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, - 99,116, 42,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46,103, 41, - 32,105,110, 99,111,108, 46,103, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,103, 32, 61, 32,111, -117,116, 99,111,108, 46,103, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 59, 10, 9, -105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32, 99,111,108, - 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111, -105,100, 32,109,116,101,120, 95,114,103, 98, 95,104,117,101, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, - 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, - 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, - 9,109,105,120, 95,104,117,101, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, - 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, - 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, -101,120, 95,114,103, 98, 95,115, 97,116, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, - 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, - 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95, -115, 97,116, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, - 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111, -108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, - 98, 95,118, 97,108, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32, -102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, - 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95,118, 97,108, 40,102, - 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, - 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, - 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 99,111,108, -111,114, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, - 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, - 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95, 99,111,108,111,114, 40,102, 97, - 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, - 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, - 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97, -114,115, 40,105,110,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, - 32,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99,109, 41, 10,123, 10, 9,102, 97, 99,116, 32, 42, 61, 32, 97, 98,115, 40, -102, 97, 99,103, 41, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,102, 40,102, 97, - 99,103, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32,102, 97, 99,116, 59, 10, - 9, 9,102, 97, 99,116, 32, 61, 32,102, 97, 99,109, 59, 10, 9, 9,102, 97, 99,109, 32, 61, 32,116,109,112, 59, 10, 9,125, 10, -125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,111, -117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, - 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, - 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, - 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42, -116,101,120, 99,111,108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, -101,120, 95,118, 97,108,117,101, 95,109,117,108, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, - 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, - 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, - 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, - 99,109, 41, 59, 10, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99,103, 59, 10, 9,105,110, 99,111,108, - 32, 61, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59, 10, -125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115, 99,114,101,101,110, 40,102,108,111, 97,116, 32, -111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, - 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, - 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, - 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, - 32,102, 97, 99,103, 59, 10, 9,105,110, 99,111,108, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, - 99,116, 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, - 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115,117, 98, 40,102,108,111, 97,116, 32, -111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, - 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, - 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, - 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,116, 32, 61, 32, 45,102, 97, 99,116, - 59, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, - 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 97,100,100, 40,102,108,111, 97,116, 32,111,117, +116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,102, 97, + 99,103, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, + 95,114,103, 98, 95,100,105,118, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111, +108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118, +101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, + 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,102, + 40,116,101,120, 99,111,108, 46,114, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32,102, 97, 99,109, + 42,111,117,116, 99,111,108, 46,114, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46,114, 47,116,101,120, 99,111,108, + 46,114, 59, 10, 9,105,102, 40,116,101,120, 99,111,108, 46,103, 32, 33, 61, 32, 48, 46, 48, 41, 32,105,110, 99,111,108, 46,103, + 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46,103, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99,111,108, 46,103, + 47,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40,116,101,120, 99,111,108, 46, 98, 32, 33, 61, 32, 48, 46, 48, 41, 32, +105,110, 99,111,108, 46, 98, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 46, 98, 32, 43, 32,102, 97, 99,116, 42,111, +117,116, 99,111,108, 46, 98, 47,116,101,120, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114, +103, 98, 95,100,105,102,102, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, + 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, + 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 10, 9,102, 97, 99,116, 32, + 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,110, 99, +111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42, 97, 98,115, 40,116,101,120, 99, +111,108, 32, 45, 32,111,117,116, 99,111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,100, + 97,114,107, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108, +111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105, +110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32, 99,111,108, 59, 10, 10, 9,102, 97, 99,116, + 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9, 99,111, +108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, + 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, + 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111, +108, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 46,103, 41, 32,105,110, 99,111,108, 46,103, + 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, 99,111,108, 46,103, 59, + 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, + 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105, +110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, +114,103, 98, 95,108,105,103,104,116, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99, +111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32, +118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 44, 32, 99,111,108, 59, 10, + 10, 9,102, 97, 99,116, 32, 42, 61, 32,102, 97, 99,103, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, + 59, 10, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46,114, 59, 10, 9,105,102, 40, 99,111,108, + 32, 62, 32,111,117,116, 99,111,108, 46,114, 41, 32,105,110, 99,111,108, 46,114, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, + 32,105,110, 99,111,108, 46,114, 32, 61, 32,111,117,116, 99,111,108, 46,114, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, + 42,116,101,120, 99,111,108, 46,103, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46,103, 41, 32,105, +110, 99,111,108, 46,103, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 46,103, 32, 61, 32,111,117,116, + 99,111,108, 46,103, 59, 10, 9, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 46, 98, 59, 10, 9,105,102, + 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 46, 98, 41, 32,105,110, 99,111,108, 46, 98, 32, 61, 32, 99,111,108, 59, 32, +101,108,115,101, 32,105,110, 99,111,108, 46, 98, 32, 61, 32,111,117,116, 99,111,108, 46, 98, 59, 10,125, 10, 10,118,111,105,100, + 32,109,116,101,120, 95,114,103, 98, 95,104,117,101, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32, +116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32, +111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109, +105,120, 95,104,117,101, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, + 46, 48, 41, 44, 32,118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105, +110, 99,111,108, 46,114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, + 95,114,103, 98, 95,115, 97,116, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111, +108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118, +101, 99, 51, 32,105,110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95,115, 97, +116, 40,102, 97, 99,116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, +118,101, 99, 52, 40,116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46, +114,103, 98, 32, 61, 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, +118, 97,108, 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108, +111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105, +110, 99,111,108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95,118, 97,108, 40,102, 97, 99, +116, 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40, +116,101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, + 32, 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95, 99,111,108,111,114, + 40,118,101, 99, 51, 32,111,117,116, 99,111,108, 44, 32,118,101, 99, 51, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, + 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111, +108, 41, 10,123, 10, 9,118,101, 99, 52, 32, 99,111,108, 59, 10, 10, 9,109,105,120, 95, 99,111,108,111,114, 40,102, 97, 99,116, + 42,102, 97, 99,103, 44, 32,118,101, 99, 52, 40,111,117,116, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32,118,101, 99, 52, 40,116, +101,120, 99,111,108, 44, 32, 49, 46, 48, 41, 44, 32, 99,111,108, 41, 59, 10, 9,105,110, 99,111,108, 46,114,103, 98, 32, 61, 32, + 99,111,108, 46,114,103, 98, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, + 40,105,110,111,117,116, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111, +117,116, 32,102,108,111, 97,116, 32,102, 97, 99,109, 41, 10,123, 10, 9,102, 97, 99,116, 32, 42, 61, 32, 97, 98,115, 40,102, 97, + 99,103, 41, 59, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 45,102, 97, 99,116, 59, 10, 10, 9,105,102, 40,102, 97, 99,103, + 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,102,108,111, 97,116, 32,116,109,112, 32, 61, 32,102, 97, 99,116, 59, 10, 9, 9, +102, 97, 99,116, 32, 61, 32,102, 97, 99,109, 59, 10, 9, 9,102, 97, 99,109, 32, 61, 32,116,109,112, 59, 10, 9,125, 10,125, 10, + 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 98,108,101,110,100, 40,102,108,111, 97,116, 32,111,117,116, + 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102, +108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102, +108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, + 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101, +120, 99,111,108, 32, 43, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, + 95,118, 97,108,117,101, 95,109,117,108, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116, +101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111, +117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9, +109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, + 41, 59, 10, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, 97, 99,103, 59, 10, 9,105,110, 99,111,108, 32, 61, + 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 41, 42,111,117,116, 99,111,108, 59, 10,125, 10, + 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115, 99,114,101,101,110, 40,102,108,111, 97,116, 32,111,117, +116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32, +102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9, +102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99, +116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,109, 32, 61, 32, 49, 46, 48, 32, 45, 32,102, + 97, 99,103, 59, 10, 9,105,110, 99,111,108, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40,102, 97, 99,109, 32, 43, 32,102, 97, 99,116, + 42, 40, 49, 46, 48, 32, 45, 32,116,101,120, 99,111,108, 41, 41, 42, 40, 49, 46, 48, 32, 45, 32,111,117,116, 99,111,108, 41, 59, + 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115,117, 98, 40,102,108,111, 97,116, 32,111,117, +116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32, +102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9, +102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99, +116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,116, 32, 61, 32, 45,102, 97, 99,116, 59, 10, + 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, + 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 97,100,100, 40,102,108,111, 97,116, 32,111,117,116, 99, +111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108, +111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108, +111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, + 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,116, 32, 61, 32,102, 97, 99,116, 59, 10, 9,105,110, + 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, 10,118, +111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100,105,118, 40,102,108,111, 97,116, 32,111,117,116, 99,111,108, 44, + 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, 97,116, + 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, + 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32,102, 97, + 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,102, 40,116,101,120, 99,111,108, 32, 33, 61, 32, 48, 46, 48, 41, 10, 9, + 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42,111,117,116, 99, +111,108, 47,116,101,120, 99,111,108, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 32, 61, 32, 48, 46, 48, 59, 10, +125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100,105,102,102, 40,102,108,111, 97,116, 32,111,117, 116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32, 102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9, 102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99, -116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102, 97, 99,116, 32, 61, 32,102, 97, 99,116, 59, 10, 9, -105,110, 99,111,108, 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 32, 43, 32,111,117,116, 99,111,108, 59, 10,125, 10, - 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100,105,118, 40,102,108,111, 97,116, 32,111,117,116, 99,111, -108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, 44, 32,102,108,111, - 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, 10, 9,102,108,111, - 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, 97, 99,116, 44, 32, -102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,102, 40,116,101,120, 99,111,108, 32, 33, 61, 32, 48, 46, 48, 41, - 10, 9, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42,111,117, -116, 99,111,108, 47,116,101,120, 99,111,108, 59, 10, 9,101,108,115,101, 10, 9, 9,105,110, 99,111,108, 32, 61, 32, 48, 46, 48, - 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100,105,102,102, 40,102,108,111, 97,116, 32, -111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99,116, - 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10,123, - 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40,102, - 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, - 42,111,117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42, 97, 98,115, 40,116,101,120, 99,111,108, 32, 45, 32,111,117,116, 99, -111,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100, 97,114,107, 40,102,108,111, - 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, - 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, - 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114, -115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102,108,111, 97,116, 32, 99,111,108, - 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, - 41, 32,105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99, -111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,108,105,103,104,116, 40,102,108,111, - 97,116, 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, - 97, 99,116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, - 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114, -115, 40,102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102,108,111, 97,116, 32, 99,111,108, - 32, 61, 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, - 41, 32,105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99, -111,108, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 99,108, 97,109,112, 95,112,111,115, -105,116,105,118,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, - 99, 41, 10,123, 10, 9,111,117,116,102, 97, 99, 32, 61, 32,109, 97,120, 40,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, - 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,102, 97, 99, - 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 10,123, 10, 9,111,117,116,102, 97, 99, 32, 61, 32, - 99,108, 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, -101,120, 95,104, 97,114, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,104, 97,114, 44, 32,111,117,116, 32,102,108,111, - 97,116, 32,111,117,116,104, 97,114, 41, 10,123, 10, 9,111,117,116,104, 97,114, 32, 61, 32,104, 97,114, 47, 49, 50, 56, 46, 48, - 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,104, 97,114, 95,109,117,108,116,105,112,108,121, 95, 99,108, 97,109, -112, 40,102,108,111, 97,116, 32,104, 97,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,104, 97,114, 41, 10,123, - 10, 9,104, 97,114, 32, 42, 61, 32, 49, 50, 56, 46, 48, 59, 10, 10, 9,105,102, 40,104, 97,114, 32, 60, 32, 49, 46, 48, 41, 32, -111,117,116,104, 97,114, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40,104, 97,114, 32, 62, 32, 53, 49, 49, - 46, 48, 41, 32,111,117,116,104, 97,114, 32, 61, 32, 53, 49, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,111,117,116,104, 97,114, - 32, 61, 32,104, 97,114, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 97,108,112,104, 97, 95,102,114,111,109, 95, - 99,111,108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 41, 10,123, - 10, 9, 97,108,112,104, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 97,108, -112,104, 97, 95,116,111, 95, 99,111,108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, - 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118, -101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 97,108,112,104, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101, -120, 95,114,103, 98,116,111,105,110,116, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105, -110,116,101,110,115,105,116,121, 41, 10,123, 10, 9,105,110,116,101,110,115,105,116,121, 32, 61, 32,100,111,116, 40,118,101, 99, - 51, 40, 48, 46, 51, 53, 44, 32, 48, 46, 52, 53, 44, 32, 48, 46, 50, 41, 44, 32,114,103, 98, 46,114,103, 98, 41, 59, 10,125, 10, - 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,105,110,118,101,114,116, 40,102,108,111, 97,116, 32,105,110, -118, 97,108,117,101, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108,117,101, 41, 10,123, 10, 9,111,117, -116,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 32, 45, 32,105,110,118, 97,108,117,101, 59, 10,125, 10, 10,118,111,105,100, 32, -109,116,101,120, 95,114,103, 98, 95,105,110,118,101,114,116, 40,118,101, 99, 52, 32,105,110,114,103, 98, 44, 32,111,117,116, 32, -118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,118,101, - 99, 51, 40, 49, 46, 48, 41, 32, 45, 32,105,110,114,103, 98, 46,114,103, 98, 44, 32,105,110,114,103, 98, 46, 97, 41, 59, 10,125, - 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32, -115,116,101,110, 99,105,108, 44, 32,102,108,111, 97,116, 32,105,110,116,101,110,115,105,116,121, 44, 32,111,117,116, 32,102,108, -111, 97,116, 32,111,117,116,115,116,101,110, 99,105,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105,110,116, -101,110,115,105,116,121, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,116, 32, 61, 32,105,110,116,101,110,115,105,116, -121, 59, 10, 9,111,117,116,105,110,116,101,110,115,105,116,121, 32, 61, 32,105,110,116,101,110,115,105,116,121, 42,115,116,101, -110, 99,105,108, 59, 10, 9,111,117,116,115,116,101,110, 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, - 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, - 32,115,116,101,110, 99,105,108, 44, 32,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117, -116,115,116,101,110, 99,105,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,102,108, -111, 97,116, 32,102, 97, 99,116, 32, 61, 32,114,103, 98, 46, 97, 59, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, - 40,114,103, 98, 46,114,103, 98, 44, 32,114,103, 98, 46, 97, 42,115,116,101,110, 99,105,108, 41, 59, 10, 9,111,117,116,115,116, -101,110, 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, -101,120, 95,109, 97,112,112,105,110,103, 95,111,102,115, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,118,101, 99, 51, 32, -111,102,115, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116,101,120, 99,111, 41, 10,123, 10, 9,111,117,116,116,101, -120, 99,111, 32, 61, 32,116,101,120, 99,111, 32, 43, 32,111,102,115, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, -109, 97,112,112,105,110,103, 95,115,105,122,101, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,118,101, 99, 51, 32,115,105, -122,101, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116,101,120, 99,111, 41, 10,123, 10, 9,111,117,116,116,101,120, - 99,111, 32, 61, 32,115,105,122,101, 42,116,101,120, 99,111, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 50,100, - 95,109, 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118, -101, 99, 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40,118,101, 99, 46,120,121, 42, 48, 46, 53, 32, - 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 32, 48, 46, 53, 41, 44, 32,118,101, 99, 46,122, 41, 59, 10,125, 10, 10,118,111,105, -100, 32,109,116,101,120, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, - 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, - 52, 32, 99,111,108,111,114, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, - 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118, -111,105,100, 32,109,116,101,120, 95,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112, -108,101,114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, - 47, 32, 84,104,101, 32,105,110,118,101,114,116, 32,111,102, 32,116,104,101, 32,114,101,100, 32, 99,104, 97,110,110,101,108, 32, -105,115, 32,116,111, 32,109, 97,107,101, 10, 9, 47, 47, 32,116,104,101, 32,110,111,114,109, 97,108, 32,109, 97,112, 32, 99,111, -109,112,108,105, 97,110,116, 32,119,105,116,104, 32,116,104,101, 32,111,117,116,115,105,100,101, 32,119,111,114,108,100, 46, 10, - 9, 47, 47, 32, 73,116, 32,110,101,101,100,115, 32,116,111, 32, 98,101, 32,100,111,110,101, 32, 98,101, 99, 97,117,115,101, 32, -105,110, 32, 66,108,101,110,100,101,114, 10, 9, 47, 47, 32,116,104,101, 32,110,111,114,109, 97,108, 32,117,115,101,100, 32,112, -111,105,110,116,115, 32,105,110,119, 97,114,100, 46, 10, 9, 47, 47, 32, 83,104,111,117,108,100, 32,116,104,105,115, 32,101,118, -101,114, 32, 99,104, 97,110,103,101, 32,116,104,105,115, 32,110,101,103, 97,116,101, 32,109,117,115,116, 32, 98,101, 32,114,101, -109,111,118,101,100, 46, 10, 32, 32, 32, 32,118,101, 99, 52, 32, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, - 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 50, 46, 48, 42, - 40,118,101, 99, 51, 40, 45, 99,111,108,111,114, 46,114, 44, 32, 99,111,108,111,114, 46,103, 44, 32, 99,111,108,111,114, 46, 98, - 41, 32, 45, 32,118,101, 99, 51, 40, 45, 48, 46, 53, 44, 32, 48, 46, 53, 44, 32, 48, 46, 53, 41, 41, 59, 10,125, 10, 10,118,111, -105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,110,111,114,109, 97,108,115, 95,105,110,105,116, 40, 32,118,101, 99, 51, 32, -118, 78, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78,111,114,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, - 99, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 32, 41, 10,123, - 10, 9,118, 78,111,114,103, 32, 61, 32,118, 78, 59, 10, 9,118, 78, 97, 99, 99, 32, 61, 32,118, 78, 59, 10, 9,102, 80,114,101, -118, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10, 47, 42, 42, 32,104,101,108,112,101,114, 32, -109,101,116,104,111,100, 32,116,111, 32,101,120,116,114, 97, 99,116, 32,116,104,101, 32,117,112,112,101,114, 32,108,101,102,116, - 32, 51,120, 51, 32,109, 97,116,114,105,120, 32,102,114,111,109, 32, 97, 32, 52,120, 52, 32,109, 97,116,114,105,120, 32, 42, 47, - 10,109, 97,116, 51, 32,116,111, 95,109, 97,116, 51, 40,109, 97,116, 52, 32,109, 52, 41, 10,123, 10, 9,109, 97,116, 51, 32,109, - 51, 59, 10, 9,109, 51, 91, 48, 93, 32, 61, 32,109, 52, 91, 48, 93, 46,120,121,122, 59, 10, 9,109, 51, 91, 49, 93, 32, 61, 32, -109, 52, 91, 49, 93, 46,120,121,122, 59, 10, 9,109, 51, 91, 50, 93, 32, 61, 32,109, 52, 91, 50, 93, 46,120,121,122, 59, 10, 9, -114,101,116,117,114,110, 32,109, 51, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105, -116, 95,111, 98,106,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32, -115,117,114,102, 95,110,111,114,109, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,109, 97,116, 52, 32,109, 86,105,101,119, 44, 32, -109, 97,116, 52, 32,109, 86,105,101,119, 73,110,118, 44, 32,109, 97,116, 52, 32,109, 79, 98,106, 44, 32,109, 97,116, 52, 32,109, - 79, 98,106, 73,110,118, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103, -110,105,116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, - 9, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, - 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,111, -117,116, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102, -108,111, 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9,109, 97,116, 51, 32,111, 98,106, 50,118,105,101,119, 32, 61, 32, -116,111, 95,109, 97,116, 51, 40,103,108, 95, 77,111,100,101,108, 86,105,101,119, 77, 97,116,114,105,120, 41, 59, 10, 9,109, 97, -116, 51, 32,118,105,101,119, 50,111, 98,106, 32, 61, 32,116,111, 95,109, 97,116, 51, 40,103,108, 95, 77,111,100,101,108, 86,105, -101,119, 77, 97,116,114,105,120, 73,110,118,101,114,115,101, 41, 59, 10, 9, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, - 83, 32, 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, - 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100,121, - 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,110,111,114,109, 97,108,105, -122,101, 40, 32,115,117,114,102, 95,110,111,114,109, 32, 42, 32,111, 98,106, 50,118,105,101,119, 32, 41, 59, 10, 10, 9,118, 82, - 49, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, - 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 59, 10, 9,102, 68,101,116, 32, 61, 32, -100,111,116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 32, 41, 59, 10, 9, 10, 9, 47, 42, 32,112,114,101,116, -114, 97,110,115,102,111,114,109, 32,118, 78, 97, 99, 99, 32, 40,105,110, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112, -108,121, 41, 32,117,115,105,110,103, 32,116,104,101, 32,105,110,118,101,114,115,101, 32,116,114, 97,110,115,112,111,115,101,100, - 32, 42, 47, 10, 9,118, 82, 49, 32, 61, 32,118, 82, 49, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 10, 9,118, 82, 50, 32, - 61, 32,118, 82, 50, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 10, 9,118, 78, 32, 61, 32,118, 78, 32, 42, 32,118,105,101, -119, 50,111, 98,106, 59, 10, 9, 10, 9,102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, - 40,102, 68,101,116, 41, 32, 42, 32,108,101,110,103,116,104, 40,118, 78, 41, 59, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, - 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118, - 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111, -117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117, -109,112, 95,105,110,105,116, 95,116,101,120,116,117,114,101,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95, -112,111,115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32, -102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, - 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101, -118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111, -117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, - 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9, -118,101, 99, 51, 32,118, 83,105,103,109, 97, 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, - 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117,114,102, 95,112,111,115, 32, - 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32, 47, 42, 32,110,111,114,109, - 97,108,105,122,101,100, 32,105,110,116,101,114,112,111,108, 97,116,101,100, 32,118,101,114,116,101,120, 32,110,111,114,109, 97, -108, 32, 42, 47, 10, 9, 10, 9,118, 82, 49, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32, 99,114,111,115,115, 40, 32, -118, 83,105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32,110,111,114,109, 97,108,105,122, -101, 40, 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 41, 59, 10, 9,102, 68,101,116, - 32, 61, 32,115,105,103,110, 40, 32,100,111,116, 40,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 41, 32, 41, 59, 10, 9, 10, - 9,102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, 68,101,116, 41, 59, 10, 9, -118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117, -100,101, 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, 9,102, 80,114,101,118, 77, - 97,103,110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 10,125, 10, 10,118,111, -105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95,118,105,101,119,115,112, 97, 99,101, 40, 32,118,101, 99, - 51, 32,115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 32, 10, 9, 9, 9, - 9, 9, 9, 9, 32, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32, -118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,102,108,111, - 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32, -118, 78, 97, 99, 99, 95,111,117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, - 82, 49, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, - 32, 41, 32, 10,123, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102, - 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117, -114,102, 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32, - 47, 42, 32,110,111,114,109, 97,108,105,122,101,100, 32,105,110,116,101,114,112,111,108, 97,116,101,100, 32,118,101,114,116,101, -120, 32,110,111,114,109, 97,108, 32, 42, 47, 10, 9, 10, 9,118, 82, 49, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103, -109, 97, 84, 44, 32,118, 78, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105, -103,109, 97, 83, 32, 41, 32, 59, 10, 9,102, 68,101,116, 32, 61, 32,100,111,116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32, -118, 82, 49, 32, 41, 59, 10, 9, 10, 9,102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, - 40,102, 68,101,116, 41, 59, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, - 40,102, 77, 97,103,110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, - 59, 10, 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117, -100,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,116, 97,112, 51, 40, 32,118,101, 99, 51, - 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,104, 83, 99, - 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102, -108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, 10,123, 10, 9,118,101, - 99, 50, 32, 83, 84,108,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 59, 10, 9,118,101, 99, 50, 32, 83, 84,108,114, 32, 61, - 32,116,101,120, 99,111, 46,120,121, 32, 43, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 32, 59, 10, 9,118,101, - 99, 50, 32, 83, 84,117,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32,100, 70,100,121, 40,116,101,120, 99,111, 46, -120,121, 41, 32, 59, 10, 9, 10, 9,102,108,111, 97,116, 32, 72,108,108, 44, 72,108,114, 44, 72,117,108, 59, 10, 9,114,103, 98, -116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,108, 41, 44, 32, 72,108,108, 32, - 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,114, - 41, 44, 32, 72,108,114, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, - 97, 44, 32, 83, 84,117,108, 41, 44, 32, 72,117,108, 32, 41, 59, 10, 9, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101, - 32, 42, 32, 40, 72,108,114, 32, 45, 32, 72,108,108, 41, 59, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, - 40, 72,117,108, 32, 45, 32, 72,108,108, 41, 59, 10,125, 10, 10, 35,105,102,100,101,102, 32, 66, 85, 77, 80, 95, 66, 73, 67, 85, - 66, 73, 67, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95, 98,105, 99,117, 98,105, 99, 40, 32,118,101, 99, - 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,104, 83, - 99, 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32, -102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, 10,123, 10, 9,102, -108,111, 97,116, 32, 72,108, 59, 10, 9,102,108,111, 97,116, 32, 72,114, 59, 10, 9,102,108,111, 97,116, 32, 72,100, 59, 10, 9, -102,108,111, 97,116, 32, 72,117, 59, 10, 9, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116, -101,120, 99,111, 46,120,121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, - 99,111, 46,120,121, 41, 59, 10, 32, 10, 9,118,101, 99, 50, 32, 83, 84,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, - 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,114, 32, 61, 32,116,101,120, 99,111, - 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,100, 32, 61, 32, -116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 10, 9,118,101, 99, 50, 32, 83, - 84,117, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 10, 9, 10, - 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108, 41, 44, 32, 72,108, - 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,114, 41, 44, - 32, 72,114, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84, -100, 41, 44, 32, 72,100, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, - 32, 83, 84,117, 41, 44, 32, 72,117, 41, 59, 10, 9, 10, 9,118,101, 99, 50, 32,100, 72,100,120,121, 32, 61, 32,118,101, 99, 50, - 40, 72,114, 32, 45, 32, 72,108, 44, 32, 72,117, 32, 45, 32, 72,100, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 66,108,101,110, -100, 32, 61, 32, 99,108, 97,109,112, 40, 49, 46, 48, 45,116,101,120,116,117,114,101, 81,117,101,114,121, 76, 79, 68, 40,105,109, - 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 46,120, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,105,102, 40,102, - 66,108,101,110,100, 33, 61, 48, 46, 48, 41, 10, 9,123, 10, 9, 9, 47, 47, 32,116,104,101, 32,100,101,114,105,118, 97,116,105, -118,101, 32,111,102, 32,116,104,101, 32, 98,105, 99,117, 98,105, 99, 32,115, 97,109,112,108,105,110,103, 32,111,102, 32,108,101, -118,101,108, 32, 48, 10, 9, 9,105,118,101, 99, 50, 32,118, 68,105,109, 59, 10, 9, 9,118, 68,105,109, 32, 61, 32,116,101,120, -116,117,114,101, 83,105,122,101, 40,105,109, 97, 44, 32, 48, 41, 59, 10, 10, 9, 9, 47, 47, 32,116, 97,107,105,110,103, 32,116, -104,101, 32,102,114, 97, 99,116, 32,112, 97,114,116, 32,111,102, 32,116,104,101, 32,116,101,120,116,117,114,101, 32, 99,111,111, -114,100,105,110, 97,116,101, 32,105,115, 32, 97, 32,104, 97,114,100, 99,111,100,101,100, 32,119,114, 97,112, 32,109,111,100,101, - 46, 10, 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32, 97, 99, 99,101,112,116, 97, 98,108,101, 32, 97,115, 32,116,101,120, -116,117,114,101,115, 32,117,115,101, 32,119,114, 97,112, 32,109,111,100,101, 32,101,120, 99,108,117,115,105,118,101,108,121, 32, -105,110, 32, 51, 68, 32,118,105,101,119, 32,101,108,115,101,119,104,101,114,101, 32,105,110, 32, 98,108,101,110,100,101,114, 46, - 32, 10, 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32,100,111,110,101, 32,115,111, 32,116,104, 97,116, 32,119,101, 32, 99, - 97,110, 32,115,116,105,108,108, 32,103,101,116, 32, 97, 32,118, 97,108,105,100, 32,116,101,120,101,108, 32,119,105,116,104, 32, -117,118,115, 32,111,117,116,115,105,100,101, 32,116,104,101, 32, 48, 44, 49, 32,114, 97,110,103,101, 10, 9, 9, 47, 47, 32, 98, -121, 32,116,101,120,101,108, 70,101,116, 99,104, 32, 98,101,108,111,119, 44, 32, 97,115, 32, 99,111,111,114,100,105,110, 97,116, -101,115, 32, 97,114,101, 32, 99,108, 97,109,112,101,100, 32,119,104,101,110, 32,117,115,105,110,103, 32,116,104,105,115, 32,102, -117,110, 99,116,105,111,110, 46, 10, 9, 9,118,101, 99, 50, 32,102, 84,101,120, 76,111, 99, 32, 61, 32,118, 68,105,109, 42,102, -114, 97, 99,116, 40,116,101,120, 99,111, 46,120,121, 41, 32, 45, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 32, 48, 46, 53, 41, 59, - 10, 9, 9,105,118,101, 99, 50, 32,105, 84,101,120, 76,111, 99, 32, 61, 32,105,118,101, 99, 50, 40,102,108,111,111,114, 40,102, - 84,101,120, 76,111, 99, 41, 41, 59, 10, 9, 9,118,101, 99, 50, 32,116, 32, 61, 32, 99,108, 97,109,112, 40,102, 84,101,120, 76, -111, 99, 32, 45, 32,105, 84,101,120, 76,111, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 9, 9, 47, 47, 32,115, 97,116, - 32,106,117,115,116, 32,116,111, 32, 98,101, 32,112,101,100, 97,110,116,105, 99, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, +116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,105,110, 99,111,108, 32, 61, 32,102, 97, 99,109, 42,111, +117,116, 99,111,108, 32, 43, 32,102, 97, 99,116, 42, 97, 98,115, 40,116,101,120, 99,111,108, 32, 45, 32,111,117,116, 99,111,108, + 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,100, 97,114,107, 40,102,108,111, 97,116, + 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99, +116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10, +123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40, +102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61, + 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 10, 9,105,102, 40, 99,111,108, 32, 60, 32,111,117,116, 99,111,108, 41, 32, +105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108, + 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,108,105,103,104,116, 40,102,108,111, 97,116, + 32,111,117,116, 99,111,108, 44, 32,102,108,111, 97,116, 32,116,101,120, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 97, 99, +116, 44, 32,102,108,111, 97,116, 32,102, 97, 99,103, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110, 99,111,108, 41, 10, +123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,109, 59, 10, 9,109,116,101,120, 95,118, 97,108,117,101, 95,118, 97,114,115, 40, +102, 97, 99,116, 44, 32,102, 97, 99,103, 44, 32,102, 97, 99,109, 41, 59, 10, 10, 9,102,108,111, 97,116, 32, 99,111,108, 32, 61, + 32,102, 97, 99,116, 42,116,101,120, 99,111,108, 59, 10, 9,105,102, 40, 99,111,108, 32, 62, 32,111,117,116, 99,111,108, 41, 32, +105,110, 99,111,108, 32, 61, 32, 99,111,108, 59, 32,101,108,115,101, 32,105,110, 99,111,108, 32, 61, 32,111,117,116, 99,111,108, + 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 99,108, 97,109,112, 95,112,111,115,105,116, +105,118,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, + 10,123, 10, 9,111,117,116,102, 97, 99, 32, 61, 32,109, 97,120, 40,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118, +111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32, +111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 10,123, 10, 9,111,117,116,102, 97, 99, 32, 61, 32, 99,108, + 97,109,112, 40,102, 97, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, + 95,104, 97,114, 95,100,105,118,105,100,101, 40,102,108,111, 97,116, 32,104, 97,114, 44, 32,111,117,116, 32,102,108,111, 97,116, + 32,111,117,116,104, 97,114, 41, 10,123, 10, 9,111,117,116,104, 97,114, 32, 61, 32,104, 97,114, 47, 49, 50, 56, 46, 48, 59, 10, +125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,104, 97,114, 95,109,117,108,116,105,112,108,121, 95, 99,108, 97,109,112, 40, +102,108,111, 97,116, 32,104, 97,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,104, 97,114, 41, 10,123, 10, 9, +104, 97,114, 32, 42, 61, 32, 49, 50, 56, 46, 48, 59, 10, 10, 9,105,102, 40,104, 97,114, 32, 60, 32, 49, 46, 48, 41, 32,111,117, +116,104, 97,114, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40,104, 97,114, 32, 62, 32, 53, 49, 49, 46, 48, + 41, 32,111,117,116,104, 97,114, 32, 61, 32, 53, 49, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,111,117,116,104, 97,114, 32, 61, + 32,104, 97,114, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 97,108,112,104, 97, 95,102,114,111,109, 95, 99,111, +108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 41, 10,123, 10, 9, + 97,108,112,104, 97, 32, 61, 32, 99,111,108, 46, 97, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 97,108,112,104, + 97, 95,116,111, 95, 99,111,108, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32, 97,108,112,104, 97, 44, 32, +111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, + 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 97,108,112,104, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, +114,103, 98,116,111,105,110,116, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,116, +101,110,115,105,116,121, 41, 10,123, 10, 9,105,110,116,101,110,115,105,116,121, 32, 61, 32,100,111,116, 40,118,101, 99, 51, 40, + 48, 46, 51, 53, 44, 32, 48, 46, 52, 53, 44, 32, 48, 46, 50, 41, 44, 32,114,103, 98, 46,114,103, 98, 41, 59, 10,125, 10, 10,118, +111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,105,110,118,101,114,116, 40,102,108,111, 97,116, 32,105,110,118, 97, +108,117,101, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118, 97,108,117,101, 41, 10,123, 10, 9,111,117,116,118, + 97,108,117,101, 32, 61, 32, 49, 46, 48, 32, 45, 32,105,110,118, 97,108,117,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, +101,120, 95,114,103, 98, 95,105,110,118,101,114,116, 40,118,101, 99, 52, 32,105,110,114,103, 98, 44, 32,111,117,116, 32,118,101, + 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,118,101, 99, 51, + 40, 49, 46, 48, 41, 32, 45, 32,105,110,114,103, 98, 46,114,103, 98, 44, 32,105,110,114,103, 98, 46, 97, 41, 59, 10,125, 10, 10, +118,111,105,100, 32,109,116,101,120, 95,118, 97,108,117,101, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32,115,116, +101,110, 99,105,108, 44, 32,102,108,111, 97,116, 32,105,110,116,101,110,115,105,116,121, 44, 32,111,117,116, 32,102,108,111, 97, +116, 32,111,117,116,115,116,101,110, 99,105,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105,110,116,101,110, +115,105,116,121, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99,116, 32, 61, 32,105,110,116,101,110,115,105,116,121, 59, + 10, 9,111,117,116,105,110,116,101,110,115,105,116,121, 32, 61, 32,105,110,116,101,110,115,105,116,121, 42,115,116,101,110, 99, +105,108, 59, 10, 9,111,117,116,115,116,101,110, 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, 59, 10, +125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,114,103, 98, 95,115,116,101,110, 99,105,108, 40,102,108,111, 97,116, 32,115, +116,101,110, 99,105,108, 44, 32,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115, +116,101,110, 99,105,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,114,103, 98, 41, 10,123, 10, 9,102,108,111, 97, +116, 32,102, 97, 99,116, 32, 61, 32,114,103, 98, 46, 97, 59, 10, 9,111,117,116,114,103, 98, 32, 61, 32,118,101, 99, 52, 40,114, +103, 98, 46,114,103, 98, 44, 32,114,103, 98, 46, 97, 42,115,116,101,110, 99,105,108, 41, 59, 10, 9,111,117,116,115,116,101,110, + 99,105,108, 32, 61, 32,115,116,101,110, 99,105,108, 42,102, 97, 99,116, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, + 95,109, 97,112,112,105,110,103, 95,111,102,115, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,118,101, 99, 51, 32,111,102, +115, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116,101,120, 99,111, 41, 10,123, 10, 9,111,117,116,116,101,120, 99, +111, 32, 61, 32,116,101,120, 99,111, 32, 43, 32,111,102,115, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,109, 97, +112,112,105,110,103, 95,115,105,122,101, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,118,101, 99, 51, 32,115,105,122,101, + 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,116,101,120, 99,111, 41, 10,123, 10, 9,111,117,116,116,101,120, 99,111, + 32, 61, 32,115,105,122,101, 42,116,101,120, 99,111, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 50,100, 95,109, + 97,112,112,105,110,103, 40,118,101, 99, 51, 32,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,118,101, 99, + 41, 10,123, 10, 9,111,117,116,118,101, 99, 32, 61, 32,118,101, 99, 51, 40,118,101, 99, 46,120,121, 42, 48, 46, 53, 32, 43, 32, +118,101, 99, 50, 40, 48, 46, 53, 44, 32, 48, 46, 53, 41, 44, 32,118,101, 99, 46,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32, +109,116,101,120, 95,105,109, 97,103,101, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, + 32,105,109, 97, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, 97,108,117,101, 44, 32,111,117,116, 32,118,101, 99, 52, 32, + 99,111,108,111,114, 41, 10,123, 10, 9, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, + 32,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,118, 97,108,117,101, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105, +100, 32,109,116,101,120, 95,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101, +114, 50, 68, 32,105,109, 97, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 41, 10,123, 10, 9, 47, 47, 32, + 84,104,101, 32,105,110,118,101,114,116, 32,111,102, 32,116,104,101, 32,114,101,100, 32, 99,104, 97,110,110,101,108, 32,105,115, + 32,116,111, 32,109, 97,107,101, 10, 9, 47, 47, 32,116,104,101, 32,110,111,114,109, 97,108, 32,109, 97,112, 32, 99,111,109,112, +108,105, 97,110,116, 32,119,105,116,104, 32,116,104,101, 32,111,117,116,115,105,100,101, 32,119,111,114,108,100, 46, 10, 9, 47, + 47, 32, 73,116, 32,110,101,101,100,115, 32,116,111, 32, 98,101, 32,100,111,110,101, 32, 98,101, 99, 97,117,115,101, 32,105,110, + 32, 66,108,101,110,100,101,114, 10, 9, 47, 47, 32,116,104,101, 32,110,111,114,109, 97,108, 32,117,115,101,100, 32,112,111,105, +110,116,115, 32,105,110,119, 97,114,100, 46, 10, 9, 47, 47, 32, 83,104,111,117,108,100, 32,116,104,105,115, 32,101,118,101,114, + 32, 99,104, 97,110,103,101, 32,116,104,105,115, 32,110,101,103, 97,116,101, 32,109,117,115,116, 32, 98,101, 32,114,101,109,111, +118,101,100, 46, 10, 32, 32, 32, 32,118,101, 99, 52, 32, 99,111,108,111,114, 32, 61, 32,116,101,120,116,117,114,101, 50, 68, 40, +105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32, 50, 46, 48, 42, 40,118, +101, 99, 51, 40, 45, 99,111,108,111,114, 46,114, 44, 32, 99,111,108,111,114, 46,103, 44, 32, 99,111,108,111,114, 46, 98, 41, 32, + 45, 32,118,101, 99, 51, 40, 45, 48, 46, 53, 44, 32, 48, 46, 53, 44, 32, 48, 46, 53, 41, 41, 59, 10,125, 10, 10,118,111,105,100, + 32,109,116,101,120, 95, 98,117,109,112, 95,110,111,114,109, 97,108,115, 95,105,110,105,116, 40, 32,118,101, 99, 51, 32,118, 78, + 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78,111,114,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 32, 41, 10,123, 10, 9, +118, 78,111,114,103, 32, 61, 32,118, 78, 59, 10, 9,118, 78, 97, 99, 99, 32, 61, 32,118, 78, 59, 10, 9,102, 80,114,101,118, 77, + 97,103,110,105,116,117,100,101, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10, 47, 42, 42, 32,104,101,108,112,101,114, 32,109,101, +116,104,111,100, 32,116,111, 32,101,120,116,114, 97, 99,116, 32,116,104,101, 32,117,112,112,101,114, 32,108,101,102,116, 32, 51, +120, 51, 32,109, 97,116,114,105,120, 32,102,114,111,109, 32, 97, 32, 52,120, 52, 32,109, 97,116,114,105,120, 32, 42, 47, 10,109, + 97,116, 51, 32,116,111, 95,109, 97,116, 51, 40,109, 97,116, 52, 32,109, 52, 41, 10,123, 10, 9,109, 97,116, 51, 32,109, 51, 59, + 10, 9,109, 51, 91, 48, 93, 32, 61, 32,109, 52, 91, 48, 93, 46,120,121,122, 59, 10, 9,109, 51, 91, 49, 93, 32, 61, 32,109, 52, + 91, 49, 93, 46,120,121,122, 59, 10, 9,109, 51, 91, 50, 93, 32, 61, 32,109, 52, 91, 50, 93, 46,120,121,122, 59, 10, 9,114,101, +116,117,114,110, 32,109, 51, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95, +111, 98,106,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,117, +114,102, 95,110,111,114,109, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,109, 97,116, 52, 32,109, 86,105,101,119, 44, 32,109, 97, +116, 52, 32,109, 86,105,101,119, 73,110,118, 44, 32,109, 97,116, 52, 32,109, 79, 98,106, 44, 32,109, 97,116, 52, 32,109, 79, 98, +106, 73,110,118, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105, +116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, + 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111, +117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, + 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, + 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9,109, 97,116, 51, 32,111, 98,106, 50,118,105,101,119, 32, 61, 32,116,111, + 95,109, 97,116, 51, 40,103,108, 95, 77,111,100,101,108, 86,105,101,119, 77, 97,116,114,105,120, 41, 59, 10, 9,109, 97,116, 51, + 32,118,105,101,119, 50,111, 98,106, 32, 61, 32,116,111, 95,109, 97,116, 51, 40,103,108, 95, 77,111,100,101,108, 86,105,101,119, + 77, 97,116,114,105,120, 73,110,118,101,114,115,101, 41, 59, 10, 9, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 83, 32, + 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9, +118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,118,105,101,119, 50,111, 98,106, 32, 42, 32,100, 70,100,121, 40, 32, +115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,110,111,114,109, 97,108,105,122,101, + 40, 32,115,117,114,102, 95,110,111,114,109, 32, 42, 32,111, 98,106, 50,118,105,101,119, 32, 41, 59, 10, 10, 9,118, 82, 49, 32, + 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32, 99, +114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 59, 10, 9,102, 68,101,116, 32, 61, 32,100,111, +116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 32, 41, 59, 10, 9, 10, 9, 47, 42, 32,112,114,101,116,114, 97, +110,115,102,111,114,109, 32,118, 78, 97, 99, 99, 32, 40,105,110, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, + 41, 32,117,115,105,110,103, 32,116,104,101, 32,105,110,118,101,114,115,101, 32,116,114, 97,110,115,112,111,115,101,100, 32, 42, + 47, 10, 9,118, 82, 49, 32, 61, 32,118, 82, 49, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 10, 9,118, 82, 50, 32, 61, 32, +118, 82, 50, 32, 42, 32,118,105,101,119, 50,111, 98,106, 59, 10, 9,118, 78, 32, 61, 32,118, 78, 32, 42, 32,118,105,101,119, 50, +111, 98,106, 59, 10, 9, 10, 9,102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, + 68,101,116, 41, 32, 42, 32,108,101,110,103,116,104, 40,118, 78, 41, 59, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32, +118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118, 77, 97, +103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, + 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, + 95,105,110,105,116, 95,116,101,120,116,117,114,101,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32,115,117,114,102, 95,112,111, +115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,102,108, +111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, + 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, + 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, + 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,111,117,116, 32,118, +101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, 32, 10,123, 10, 9,118,101, + 99, 51, 32,118, 83,105,103,109, 97, 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, 10, 9, +118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117,114,102, 95,112,111,115, 32, 41, 59, + 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32, 47, 42, 32,110,111,114,109, 97,108, +105,122,101,100, 32,105,110,116,101,114,112,111,108, 97,116,101,100, 32,118,101,114,116,101,120, 32,110,111,114,109, 97,108, 32, + 42, 47, 10, 9, 10, 9,118, 82, 49, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32, 99,114,111,115,115, 40, 32,118, 83, +105,103,109, 97, 84, 44, 32,118, 78, 32, 41, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, + 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, 97, 83, 32, 41, 32, 41, 59, 10, 9,102, 68,101,116, 32, 61, + 32,115,105,103,110, 40, 32,100,111,116, 40,118, 83,105,103,109, 97, 83, 44, 32,118, 82, 49, 41, 32, 41, 59, 10, 9, 10, 9,102, +108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, 68,101,116, 41, 59, 10, 9,118, 78, + 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, 77, 97,103,110,105,116,117,100,101, + 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, 9,102, 80,114,101,118, 77, 97,103, +110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, 59, 10,125, 10, 10,118,111,105,100, + 32,109,116,101,120, 95, 98,117,109,112, 95,105,110,105,116, 95,118,105,101,119,115,112, 97, 99,101, 40, 32,118,101, 99, 51, 32, +115,117,114,102, 95,112,111,115, 44, 32,118,101, 99, 51, 32,115,117,114,102, 95,110,111,114,109, 44, 32, 10, 9, 9, 9, 9, 9, + 9, 9, 32, 32, 32,102,108,111, 97,116, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 44, 32,118,101, + 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, + 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, + 97, 99, 99, 95,111,117,116, 44, 32, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 49, + 44, 32,111,117,116, 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,102, 68,101,116, 32, 41, + 32, 10,123, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 83, 32, 61, 32,100, 70,100,120, 40, 32,115,117,114,102, 95,112, +111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 83,105,103,109, 97, 84, 32, 61, 32,100, 70,100,121, 40, 32,115,117,114,102, + 95,112,111,115, 32, 41, 59, 10, 9,118,101, 99, 51, 32,118, 78, 32, 61, 32,115,117,114,102, 95,110,111,114,109, 59, 32, 47, 42, + 32,110,111,114,109, 97,108,105,122,101,100, 32,105,110,116,101,114,112,111,108, 97,116,101,100, 32,118,101,114,116,101,120, 32, +110,111,114,109, 97,108, 32, 42, 47, 10, 9, 10, 9,118, 82, 49, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 83,105,103,109, 97, + 84, 44, 32,118, 78, 32, 41, 59, 10, 9,118, 82, 50, 32, 61, 32, 99,114,111,115,115, 40, 32,118, 78, 44, 32,118, 83,105,103,109, + 97, 83, 32, 41, 32, 59, 10, 9,102, 68,101,116, 32, 61, 32,100,111,116, 32, 40, 32,118, 83,105,103,109, 97, 83, 44, 32,118, 82, + 49, 32, 41, 59, 10, 9, 10, 9,102,108,111, 97,116, 32,102, 77, 97,103,110,105,116,117,100,101, 32, 61, 32, 97, 98,115, 40,102, + 68,101,116, 41, 59, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 42, 32, 40,102, + 77, 97,103,110,105,116,117,100,101, 32, 47, 32,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,105,110, 41, 59, 10, + 9,102, 80,114,101,118, 77, 97,103,110,105,116,117,100,101, 95,111,117,116, 32, 61, 32,102, 77, 97,103,110,105,116,117,100,101, + 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,116, 97,112, 51, 40, 32,118,101, 99, 51, 32,116, +101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97,108, +101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108,111, + 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, 10,123, 10, 9,118,101, 99, 50, + 32, 83, 84,108,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 59, 10, 9,118,101, 99, 50, 32, 83, 84,108,114, 32, 61, 32,116, +101,120, 99,111, 46,120,121, 32, 43, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 32, 59, 10, 9,118,101, 99, 50, + 32, 83, 84,117,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, + 41, 32, 59, 10, 9, 10, 9,102,108,111, 97,116, 32, 72,108,108, 44, 72,108,114, 44, 72,117,108, 59, 10, 9,114,103, 98,116,111, + 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,108, 41, 44, 32, 72,108,108, 32, 41, 59, + 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108,114, 41, 44, + 32, 72,108,114, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, + 32, 83, 84,117,108, 41, 44, 32, 72,117,108, 32, 41, 59, 10, 9, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, + 32, 40, 72,108,114, 32, 45, 32, 72,108,108, 41, 59, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, 40, 72, +117,108, 32, 45, 32, 72,108,108, 41, 59, 10,125, 10, 10, 35,105,102,100,101,102, 32, 66, 85, 77, 80, 95, 66, 73, 67, 85, 66, 73, + 67, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95, 98,105, 99,117, 98,105, 99, 40, 32,118,101, 99, 51, 32, +116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97, +108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108, +111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, 10,123, 10, 9,102,108,111, + 97,116, 32, 72,108, 59, 10, 9,102,108,111, 97,116, 32, 72,114, 59, 10, 9,102,108,111, 97,116, 32, 72,100, 59, 10, 9,102,108, +111, 97,116, 32, 72,117, 59, 10, 9, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, + 99,111, 46,120,121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, + 46,120,121, 41, 59, 10, 32, 10, 9,118,101, 99, 50, 32, 83, 84,108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, + 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,114, 32, 61, 32,116,101,120, 99,111, 46,120, +121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,100, 32, 61, 32,116,101, +120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,117, + 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 10, 9, 10, 9,114, +103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,108, 41, 44, 32, 72,108, 41, 59, + 10, 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,114, 41, 44, 32, 72, +114, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,100, 41, + 44, 32, 72,100, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, + 84,117, 41, 44, 32, 72,117, 41, 59, 10, 9, 10, 9,118,101, 99, 50, 32,100, 72,100,120,121, 32, 61, 32,118,101, 99, 50, 40, 72, +114, 32, 45, 32, 72,108, 44, 32, 72,117, 32, 45, 32, 72,100, 41, 59, 10, 9,102,108,111, 97,116, 32,102, 66,108,101,110,100, 32, + 61, 32, 99,108, 97,109,112, 40, 49, 46, 48, 45,116,101,120,116,117,114,101, 81,117,101,114,121, 76, 79, 68, 40,105,109, 97, 44, + 32,116,101,120, 99,111, 46,120,121, 41, 46,120, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,105,102, 40,102, 66,108, +101,110,100, 33, 61, 48, 46, 48, 41, 10, 9,123, 10, 9, 9, 47, 47, 32,116,104,101, 32,100,101,114,105,118, 97,116,105,118,101, + 32,111,102, 32,116,104,101, 32, 98,105, 99,117, 98,105, 99, 32,115, 97,109,112,108,105,110,103, 32,111,102, 32,108,101,118,101, +108, 32, 48, 10, 9, 9,105,118,101, 99, 50, 32,118, 68,105,109, 59, 10, 9, 9,118, 68,105,109, 32, 61, 32,116,101,120,116,117, +114,101, 83,105,122,101, 40,105,109, 97, 44, 32, 48, 41, 59, 10, 10, 9, 9, 47, 47, 32,116, 97,107,105,110,103, 32,116,104,101, + 32,102,114, 97, 99,116, 32,112, 97,114,116, 32,111,102, 32,116,104,101, 32,116,101,120,116,117,114,101, 32, 99,111,111,114,100, +105,110, 97,116,101, 32,105,115, 32, 97, 32,104, 97,114,100, 99,111,100,101,100, 32,119,114, 97,112, 32,109,111,100,101, 46, 10, + 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32, 97, 99, 99,101,112,116, 97, 98,108,101, 32, 97,115, 32,116,101,120,116,117, +114,101,115, 32,117,115,101, 32,119,114, 97,112, 32,109,111,100,101, 32,101,120, 99,108,117,115,105,118,101,108,121, 32,105,110, + 32, 51, 68, 32,118,105,101,119, 32,101,108,115,101,119,104,101,114,101, 32,105,110, 32, 98,108,101,110,100,101,114, 46, 32, 10, + 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32,100,111,110,101, 32,115,111, 32,116,104, 97,116, 32,119,101, 32, 99, 97,110, + 32,115,116,105,108,108, 32,103,101,116, 32, 97, 32,118, 97,108,105,100, 32,116,101,120,101,108, 32,119,105,116,104, 32,117,118, +115, 32,111,117,116,115,105,100,101, 32,116,104,101, 32, 48, 44, 49, 32,114, 97,110,103,101, 10, 9, 9, 47, 47, 32, 98,121, 32, +116,101,120,101,108, 70,101,116, 99,104, 32, 98,101,108,111,119, 44, 32, 97,115, 32, 99,111,111,114,100,105,110, 97,116,101,115, + 32, 97,114,101, 32, 99,108, 97,109,112,101,100, 32,119,104,101,110, 32,117,115,105,110,103, 32,116,104,105,115, 32,102,117,110, + 99,116,105,111,110, 46, 10, 9, 9,118,101, 99, 50, 32,102, 84,101,120, 76,111, 99, 32, 61, 32,118, 68,105,109, 42,102,114, 97, + 99,116, 40,116,101,120, 99,111, 46,120,121, 41, 32, 45, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 32, 48, 46, 53, 41, 59, 10, 9, + 9,105,118,101, 99, 50, 32,105, 84,101,120, 76,111, 99, 32, 61, 32,105,118,101, 99, 50, 40,102,108,111,111,114, 40,102, 84,101, +120, 76,111, 99, 41, 41, 59, 10, 9, 9,118,101, 99, 50, 32,116, 32, 61, 32, 99,108, 97,109,112, 40,102, 84,101,120, 76,111, 99, + 32, 45, 32,105, 84,101,120, 76,111, 99, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 9, 9, 47, 47, 32,115, 97,116, 32,106, +117,115,116, 32,116,111, 32, 98,101, 32,112,101,100, 97,110,116,105, 99, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 10, 32, 42, 32, 84,104,105,115, 32, 98,108,111, 99,107, - 32,119,105,108,108, 32,114,101,112,108, 97, 99,101, 32,116,104,101, 32,111,110,101, 32, 98,101,108,111,119, 32,119,104,101,110, - 32,111,110,101, 32, 99,104, 97,110,110,101,108, 32,116,101,120,116,117,114,101,115, 32, 97,114,101, 32,112,114,111,112,101,114, -108,121, 32,115,117,112,112,111,114,116,101,100, 46, 32, 42, 10, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 10, 32, 42, 32, 84,104,105,115, 32, 98,108,111, 99,107, 32,119, +105,108,108, 32,114,101,112,108, 97, 99,101, 32,116,104,101, 32,111,110,101, 32, 98,101,108,111,119, 32,119,104,101,110, 32,111, +110,101, 32, 99,104, 97,110,110,101,108, 32,116,101,120,116,117,114,101,115, 32, 97,114,101, 32,112,114,111,112,101,114,108,121, + 32,115,117,112,112,111,114,116,101,100, 46, 32, 42, 10, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 85, 76, 32, 61, - 32,116,101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, - 99, 50, 40, 45, 49, 44, 45, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, - 41, 59, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 85, 82, 32, 61, 32,116,101,120,116,117,114,101, 71, 97, -116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, 40, 49, 44, 45, 49, 41, 32, 43, - 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, 10, 9, 9,118,101, 99, 52, 32,118, - 83, 97,109,112,108,101,115, 76, 76, 32, 61, 32,116,101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40, -105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, 40, 45, 49, 44, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, - 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 76, 82, 32, 61, - 32,116,101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, - 99, 50, 40, 49, 44, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, - 10, 10, 9, 9,109, 97,116, 52, 32, 72, 32, 61, 32,109, 97,116, 52, 40,118, 83, 97,109,112,108,101,115, 85, 76, 46,119, 44, 32, -118, 83, 97,109,112,108,101,115, 85, 76, 46,120, 44, 32,118, 83, 97,109,112,108,101,115, 76, 76, 46,119, 44, 32,118, 83, 97,109, -112,108,101,115, 76, 76, 46,120, 44, 10, 9, 9, 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 76, 46,122, 44, 32,118, 83, 97, -109,112,108,101,115, 85, 76, 46,121, 44, 32,118, 83, 97,109,112,108,101,115, 76, 76, 46,122, 44, 32,118, 83, 97,109,112,108,101, -115, 76, 76, 46,121, 44, 10, 9, 9, 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 82, 46,119, 44, 32,118, 83, 97,109,112,108, -101,115, 85, 82, 46,120, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,119, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, - 46,120, 44, 10, 9, 9, 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 82, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 85, - 82, 46,121, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,121, 41, - 59, 10, 42, 47, 9, 10, 9, 9,105,118,101, 99, 50, 32,105, 84,101,120, 76,111, 99, 77,111,100, 32, 61, 32,105, 84,101,120, 76, -111, 99, 32, 43, 32,105,118,101, 99, 50, 40, 45, 49, 44, 32, 45, 49, 41, 59, 10, 10, 9, 9,109, 97,116, 52, 32, 72, 59, 10, 9, - 9, 10, 9, 9,102,111,114, 40,105,110,116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 52, 59, 32,105, 43, 43, 41,123, 10, - 9, 9, 9,102,111,114, 40,105,110,116, 32,106, 32, 61, 32, 48, 59, 32,106, 32, 60, 32, 52, 59, 32,106, 43, 43, 41,123, 10, 9, - 9, 9, 9,105,118,101, 99, 50, 32,105, 84,101,120, 84,109,112, 32, 61, 32,105, 84,101,120, 76,111, 99, 77,111,100, 32, 43, 32, -105,118,101, 99, 50, 40,105, 44,106, 41, 59, 10, 9, 9, 9, 9, 10, 9, 9, 9, 9, 47, 47, 32,119,114, 97,112, 32,116,101,120, -116,117,114,101, 32, 99,111,111,114,100,105,110, 97,116,101,115, 32,109, 97,110,117, 97,108,108,121, 32,102,111,114, 32,116,101, -120,101,108, 70,101,116, 99,104, 32,116,111, 32,119,111,114,107, 32,111,110, 32,117,118,115, 32,111,105,116,115,105,100,101, 32, -116,104,101, 32, 48, 44, 49, 32,114, 97,110,103,101, 46, 10, 9, 9, 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32,103,117, - 97,114, 97,110,116,101,101,100, 32,116,111, 32,119,111,114,107, 32,115,105,110, 99,101, 32,119,101, 32,116, 97,107,101, 32,116, -104,101, 32,102,114, 97, 99,116,105,111,110, 97,108, 32,112, 97,114,116, 32,111,102, 32,116,104,101, 32,117,118, 32, 97, 98,111, -118,101, 46, 10, 9, 9, 9, 9,105, 84,101,120, 84,109,112, 46,120, 32, 61, 32, 40,105, 84,101,120, 84,109,112, 46,120, 32, 60, - 32, 48, 41, 63, 32,105, 84,101,120, 84,109,112, 46,120, 32, 43, 32,118, 68,105,109, 46,120, 32, 58, 32, 40, 40,105, 84,101,120, - 84,109,112, 46,120, 32, 62, 61, 32,118, 68,105,109, 46,120, 41, 63, 32,105, 84,101,120, 84,109,112, 46,120, 32, 45, 32,118, 68, -105,109, 46,120, 32, 58, 32,105, 84,101,120, 84,109,112, 46,120, 41, 59, 10, 9, 9, 9, 9,105, 84,101,120, 84,109,112, 46,121, - 32, 61, 32, 40,105, 84,101,120, 84,109,112, 46,121, 32, 60, 32, 48, 41, 63, 32,105, 84,101,120, 84,109,112, 46,121, 32, 43, 32, -118, 68,105,109, 46,121, 32, 58, 32, 40, 40,105, 84,101,120, 84,109,112, 46,121, 32, 62, 61, 32,118, 68,105,109, 46,121, 41, 63, - 32,105, 84,101,120, 84,109,112, 46,121, 32, 45, 32,118, 68,105,109, 46,121, 32, 58, 32,105, 84,101,120, 84,109,112, 46,121, 41, - 59, 10, 10, 9, 9, 9, 9,114,103, 98,116,111, 98,119, 40,116,101,120,101,108, 70,101,116, 99,104, 40,105,109, 97, 44, 32,105, - 84,101,120, 84,109,112, 44, 32, 48, 41, 44, 32, 72, 91,105, 93, 91,106, 93, 41, 59, 10, 9, 9, 9,125, 10, 9, 9,125, 10, 9, - 9, 10, 9, 9,102,108,111, 97,116, 32,120, 32, 61, 32,116, 46,120, 44, 32,121, 32, 61, 32,116, 46,121, 59, 10, 9, 9,102,108, -111, 97,116, 32,120, 50, 32, 61, 32,120, 32, 42, 32,120, 44, 32,120, 51, 32, 61, 32,120, 50, 32, 42, 32,120, 44, 32,121, 50, 32, - 61, 32,121, 32, 42, 32,121, 44, 32,121, 51, 32, 61, 32,121, 50, 32, 42, 32,121, 59, 10, 10, 9, 9,118,101, 99, 52, 32, 88, 32, - 61, 32,118,101, 99, 52, 40, 45, 48, 46, 53, 42, 40,120, 51, 43,120, 41, 43,120, 50, 44, 9, 9, 49, 46, 53, 42,120, 51, 45, 50, - 46, 53, 42,120, 50, 43, 49, 44, 9, 45, 49, 46, 53, 42,120, 51, 43, 50, 42,120, 50, 43, 48, 46, 53, 42,120, 44, 9, 9, 48, 46, - 53, 42, 40,120, 51, 45,120, 50, 41, 41, 59, 10, 9, 9,118,101, 99, 52, 32, 89, 32, 61, 32,118,101, 99, 52, 40, 45, 48, 46, 53, - 42, 40,121, 51, 43,121, 41, 43,121, 50, 44, 9, 9, 49, 46, 53, 42,121, 51, 45, 50, 46, 53, 42,121, 50, 43, 49, 44, 9, 45, 49, - 46, 53, 42,121, 51, 43, 50, 42,121, 50, 43, 48, 46, 53, 42,121, 44, 9, 9, 48, 46, 53, 42, 40,121, 51, 45,121, 50, 41, 41, 59, - 10, 9, 9,118,101, 99, 52, 32,100, 88, 32, 61, 32,118,101, 99, 52, 40, 45, 49, 46, 53, 42,120, 50, 43, 50, 42,120, 45, 48, 46, - 53, 44, 9, 9, 52, 46, 53, 42,120, 50, 45, 53, 42,120, 44, 9, 9, 9, 45, 52, 46, 53, 42,120, 50, 43, 52, 42,120, 43, 48, 46, - 53, 44, 9, 9, 49, 46, 53, 42,120, 50, 45,120, 41, 59, 10, 9, 9,118,101, 99, 52, 32,100, 89, 32, 61, 32,118,101, 99, 52, 40, - 45, 49, 46, 53, 42,121, 50, 43, 50, 42,121, 45, 48, 46, 53, 44, 9, 9, 52, 46, 53, 42,121, 50, 45, 53, 42,121, 44, 9, 9, 9, - 45, 52, 46, 53, 42,121, 50, 43, 52, 42,121, 43, 48, 46, 53, 44, 9, 9, 49, 46, 53, 42,121, 50, 45,121, 41, 59, 10, 9, 10, 9, - 9, 47, 47, 32, 99,111,109,112,108,101,116,101, 32,100,101,114,105,118, 97,116,105,118,101, 32,105,110, 32,110,111,114,109, 97, -108,105,122,101,100, 32, 99,111,111,114,100,105,110, 97,116,101,115, 32, 40,109,117,108, 32, 98,121, 32,118, 68,105,109, 41, 10, - 9, 9,118,101, 99, 50, 32,100, 72,100, 83, 84, 32, 61, 32,118, 68,105,109, 32, 42, 32,118,101, 99, 50, 40,100,111,116, 40, 89, - 44, 32, 72, 32, 42, 32,100, 88, 41, 44, 32,100,111,116, 40,100, 89, 44, 32, 72, 32, 42, 32, 88, 41, 41, 59, 10, 10, 9, 9, 47, - 47, 32,116,114, 97,110,115,102,111,114,109, 32,100,101,114,105,118, 97,116,105,118,101, 32,116,111, 32,115, 99,114,101,101,110, - 45,115,112, 97, 99,101, 10, 9, 9,118,101, 99, 50, 32,100, 72,100,120,121, 95, 98,105, 99,117, 98,105, 99, 32, 61, 32,118,101, - 99, 50, 40, 32,100, 72,100, 83, 84, 46,120, 32, 42, 32, 84,101,120, 68,120, 46,120, 32, 43, 32,100, 72,100, 83, 84, 46,121, 32, - 42, 32, 84,101,120, 68,120, 46,121, 44, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,100, 72,100, 83, 84, 46,120, 32, 42, 32, - 84,101,120, 68,121, 46,120, 32, 43, 32,100, 72,100, 83, 84, 46,121, 32, 42, 32, 84,101,120, 68,121, 46,121, 32, 41, 59, 10, 10, - 9, 9, 47, 47, 32, 98,108,101,110,100, 32, 98,101,116,119,101,101,110, 32,116,104,101, 32,116,119,111, 10, 9, 9,100, 72,100, -120,121, 32, 61, 32,100, 72,100,120,121, 42, 40, 49, 45,102, 66,108,101,110,100, 41, 32, 43, 32,100, 72,100,120,121, 95, 98,105, - 99,117, 98,105, 99, 42,102, 66,108,101,110,100, 59, 10, 9,125, 10, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, - 42, 32,100, 72,100,120,121, 46,120, 59, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32,100, 72,100,120,121, - 46,121, 59, 10,125, 10, 10, 35,101,110,100,105,102, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,116, 97, -112, 53, 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102, -108,111, 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, - 41, 32, 10,123, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, - 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41, 59, - 10, 10, 9,118,101, 99, 50, 32, 83, 84, 99, 32, 61, 32,116,101,120, 99,111, 46,120,121, 59, 10, 9,118,101, 99, 50, 32, 83, 84, -108, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, - 99, 50, 32, 83, 84,114, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, - 59, 10, 9,118,101, 99, 50, 32, 83, 84,100, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84, -101,120, 68,121, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,117, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, - 53, 32, 42, 32, 84,101,120, 68,121, 32, 59, 10, 9, 10, 9,102,108,111, 97,116, 32, 72, 99, 44, 72,108, 44, 72,114, 44, 72,100, - 44, 72,117, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84, - 99, 41, 44, 32, 72, 99, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, - 97, 44, 32, 83, 84,108, 41, 44, 32, 72,108, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, - 50, 68, 40,105,109, 97, 44, 32, 83, 84,114, 41, 44, 32, 72,114, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101, -120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,100, 41, 44, 32, 72,100, 32, 41, 59, 10, 9,114,103, 98,116,111, 98, -119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,117, 41, 44, 32, 72,117, 32, 41, 59, 10, 9, 10, - 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, 40, 72,114, 32, 45, 32, 72,108, 41, 59, 10, 9,100, 66,116, 32, - 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, 40, 72,117, 32, 45, 32, 72,100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116, -101,120, 95, 98,117,109,112, 95,100,101,114,105,118, 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108, -101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,120, 44, 32,102,108,111, 97,116, 32,105,109, 97, - 95,121, 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, - 32,100, 66,116, 32, 41, 32, 10,123, 10, 9,102,108,111, 97,116, 32,115, 32, 61, 32, 49, 46, 48, 59, 9, 9, 47, 47, 32,110,101, -103, 97,116,101, 32,116,104,105,115, 32,105,102, 32,102,108,105,112,112,101,100, 32,116,101,120,116,117,114,101, 32, 99,111,111, -114,100,105,110, 97,116,101, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, - 46,120,121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120, -121, 41, 59, 10, 9, 10, 9, 47, 47, 32,116,104,105,115, 32,118, 97,114,105, 97,110,116, 32,117,115,105,110,103, 32, 97, 32,100, -101,114,105,118, 97,116,105,118,101, 32,109, 97,112, 32,105,115, 32,100,101,115, 99,114,105, 98,101,100, 32,104,101,114,101, 10, - 9, 47, 47, 32,104,116,116,112, 58, 47, 47,109,109,105,107,107,101,108,115,101,110, 51,100, 46, 98,108,111,103,115,112,111,116, - 46, 99,111,109, 47, 50, 48, 49, 49, 47, 48, 55, 47,100,101,114,105,118, 97,116,105,118,101, 45,109, 97,112,115, 46,104,116,109, -108, 10, 9,118,101, 99, 50, 32,100,105,109, 32, 61, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 44, 32,105,109, 97, 95,121, 41, - 59, 10, 9,118,101, 99, 50, 32,100, 66,100,117,118, 32, 61, 32,104, 83, 99, 97,108,101, 42,100,105,109, 42, 40, 50, 46, 48, 42, -116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 46,120,121, 45, 49, 46, 48, 41, - 59, 10, 9, 10, 9,100, 66,115, 32, 61, 32,100, 66,100,117,118, 46,120, 42, 84,101,120, 68,120, 46,120, 32, 43, 32,115, 42,100, - 66,100,117,118, 46,121, 42, 84,101,120, 68,120, 46,121, 59, 10, 9,100, 66,116, 32, 61, 32,100, 66,100,117,118, 46,120, 42, 84, -101,120, 68,121, 46,120, 32, 43, 32,115, 42,100, 66,100,117,118, 46,121, 42, 84,101,120, 68,121, 46,121, 59, 10,125, 10, 10,118, -111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, 40, 32,102,108,111, 97,116, 32,102, 68,101,116, 44, - 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, 44, 32,118,101, 99, 51, 32,118, 82, 49, 44, - 32,118,101, 99, 51, 32,118, 82, 50, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 32, - 32,111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101, -114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 41, 32, 10,123, 10, 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97, -100, 32, 61, 32,115,105,103,110, 40,102, 68,101,116, 41, 32, 42, 32, 40, 32,100, 66,115, 32, 42, 32,118, 82, 49, 32, 43, 32,100, - 66,116, 32, 42, 32,118, 82, 50, 32, 41, 59, 10, 9, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, - 95,105,110, 32, 45, 32,118, 83,117,114,102, 71,114, 97,100, 59, 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, - 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 32,118, 78, 97, 99, 99, 95,111,117,116, 32, 41, 59, 10,125, 10, 10,118,111, -105,100, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, 95,116,101,120,115,112, 97, 99,101, 40, 32,102,108,111, - 97,116, 32,102, 68,101,116, 44, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, 44, 32,118, -101, 99, 51, 32,118, 82, 49, 44, 32,118,101, 99, 51, 32,118, 82, 50, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, - 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,120, 44, 32,102,108,111, 97,116, 32, -105,109, 97, 95,121, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32, -111,117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114, -116,117,114, 98,101,100, 95,110,111,114,109, 32, 41, 32, 10,123, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, - 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100, -121, 40,116,101,120, 99,111, 46,120,121, 41, 59, 10, 10, 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, 61, 32, -115,105,103,110, 40,102, 68,101,116, 41, 32, 42, 32, 40, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,100, 66,115, - 32, 47, 32,108,101,110,103,116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84,101,120, 68,120, 46,120, 44, 32,105, -109, 97, 95,121, 42, 84,101,120, 68,120, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 49, 32, 43, 32, 10, 9, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32,100, 66,116, 32, 47, 32,108,101,110,103,116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84, -101,120, 68,121, 46,120, 44, 32,105,109, 97, 95,121, 42, 84,101,120, 68,121, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 50, 32, 41, - 59, 10, 9, 9, 9, 9, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 45, 32,118, - 83,117,114,102, 71,114, 97,100, 59, 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 61, 32,110,111,114,109, - 97,108,105,122,101, 40, 32,118, 78, 97, 99, 99, 95,111,117,116, 32, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, - 95,110,101,103, 97,116,101, 95,116,101,120,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111, -117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9,111,117,116,110,111,114,109, 97,108, 32, - 61, 32,118,101, 99, 51, 40, 45,110,111,114,109, 97,108, 46,120, 44, 32, 45,110,111,114,109, 97,108, 46,121, 44, 32,110,111,114, -109, 97,108, 46,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110,115,112, 97, 99,101, 95,116, 97,110,103, -101,110,116, 40,118,101, 99, 52, 32,116, 97,110,103,101,110,116, 44, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,118, -101, 99, 51, 32,116,101,120,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97, -108, 41, 10,123, 10, 9,118,101, 99, 51, 32, 66, 32, 61, 32,116, 97,110,103,101,110,116, 46,119, 32, 42, 32, 99,114,111,115,115, - 40,110,111,114,109, 97,108, 44, 32,116, 97,110,103,101,110,116, 46,120,121,122, 41, 59, 10, 10, 9,111,117,116,110,111,114,109, - 97,108, 32, 61, 32,116,101,120,110,111,114,109, 97,108, 46,120, 42,116, 97,110,103,101,110,116, 46,120,121,122, 32, 43, 32,116, -101,120,110,111,114,109, 97,108, 46,121, 42, 66, 32, 43, 32,116,101,120,110,111,114,109, 97,108, 46,122, 42,110,111,114,109, 97, -108, 59, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,110,111,114, -109, 97,108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,108,101,110,100, 95,110,111,114,109, 97,108, 40, -102,108,111, 97,116, 32,110,111,114,102, 97, 99, 44, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,118,101, 99, 51, 32, -110,101,119,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, - 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32,110,111,114,102, 97, 99, 41, 42,110,111,114, -109, 97,108, 32, 43, 32,110,111,114,102, 97, 99, 42,110,101,119,110,111,114,109, 97,108, 59, 10, 9,111,117,116,110,111,114,109, - 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10, 47, 42, - 42, 42, 42, 42, 42, 42, 32, 77, 65, 84, 69, 82, 73, 65, 76, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, - 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,117,110, 95,104,101,109,105, 40,118,101, 99, 51, 32,108, - 97,109,112,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, -105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,108,118, 32, 61, 32, -108, 97,109,112,118,101, 99, 59, 10, 9,100,105,115,116, 32, 61, 32, 49, 46, 48, 59, 10, 9,118,105,115,105,102, 97, 99, 32, 61, - 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,111,116, -104,101,114, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111, 44, 32,111,117,116, 32,118,101, - 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, - 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,108,118, 32, 61, 32, 99,111, 32, 45, 32,108, 97,109,112, 99,111, 59, 10, 9, -100,105,115,116, 32, 61, 32,108,101,110,103,116,104, 40,108,118, 41, 59, 10, 9,108,118, 32, 61, 32,110,111,114,109, 97,108,105, -122,101, 40,108,118, 41, 59, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32, -108, 97,109,112, 95,102, 97,108,108,111,102,102, 95,105,110,118,108,105,110,101, 97,114, 40,102,108,111, 97,116, 32,108, 97,109, -112,100,105,115,116, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115, -105,102, 97, 99, 41, 10,123, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32,108, 97,109,112,100,105,115,116, 47, 40,108, 97,109, -112,100,105,115,116, 32, 43, 32,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,102, 97,108,108, -111,102,102, 95,105,110,118,115,113,117, 97,114,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,102,108, -111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9, -118,105,115,105,102, 97, 99, 32, 61, 32,108, 97,109,112,100,105,115,116, 47, 40,108, 97,109,112,100,105,115,116, 32, 43, 32,100, -105,115,116, 42,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,102, 97,108,108,111,102,102, 95, -115,108,105,100,101,114,115, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,102,108,111, 97,116, 32,108,100, - 49, 44, 32,102,108,111, 97,116, 32,108,100, 50, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108, -111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116,107,119, - 32, 61, 32,108, 97,109,112,100,105,115,116, 42,108, 97,109,112,100,105,115,116, 59, 10, 10, 9,118,105,115,105,102, 97, 99, 32, - 61, 32,108, 97,109,112,100,105,115,116, 47, 40,108, 97,109,112,100,105,115,116, 32, 43, 32,108,100, 49, 42,100,105,115,116, 41, - 59, 10, 9,118,105,115,105,102, 97, 99, 32, 42, 61, 32,108, 97,109,112,100,105,115,116,107,119, 47, 40,108, 97,109,112,100,105, -115,116,107,119, 32, 43, 32,108,100, 50, 42,100,105,115,116, 42,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, - 97,109,112, 95,102, 97,108,108,111,102,102, 95, 99,117,114,118,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, - 44, 32,115, 97,109,112,108,101,114, 50, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,102,108,111, 97,116, 32,100,105,115,116, - 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,118,105,115,105,102, 97, 99, 32, - 61, 32,116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,100,105,115,116, 47, -108, 97,109,112,100,105,115,116, 44, 32, 48, 46, 48, 41, 41, 46,120, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95, -118,105,115,105, 98,105,108,105,116,121, 95,115,112,104,101,114,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, - 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, - 32,102,108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,116, 61, 32,108, - 97,109,112,100,105,115,116, 32, 45, 32,100,105,115,116, 59, 10, 10, 9,111,117,116,118,105,115,105,102, 97, 99, 61, 32,118,105, -115,105,102, 97, 99, 42,109, 97,120, 40,116, 44, 32, 48, 46, 48, 41, 47,108, 97,109,112,100,105,115,116, 59, 10,125, 10, 10,118, -111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 95,115,113,117, 97,114,101, 40, -118,101, 99, 51, 32,108, 97,109,112,118,101, 99, 44, 32,109, 97,116, 52, 32,108, 97,109,112,105,109, 97,116, 44, 32,118,101, 99, - 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112,114, 41, 10,123, 10, 9,105,102, 40,100,111,116, 40, -108,118, 44, 32,108, 97,109,112,118,101, 99, 41, 32, 62, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,118,101, 99, 51, 32,108,118,114, -111,116, 32, 61, 32, 40,108, 97,109,112,105,109, 97,116, 42,118,101, 99, 52, 40,108,118, 44, 32, 48, 46, 48, 41, 41, 46,120,121, -122, 59, 10, 9, 9,102,108,111, 97,116, 32,120, 32, 61, 32,109, 97,120, 40, 97, 98,115, 40,108,118,114,111,116, 46,120, 47,108, -118,114,111,116, 46,122, 41, 44, 32, 97, 98,115, 40,108,118,114,111,116, 46,121, 47,108,118,114,111,116, 46,122, 41, 41, 59, 10, - 10, 9, 9,105,110,112,114, 32, 61, 32, 49, 46, 48, 47,115,113,114,116, 40, 49, 46, 48, 32, 43, 32,120, 42,120, 41, 59, 10, 9, -125, 10, 9,101,108,115,101, 10, 9, 9,105,110,112,114, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97, -109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 95, 99,105,114, 99,108,101, 40,118,101, 99, 51, 32,108, - 97,109,112,118,101, 99, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112,114, 41, - 10,123, 10, 9,105,110,112,114, 32, 61, 32,100,111,116, 40,108,118, 44, 32,108, 97,109,112,118,101, 99, 41, 59, 10,125, 10, 10, -118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 40,102,108,111, 97,116, 32, -115,112,111,116,115,105, 44, 32,102,108,111, 97,116, 32,115,112,111,116, 98,108, 44, 32,102,108,111, 97,116, 32,105,110,112,114, - 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,105, -115,105,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,116, 32, 61, 32,115,112,111,116,115,105, 59, 10, 10, 9,105,102, - 40,105,110,112,114, 32, 60, 61, 32,116, 41, 32,123, 10, 9, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32, 48, 46, 48, - 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,116, 32, 61, 32,105,110,112,114, 32, 45, 32,116, 59, 10, 10, 9, 9, - 47, 42, 32,115,111,102,116, 32, 97,114,101, 97, 32, 42, 47, 10, 9, 9,105,102, 40,115,112,111,116, 98,108, 32, 33, 61, 32, 48, - 46, 48, 41, 10, 9, 9, 9,105,110,112,114, 32, 42, 61, 32,115,109,111,111,116,104,115,116,101,112, 40, 48, 46, 48, 44, 32, 49, - 46, 48, 44, 32,116, 47,115,112,111,116, 98,108, 41, 59, 10, 10, 9, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32,118, -105,115,105,102, 97, 99, 42,105,110,112,114, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115, -105, 98,105,108,105,116,121, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, - 32,102,108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,111,117,116,118,105,115,105,102, 97, 99, - 32, 61, 32, 40,118,105,115,105,102, 97, 99, 32, 60, 32, 48, 46, 48, 48, 49, 41, 63, 32, 48, 46, 48, 58, 32,118,105,115,105,102, - 97, 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,118,105,101,119, 40,118,101, 99, 51, 32, 99,111, 44, 32, -111,117,116, 32,118,101, 99, 51, 32,118,105,101,119, 41, 10,123, 10, 9, 47, 42, 32,104, 97,110,100,108,101, 32,112,101,114,115, -112,101, 99,116,105,118,101, 47,111,114,116,104,111,103,114, 97,112,104,105, 99, 32, 42, 47, 10, 9,118,105,101,119, 32, 61, 32, - 40,103,108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, 97,116,114,105,120, 91, 51, 93, 91, 51, 93, 32, 61, 61, 32, 48, 46, - 48, 41, 63, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 58, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, - 44, 32, 45, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,116, 97,110,103,101,110,116, 95,118, - 40,118,101, 99, 51, 32,108,118, 44, 32,118,101, 99, 51, 32,116, 97,110,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,110, - 41, 10,123, 10, 9,118,101, 99, 51, 32, 99, 32, 61, 32, 99,114,111,115,115, 40,108,118, 44, 32,116, 97,110,103, 41, 59, 10, 9, -118,101, 99, 51, 32,118,110,111,114, 32, 61, 32, 99,114,111,115,115, 40, 99, 44, 32,116, 97,110,103, 41, 59, 10, 10, 9,118,110, - 32, 61, 32, 45,110,111,114,109, 97,108,105,122,101, 40,118,110,111,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97, -100,101, 95,105,110,112, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, - 97,116, 32,105,110,112, 41, 10,123, 10, 9,105,110,112, 32, 61, 32,100,111,116, 40,118,110, 44, 32,108,118, 41, 59, 10,125, 10, - 10,118,111,105,100, 32,115,104, 97,100,101, 95,105,115, 95,110,111, 95,100,105,102,102,117,115,101, 40,111,117,116, 32,102,108, -111, 97,116, 32,105,115, 41, 10,123, 10, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97, -100,101, 95,105,115, 95,104,101,109,105, 40,102,108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, -105,115, 41, 10,123, 10, 9,105,115, 32, 61, 32, 48, 46, 53, 42,105,110,112, 32, 43, 32, 48, 46, 53, 59, 10,125, 10, 10,102,108, -111, 97,116, 32, 97,114,101, 97, 95,108, 97,109,112, 95,101,110,101,114,103,121, 40,109, 97,116, 52, 32, 97,114,101, 97, 44, 32, -118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,118,110, 41, 10,123, 10, 9,118,101, 99, 51, 32,118,101, 99, 91, 52, 93, - 44, 32, 99, 91, 52, 93, 59, 10, 9,102,108,111, 97,116, 32,114, 97,100, 91, 52, 93, 44, 32,102, 97, 99, 59, 10, 9, 10, 9,118, -101, 99, 91, 48, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 48, 93, 46,120, -121,122, 41, 59, 10, 9,118,101, 99, 91, 49, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114, -101, 97, 91, 49, 93, 46,120,121,122, 41, 59, 10, 9,118,101, 99, 91, 50, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, - 99,111, 32, 45, 32, 97,114,101, 97, 91, 50, 93, 46,120,121,122, 41, 59, 10, 9,118,101, 99, 91, 51, 93, 32, 61, 32,110,111,114, -109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 51, 93, 46,120,121,122, 41, 59, 10, 10, 9, 99, 91, 48, 93, - 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 48, 93, 44, 32,118,101, 99, 91, 49, - 93, 41, 41, 59, 10, 9, 99, 91, 49, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, - 91, 49, 93, 44, 32,118,101, 99, 91, 50, 93, 41, 41, 59, 10, 9, 99, 91, 50, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, - 40, 99,114,111,115,115, 40,118,101, 99, 91, 50, 93, 44, 32,118,101, 99, 91, 51, 93, 41, 41, 59, 10, 9, 99, 91, 51, 93, 32, 61, - 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 51, 93, 44, 32,118,101, 99, 91, 48, 93, 41, - 41, 59, 10, 10, 9,114, 97,100, 91, 48, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, 48, 93, 44, 32,118, -101, 99, 91, 49, 93, 41, 41, 59, 10, 9,114, 97,100, 91, 49, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, - 49, 93, 44, 32,118,101, 99, 91, 50, 93, 41, 41, 59, 10, 9,114, 97,100, 91, 50, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, - 40,118,101, 99, 91, 50, 93, 44, 32,118,101, 99, 91, 51, 93, 41, 41, 59, 10, 9,114, 97,100, 91, 51, 93, 32, 61, 32, 97, 99,111, -115, 40,100,111,116, 40,118,101, 99, 91, 51, 93, 44, 32,118,101, 99, 91, 48, 93, 41, 41, 59, 10, 10, 9,102, 97, 99, 61, 32, 32, -114, 97,100, 91, 48, 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 48, 93, 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, - 91, 49, 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 49, 93, 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 50, 93, - 42,100,111,116, 40,118,110, 44, 32, 99, 91, 50, 93, 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 51, 93, 42,100,111, -116, 40,118,110, 44, 32, 99, 91, 51, 93, 41, 59, 10, 10, 9,114,101,116,117,114,110, 32,109, 97,120, 40,102, 97, 99, 44, 32, 48, - 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,105,110,112, 95, 97,114,101, 97, 40,118,101, 99, 51, - 32,112,111,115,105,116,105,111,110, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111, 44, 32,118,101, 99, 51, 32,108, 97,109, -112,118,101, 99, 44, 32,118,101, 99, 51, 32,118,110, 44, 32,109, 97,116, 52, 32, 97,114,101, 97, 44, 32,102,108,111, 97,116, 32, - 97,114,101, 97,115,105,122,101, 44, 32,102,108,111, 97,116, 32,107, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112, - 41, 10,123, 10, 9,118,101, 99, 51, 32, 99,111, 32, 61, 32,112,111,115,105,116,105,111,110, 59, 10, 9,118,101, 99, 51, 32,118, -101, 99, 32, 61, 32, 99,111, 32, 45, 32,108, 97,109,112, 99,111, 59, 10, 10, 9,105,102, 40,100,111,116, 40,118,101, 99, 44, 32, -108, 97,109,112,118,101, 99, 41, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,105,110,112, 32, 61, 32, 48, 46, 48, 59, 10, 9, -125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,105,110,116,101,110,115, 32, 61, 32, 97,114,101, 97, 95, -108, 97,109,112, 95,101,110,101,114,103,121, 40, 97,114,101, 97, 44, 32, 99,111, 44, 32,118,110, 41, 59, 10, 10, 9, 9,105,110, -112, 32, 61, 32,112,111,119, 40,105,110,116,101,110,115, 42, 97,114,101, 97,115,105,122,101, 44, 32,107, 41, 59, 10, 9,125, 10, -125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,111,114,101,110, 95,110, 97,121,101,114, - 40,102,108,111, 97,116, 32,110,108, 44, 32,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32, -118, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, - 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, 59, 10, 9,102,108,111, - 97,116, 32,110,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,104, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9,102,108, -111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9,102, -108,111, 97,116, 32,114,101, 97,108,110,108, 32, 61, 32,100,111,116, 40,110, 44, 32,108, 41, 59, 10, 10, 9,105,102, 40,114,101, - 97,108,110,108, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108, -115,101, 32,105,102, 40,110,108, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, - 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,118,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,118, 44, - 32,104, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9,102,108,111, 97,116, 32, 76,105,116, 95, 65, 32, 61, 32, 97, 99,111,115, 40, -114,101, 97,108,110,108, 41, 59, 10, 9, 9,102,108,111, 97,116, 32, 86,105,101,119, 95, 65, 32, 61, 32, 97, 99,111,115, 40,110, -118, 41, 59, 10, 10, 9, 9,118,101, 99, 51, 32, 76,105,116, 95, 66, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, - 45, 32,114,101, 97,108,110,108, 42,110, 41, 59, 10, 9, 9,118,101, 99, 51, 32, 86,105,101,119, 95, 66, 32, 61, 32,110,111,114, -109, 97,108,105,122,101, 40,118, 32, 45, 32,110,118, 42,110, 41, 59, 10, 10, 9, 9,102,108,111, 97,116, 32,116, 32, 61, 32,109, - 97,120, 40,100,111,116, 40, 76,105,116, 95, 66, 44, 32, 86,105,101,119, 95, 66, 41, 44, 32, 48, 46, 48, 41, 59, 10, 10, 9, 9, -102,108,111, 97,116, 32, 97, 44, 32, 98, 59, 10, 10, 9, 9,105,102, 40, 76,105,116, 95, 65, 32, 62, 32, 86,105,101,119, 95, 65, - 41, 32,123, 10, 9, 9, 9, 97, 32, 61, 32, 76,105,116, 95, 65, 59, 10, 9, 9, 9, 98, 32, 61, 32, 86,105,101,119, 95, 65, 59, - 10, 9, 9,125, 10, 9, 9,101,108,115,101, 32,123, 10, 9, 9, 9, 97, 32, 61, 32, 86,105,101,119, 95, 65, 59, 10, 9, 9, 9, - 98, 32, 61, 32, 76,105,116, 95, 65, 59, 10, 9, 9,125, 10, 10, 9, 9,102,108,111, 97,116, 32, 65, 32, 61, 32, 49, 46, 48, 32, - 45, 32, 40, 48, 46, 53, 42, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 47, 40, 40,114,111,117,103,104, 42,114,111, -117,103,104, 41, 32, 43, 32, 48, 46, 51, 51, 41, 41, 41, 59, 10, 9, 9,102,108,111, 97,116, 32, 66, 32, 61, 32, 48, 46, 52, 53, - 42, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 47, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 32, 43, - 32, 48, 46, 48, 57, 41, 41, 59, 10, 10, 9, 9, 98, 32, 42, 61, 32, 48, 46, 57, 53, 59, 10, 9, 9,105,115, 32, 61, 32,110,108, - 42, 40, 65, 32, 43, 32, 40, 66, 32, 42, 32,116, 32, 42, 32,115,105,110, 40, 97, 41, 32, 42, 32,116, 97,110, 40, 98, 41, 41, 41, - 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,116,111,111,110, 40, -118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,115,105, -122,101, 44, 32,102,108,111, 97,116, 32,116,115,109,111,111,116,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, - 10,123, 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61, 32,100,111,116, 40,110, 44, 32,108, 41, 59, 10, 9,102,108,111, - 97,116, 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,114,115,108,116, 41, 59, 10, 10, 9,105,102, 40, 97,110,103, 32, 60, 32, -115,105,122,101, 41, 32,105,115, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 97,110,103, 32, 62, 32, 40, -115,105,122,101, 32, 43, 32,116,115,109,111,111,116,104, 41, 32,124,124, 32,116,115,109,111,111,116,104, 32, 61, 61, 32, 48, 46, - 48, 41, 32,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,115, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 40, - 97,110,103, 32, 45, 32,115,105,122,101, 41, 47,116,115,109,111,111,116,104, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, - 97,100,101, 95,100,105,102,102,117,115,101, 95,109,105,110,110, 97,101,114,116, 40,102,108,111, 97,116, 32,110,108, 44, 32,118, -101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,100, 97,114,107,110,101,115,115, 44, 32,111, -117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,105,102, 40,110,108, 32, 60, 61, 32, 48, 46, 48, 41, 32,123, 10, - 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,110, -118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 10, 9, 9,105,102, 40,100, - 97,114,107,110,101,115,115, 32, 60, 61, 32, 49, 46, 48, 41, 10, 9, 9, 9,105,115, 32, 61, 32,110,108, 42,112,111,119, 40,109, - 97,120, 40,110,118, 42,110,108, 44, 32, 48, 46, 49, 41, 44, 32,100, 97,114,107,110,101,115,115, 32, 45, 32, 49, 46, 48, 41, 59, - 10, 9, 9,101,108,115,101, 10, 9, 9, 9,105,115, 32, 61, 32,110,108, 42,112,111,119, 40, 49, 46, 48, 48, 48, 49, 32, 45, 32, -110,118, 44, 32,100, 97,114,107,110,101,115,115, 32, 45, 32, 49, 46, 48, 41, 59, 10, 9,125, 10,125, 10, 10,102,108,111, 97,116, - 32,102,114,101,115,110,101,108, 95,102, 97, 99, 40,118,101, 99, 51, 32,118,105,101,119, 44, 32,118,101, 99, 51, 32,118,110, 44, - 32,102,108,111, 97,116, 32,103,114, 97,100, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, - 32,116, 49, 44, 32,116, 50, 59, 10, 9,102,108,111, 97,116, 32,102,102, 97, 99, 59, 10, 10, 9,105,102, 40,102, 97, 99, 61, 61, - 48, 46, 48, 41, 32,123, 10, 9, 9,102,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, - 9, 9,116, 49, 61, 32,100,111,116, 40,118,105,101,119, 44, 32,118,110, 41, 59, 10, 9, 9,105,102, 40,116, 49, 62, 48, 46, 48, - 41, 32, 32,116, 50, 61, 32, 49, 46, 48, 43,116, 49, 59, 10, 9, 9,101,108,115,101, 32,116, 50, 61, 32, 49, 46, 48, 45,116, 49, - 59, 10, 10, 9, 9,116, 50, 61, 32,103,114, 97,100, 32, 43, 32, 40, 49, 46, 48, 45,103,114, 97,100, 41, 42,112,111,119, 40,116, - 50, 44, 32,102, 97, 99, 41, 59, 10, 10, 9, 9,105,102, 40,116, 50, 60, 48, 46, 48, 41, 32,102,102, 97, 99, 32, 61, 32, 48, 46, - 48, 59, 10, 9, 9,101,108,115,101, 32,105,102, 40,116, 50, 62, 49, 46, 48, 41, 32,102,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, - 10, 9, 9,101,108,115,101, 32,102,102, 97, 99, 32, 61, 32,116, 50, 59, 10, 9,125, 10, 10, 9,114,101,116,117,114,110, 32,102, -102, 97, 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,102,114,101,115,110, -101,108, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32, -102,108,111, 97,116, 32,102, 97, 99, 95,105, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97, -116, 32,105,115, 41, 10,123, 10, 9,105,115, 32, 61, 32,102,114,101,115,110,101,108, 95,102, 97, 99, 40,108,118, 44, 32,118,110, - 44, 32,102, 97, 99, 95,105, 44, 32,102, 97, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 99,117, 98, -105, 99, 40,102,108,111, 97,116, 32,105,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105,115, 41, 10,123, 10, - 9,105,102, 40,105,115, 62, 48, 46, 48, 32, 38, 38, 32,105,115, 60, 49, 46, 48, 41, 10, 9, 9,111,117,116,105,115, 61, 32,115, -109,111,111,116,104,115,116,101,112, 40, 48, 46, 48, 44, 32, 49, 46, 48, 44, 32,105,115, 41, 59, 10, 9,101,108,115,101, 10, 9, - 9,111,117,116,105,115, 61, 32,105,115, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,118,105,115,105,102, 97, - 99, 40,102,108,111, 97,116, 32,105, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,102,108,111, 97,116, 32, -114,101,102,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105, 41, 10,123, 10, 9, 47, 42,105,102, 40,105, 32, - 62, 32, 48, 46, 48, 41, 42, 47, 10, 9, 9,111,117,116,105, 32, 61, 32,109, 97,120, 40,105, 42,118,105,115,105,102, 97, 99, 42, -114,101,102,108, 44, 32, 48, 46, 48, 41, 59, 10, 9, 47, 42,101,108,115,101, 10, 9, 9,111,117,116,105, 32, 61, 32,105, 59, 42, - 47, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,116, 97,110,103,101,110,116, 95,118, 95,115,112,101, 99, 40,118, -101, 99, 51, 32,116, 97,110,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,110, 41, 10,123, 10, 9,118,110, 32, 61, 32,116, - 97,110,103, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 95,116,111, 95,100,105,102,102,117,115, -101, 40,102,108,111, 97,116, 32,105, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111,108, 44, 32,118,101, 99, 51, 32, 99,111, -108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,105,102, 40,105, 32, 62, 32, 48, 46, - 48, 41, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,105, 42,108, 97,109,112, 99,111,108, 42, 99,111,108, 59, 10, 9,101,108, -115,101, 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, - 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,104,101,109,105, 95,115,112,101, 99, 40,118,101, 99, 51, 32, -118,110, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,102,108,111, 97,116, 32,115,112, -101, 99, 44, 32,102,108,111, 97,116, 32,104, 97,114,100, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111, -117,116, 32,102,108,111, 97,116, 32,116, 41, 10,123, 10, 9,108,118, 32, 43, 61, 32,118,105,101,119, 59, 10, 9,108,118, 32, 61, - 32,110,111,114,109, 97,108,105,122,101, 40,108,118, 41, 59, 10, 10, 9,116, 32, 61, 32,100,111,116, 40,118,110, 44, 32,108,118, - 41, 59, 10, 9,116, 32, 61, 32, 48, 46, 53, 42,116, 32, 43, 32, 48, 46, 53, 59, 10, 10, 9,116, 32, 61, 32,118,105,115,105,102, - 97, 99, 42,115,112,101, 99, 42,112,111,119, 40,116, 44, 32,104, 97,114,100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, - 97,100,101, 95,112,104,111,110,103, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118, -101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,104, 97,114,100, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, - 99,102, 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32, -118, 41, 59, 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61, 32,109, 97,120, 40,100,111,116, 40,104, 44, 32,110, 41, 44, - 32, 48, 46, 48, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,112,111,119, 40,114,115,108,116, 44, 32,104, 97,114, -100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 99,111,111,107,116,111,114,114, 95,115,112,101, 99, 40, -118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,104, 97, -114,100, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, - 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, 59, 10, 9,102,108,111, 97,116, 32,110,104, 32, 61, - 32,100,111,116, 40,110, 44, 32,104, 41, 59, 10, 10, 9,105,102, 40,110,104, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,115, -112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, - 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9,102,108,111, - 97,116, 32,105, 32, 61, 32,112,111,119, 40,110,104, 44, 32,104, 97,114,100, 41, 59, 10, 10, 9, 9,105, 32, 61, 32,105, 47, 40, - 48, 46, 49, 43,110,118, 41, 59, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,105, 59, 10, 9,125, 10,125, 10, 10,118,111, -105,100, 32,115,104, 97,100,101, 95, 98,108,105,110,110, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, - 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,114,101,102,114, 97, 99, 44, 32,102,108,111, 97,116, 32, -115,112,101, 99, 95,112,111,119,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, - 10, 9,105,102, 40,114,101,102,114, 97, 99, 32, 60, 32, 49, 46, 48, 41, 32,123, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, - 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,105,102, 40,115,112,101, 99, 95,112,111,119,101,114, 32, 61, 61, 32, - 48, 46, 48, 41, 32,123, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, - 32,123, 10, 9, 9,105,102, 40,115,112,101, 99, 95,112,111,119,101,114, 60, 49, 48, 48, 46, 48, 41, 10, 9, 9, 9,115,112,101, - 99, 95,112,111,119,101,114, 61, 32,115,113,114,116, 40, 49, 46, 48, 47,115,112,101, 99, 95,112,111,119,101,114, 41, 59, 10, 9, - 9,101,108,115,101, 10, 9, 9, 9,115,112,101, 99, 95,112,111,119,101,114, 61, 32, 49, 48, 46, 48, 47,115,112,101, 99, 95,112, -111,119,101,114, 59, 10, 10, 9, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32, -108, 41, 59, 10, 9, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,100,111,116, 40,110, 44, 32,104, 41, 59, 10, 9, 9,105,102, - 40,110,104, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9, - 9,125, 10, 9, 9,101,108,115,101, 32,123, 10, 9, 9, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111, -116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 49, 41, 59, 10, 9, 9, 9,102,108,111, 97,116, 32,110,108, 32, 61, 32,100,111, -116, 40,110, 44, 32,108, 41, 59, 10, 9, 9, 9,105,102, 40,110,108, 32, 60, 61, 32, 48, 46, 48, 49, 41, 32,123, 10, 9, 9, 9, - 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9, 9,125, 10, 9, 9, 9,101,108,115,101, 32,123, 10, 9, - 9, 9, 9,102,108,111, 97,116, 32,118,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,118, 44, 32,104, 41, 44, 32, 48, 46, 48, - 49, 41, 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 97, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9, 9, 9,102,108,111, 97, -116, 32, 98, 32, 61, 32, 40, 50, 46, 48, 42,110,104, 42,110,118, 41, 47,118,104, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, - 99, 32, 61, 32, 40, 50, 46, 48, 42,110,104, 42,110,108, 41, 47,118,104, 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,103, - 32, 61, 32, 48, 46, 48, 59, 10, 10, 9, 9, 9, 9,105,102, 40, 97, 32, 60, 32, 98, 32, 38, 38, 32, 97, 32, 60, 32, 99, 41, 32, -103, 32, 61, 32, 97, 59, 10, 9, 9, 9, 9,101,108,115,101, 32,105,102, 40, 98, 32, 60, 32, 97, 32, 38, 38, 32, 98, 32, 60, 32, - 99, 41, 32,103, 32, 61, 32, 98, 59, 10, 9, 9, 9, 9,101,108,115,101, 32,105,102, 40, 99, 32, 60, 32, 97, 32, 38, 38, 32, 99, - 32, 60, 32, 98, 41, 32,103, 32, 61, 32, 99, 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,112, 32, 61, 32,115,113,114,116, - 40, 40, 40,114,101,102,114, 97, 99, 32, 42, 32,114,101,102,114, 97, 99, 41, 43, 40,118,104, 42,118,104, 41, 45, 49, 46, 48, 41, - 41, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,102, 32, 61, 32, 40, 40, 40,112, 45,118,104, 41, 42, 40,112, 45,118,104, 41, - 41, 47, 40, 40,112, 43,118,104, 41, 42, 40,112, 43,118,104, 41, 41, 41, 42, 40, 49, 46, 48, 43, 40, 40, 40, 40,118,104, 42, 40, -112, 43,118,104, 41, 41, 45, 49, 46, 48, 41, 42, 40, 40,118,104, 42, 40,112, 43,118,104, 41, 41, 45, 49, 46, 48, 41, 41, 47, 40, - 40, 40,118,104, 42, 40,112, 45,118,104, 41, 41, 43, 49, 46, 48, 41, 42, 40, 40,118,104, 42, 40,112, 45,118,104, 41, 41, 43, 49, - 46, 48, 41, 41, 41, 41, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,110,104, 41, - 59, 10, 10, 9, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,109, 97,120, 40,102, 42,103, 42,101,120,112, 95, 98,108,101, -110,100,101,114, 40, 40, 45, 40, 97,110,103, 42, 97,110,103, 41, 47, 40, 50, 46, 48, 42,115,112,101, 99, 95,112,111,119,101,114, - 42,115,112,101, 99, 95,112,111,119,101,114, 41, 41, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9, 9,125, 10, 9, 9,125, 10, 9, -125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,119, 97,114,100,105,115,111, 95,115,112,101, 99, 40,118,101, 99, - 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,114,109,115, 44, 32, -111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110, -111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, 59, 10, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,109, 97,120, - 40,100,111,116, 40,110, 44, 32,104, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32, -109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, 32,110,108, - 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,108, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, - 32, 97,110,103,108,101, 32, 61, 32,116, 97,110, 40, 97, 99,111,115, 40,110,104, 41, 41, 59, 10, 9,102,108,111, 97,116, 32, 97, -108,112,104, 97, 32, 61, 32,109, 97,120, 40,114,109,115, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, - 99, 61, 32,110,108, 32, 42, 32, 40, 49, 46, 48, 47, 40, 52, 46, 48, 42, 77, 95, 80, 73, 42, 97,108,112,104, 97, 42, 97,108,112, -104, 97, 41, 41, 42, 40,101,120,112, 95, 98,108,101,110,100,101,114, 40, 45, 40, 97,110,103,108,101, 42, 97,110,103,108,101, 41, - 47, 40, 97,108,112,104, 97, 42, 97,108,112,104, 97, 41, 41, 47, 40,115,113,114,116, 40,110,118, 42,110,108, 41, 41, 41, 59, 10, -125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,116,111,111,110, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32, -118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,115,105,122,101, 44, 32,102,108,111, 97, -116, 32,116,115,109,111,111,116,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, - 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, 59, 10, 9,102,108,111, - 97,116, 32,114,115,108,116, 32, 61, 32,100,111,116, 40,104, 44, 32,110, 41, 59, 10, 9,102,108,111, 97,116, 32, 97,110,103, 32, - 61, 32, 97, 99,111,115, 40,114,115,108,116, 41, 59, 10, 10, 9,105,102, 40, 97,110,103, 32, 60, 32,115,105,122,101, 41, 32,114, -115,108,116, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 97,110,103, 32, 62, 61, 32, 40,115,105,122,101, - 32, 43, 32,116,115,109,111,111,116,104, 41, 32,124,124, 32,116,115,109,111,111,116,104, 32, 61, 61, 32, 48, 46, 48, 41, 32,114, -115,108,116, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,114,115,108,116, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 40, - 97,110,103, 32, 45, 32,115,105,122,101, 41, 47,116,115,109,111,111,116,104, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99, 32, - 61, 32,114,115,108,116, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,115,112,101, 99, 95, 97,114,101, 97, 95, -105,110,112, 40,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 44, 32,102,108,111, 97,116, 32,105,110,112, 44, 32,111,117, -116, 32,102,108,111, 97,116, 32,111,117,116,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,111,117,116,115,112,101, 99,102, 97, - 99, 32, 61, 32,115,112,101, 99,102, 97, 99, 42,105,110,112, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,115, -112,101, 99, 95,116, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112,101, 99, 44, - 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 44, 32,111, -117,116, 32,102,108,111, 97,116, 32,116, 41, 10,123, 10, 9,116, 32, 61, 32,115,104, 97,100,102, 97, 99, 42,115,112,101, 99, 42, -118,105,115,105,102, 97, 99, 42,115,112,101, 99,102, 97, 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97, -100,100, 95,115,112,101, 99, 40,102,108,111, 97,116, 32,116, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111,108, 44, 32,118, -101, 99, 51, 32,115,112,101, 99, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, - 9,111,117,116, 99,111,108, 32, 61, 32,116, 42,108, 97,109,112, 99,111,108, 42,115,112,101, 99, 99,111,108, 59, 10,125, 10, 10, -118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 40,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99, -111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, - 61, 32, 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 85, 76, 32, 61, 32,116, +101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, + 40, 45, 49, 44, 45, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, + 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 85, 82, 32, 61, 32,116,101,120,116,117,114,101, 71, 97,116,104, +101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, 40, 49, 44, 45, 49, 41, 32, 43, 32,118, +101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97, +109,112,108,101,115, 76, 76, 32, 61, 32,116,101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84, +101,120, 76,111, 99, 43,105,118,101, 99, 50, 40, 45, 49, 44, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, + 41, 41, 47,118, 68,105,109, 32, 41, 59, 10, 9, 9,118,101, 99, 52, 32,118, 83, 97,109,112,108,101,115, 76, 82, 32, 61, 32,116, +101,120,116,117,114,101, 71, 97,116,104,101,114, 40,105,109, 97, 44, 32, 40,105, 84,101,120, 76,111, 99, 43,105,118,101, 99, 50, + 40, 49, 44, 49, 41, 32, 43, 32,118,101, 99, 50, 40, 48, 46, 53, 44, 48, 46, 53, 41, 41, 47,118, 68,105,109, 32, 41, 59, 10, 10, + 9, 9,109, 97,116, 52, 32, 72, 32, 61, 32,109, 97,116, 52, 40,118, 83, 97,109,112,108,101,115, 85, 76, 46,119, 44, 32,118, 83, + 97,109,112,108,101,115, 85, 76, 46,120, 44, 32,118, 83, 97,109,112,108,101,115, 76, 76, 46,119, 44, 32,118, 83, 97,109,112,108, +101,115, 76, 76, 46,120, 44, 10, 9, 9, 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 76, 46,122, 44, 32,118, 83, 97,109,112, +108,101,115, 85, 76, 46,121, 44, 32,118, 83, 97,109,112,108,101,115, 76, 76, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 76, + 76, 46,121, 44, 10, 9, 9, 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 82, 46,119, 44, 32,118, 83, 97,109,112,108,101,115, + 85, 82, 46,120, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,119, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,120, + 44, 10, 9, 9, 9, 9, 9,118, 83, 97,109,112,108,101,115, 85, 82, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 85, 82, 46, +121, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,122, 44, 32,118, 83, 97,109,112,108,101,115, 76, 82, 46,121, 41, 59, 10, + 42, 47, 9, 10, 9, 9,105,118,101, 99, 50, 32,105, 84,101,120, 76,111, 99, 77,111,100, 32, 61, 32,105, 84,101,120, 76,111, 99, + 32, 43, 32,105,118,101, 99, 50, 40, 45, 49, 44, 32, 45, 49, 41, 59, 10, 10, 9, 9,109, 97,116, 52, 32, 72, 59, 10, 9, 9, 10, + 9, 9,102,111,114, 40,105,110,116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 52, 59, 32,105, 43, 43, 41,123, 10, 9, 9, + 9,102,111,114, 40,105,110,116, 32,106, 32, 61, 32, 48, 59, 32,106, 32, 60, 32, 52, 59, 32,106, 43, 43, 41,123, 10, 9, 9, 9, + 9,105,118,101, 99, 50, 32,105, 84,101,120, 84,109,112, 32, 61, 32,105, 84,101,120, 76,111, 99, 77,111,100, 32, 43, 32,105,118, +101, 99, 50, 40,105, 44,106, 41, 59, 10, 9, 9, 9, 9, 10, 9, 9, 9, 9, 47, 47, 32,119,114, 97,112, 32,116,101,120,116,117, +114,101, 32, 99,111,111,114,100,105,110, 97,116,101,115, 32,109, 97,110,117, 97,108,108,121, 32,102,111,114, 32,116,101,120,101, +108, 70,101,116, 99,104, 32,116,111, 32,119,111,114,107, 32,111,110, 32,117,118,115, 32,111,105,116,115,105,100,101, 32,116,104, +101, 32, 48, 44, 49, 32,114, 97,110,103,101, 46, 10, 9, 9, 9, 9, 47, 47, 32,116,104,105,115, 32,105,115, 32,103,117, 97,114, + 97,110,116,101,101,100, 32,116,111, 32,119,111,114,107, 32,115,105,110, 99,101, 32,119,101, 32,116, 97,107,101, 32,116,104,101, + 32,102,114, 97, 99,116,105,111,110, 97,108, 32,112, 97,114,116, 32,111,102, 32,116,104,101, 32,117,118, 32, 97, 98,111,118,101, + 46, 10, 9, 9, 9, 9,105, 84,101,120, 84,109,112, 46,120, 32, 61, 32, 40,105, 84,101,120, 84,109,112, 46,120, 32, 60, 32, 48, + 41, 63, 32,105, 84,101,120, 84,109,112, 46,120, 32, 43, 32,118, 68,105,109, 46,120, 32, 58, 32, 40, 40,105, 84,101,120, 84,109, +112, 46,120, 32, 62, 61, 32,118, 68,105,109, 46,120, 41, 63, 32,105, 84,101,120, 84,109,112, 46,120, 32, 45, 32,118, 68,105,109, + 46,120, 32, 58, 32,105, 84,101,120, 84,109,112, 46,120, 41, 59, 10, 9, 9, 9, 9,105, 84,101,120, 84,109,112, 46,121, 32, 61, + 32, 40,105, 84,101,120, 84,109,112, 46,121, 32, 60, 32, 48, 41, 63, 32,105, 84,101,120, 84,109,112, 46,121, 32, 43, 32,118, 68, +105,109, 46,121, 32, 58, 32, 40, 40,105, 84,101,120, 84,109,112, 46,121, 32, 62, 61, 32,118, 68,105,109, 46,121, 41, 63, 32,105, + 84,101,120, 84,109,112, 46,121, 32, 45, 32,118, 68,105,109, 46,121, 32, 58, 32,105, 84,101,120, 84,109,112, 46,121, 41, 59, 10, + 10, 9, 9, 9, 9,114,103, 98,116,111, 98,119, 40,116,101,120,101,108, 70,101,116, 99,104, 40,105,109, 97, 44, 32,105, 84,101, +120, 84,109,112, 44, 32, 48, 41, 44, 32, 72, 91,105, 93, 91,106, 93, 41, 59, 10, 9, 9, 9,125, 10, 9, 9,125, 10, 9, 9, 10, + 9, 9,102,108,111, 97,116, 32,120, 32, 61, 32,116, 46,120, 44, 32,121, 32, 61, 32,116, 46,121, 59, 10, 9, 9,102,108,111, 97, +116, 32,120, 50, 32, 61, 32,120, 32, 42, 32,120, 44, 32,120, 51, 32, 61, 32,120, 50, 32, 42, 32,120, 44, 32,121, 50, 32, 61, 32, +121, 32, 42, 32,121, 44, 32,121, 51, 32, 61, 32,121, 50, 32, 42, 32,121, 59, 10, 10, 9, 9,118,101, 99, 52, 32, 88, 32, 61, 32, +118,101, 99, 52, 40, 45, 48, 46, 53, 42, 40,120, 51, 43,120, 41, 43,120, 50, 44, 9, 9, 49, 46, 53, 42,120, 51, 45, 50, 46, 53, + 42,120, 50, 43, 49, 44, 9, 45, 49, 46, 53, 42,120, 51, 43, 50, 42,120, 50, 43, 48, 46, 53, 42,120, 44, 9, 9, 48, 46, 53, 42, + 40,120, 51, 45,120, 50, 41, 41, 59, 10, 9, 9,118,101, 99, 52, 32, 89, 32, 61, 32,118,101, 99, 52, 40, 45, 48, 46, 53, 42, 40, +121, 51, 43,121, 41, 43,121, 50, 44, 9, 9, 49, 46, 53, 42,121, 51, 45, 50, 46, 53, 42,121, 50, 43, 49, 44, 9, 45, 49, 46, 53, + 42,121, 51, 43, 50, 42,121, 50, 43, 48, 46, 53, 42,121, 44, 9, 9, 48, 46, 53, 42, 40,121, 51, 45,121, 50, 41, 41, 59, 10, 9, + 9,118,101, 99, 52, 32,100, 88, 32, 61, 32,118,101, 99, 52, 40, 45, 49, 46, 53, 42,120, 50, 43, 50, 42,120, 45, 48, 46, 53, 44, + 9, 9, 52, 46, 53, 42,120, 50, 45, 53, 42,120, 44, 9, 9, 9, 45, 52, 46, 53, 42,120, 50, 43, 52, 42,120, 43, 48, 46, 53, 44, + 9, 9, 49, 46, 53, 42,120, 50, 45,120, 41, 59, 10, 9, 9,118,101, 99, 52, 32,100, 89, 32, 61, 32,118,101, 99, 52, 40, 45, 49, + 46, 53, 42,121, 50, 43, 50, 42,121, 45, 48, 46, 53, 44, 9, 9, 52, 46, 53, 42,121, 50, 45, 53, 42,121, 44, 9, 9, 9, 45, 52, + 46, 53, 42,121, 50, 43, 52, 42,121, 43, 48, 46, 53, 44, 9, 9, 49, 46, 53, 42,121, 50, 45,121, 41, 59, 10, 9, 10, 9, 9, 47, + 47, 32, 99,111,109,112,108,101,116,101, 32,100,101,114,105,118, 97,116,105,118,101, 32,105,110, 32,110,111,114,109, 97,108,105, +122,101,100, 32, 99,111,111,114,100,105,110, 97,116,101,115, 32, 40,109,117,108, 32, 98,121, 32,118, 68,105,109, 41, 10, 9, 9, +118,101, 99, 50, 32,100, 72,100, 83, 84, 32, 61, 32,118, 68,105,109, 32, 42, 32,118,101, 99, 50, 40,100,111,116, 40, 89, 44, 32, + 72, 32, 42, 32,100, 88, 41, 44, 32,100,111,116, 40,100, 89, 44, 32, 72, 32, 42, 32, 88, 41, 41, 59, 10, 10, 9, 9, 47, 47, 32, +116,114, 97,110,115,102,111,114,109, 32,100,101,114,105,118, 97,116,105,118,101, 32,116,111, 32,115, 99,114,101,101,110, 45,115, +112, 97, 99,101, 10, 9, 9,118,101, 99, 50, 32,100, 72,100,120,121, 95, 98,105, 99,117, 98,105, 99, 32, 61, 32,118,101, 99, 50, + 40, 32,100, 72,100, 83, 84, 46,120, 32, 42, 32, 84,101,120, 68,120, 46,120, 32, 43, 32,100, 72,100, 83, 84, 46,121, 32, 42, 32, + 84,101,120, 68,120, 46,121, 44, 10, 9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,100, 72,100, 83, 84, 46,120, 32, 42, 32, 84,101, +120, 68,121, 46,120, 32, 43, 32,100, 72,100, 83, 84, 46,121, 32, 42, 32, 84,101,120, 68,121, 46,121, 32, 41, 59, 10, 10, 9, 9, + 47, 47, 32, 98,108,101,110,100, 32, 98,101,116,119,101,101,110, 32,116,104,101, 32,116,119,111, 10, 9, 9,100, 72,100,120,121, + 32, 61, 32,100, 72,100,120,121, 42, 40, 49, 45,102, 66,108,101,110,100, 41, 32, 43, 32,100, 72,100,120,121, 95, 98,105, 99,117, + 98,105, 99, 42,102, 66,108,101,110,100, 59, 10, 9,125, 10, 10, 9,100, 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, +100, 72,100,120,121, 46,120, 59, 10, 9,100, 66,116, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32,100, 72,100,120,121, 46,121, + 59, 10,125, 10, 10, 35,101,110,100,105,102, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,117,109,112, 95,116, 97,112, 53, + 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,102,108,111, + 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,116, 32, 41, 32, + 10,123, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120,121, 41, 59, + 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41, 59, 10, 10, + 9,118,101, 99, 50, 32, 83, 84, 99, 32, 61, 32,116,101,120, 99,111, 46,120,121, 59, 10, 9,118,101, 99, 50, 32, 83, 84,108, 32, + 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, 9,118,101, 99, 50, + 32, 83, 84,114, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, 42, 32, 84,101,120, 68,120, 32, 59, 10, + 9,118,101, 99, 50, 32, 83, 84,100, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 45, 32, 48, 46, 53, 32, 42, 32, 84,101,120, + 68,121, 32, 59, 10, 9,118,101, 99, 50, 32, 83, 84,117, 32, 61, 32,116,101,120, 99,111, 46,120,121, 32, 43, 32, 48, 46, 53, 32, + 42, 32, 84,101,120, 68,121, 32, 59, 10, 9, 10, 9,102,108,111, 97,116, 32, 72, 99, 44, 72,108, 44, 72,114, 44, 72,100, 44, 72, +117, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84, 99, 41, + 44, 32, 72, 99, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, + 32, 83, 84,108, 41, 44, 32, 72,108, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116,117,114,101, 50, 68, + 40,105,109, 97, 44, 32, 83, 84,114, 41, 44, 32, 72,114, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, 32,116,101,120,116, +117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,100, 41, 44, 32, 72,100, 32, 41, 59, 10, 9,114,103, 98,116,111, 98,119, 40, + 32,116,101,120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32, 83, 84,117, 41, 44, 32, 72,117, 32, 41, 59, 10, 9, 10, 9,100, + 66,115, 32, 61, 32,104, 83, 99, 97,108,101, 32, 42, 32, 40, 72,114, 32, 45, 32, 72,108, 41, 59, 10, 9,100, 66,116, 32, 61, 32, +104, 83, 99, 97,108,101, 32, 42, 32, 40, 72,117, 32, 45, 32, 72,100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, + 95, 98,117,109,112, 95,100,101,114,105,118, 40, 32,118,101, 99, 51, 32,116,101,120, 99,111, 44, 32,115, 97,109,112,108,101,114, + 50, 68, 32,105,109, 97, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,120, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,121, + 44, 32,102,108,111, 97,116, 32,104, 83, 99, 97,108,101, 44, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32,111,117,116, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100, + 66,116, 32, 41, 32, 10,123, 10, 9,102,108,111, 97,116, 32,115, 32, 61, 32, 49, 46, 48, 59, 9, 9, 47, 47, 32,110,101,103, 97, +116,101, 32,116,104,105,115, 32,105,102, 32,102,108,105,112,112,101,100, 32,116,101,120,116,117,114,101, 32, 99,111,111,114,100, +105,110, 97,116,101, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100,120, 40,116,101,120, 99,111, 46,120, +121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40,116,101,120, 99,111, 46,120,121, 41, + 59, 10, 9, 10, 9, 47, 47, 32,116,104,105,115, 32,118, 97,114,105, 97,110,116, 32,117,115,105,110,103, 32, 97, 32,100,101,114, +105,118, 97,116,105,118,101, 32,109, 97,112, 32,105,115, 32,100,101,115, 99,114,105, 98,101,100, 32,104,101,114,101, 10, 9, 47, + 47, 32,104,116,116,112, 58, 47, 47,109,109,105,107,107,101,108,115,101,110, 51,100, 46, 98,108,111,103,115,112,111,116, 46, 99, +111,109, 47, 50, 48, 49, 49, 47, 48, 55, 47,100,101,114,105,118, 97,116,105,118,101, 45,109, 97,112,115, 46,104,116,109,108, 10, + 9,118,101, 99, 50, 32,100,105,109, 32, 61, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 44, 32,105,109, 97, 95,121, 41, 59, 10, + 9,118,101, 99, 50, 32,100, 66,100,117,118, 32, 61, 32,104, 83, 99, 97,108,101, 42,100,105,109, 42, 40, 50, 46, 48, 42,116,101, +120,116,117,114,101, 50, 68, 40,105,109, 97, 44, 32,116,101,120, 99,111, 46,120,121, 41, 46,120,121, 45, 49, 46, 48, 41, 59, 10, + 9, 10, 9,100, 66,115, 32, 61, 32,100, 66,100,117,118, 46,120, 42, 84,101,120, 68,120, 46,120, 32, 43, 32,115, 42,100, 66,100, +117,118, 46,121, 42, 84,101,120, 68,120, 46,121, 59, 10, 9,100, 66,116, 32, 61, 32,100, 66,100,117,118, 46,120, 42, 84,101,120, + 68,121, 46,120, 32, 43, 32,115, 42,100, 66,100,117,118, 46,121, 42, 84,101,120, 68,121, 46,121, 59, 10,125, 10, 10,118,111,105, +100, 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, 40, 32,102,108,111, 97,116, 32,102, 68,101,116, 44, 32,102, +108,111, 97,116, 32,100, 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, 44, 32,118,101, 99, 51, 32,118, 82, 49, 44, 32,118, +101, 99, 51, 32,118, 82, 50, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 32, 32,111, +117,116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114,116, +117,114, 98,101,100, 95,110,111,114,109, 32, 41, 32, 10,123, 10, 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, + 61, 32,115,105,103,110, 40,102, 68,101,116, 41, 32, 42, 32, 40, 32,100, 66,115, 32, 42, 32,118, 82, 49, 32, 43, 32,100, 66,116, + 32, 42, 32,118, 82, 50, 32, 41, 59, 10, 9, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105, +110, 32, 45, 32,118, 83,117,114,102, 71,114, 97,100, 59, 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 61, + 32,110,111,114,109, 97,108,105,122,101, 40, 32,118, 78, 97, 99, 99, 95,111,117,116, 32, 41, 59, 10,125, 10, 10,118,111,105,100, + 32,109,116,101,120, 95, 98,117,109,112, 95, 97,112,112,108,121, 95,116,101,120,115,112, 97, 99,101, 40, 32,102,108,111, 97,116, + 32,102, 68,101,116, 44, 32,102,108,111, 97,116, 32,100, 66,115, 44, 32,102,108,111, 97,116, 32,100, 66,116, 44, 32,118,101, 99, + 51, 32,118, 82, 49, 44, 32,118,101, 99, 51, 32,118, 82, 50, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,115, 97,109,112,108,101,114, 50, 68, 32,105,109, 97, 44, 32,118, +101, 99, 51, 32,116,101,120, 99,111, 44, 32,102,108,111, 97,116, 32,105,109, 97, 95,120, 44, 32,102,108,111, 97,116, 32,105,109, + 97, 95,121, 44, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,105,110, 44, 10, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32,111,117, +116, 32,118,101, 99, 51, 32,118, 78, 97, 99, 99, 95,111,117,116, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112,101,114,116,117, +114, 98,101,100, 95,110,111,114,109, 32, 41, 32, 10,123, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,120, 32, 61, 32,100, 70,100, +120, 40,116,101,120, 99,111, 46,120,121, 41, 59, 10, 9,118,101, 99, 50, 32, 84,101,120, 68,121, 32, 61, 32,100, 70,100,121, 40, +116,101,120, 99,111, 46,120,121, 41, 59, 10, 10, 9,118,101, 99, 51, 32,118, 83,117,114,102, 71,114, 97,100, 32, 61, 32,115,105, +103,110, 40,102, 68,101,116, 41, 32, 42, 32, 40, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,100, 66,115, 32, 47, + 32,108,101,110,103,116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84,101,120, 68,120, 46,120, 44, 32,105,109, 97, + 95,121, 42, 84,101,120, 68,120, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 49, 32, 43, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32,100, 66,116, 32, 47, 32,108,101,110,103,116,104, 40, 32,118,101, 99, 50, 40,105,109, 97, 95,120, 42, 84,101,120, + 68,121, 46,120, 44, 32,105,109, 97, 95,121, 42, 84,101,120, 68,121, 46,121, 41, 32, 41, 32, 42, 32,118, 82, 50, 32, 41, 59, 10, + 9, 9, 9, 9, 10, 9,118, 78, 97, 99, 99, 95,111,117,116, 32, 61, 32,118, 78, 97, 99, 99, 95,105,110, 32, 45, 32,118, 83,117, +114,102, 71,114, 97,100, 59, 10, 9,112,101,114,116,117,114, 98,101,100, 95,110,111,114,109, 32, 61, 32,110,111,114,109, 97,108, +105,122,101, 40, 32,118, 78, 97, 99, 99, 95,111,117,116, 32, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110, +101,103, 97,116,101, 95,116,101,120,110,111,114,109, 97,108, 40,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, + 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32, +118,101, 99, 51, 40, 45,110,111,114,109, 97,108, 46,120, 44, 32, 45,110,111,114,109, 97,108, 46,121, 44, 32,110,111,114,109, 97, +108, 46,122, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95,110,115,112, 97, 99,101, 95,116, 97,110,103,101,110, +116, 40,118,101, 99, 52, 32,116, 97,110,103,101,110,116, 44, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,118,101, 99, + 51, 32,116,101,120,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, + 10,123, 10, 9,118,101, 99, 51, 32, 66, 32, 61, 32,116, 97,110,103,101,110,116, 46,119, 32, 42, 32, 99,114,111,115,115, 40,110, +111,114,109, 97,108, 44, 32,116, 97,110,103,101,110,116, 46,120,121,122, 41, 59, 10, 10, 9,111,117,116,110,111,114,109, 97,108, + 32, 61, 32,116,101,120,110,111,114,109, 97,108, 46,120, 42,116, 97,110,103,101,110,116, 46,120,121,122, 32, 43, 32,116,101,120, +110,111,114,109, 97,108, 46,121, 42, 66, 32, 43, 32,116,101,120,110,111,114,109, 97,108, 46,122, 42,110,111,114,109, 97,108, 59, + 10, 9,111,117,116,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,110,111,114,109, 97, +108, 41, 59, 10,125, 10, 10,118,111,105,100, 32,109,116,101,120, 95, 98,108,101,110,100, 95,110,111,114,109, 97,108, 40,102,108, +111, 97,116, 32,110,111,114,102, 97, 99, 44, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,118,101, 99, 51, 32,110,101, +119,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116,110,111,114,109, 97,108, 41, 10,123, 10, 9, +111,117,116,110,111,114,109, 97,108, 32, 61, 32, 40, 49, 46, 48, 32, 45, 32,110,111,114,102, 97, 99, 41, 42,110,111,114,109, 97, +108, 32, 43, 32,110,111,114,102, 97, 99, 42,110,101,119,110,111,114,109, 97,108, 59, 10, 9,111,117,116,110,111,114,109, 97,108, + 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,111,117,116,110,111,114,109, 97,108, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, + 42, 42, 42, 42, 32, 77, 65, 84, 69, 82, 73, 65, 76, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, 10, 10,118,111,105,100, 32,108, + 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,117,110, 95,104,101,109,105, 40,118,101, 99, 51, 32,108, 97,109, +112,118,101, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100,105,115, +116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,108,118, 32, 61, 32,108, 97, +109,112,118,101, 99, 59, 10, 9,100,105,115,116, 32, 61, 32, 49, 46, 48, 59, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, 49, + 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,111,116,104,101, +114, 40,118,101, 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111, 44, 32,111,117,116, 32,118,101, 99, 51, + 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118, +105,115,105,102, 97, 99, 41, 10,123, 10, 9,108,118, 32, 61, 32, 99,111, 32, 45, 32,108, 97,109,112, 99,111, 59, 10, 9,100,105, +115,116, 32, 61, 32,108,101,110,103,116,104, 40,108,118, 41, 59, 10, 9,108,118, 32, 61, 32,110,111,114,109, 97,108,105,122,101, + 40,108,118, 41, 59, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97, +109,112, 95,102, 97,108,108,111,102,102, 95,105,110,118,108,105,110,101, 97,114, 40,102,108,111, 97,116, 32,108, 97,109,112,100, +105,115,116, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, + 97, 99, 41, 10,123, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32,108, 97,109,112,100,105,115,116, 47, 40,108, 97,109,112,100, +105,115,116, 32, 43, 32,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,102, 97,108,108,111,102, +102, 95,105,110,118,115,113,117, 97,114,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,102,108,111, 97, +116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,118,105, +115,105,102, 97, 99, 32, 61, 32,108, 97,109,112,100,105,115,116, 47, 40,108, 97,109,112,100,105,115,116, 32, 43, 32,100,105,115, +116, 42,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,102, 97,108,108,111,102,102, 95,115,108, +105,100,101,114,115, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32,102,108,111, 97,116, 32,108,100, 49, 44, + 32,102,108,111, 97,116, 32,108,100, 50, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32,111,117,116, 32,102,108,111, 97, +116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116,107,119, 32, 61, + 32,108, 97,109,112,100,105,115,116, 42,108, 97,109,112,100,105,115,116, 59, 10, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, +108, 97,109,112,100,105,115,116, 47, 40,108, 97,109,112,100,105,115,116, 32, 43, 32,108,100, 49, 42,100,105,115,116, 41, 59, 10, + 9,118,105,115,105,102, 97, 99, 32, 42, 61, 32,108, 97,109,112,100,105,115,116,107,119, 47, 40,108, 97,109,112,100,105,115,116, +107,119, 32, 43, 32,108,100, 50, 42,100,105,115,116, 42,100,105,115,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109, +112, 95,102, 97,108,108,111,102,102, 95, 99,117,114,118,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32, +115, 97,109,112,108,101,114, 50, 68, 32, 99,117,114,118,101,109, 97,112, 44, 32,102,108,111, 97,116, 32,100,105,115,116, 44, 32, +111,117,116, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,118,105,115,105,102, 97, 99, 32, 61, 32, +116,101,120,116,117,114,101, 50, 68, 40, 99,117,114,118,101,109, 97,112, 44, 32,118,101, 99, 50, 40,100,105,115,116, 47,108, 97, +109,112,100,105,115,116, 44, 32, 48, 46, 48, 41, 41, 46,120, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105, +115,105, 98,105,108,105,116,121, 95,115,112,104,101,114,101, 40,102,108,111, 97,116, 32,108, 97,109,112,100,105,115,116, 44, 32, +102,108,111, 97,116, 32,100,105,115,116, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,116, 61, 32,108, 97,109, +112,100,105,115,116, 32, 45, 32,100,105,115,116, 59, 10, 10, 9,111,117,116,118,105,115,105,102, 97, 99, 61, 32,118,105,115,105, +102, 97, 99, 42,109, 97,120, 40,116, 44, 32, 48, 46, 48, 41, 47,108, 97,109,112,100,105,115,116, 59, 10,125, 10, 10,118,111,105, +100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 95,115,113,117, 97,114,101, 40,118,101, + 99, 51, 32,108, 97,109,112,118,101, 99, 44, 32,109, 97,116, 52, 32,108, 97,109,112,105,109, 97,116, 44, 32,118,101, 99, 51, 32, +108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112,114, 41, 10,123, 10, 9,105,102, 40,100,111,116, 40,108,118, + 44, 32,108, 97,109,112,118,101, 99, 41, 32, 62, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,118,101, 99, 51, 32,108,118,114,111,116, + 32, 61, 32, 40,108, 97,109,112,105,109, 97,116, 42,118,101, 99, 52, 40,108,118, 44, 32, 48, 46, 48, 41, 41, 46,120,121,122, 59, + 10, 9, 9,102,108,111, 97,116, 32,120, 32, 61, 32,109, 97,120, 40, 97, 98,115, 40,108,118,114,111,116, 46,120, 47,108,118,114, +111,116, 46,122, 41, 44, 32, 97, 98,115, 40,108,118,114,111,116, 46,121, 47,108,118,114,111,116, 46,122, 41, 41, 59, 10, 10, 9, + 9,105,110,112,114, 32, 61, 32, 49, 46, 48, 47,115,113,114,116, 40, 49, 46, 48, 32, 43, 32,120, 42,120, 41, 59, 10, 9,125, 10, + 9,101,108,115,101, 10, 9, 9,105,110,112,114, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, + 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 95, 99,105,114, 99,108,101, 40,118,101, 99, 51, 32,108, 97,109, +112,118,101, 99, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112,114, 41, 10,123, + 10, 9,105,110,112,114, 32, 61, 32,100,111,116, 40,108,118, 44, 32,108, 97,109,112,118,101, 99, 41, 59, 10,125, 10, 10,118,111, +105,100, 32,108, 97,109,112, 95,118,105,115,105, 98,105,108,105,116,121, 95,115,112,111,116, 40,102,108,111, 97,116, 32,115,112, +111,116,115,105, 44, 32,102,108,111, 97,116, 32,115,112,111,116, 98,108, 44, 32,102,108,111, 97,116, 32,105,110,112,114, 44, 32, +102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,118,105,115,105, +102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,116, 32, 61, 32,115,112,111,116,115,105, 59, 10, 10, 9,105,102, 40,105, +110,112,114, 32, 60, 61, 32,116, 41, 32,123, 10, 9, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, + 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,116, 32, 61, 32,105,110,112,114, 32, 45, 32,116, 59, 10, 10, 9, 9, 47, 42, + 32,115,111,102,116, 32, 97,114,101, 97, 32, 42, 47, 10, 9, 9,105,102, 40,115,112,111,116, 98,108, 32, 33, 61, 32, 48, 46, 48, + 41, 10, 9, 9, 9,105,110,112,114, 32, 42, 61, 32,115,109,111,111,116,104,115,116,101,112, 40, 48, 46, 48, 44, 32, 49, 46, 48, + 44, 32,116, 47,115,112,111,116, 98,108, 41, 59, 10, 10, 9, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, 32,118,105,115, +105,102, 97, 99, 42,105,110,112,114, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,108, 97,109,112, 95,118,105,115,105, 98, +105,108,105,116,121, 95, 99,108, 97,109,112, 40,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, 32,102, +108,111, 97,116, 32,111,117,116,118,105,115,105,102, 97, 99, 41, 10,123, 10, 9,111,117,116,118,105,115,105,102, 97, 99, 32, 61, + 32, 40,118,105,115,105,102, 97, 99, 32, 60, 32, 48, 46, 48, 48, 49, 41, 63, 32, 48, 46, 48, 58, 32,118,105,115,105,102, 97, 99, + 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,118,105,101,119, 40,118,101, 99, 51, 32, 99,111, 44, 32,111,117, +116, 32,118,101, 99, 51, 32,118,105,101,119, 41, 10,123, 10, 9, 47, 42, 32,104, 97,110,100,108,101, 32,112,101,114,115,112,101, + 99,116,105,118,101, 47,111,114,116,104,111,103,114, 97,112,104,105, 99, 32, 42, 47, 10, 9,118,105,101,119, 32, 61, 32, 40,103, +108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, 97,116,114,105,120, 91, 51, 93, 91, 51, 93, 32, 61, 61, 32, 48, 46, 48, 41, + 63, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 41, 58, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, + 45, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,116, 97,110,103,101,110,116, 95,118, 40,118, +101, 99, 51, 32,108,118, 44, 32,118,101, 99, 51, 32,116, 97,110,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,110, 41, 10, +123, 10, 9,118,101, 99, 51, 32, 99, 32, 61, 32, 99,114,111,115,115, 40,108,118, 44, 32,116, 97,110,103, 41, 59, 10, 9,118,101, + 99, 51, 32,118,110,111,114, 32, 61, 32, 99,114,111,115,115, 40, 99, 44, 32,116, 97,110,103, 41, 59, 10, 10, 9,118,110, 32, 61, + 32, 45,110,111,114,109, 97,108,105,122,101, 40,118,110,111,114, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, + 95,105,110,112, 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,111,117,116, 32,102,108,111, 97,116, + 32,105,110,112, 41, 10,123, 10, 9,105,110,112, 32, 61, 32,100,111,116, 40,118,110, 44, 32,108,118, 41, 59, 10,125, 10, 10,118, +111,105,100, 32,115,104, 97,100,101, 95,105,115, 95,110,111, 95,100,105,102,102,117,115,101, 40,111,117,116, 32,102,108,111, 97, +116, 32,105,115, 41, 10,123, 10, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, + 95,105,115, 95,104,101,109,105, 40,102,108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, + 41, 10,123, 10, 9,105,115, 32, 61, 32, 48, 46, 53, 42,105,110,112, 32, 43, 32, 48, 46, 53, 59, 10,125, 10, 10,102,108,111, 97, +116, 32, 97,114,101, 97, 95,108, 97,109,112, 95,101,110,101,114,103,121, 40,109, 97,116, 52, 32, 97,114,101, 97, 44, 32,118,101, + 99, 51, 32, 99,111, 44, 32,118,101, 99, 51, 32,118,110, 41, 10,123, 10, 9,118,101, 99, 51, 32,118,101, 99, 91, 52, 93, 44, 32, + 99, 91, 52, 93, 59, 10, 9,102,108,111, 97,116, 32,114, 97,100, 91, 52, 93, 44, 32,102, 97, 99, 59, 10, 9, 10, 9,118,101, 99, + 91, 48, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 48, 93, 46,120,121,122, + 41, 59, 10, 9,118,101, 99, 91, 49, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, + 91, 49, 93, 46,120,121,122, 41, 59, 10, 9,118,101, 99, 91, 50, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,111, + 32, 45, 32, 97,114,101, 97, 91, 50, 93, 46,120,121,122, 41, 59, 10, 9,118,101, 99, 91, 51, 93, 32, 61, 32,110,111,114,109, 97, +108,105,122,101, 40, 99,111, 32, 45, 32, 97,114,101, 97, 91, 51, 93, 46,120,121,122, 41, 59, 10, 10, 9, 99, 91, 48, 93, 32, 61, + 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 48, 93, 44, 32,118,101, 99, 91, 49, 93, 41, + 41, 59, 10, 9, 99, 91, 49, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 49, + 93, 44, 32,118,101, 99, 91, 50, 93, 41, 41, 59, 10, 9, 99, 91, 50, 93, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 99, +114,111,115,115, 40,118,101, 99, 91, 50, 93, 44, 32,118,101, 99, 91, 51, 93, 41, 41, 59, 10, 9, 99, 91, 51, 93, 32, 61, 32,110, +111,114,109, 97,108,105,122,101, 40, 99,114,111,115,115, 40,118,101, 99, 91, 51, 93, 44, 32,118,101, 99, 91, 48, 93, 41, 41, 59, + 10, 10, 9,114, 97,100, 91, 48, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, 48, 93, 44, 32,118,101, 99, + 91, 49, 93, 41, 41, 59, 10, 9,114, 97,100, 91, 49, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118,101, 99, 91, 49, 93, + 44, 32,118,101, 99, 91, 50, 93, 41, 41, 59, 10, 9,114, 97,100, 91, 50, 93, 32, 61, 32, 97, 99,111,115, 40,100,111,116, 40,118, +101, 99, 91, 50, 93, 44, 32,118,101, 99, 91, 51, 93, 41, 41, 59, 10, 9,114, 97,100, 91, 51, 93, 32, 61, 32, 97, 99,111,115, 40, +100,111,116, 40,118,101, 99, 91, 51, 93, 44, 32,118,101, 99, 91, 48, 93, 41, 41, 59, 10, 10, 9,102, 97, 99, 61, 32, 32,114, 97, +100, 91, 48, 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 48, 93, 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 49, + 93, 42,100,111,116, 40,118,110, 44, 32, 99, 91, 49, 93, 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 50, 93, 42,100, +111,116, 40,118,110, 44, 32, 99, 91, 50, 93, 41, 59, 10, 9,102, 97, 99, 43, 61, 32,114, 97,100, 91, 51, 93, 42,100,111,116, 40, +118,110, 44, 32, 99, 91, 51, 93, 41, 59, 10, 10, 9,114,101,116,117,114,110, 32,109, 97,120, 40,102, 97, 99, 44, 32, 48, 46, 48, + 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,105,110,112, 95, 97,114,101, 97, 40,118,101, 99, 51, 32,112, +111,115,105,116,105,111,110, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111, 44, 32,118,101, 99, 51, 32,108, 97,109,112,118, +101, 99, 44, 32,118,101, 99, 51, 32,118,110, 44, 32,109, 97,116, 52, 32, 97,114,101, 97, 44, 32,102,108,111, 97,116, 32, 97,114, +101, 97,115,105,122,101, 44, 32,102,108,111, 97,116, 32,107, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,110,112, 41, 10, +123, 10, 9,118,101, 99, 51, 32, 99,111, 32, 61, 32,112,111,115,105,116,105,111,110, 59, 10, 9,118,101, 99, 51, 32,118,101, 99, + 32, 61, 32, 99,111, 32, 45, 32,108, 97,109,112, 99,111, 59, 10, 10, 9,105,102, 40,100,111,116, 40,118,101, 99, 44, 32,108, 97, +109,112,118,101, 99, 41, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,105,110,112, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, + 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,105,110,116,101,110,115, 32, 61, 32, 97,114,101, 97, 95,108, 97, +109,112, 95,101,110,101,114,103,121, 40, 97,114,101, 97, 44, 32, 99,111, 44, 32,118,110, 41, 59, 10, 10, 9, 9,105,110,112, 32, + 61, 32,112,111,119, 40,105,110,116,101,110,115, 42, 97,114,101, 97,115,105,122,101, 44, 32,107, 41, 59, 10, 9,125, 10,125, 10, + 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,111,114,101,110, 95,110, 97,121,101,114, 40,102, +108,111, 97,116, 32,110,108, 44, 32,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, + 32,102,108,111, 97,116, 32,114,111,117,103,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,118, +101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, 59, 10, 9,102,108,111, 97,116, + 32,110,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,104, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9,102,108,111, 97, +116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9,102,108,111, + 97,116, 32,114,101, 97,108,110,108, 32, 61, 32,100,111,116, 40,110, 44, 32,108, 41, 59, 10, 10, 9,105,102, 40,114,101, 97,108, +110,108, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, + 32,105,102, 40,110,108, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9, +101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,118,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,118, 44, 32,104, + 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9,102,108,111, 97,116, 32, 76,105,116, 95, 65, 32, 61, 32, 97, 99,111,115, 40,114,101, + 97,108,110,108, 41, 59, 10, 9, 9,102,108,111, 97,116, 32, 86,105,101,119, 95, 65, 32, 61, 32, 97, 99,111,115, 40,110,118, 41, + 59, 10, 10, 9, 9,118,101, 99, 51, 32, 76,105,116, 95, 66, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 45, 32, +114,101, 97,108,110,108, 42,110, 41, 59, 10, 9, 9,118,101, 99, 51, 32, 86,105,101,119, 95, 66, 32, 61, 32,110,111,114,109, 97, +108,105,122,101, 40,118, 32, 45, 32,110,118, 42,110, 41, 59, 10, 10, 9, 9,102,108,111, 97,116, 32,116, 32, 61, 32,109, 97,120, + 40,100,111,116, 40, 76,105,116, 95, 66, 44, 32, 86,105,101,119, 95, 66, 41, 44, 32, 48, 46, 48, 41, 59, 10, 10, 9, 9,102,108, +111, 97,116, 32, 97, 44, 32, 98, 59, 10, 10, 9, 9,105,102, 40, 76,105,116, 95, 65, 32, 62, 32, 86,105,101,119, 95, 65, 41, 32, +123, 10, 9, 9, 9, 97, 32, 61, 32, 76,105,116, 95, 65, 59, 10, 9, 9, 9, 98, 32, 61, 32, 86,105,101,119, 95, 65, 59, 10, 9, + 9,125, 10, 9, 9,101,108,115,101, 32,123, 10, 9, 9, 9, 97, 32, 61, 32, 86,105,101,119, 95, 65, 59, 10, 9, 9, 9, 98, 32, + 61, 32, 76,105,116, 95, 65, 59, 10, 9, 9,125, 10, 10, 9, 9,102,108,111, 97,116, 32, 65, 32, 61, 32, 49, 46, 48, 32, 45, 32, + 40, 48, 46, 53, 42, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 47, 40, 40,114,111,117,103,104, 42,114,111,117,103, +104, 41, 32, 43, 32, 48, 46, 51, 51, 41, 41, 41, 59, 10, 9, 9,102,108,111, 97,116, 32, 66, 32, 61, 32, 48, 46, 52, 53, 42, 40, + 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 47, 40, 40,114,111,117,103,104, 42,114,111,117,103,104, 41, 32, 43, 32, 48, + 46, 48, 57, 41, 41, 59, 10, 10, 9, 9, 98, 32, 42, 61, 32, 48, 46, 57, 53, 59, 10, 9, 9,105,115, 32, 61, 32,110,108, 42, 40, + 65, 32, 43, 32, 40, 66, 32, 42, 32,116, 32, 42, 32,115,105,110, 40, 97, 41, 32, 42, 32,116, 97,110, 40, 98, 41, 41, 41, 59, 10, + 9,125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,116,111,111,110, 40,118,101, + 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,115,105,122,101, + 44, 32,102,108,111, 97,116, 32,116,115,109,111,111,116,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,105,115, 41, 10,123, + 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61, 32,100,111,116, 40,110, 44, 32,108, 41, 59, 10, 9,102,108,111, 97,116, + 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,114,115,108,116, 41, 59, 10, 10, 9,105,102, 40, 97,110,103, 32, 60, 32,115,105, +122,101, 41, 32,105,115, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 97,110,103, 32, 62, 32, 40,115,105, +122,101, 32, 43, 32,116,115,109,111,111,116,104, 41, 32,124,124, 32,116,115,109,111,111,116,104, 32, 61, 61, 32, 48, 46, 48, 41, + 32,105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,105,115, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 40, 97,110, +103, 32, 45, 32,115,105,122,101, 41, 47,116,115,109,111,111,116,104, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100, +101, 95,100,105,102,102,117,115,101, 95,109,105,110,110, 97,101,114,116, 40,102,108,111, 97,116, 32,110,108, 44, 32,118,101, 99, + 51, 32,110, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,100, 97,114,107,110,101,115,115, 44, 32,111,117,116, + 32,102,108,111, 97,116, 32,105,115, 41, 10,123, 10, 9,105,102, 40,110,108, 32, 60, 61, 32, 48, 46, 48, 41, 32,123, 10, 9, 9, +105,115, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,110,118, 32, + 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 10, 9, 9,105,102, 40,100, 97,114, +107,110,101,115,115, 32, 60, 61, 32, 49, 46, 48, 41, 10, 9, 9, 9,105,115, 32, 61, 32,110,108, 42,112,111,119, 40,109, 97,120, + 40,110,118, 42,110,108, 44, 32, 48, 46, 49, 41, 44, 32,100, 97,114,107,110,101,115,115, 32, 45, 32, 49, 46, 48, 41, 59, 10, 9, + 9,101,108,115,101, 10, 9, 9, 9,105,115, 32, 61, 32,110,108, 42,112,111,119, 40, 49, 46, 48, 48, 48, 49, 32, 45, 32,110,118, + 44, 32,100, 97,114,107,110,101,115,115, 32, 45, 32, 49, 46, 48, 41, 59, 10, 9,125, 10,125, 10, 10,102,108,111, 97,116, 32,102, +114,101,115,110,101,108, 95,102, 97, 99, 40,118,101, 99, 51, 32,118,105,101,119, 44, 32,118,101, 99, 51, 32,118,110, 44, 32,102, +108,111, 97,116, 32,103,114, 97,100, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,116, + 49, 44, 32,116, 50, 59, 10, 9,102,108,111, 97,116, 32,102,102, 97, 99, 59, 10, 10, 9,105,102, 40,102, 97, 99, 61, 61, 48, 46, + 48, 41, 32,123, 10, 9, 9,102,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9, +116, 49, 61, 32,100,111,116, 40,118,105,101,119, 44, 32,118,110, 41, 59, 10, 9, 9,105,102, 40,116, 49, 62, 48, 46, 48, 41, 32, + 32,116, 50, 61, 32, 49, 46, 48, 43,116, 49, 59, 10, 9, 9,101,108,115,101, 32,116, 50, 61, 32, 49, 46, 48, 45,116, 49, 59, 10, + 10, 9, 9,116, 50, 61, 32,103,114, 97,100, 32, 43, 32, 40, 49, 46, 48, 45,103,114, 97,100, 41, 42,112,111,119, 40,116, 50, 44, + 32,102, 97, 99, 41, 59, 10, 10, 9, 9,105,102, 40,116, 50, 60, 48, 46, 48, 41, 32,102,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, + 10, 9, 9,101,108,115,101, 32,105,102, 40,116, 50, 62, 49, 46, 48, 41, 32,102,102, 97, 99, 32, 61, 32, 49, 46, 48, 59, 10, 9, + 9,101,108,115,101, 32,102,102, 97, 99, 32, 61, 32,116, 50, 59, 10, 9,125, 10, 10, 9,114,101,116,117,114,110, 32,102,102, 97, + 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,100,105,102,102,117,115,101, 95,102,114,101,115,110,101,108, + 40,118,101, 99, 51, 32,118,110, 44, 32,118,101, 99, 51, 32,108,118, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,102,108, +111, 97,116, 32,102, 97, 99, 95,105, 44, 32,102,108,111, 97,116, 32,102, 97, 99, 44, 32,111,117,116, 32,102,108,111, 97,116, 32, +105,115, 41, 10,123, 10, 9,105,115, 32, 61, 32,102,114,101,115,110,101,108, 95,102, 97, 99, 40,108,118, 44, 32,118,110, 44, 32, +102, 97, 99, 95,105, 44, 32,102, 97, 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 99,117, 98,105, 99, + 40,102,108,111, 97,116, 32,105,115, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105,115, 41, 10,123, 10, 9,105, +102, 40,105,115, 62, 48, 46, 48, 32, 38, 38, 32,105,115, 60, 49, 46, 48, 41, 10, 9, 9,111,117,116,105,115, 61, 32,115,109,111, +111,116,104,115,116,101,112, 40, 48, 46, 48, 44, 32, 49, 46, 48, 44, 32,105,115, 41, 59, 10, 9,101,108,115,101, 10, 9, 9,111, +117,116,105,115, 61, 32,105,115, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,118,105,115,105,102, 97, 99, 40, +102,108,111, 97,116, 32,105, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,102,108,111, 97,116, 32,114,101, +102,108, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,105, 41, 10,123, 10, 9, 47, 42,105,102, 40,105, 32, 62, 32, + 48, 46, 48, 41, 42, 47, 10, 9, 9,111,117,116,105, 32, 61, 32,109, 97,120, 40,105, 42,118,105,115,105,102, 97, 99, 42,114,101, +102,108, 44, 32, 48, 46, 48, 41, 59, 10, 9, 47, 42,101,108,115,101, 10, 9, 9,111,117,116,105, 32, 61, 32,105, 59, 42, 47, 10, +125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,116, 97,110,103,101,110,116, 95,118, 95,115,112,101, 99, 40,118,101, 99, + 51, 32,116, 97,110,103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,118,110, 41, 10,123, 10, 9,118,110, 32, 61, 32,116, 97,110, +103, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 95,116,111, 95,100,105,102,102,117,115,101, 40, +102,108,111, 97,116, 32,105, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111,108, 44, 32,118,101, 99, 51, 32, 99,111,108, 44, + 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,105,102, 40,105, 32, 62, 32, 48, 46, 48, 41, + 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,105, 42,108, 97,109,112, 99,111,108, 42, 99,111,108, 59, 10, 9,101,108,115,101, + 10, 9, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 59, + 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,104,101,109,105, 95,115,112,101, 99, 40,118,101, 99, 51, 32,118,110, + 44, 32,118,101, 99, 51, 32,108,118, 44, 32,118,101, 99, 51, 32,118,105,101,119, 44, 32,102,108,111, 97,116, 32,115,112,101, 99, + 44, 32,102,108,111, 97,116, 32,104, 97,114,100, 44, 32,102,108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,111,117,116, + 32,102,108,111, 97,116, 32,116, 41, 10,123, 10, 9,108,118, 32, 43, 61, 32,118,105,101,119, 59, 10, 9,108,118, 32, 61, 32,110, +111,114,109, 97,108,105,122,101, 40,108,118, 41, 59, 10, 10, 9,116, 32, 61, 32,100,111,116, 40,118,110, 44, 32,108,118, 41, 59, + 10, 9,116, 32, 61, 32, 48, 46, 53, 42,116, 32, 43, 32, 48, 46, 53, 59, 10, 10, 9,116, 32, 61, 32,118,105,115,105,102, 97, 99, + 42,115,112,101, 99, 42,112,111,119, 40,116, 44, 32,104, 97,114,100, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100, +101, 95,112,104,111,110,103, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, + 51, 32,118, 44, 32,102,108,111, 97,116, 32,104, 97,114,100, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, + 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, + 59, 10, 9,102,108,111, 97,116, 32,114,115,108,116, 32, 61, 32,109, 97,120, 40,100,111,116, 40,104, 44, 32,110, 41, 44, 32, 48, + 46, 48, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,112,111,119, 40,114,115,108,116, 44, 32,104, 97,114,100, 41, + 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 99,111,111,107,116,111,114,114, 95,115,112,101, 99, 40,118,101, + 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,104, 97,114,100, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, + 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, 59, 10, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,100, +111,116, 40,110, 44, 32,104, 41, 59, 10, 10, 9,105,102, 40,110,104, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9,115,112,101, + 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, 10, 9, 9,102,108,111, 97,116, 32,110, +118, 32, 61, 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9,102,108,111, 97,116, + 32,105, 32, 61, 32,112,111,119, 40,110,104, 44, 32,104, 97,114,100, 41, 59, 10, 10, 9, 9,105, 32, 61, 32,105, 47, 40, 48, 46, + 49, 43,110,118, 41, 59, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,105, 59, 10, 9,125, 10,125, 10, 10,118,111,105,100, + 32,115,104, 97,100,101, 95, 98,108,105,110,110, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, 99, 51, 32,108, + 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,114,101,102,114, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112, +101, 99, 95,112,111,119,101,114, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9, +105,102, 40,114,101,102,114, 97, 99, 32, 60, 32, 49, 46, 48, 41, 32,123, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, + 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,105,102, 40,115,112,101, 99, 95,112,111,119,101,114, 32, 61, 61, 32, 48, 46, + 48, 41, 32,123, 10, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, + 10, 9, 9,105,102, 40,115,112,101, 99, 95,112,111,119,101,114, 60, 49, 48, 48, 46, 48, 41, 10, 9, 9, 9,115,112,101, 99, 95, +112,111,119,101,114, 61, 32,115,113,114,116, 40, 49, 46, 48, 47,115,112,101, 99, 95,112,111,119,101,114, 41, 59, 10, 9, 9,101, +108,115,101, 10, 9, 9, 9,115,112,101, 99, 95,112,111,119,101,114, 61, 32, 49, 48, 46, 48, 47,115,112,101, 99, 95,112,111,119, +101,114, 59, 10, 10, 9, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,118, 32, 43, 32,108, 41, + 59, 10, 9, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,100,111,116, 40,110, 44, 32,104, 41, 59, 10, 9, 9,105,102, 40,110, +104, 32, 60, 32, 48, 46, 48, 41, 32,123, 10, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9,125, + 10, 9, 9,101,108,115,101, 32,123, 10, 9, 9, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97,120, 40,100,111,116, 40, +110, 44, 32,118, 41, 44, 32, 48, 46, 48, 49, 41, 59, 10, 9, 9, 9,102,108,111, 97,116, 32,110,108, 32, 61, 32,100,111,116, 40, +110, 44, 32,108, 41, 59, 10, 9, 9, 9,105,102, 40,110,108, 32, 60, 61, 32, 48, 46, 48, 49, 41, 32,123, 10, 9, 9, 9, 9,115, +112,101, 99,102, 97, 99, 32, 61, 32, 48, 46, 48, 59, 10, 9, 9, 9,125, 10, 9, 9, 9,101,108,115,101, 32,123, 10, 9, 9, 9, + 9,102,108,111, 97,116, 32,118,104, 32, 61, 32,109, 97,120, 40,100,111,116, 40,118, 44, 32,104, 41, 44, 32, 48, 46, 48, 49, 41, + 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 97, 32, 61, 32, 49, 46, 48, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, + 98, 32, 61, 32, 40, 50, 46, 48, 42,110,104, 42,110,118, 41, 47,118,104, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 99, 32, + 61, 32, 40, 50, 46, 48, 42,110,104, 42,110,108, 41, 47,118,104, 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,103, 32, 61, + 32, 48, 46, 48, 59, 10, 10, 9, 9, 9, 9,105,102, 40, 97, 32, 60, 32, 98, 32, 38, 38, 32, 97, 32, 60, 32, 99, 41, 32,103, 32, + 61, 32, 97, 59, 10, 9, 9, 9, 9,101,108,115,101, 32,105,102, 40, 98, 32, 60, 32, 97, 32, 38, 38, 32, 98, 32, 60, 32, 99, 41, + 32,103, 32, 61, 32, 98, 59, 10, 9, 9, 9, 9,101,108,115,101, 32,105,102, 40, 99, 32, 60, 32, 97, 32, 38, 38, 32, 99, 32, 60, + 32, 98, 41, 32,103, 32, 61, 32, 99, 59, 10, 10, 9, 9, 9, 9,102,108,111, 97,116, 32,112, 32, 61, 32,115,113,114,116, 40, 40, + 40,114,101,102,114, 97, 99, 32, 42, 32,114,101,102,114, 97, 99, 41, 43, 40,118,104, 42,118,104, 41, 45, 49, 46, 48, 41, 41, 59, + 10, 9, 9, 9, 9,102,108,111, 97,116, 32,102, 32, 61, 32, 40, 40, 40,112, 45,118,104, 41, 42, 40,112, 45,118,104, 41, 41, 47, + 40, 40,112, 43,118,104, 41, 42, 40,112, 43,118,104, 41, 41, 41, 42, 40, 49, 46, 48, 43, 40, 40, 40, 40,118,104, 42, 40,112, 43, +118,104, 41, 41, 45, 49, 46, 48, 41, 42, 40, 40,118,104, 42, 40,112, 43,118,104, 41, 41, 45, 49, 46, 48, 41, 41, 47, 40, 40, 40, +118,104, 42, 40,112, 45,118,104, 41, 41, 43, 49, 46, 48, 41, 42, 40, 40,118,104, 42, 40,112, 45,118,104, 41, 41, 43, 49, 46, 48, + 41, 41, 41, 41, 59, 10, 9, 9, 9, 9,102,108,111, 97,116, 32, 97,110,103, 32, 61, 32, 97, 99,111,115, 40,110,104, 41, 59, 10, + 10, 9, 9, 9, 9,115,112,101, 99,102, 97, 99, 32, 61, 32,109, 97,120, 40,102, 42,103, 42,101,120,112, 95, 98,108,101,110,100, +101,114, 40, 40, 45, 40, 97,110,103, 42, 97,110,103, 41, 47, 40, 50, 46, 48, 42,115,112,101, 99, 95,112,111,119,101,114, 42,115, +112,101, 99, 95,112,111,119,101,114, 41, 41, 41, 44, 32, 48, 46, 48, 41, 59, 10, 9, 9, 9,125, 10, 9, 9,125, 10, 9,125, 10, +125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,119, 97,114,100,105,115,111, 95,115,112,101, 99, 40,118,101, 99, 51, 32, +110, 44, 32,118,101, 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,114,109,115, 44, 32,111,117, +116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,118,101, 99, 51, 32,104, 32, 61, 32,110,111,114, +109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, 59, 10, 9,102,108,111, 97,116, 32,110,104, 32, 61, 32,109, 97,120, 40,100, +111,116, 40,110, 44, 32,104, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, 32,110,118, 32, 61, 32,109, 97, +120, 40,100,111,116, 40,110, 44, 32,118, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, 32,110,108, 32, 61, + 32,109, 97,120, 40,100,111,116, 40,110, 44, 32,108, 41, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 9,102,108,111, 97,116, 32, 97, +110,103,108,101, 32, 61, 32,116, 97,110, 40, 97, 99,111,115, 40,110,104, 41, 41, 59, 10, 9,102,108,111, 97,116, 32, 97,108,112, +104, 97, 32, 61, 32,109, 97,120, 40,114,109,115, 44, 32, 48, 46, 48, 48, 49, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99, 61, + 32,110,108, 32, 42, 32, 40, 49, 46, 48, 47, 40, 52, 46, 48, 42, 77, 95, 80, 73, 42, 97,108,112,104, 97, 42, 97,108,112,104, 97, + 41, 41, 42, 40,101,120,112, 95, 98,108,101,110,100,101,114, 40, 45, 40, 97,110,103,108,101, 42, 97,110,103,108,101, 41, 47, 40, + 97,108,112,104, 97, 42, 97,108,112,104, 97, 41, 41, 47, 40,115,113,114,116, 40,110,118, 42,110,108, 41, 41, 41, 59, 10,125, 10, + 10,118,111,105,100, 32,115,104, 97,100,101, 95,116,111,111,110, 95,115,112,101, 99, 40,118,101, 99, 51, 32,110, 44, 32,118,101, + 99, 51, 32,108, 44, 32,118,101, 99, 51, 32,118, 44, 32,102,108,111, 97,116, 32,115,105,122,101, 44, 32,102,108,111, 97,116, 32, +116,115,109,111,111,116,104, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,118, +101, 99, 51, 32,104, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40,108, 32, 43, 32,118, 41, 59, 10, 9,102,108,111, 97,116, + 32,114,115,108,116, 32, 61, 32,100,111,116, 40,104, 44, 32,110, 41, 59, 10, 9,102,108,111, 97,116, 32, 97,110,103, 32, 61, 32, + 97, 99,111,115, 40,114,115,108,116, 41, 59, 10, 10, 9,105,102, 40, 97,110,103, 32, 60, 32,115,105,122,101, 41, 32,114,115,108, +116, 32, 61, 32, 49, 46, 48, 59, 10, 9,101,108,115,101, 32,105,102, 40, 97,110,103, 32, 62, 61, 32, 40,115,105,122,101, 32, 43, + 32,116,115,109,111,111,116,104, 41, 32,124,124, 32,116,115,109,111,111,116,104, 32, 61, 61, 32, 48, 46, 48, 41, 32,114,115,108, +116, 32, 61, 32, 48, 46, 48, 59, 10, 9,101,108,115,101, 32,114,115,108,116, 32, 61, 32, 49, 46, 48, 32, 45, 32, 40, 40, 97,110, +103, 32, 45, 32,115,105,122,101, 41, 47,116,115,109,111,111,116,104, 41, 59, 10, 10, 9,115,112,101, 99,102, 97, 99, 32, 61, 32, +114,115,108,116, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,115,112,101, 99, 95, 97,114,101, 97, 95,105,110, +112, 40,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 44, 32,102,108,111, 97,116, 32,105,110,112, 44, 32,111,117,116, 32, +102,108,111, 97,116, 32,111,117,116,115,112,101, 99,102, 97, 99, 41, 10,123, 10, 9,111,117,116,115,112,101, 99,102, 97, 99, 32, + 61, 32,115,112,101, 99,102, 97, 99, 42,105,110,112, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,115,112,101, + 99, 95,116, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112,101, 99, 44, 32,102, +108,111, 97,116, 32,118,105,115,105,102, 97, 99, 44, 32,102,108,111, 97,116, 32,115,112,101, 99,102, 97, 99, 44, 32,111,117,116, + 32,102,108,111, 97,116, 32,116, 41, 10,123, 10, 9,116, 32, 61, 32,115,104, 97,100,102, 97, 99, 42,115,112,101, 99, 42,118,105, +115,105,102, 97, 99, 42,115,112,101, 99,102, 97, 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, + 95,115,112,101, 99, 40,102,108,111, 97,116, 32,116, 44, 32,118,101, 99, 51, 32,108, 97,109,112, 99,111,108, 44, 32,118,101, 99, + 51, 32,115,112,101, 99, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111, +117,116, 99,111,108, 32, 61, 32,116, 42,108, 97,109,112, 99,111,108, 42,115,112,101, 99, 99,111,108, 59, 10,125, 10, 10,118,111, +105,100, 32,115,104, 97,100,101, 95, 97,100,100, 40,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, + 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, + 99,111,108, 49, 32, 43, 32, 99,111,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100,100, 40, +118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32, +111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, + 32, 43, 32, 99,111,108, 49, 42, 99,111,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100,100, 95, + 99,108, 97,109,112,101,100, 40,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117, +116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 32, + 43, 32,109, 97,120, 40, 99,111,108, 50, 44, 32,118,101, 99, 52, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, + 48, 46, 48, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100,100, 95, 99,108, 97,109,112,101, 100, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99, -111,108, 32, 43, 32, 99,111,108, 49, 42, 99,111,108, 50, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,100, -100, 95, 99,108, 97,109,112,101,100, 40,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32, -111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, - 49, 32, 43, 32,109, 97,120, 40, 99,111,108, 50, 44, 32,118,101, 99, 52, 40, 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, - 44, 32, 48, 46, 48, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100,100, 95, 99,108, 97,109, -112,101,100, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111, -108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, - 32, 99,111,108, 32, 43, 32,109, 97,120, 40, 99,111,108, 49, 42, 99,111,108, 50, 44, 32,118,101, 99, 52, 40, 48, 46, 48, 44, 32, - 48, 46, 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, - 97,100,100,102, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 44, 32,118,101, 99, 52, 32, 99,111,108, - 49, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, - 99,111,108, 32, 43, 32,102, 42, 99,111,108, 49, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109,117,108, 40, -118,101, 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111, -117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 42, 99,111,108, 50, 59, 10,125, 10, - 10,118,111,105,100, 32,115,104, 97,100,101, 95,109,117,108, 95,118, 97,108,117,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, - 32,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111, -117,116, 99,111,108, 32, 61, 32, 99,111,108, 42,102, 97, 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111, - 98, 99,111,108,111,114, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32,111, 98, 99,111,108, 44, 32,111,117,116, - 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99, -111,108, 46,114,103, 98, 42,111, 98, 99,111,108, 46,114,103, 98, 44, 32, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10,118,111,105, -100, 32,114, 97,109,112, 95,114,103, 98,116,111, 98,119, 40,118,101, 99, 51, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102, -108,111, 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,108,111,114, 46,114, - 42, 48, 46, 51, 32, 43, 32, 99,111,108,111,114, 46,103, 42, 48, 46, 53, 56, 32, 43, 32, 99,111,108,111,114, 46, 98, 42, 48, 46, - 49, 50, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 40,102,108, -111, 97,116, 32,105, 44, 32,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,102,108,111, 97,116, 32,101,110,101,114, -103,121, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115,104, 97,100,102, 97, 99, 41, 10,123, 10, 9,111,117,116, -115,104, 97,100,102, 97, 99, 32, 61, 32,105, 42,101,110,101,114,103,121, 42, 40, 49, 46, 48, 32, 45, 32,115,104, 97,100,102, 97, - 99, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 95,100,105, -102,102,117,115,101, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,118,101, 99, 51, 32,114,103, 98, 44, 32,118, -101, 99, 52, 32,100,105,102,102, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,100,105,102,102, 41, 10,123, 10, 9,111, -117,116,100,105,102,102, 32, 61, 32,100,105,102,102, 32, 45, 32,118,101, 99, 52, 40,114,103, 98, 42,115,104, 97,100,102, 97, 99, - 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111, -119, 95,115,112,101, 99,117,108, 97,114, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,118,101, 99, 51, 32,115, -112,101, 99,114,103, 98, 44, 32,118,101, 99, 52, 32,115,112,101, 99, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,115, -112,101, 99, 41, 10,123, 10, 9,111,117,116,115,112,101, 99, 32, 61, 32,115,112,101, 99, 32, 45, 32,118,101, 99, 52, 40,115,112, -101, 99,114,103, 98, 42,115,104, 97,100,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,115, -116, 95,115,104, 97,100,111,119, 98,117,102, 40,118,101, 99, 51, 32,114, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 83, -104, 97,100,111,119, 32,115,104, 97,100,111,119,109, 97,112, 44, 32,109, 97,116, 52, 32,115,104, 97,100,111,119,112,101,114,115, -109, 97,116, 44, 32,102,108,111, 97,116, 32,115,104, 97,100,111,119, 98,105, 97,115, 44, 32,102,108,111, 97,116, 32,105,110,112, - 44, 32,111,117,116, 32,102,108,111, 97,116, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,105,102, 40,105,110,112, 32, 60, 61, - 32, 48, 46, 48, 41, 32,123, 10, 9, 9,114,101,115,117,108,116, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, - 32,123, 10, 9, 9,118,101, 99, 52, 32, 99,111, 32, 61, 32,115,104, 97,100,111,119,112,101,114,115,109, 97,116, 42,118,101, 99, - 52, 40,114, 99,111, 44, 32, 49, 46, 48, 41, 59, 10, 10, 9, 9, 47, 47,102,108,111, 97,116, 32, 98,105, 97,115, 32, 61, 32, 40, - 49, 46, 53, 32, 45, 32,105,110,112, 42,105,110,112, 41, 42,115,104, 97,100,111,119, 98,105, 97,115, 59, 10, 9, 9, 99,111, 46, -122, 32, 45, 61, 32,115,104, 97,100,111,119, 98,105, 97,115, 42, 99,111, 46,119, 59, 10, 10, 9, 9,114,101,115,117,108,116, 32, - 61, 32,115,104, 97,100,111,119, 50, 68, 80,114,111,106, 40,115,104, 97,100,111,119,109, 97,112, 44, 32, 99,111, 41, 46,120, 59, - 10, 9,125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,101,120,112,111,115,117,114,101, 95, 99,111,114,114,101, - 99,116, 40,118,101, 99, 51, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32,108,105,110,102, 97, 99, 44, 32,102,108,111, 97,116, - 32,108,111,103,102, 97, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, - 99,111,108, 32, 61, 32,108,105,110,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32,101,120,112, 40, 99,111,108, 42,108,111,103,102, - 97, 99, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109,105,115,116, 95,102, 97, 99,116,111,114, 40, -118,101, 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,109,105,115,116,115,116, 97, 44, 32,102,108,111, 97,116, 32,109,105, -115,116,100,105,115,116, 44, 32,102,108,111, 97,116, 32,109,105,115,116,116,121,112,101, 44, 32,102,108,111, 97,116, 32,109,105, -115,105, 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, - 97, 99, 44, 32,122, 99,111,114, 59, 10, 10, 9,122, 99,111,114, 32, 61, 32, 40,103,108, 95, 80,114,111,106,101, 99,116,105,111, -110, 77, 97,116,114,105,120, 91, 51, 93, 91, 51, 93, 32, 61, 61, 32, 48, 46, 48, 41, 63, 32,108,101,110,103,116,104, 40, 99,111, - 41, 58, 32, 45, 99,111, 91, 50, 93, 59, 10, 9, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40, 40,122, 99,111,114, 45, -109,105,115,116,115,116, 97, 41, 47,109,105,115,116,100,105,115,116, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,105, -102, 40,109,105,115,116,116,121,112,101, 32, 61, 61, 32, 48, 46, 48, 41, 32,102, 97, 99, 32, 42, 61, 32,102, 97, 99, 59, 10, 9, -101,108,115,101, 32,105,102, 40,109,105,115,116,116,121,112,101, 32, 61, 61, 32, 49, 46, 48, 41, 59, 10, 9,101,108,115,101, 32, -102, 97, 99, 32, 61, 32,115,113,114,116, 40,102, 97, 99, 41, 59, 10, 10, 9,111,117,116,102, 97, 99, 32, 61, 32, 49, 46, 48, 32, - 45, 32, 40, 49, 46, 48, 45,102, 97, 99, 41, 42, 40, 49, 46, 48, 45,109,105,115,105, 41, 59, 10,125, 10, 10,118,111,105,100, 32, -115,104, 97,100,101, 95,119,111,114,108,100, 95,109,105,120, 40,118,101, 99, 51, 32,104,111,114, 44, 32,118,101, 99, 52, 32, 99, -111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, - 99, 32, 61, 32, 99,108, 97,109,112, 40, 99,111,108, 46, 97, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, - 99,111,108, 32, 61, 32,118,101, 99, 52, 40,109,105,120, 40,104,111,114, 44, 32, 99,111,108, 46,114,103, 98, 44, 32,102, 97, 99, - 41, 44, 32, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,108,112,104, 97, 95,111, -112, 97,113,117,101, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, - 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 49, 46, 48, 41, 59, - 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,108,112,104, 97, 95,111, 98, 99,111,108,111,114, 40,118,101, 99, - 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32,111, 98, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99, -111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 99,111, -108, 46, 97, 42,111, 98, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 78, 69, - 87, 32, 83, 72, 65, 68, 69, 82, 32, 85, 84, 73, 76, 73, 84, 73, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 47, 10, 10,102,108,111, 97,116, 32,102,114,101,115,110,101,108, 95,100,105,101,108,101, 99,116,114,105, 99, 40,118,101, 99, - 51, 32, 73,110, 99,111,109,105,110,103, 44, 32,118,101, 99, 51, 32, 78,111,114,109, 97,108, 44, 32,102,108,111, 97,116, 32,101, -116, 97, 41, 10,123, 10, 32, 32, 32, 32, 47, 42, 32, 99,111,109,112,117,116,101, 32,102,114,101,115,110,101,108, 32,114,101,102, -108,101, 99,116, 97,110, 99,101, 32,119,105,116,104,111,117,116, 32,101,120,112,108,105, 99,105,116,108,121, 32, 99,111,109,112, -117,116,105,110,103, 10, 32, 32, 32, 32, 32, 32, 32,116,104,101, 32,114,101,102,114, 97, 99,116,101,100, 32,100,105,114,101, 99, -116,105,111,110, 32, 42, 47, 10, 32, 32, 32, 32,102,108,111, 97,116, 32, 99, 32, 61, 32, 97, 98,115, 40,100,111,116, 40, 73,110, - 99,111,109,105,110,103, 44, 32, 78,111,114,109, 97,108, 41, 41, 59, 10, 32, 32, 32, 32,102,108,111, 97,116, 32,103, 32, 61, 32, -101,116, 97, 32, 42, 32,101,116, 97, 32, 45, 32, 49, 46, 48, 32, 43, 32, 99, 32, 42, 32, 99, 59, 10, 32, 32, 32, 32,102,108,111, - 97,116, 32,114,101,115,117,108,116, 59, 10, 10, 32, 32, 32, 32,105,102, 40,103, 32, 62, 32, 48, 46, 48, 41, 32,123, 10, 32, 32, - 32, 32, 32, 32, 32, 32,103, 32, 61, 32,115,113,114,116, 40,103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,108,111, 97,116, - 32, 65, 32, 61, 40,103, 32, 45, 32, 99, 41, 47, 40,103, 32, 43, 32, 99, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,108,111, - 97,116, 32, 66, 32, 61, 40, 99, 32, 42, 40,103, 32, 43, 32, 99, 41, 45, 32, 49, 46, 48, 41, 47, 40, 99, 32, 42, 40,103, 32, 45, - 32, 99, 41, 43, 32, 49, 46, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,115,117,108,116, 32, 61, 32, 48, 46, 53, 32, - 42, 32, 65, 32, 42, 32, 65, 32, 42, 40, 49, 46, 48, 32, 43, 32, 66, 32, 42, 32, 66, 41, 59, 10, 32, 32, 32, 32,125, 10, 32, 32, - 32, 32,101,108,115,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,115,117,108,116, 32, 61, 32, 49, 46, 48, 59, 32, 32, 47, 42, - 32, 84, 73, 82, 32, 40,110,111, 32,114,101,102,114, 97, 99,116,101,100, 32, 99,111,109,112,111,110,101,110,116, 41, 32, 42, 47, - 10, 10, 32, 32, 32, 32,114,101,116,117,114,110, 32,114,101,115,117,108,116, 59, 10,125, 10, 10,102,108,111, 97,116, 32,104,121, -112,111,116, 40,102,108,111, 97,116, 32,120, 44, 32,102,108,111, 97,116, 32,121, 41, 10,123, 10, 9,114,101,116,117,114,110, 32, -115,113,114,116, 40,120, 42,120, 32, 43, 32,121, 42,121, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 32, 78, 69, 87, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 47, 10, 10, 35,100,101,102,105,110,101, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 32, 51, 10, 10, 47, 42, 32, 98,115,100, -102,115, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,100,105,102,102,117,115,101, 40,118,101, - 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 44, 32,118,101, 99, 51, 32, - 78, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9, 47, 42, 32, 97,109, 98,105,101,110, -116, 32,108,105,103,104,116, 32, 42, 47, 10, 9,118,101, 99, 51, 32, 76, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 50, 41, 59, 10, - 10, 9, 47, 42, 32,100,105,114,101, 99,116,105,111,110, 97,108, 32,108,105,103,104,116,115, 32, 42, 47, 10, 9,102,111,114, 40, -105,110,116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 59, 32,105, 43, 43, 41, 32, -123, 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 32, 61, 32,103,108, 95, 76,105,103, -104,116, 83,111,117,114, 99,101, 91,105, 93, 46,112,111,115,105,116,105,111,110, 46,120,121,122, 59, 10, 9, 9,118,101, 99, 51, - 32,108,105,103,104,116, 95,100,105,102,102,117,115,101, 32, 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91, -105, 93, 46,100,105,102,102,117,115,101, 46,114,103, 98, 59, 10, 10, 9, 9,102,108,111, 97,116, 32, 98,115,100,102, 32, 61, 32, -109, 97,120, 40,100,111,116, 40, 78, 44, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 41, 44, 32, 48, 46, 48, 41, - 59, 10, 9, 9, 76, 32, 43, 61, 32,108,105,103,104,116, 95,100,105,102,102,117,115,101, 42, 98,115,100,102, 59, 10, 9,125, 10, - 10, 9,114,101,115,117,108,116, 32, 61, 32,118,101, 99, 52, 40, 76, 42, 99,111,108,111,114, 46,114,103, 98, 44, 32, 49, 46, 48, - 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,103,108,111,115,115,121, 40,118,101, 99, 52, +111,108, 32, 43, 32,109, 97,120, 40, 99,111,108, 49, 42, 99,111,108, 50, 44, 32,118,101, 99, 52, 40, 48, 46, 48, 44, 32, 48, 46, + 48, 44, 32, 48, 46, 48, 44, 32, 48, 46, 48, 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109, 97,100, +100,102, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32,102, 44, 32,118,101, 99, 52, 32, 99,111,108, 49, 44, + 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111, +108, 32, 43, 32,102, 42, 99,111,108, 49, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109,117,108, 40,118,101, + 99, 52, 32, 99,111,108, 49, 44, 32,118,101, 99, 52, 32, 99,111,108, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, + 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32, 99,111,108, 49, 42, 99,111,108, 50, 59, 10,125, 10, 10,118, +111,105,100, 32,115,104, 97,100,101, 95,109,117,108, 95,118, 97,108,117,101, 40,102,108,111, 97,116, 32,102, 97, 99, 44, 32,118, +101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, + 99,111,108, 32, 61, 32, 99,111,108, 42,102, 97, 99, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111, 98, 99, +111,108,111,114, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,118,101, 99, 52, 32,111, 98, 99,111,108, 44, 32,111,117,116, 32,118, +101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, + 46,114,103, 98, 42,111, 98, 99,111,108, 46,114,103, 98, 44, 32, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32, +114, 97,109,112, 95,114,103, 98,116,111, 98,119, 40,118,101, 99, 51, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,102,108,111, + 97,116, 32,111,117,116,118, 97,108, 41, 10,123, 10, 9,111,117,116,118, 97,108, 32, 61, 32, 99,111,108,111,114, 46,114, 42, 48, + 46, 51, 32, 43, 32, 99,111,108,111,114, 46,103, 42, 48, 46, 53, 56, 32, 43, 32, 99,111,108,111,114, 46, 98, 42, 48, 46, 49, 50, + 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 40,102,108,111, 97, +116, 32,105, 44, 32,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,102,108,111, 97,116, 32,101,110,101,114,103,121, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,115,104, 97,100,102, 97, 99, 41, 10,123, 10, 9,111,117,116,115,104, + 97,100,102, 97, 99, 32, 61, 32,105, 42,101,110,101,114,103,121, 42, 40, 49, 46, 48, 32, 45, 32,115,104, 97,100,102, 97, 99, 41, + 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 95,100,105,102,102, +117,115,101, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,118,101, 99, 51, 32,114,103, 98, 44, 32,118,101, 99, + 52, 32,100,105,102,102, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,100,105,102,102, 41, 10,123, 10, 9,111,117,116, +100,105,102,102, 32, 61, 32,100,105,102,102, 32, 45, 32,118,101, 99, 52, 40,114,103, 98, 42,115,104, 97,100,102, 97, 99, 44, 32, + 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,111,110,108,121, 95,115,104, 97,100,111,119, 95, +115,112,101, 99,117,108, 97,114, 40,102,108,111, 97,116, 32,115,104, 97,100,102, 97, 99, 44, 32,118,101, 99, 51, 32,115,112,101, + 99,114,103, 98, 44, 32,118,101, 99, 52, 32,115,112,101, 99, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116,115,112,101, + 99, 41, 10,123, 10, 9,111,117,116,115,112,101, 99, 32, 61, 32,115,112,101, 99, 32, 45, 32,118,101, 99, 52, 40,115,112,101, 99, +114,103, 98, 42,115,104, 97,100,102, 97, 99, 44, 32, 48, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,116,101,115,116, 95, +115,104, 97,100,111,119, 98,117,102, 40,118,101, 99, 51, 32,114, 99,111, 44, 32,115, 97,109,112,108,101,114, 50, 68, 83,104, 97, +100,111,119, 32,115,104, 97,100,111,119,109, 97,112, 44, 32,109, 97,116, 52, 32,115,104, 97,100,111,119,112,101,114,115,109, 97, +116, 44, 32,102,108,111, 97,116, 32,115,104, 97,100,111,119, 98,105, 97,115, 44, 32,102,108,111, 97,116, 32,105,110,112, 44, 32, +111,117,116, 32,102,108,111, 97,116, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,105,102, 40,105,110,112, 32, 60, 61, 32, 48, + 46, 48, 41, 32,123, 10, 9, 9,114,101,115,117,108,116, 32, 61, 32, 48, 46, 48, 59, 10, 9,125, 10, 9,101,108,115,101, 32,123, + 10, 9, 9,118,101, 99, 52, 32, 99,111, 32, 61, 32,115,104, 97,100,111,119,112,101,114,115,109, 97,116, 42,118,101, 99, 52, 40, +114, 99,111, 44, 32, 49, 46, 48, 41, 59, 10, 10, 9, 9, 47, 47,102,108,111, 97,116, 32, 98,105, 97,115, 32, 61, 32, 40, 49, 46, + 53, 32, 45, 32,105,110,112, 42,105,110,112, 41, 42,115,104, 97,100,111,119, 98,105, 97,115, 59, 10, 9, 9, 99,111, 46,122, 32, + 45, 61, 32,115,104, 97,100,111,119, 98,105, 97,115, 42, 99,111, 46,119, 59, 10, 10, 9, 9,114,101,115,117,108,116, 32, 61, 32, +115,104, 97,100,111,119, 50, 68, 80,114,111,106, 40,115,104, 97,100,111,119,109, 97,112, 44, 32, 99,111, 41, 46,120, 59, 10, 9, +125, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,101,120,112,111,115,117,114,101, 95, 99,111,114,114,101, 99,116, + 40,118,101, 99, 51, 32, 99,111,108, 44, 32,102,108,111, 97,116, 32,108,105,110,102, 97, 99, 44, 32,102,108,111, 97,116, 32,108, +111,103,102, 97, 99, 44, 32,111,117,116, 32,118,101, 99, 51, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,111,117,116, 99,111, +108, 32, 61, 32,108,105,110,102, 97, 99, 42, 40, 49, 46, 48, 32, 45, 32,101,120,112, 40, 99,111,108, 42,108,111,103,102, 97, 99, + 41, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95,109,105,115,116, 95,102, 97, 99,116,111,114, 40,118,101, + 99, 51, 32, 99,111, 44, 32,102,108,111, 97,116, 32,109,105,115,116,115,116, 97, 44, 32,102,108,111, 97,116, 32,109,105,115,116, +100,105,115,116, 44, 32,102,108,111, 97,116, 32,109,105,115,116,116,121,112,101, 44, 32,102,108,111, 97,116, 32,109,105,115,105, + 44, 32,111,117,116, 32,102,108,111, 97,116, 32,111,117,116,102, 97, 99, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99, + 44, 32,122, 99,111,114, 59, 10, 10, 9,122, 99,111,114, 32, 61, 32, 40,103,108, 95, 80,114,111,106,101, 99,116,105,111,110, 77, + 97,116,114,105,120, 91, 51, 93, 91, 51, 93, 32, 61, 61, 32, 48, 46, 48, 41, 63, 32,108,101,110,103,116,104, 40, 99,111, 41, 58, + 32, 45, 99,111, 91, 50, 93, 59, 10, 9, 10, 9,102, 97, 99, 32, 61, 32, 99,108, 97,109,112, 40, 40,122, 99,111,114, 45,109,105, +115,116,115,116, 97, 41, 47,109,105,115,116,100,105,115,116, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,105,102, 40, +109,105,115,116,116,121,112,101, 32, 61, 61, 32, 48, 46, 48, 41, 32,102, 97, 99, 32, 42, 61, 32,102, 97, 99, 59, 10, 9,101,108, +115,101, 32,105,102, 40,109,105,115,116,116,121,112,101, 32, 61, 61, 32, 49, 46, 48, 41, 59, 10, 9,101,108,115,101, 32,102, 97, + 99, 32, 61, 32,115,113,114,116, 40,102, 97, 99, 41, 59, 10, 10, 9,111,117,116,102, 97, 99, 32, 61, 32, 49, 46, 48, 32, 45, 32, + 40, 49, 46, 48, 45,102, 97, 99, 41, 42, 40, 49, 46, 48, 45,109,105,115,105, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, + 97,100,101, 95,119,111,114,108,100, 95,109,105,120, 40,118,101, 99, 51, 32,104,111,114, 44, 32,118,101, 99, 52, 32, 99,111,108, + 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10, 9,102,108,111, 97,116, 32,102, 97, 99, 32, + 61, 32, 99,108, 97,109,112, 40, 99,111,108, 46, 97, 44, 32, 48, 46, 48, 44, 32, 49, 46, 48, 41, 59, 10, 9,111,117,116, 99,111, +108, 32, 61, 32,118,101, 99, 52, 40,109,105,120, 40,104,111,114, 44, 32, 99,111,108, 46,114,103, 98, 44, 32,102, 97, 99, 41, 44, + 32, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,108,112,104, 97, 95,111,112, 97, +113,117,101, 40,118,101, 99, 52, 32, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, + 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 49, 46, 48, 41, 59, 10,125, + 10, 10,118,111,105,100, 32,115,104, 97,100,101, 95, 97,108,112,104, 97, 95,111, 98, 99,111,108,111,114, 40,118,101, 99, 52, 32, + 99,111,108, 44, 32,118,101, 99, 52, 32,111, 98, 99,111,108, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, + 41, 10,123, 10, 9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40, 99,111,108, 46,114,103, 98, 44, 32, 99,111,108, 46, + 97, 42,111, 98, 99,111,108, 46, 97, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 78, 69, 87, 32, + 83, 72, 65, 68, 69, 82, 32, 85, 84, 73, 76, 73, 84, 73, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, + 10, 10,102,108,111, 97,116, 32,102,114,101,115,110,101,108, 95,100,105,101,108,101, 99,116,114,105, 99, 40,118,101, 99, 51, 32, + 73,110, 99,111,109,105,110,103, 44, 32,118,101, 99, 51, 32, 78,111,114,109, 97,108, 44, 32,102,108,111, 97,116, 32,101,116, 97, + 41, 10,123, 10, 32, 32, 32, 32, 47, 42, 32, 99,111,109,112,117,116,101, 32,102,114,101,115,110,101,108, 32,114,101,102,108,101, + 99,116, 97,110, 99,101, 32,119,105,116,104,111,117,116, 32,101,120,112,108,105, 99,105,116,108,121, 32, 99,111,109,112,117,116, +105,110,103, 10, 32, 32, 32, 32, 32, 32, 32,116,104,101, 32,114,101,102,114, 97, 99,116,101,100, 32,100,105,114,101, 99,116,105, +111,110, 32, 42, 47, 10, 32, 32, 32, 32,102,108,111, 97,116, 32, 99, 32, 61, 32, 97, 98,115, 40,100,111,116, 40, 73,110, 99,111, +109,105,110,103, 44, 32, 78,111,114,109, 97,108, 41, 41, 59, 10, 32, 32, 32, 32,102,108,111, 97,116, 32,103, 32, 61, 32,101,116, + 97, 32, 42, 32,101,116, 97, 32, 45, 32, 49, 46, 48, 32, 43, 32, 99, 32, 42, 32, 99, 59, 10, 32, 32, 32, 32,102,108,111, 97,116, + 32,114,101,115,117,108,116, 59, 10, 10, 32, 32, 32, 32,105,102, 40,103, 32, 62, 32, 48, 46, 48, 41, 32,123, 10, 32, 32, 32, 32, + 32, 32, 32, 32,103, 32, 61, 32,115,113,114,116, 40,103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,108,111, 97,116, 32, 65, + 32, 61, 40,103, 32, 45, 32, 99, 41, 47, 40,103, 32, 43, 32, 99, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32,102,108,111, 97,116, + 32, 66, 32, 61, 40, 99, 32, 42, 40,103, 32, 43, 32, 99, 41, 45, 32, 49, 46, 48, 41, 47, 40, 99, 32, 42, 40,103, 32, 45, 32, 99, + 41, 43, 32, 49, 46, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,115,117,108,116, 32, 61, 32, 48, 46, 53, 32, 42, 32, + 65, 32, 42, 32, 65, 32, 42, 40, 49, 46, 48, 32, 43, 32, 66, 32, 42, 32, 66, 41, 59, 10, 32, 32, 32, 32,125, 10, 32, 32, 32, 32, +101,108,115,101, 10, 32, 32, 32, 32, 32, 32, 32, 32,114,101,115,117,108,116, 32, 61, 32, 49, 46, 48, 59, 32, 32, 47, 42, 32, 84, + 73, 82, 32, 40,110,111, 32,114,101,102,114, 97, 99,116,101,100, 32, 99,111,109,112,111,110,101,110,116, 41, 32, 42, 47, 10, 10, + 32, 32, 32, 32,114,101,116,117,114,110, 32,114,101,115,117,108,116, 59, 10,125, 10, 10,102,108,111, 97,116, 32,104,121,112,111, +116, 40,102,108,111, 97,116, 32,120, 44, 32,102,108,111, 97,116, 32,121, 41, 10,123, 10, 9,114,101,116,117,114,110, 32,115,113, +114,116, 40,120, 42,120, 32, 43, 32,121, 42,121, 41, 59, 10,125, 10, 10, 47, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 32, 78, + 69, 87, 32, 83, 72, 65, 68, 69, 82, 32, 78, 79, 68, 69, 83, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 47, + 10, 10, 35,100,101,102,105,110,101, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 32, 51, 10, 10, 47, 42, 32, 98,115,100,102,115, + 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,100,105,102,102,117,115,101, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 44, 32,118,101, 99, 51, 32, 78, 44, - 32,118,101, 99, 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9, 47, 42, 32, - 97,109, 98,105,101,110,116, 32,108,105,103,104,116, 32, 42, 47, 10, 9,118,101, 99, 51, 32, 76, 32, 61, 32,118,101, 99, 51, 40, - 48, 46, 50, 41, 59, 10, 10, 9, 47, 42, 32,100,105,114,101, 99,116,105,111,110, 97,108, 32,108,105,103,104,116,115, 32, 42, 47, - 10, 9,102,111,114, 40,105,110,116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 59, - 32,105, 43, 43, 41, 32,123, 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 32, 61, 32, -103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,112,111,115,105,116,105,111,110, 46,120,121,122, 59, 10, - 9, 9,118,101, 99, 51, 32, 72, 32, 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,104, 97,108, -102, 86,101, 99,116,111,114, 46,120,121,122, 59, 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,100,105,102,102,117,115, -101, 32, 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,100,105,102,102,117,115,101, 46,114,103, - 98, 59, 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,115,112,101, 99,117,108, 97,114, 32, 61, 32,103,108, 95, 76,105, -103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,115,112,101, 99,117,108, 97,114, 46,114,103, 98, 59, 10, 10, 9, 9, 47, 42, - 32,119,101, 32,109,105,120, 32,105,110, 32,115,111,109,101, 32,100,105,102,102,117,115,101, 32,115,111, 32,108,111,119, 32,114, -111,117,103,104,110,101,115,115, 32,115,116,105,108,108, 32,115,104,111,119,115, 32,117,112, 32, 42, 47, 10, 9, 9,102,108,111, - 97,116, 32, 98,115,100,102, 32, 61, 32, 48, 46, 53, 42,112,111,119, 40,109, 97,120, 40,100,111,116, 40, 78, 44, 32, 72, 41, 44, - 32, 48, 46, 48, 41, 44, 32, 49, 46, 48, 47,114,111,117,103,104,110,101,115,115, 41, 59, 10, 9, 9, 98,115,100,102, 32, 43, 61, - 32, 48, 46, 53, 42,109, 97,120, 40,100,111,116, 40, 78, 44, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 41, 44, - 32, 48, 46, 48, 41, 59, 10, 9, 9, 76, 32, 43, 61, 32,108,105,103,104,116, 95,115,112,101, 99,117,108, 97,114, 42, 98,115,100, -102, 59, 10, 9,125, 10, 10, 9,114,101,115,117,108,116, 32, 61, 32,118,101, 99, 52, 40, 76, 42, 99,111,108,111,114, 46,114,103, - 98, 44, 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95, 97,110,105,115,111, -116,114,111,112,105, 99, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101, -115,115, 85, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 86, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118, -101, 99, 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,110,111,100,101, 95, - 98,115,100,102, 95,100,105,102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117, -108,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,103,108, 97,115,115, 40,118,101, 99, - 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 44, 32,102,108,111, 97,116, 32, -105,111,114, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101, -115,117,108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115,100,102, 95,100,105,102,102,117,115,101, 40, 99,111,108,111,114, - 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, - 98,115,100,102, 95,116,114, 97,110,115,108,117, 99,101,110,116, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,118,101, 99, - 51, 32, 78, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115, + 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9, 47, 42, 32, 97,109, 98,105,101,110,116, 32, +108,105,103,104,116, 32, 42, 47, 10, 9,118,101, 99, 51, 32, 76, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 50, 41, 59, 10, 10, 9, + 47, 42, 32,100,105,114,101, 99,116,105,111,110, 97,108, 32,108,105,103,104,116,115, 32, 42, 47, 10, 9,102,111,114, 40,105,110, +116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 59, 32,105, 43, 43, 41, 32,123, 10, + 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 32, 61, 32,103,108, 95, 76,105,103,104,116, + 83,111,117,114, 99,101, 91,105, 93, 46,112,111,115,105,116,105,111,110, 46,120,121,122, 59, 10, 9, 9,118,101, 99, 51, 32,108, +105,103,104,116, 95,100,105,102,102,117,115,101, 32, 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, + 46,100,105,102,102,117,115,101, 46,114,103, 98, 59, 10, 10, 9, 9,102,108,111, 97,116, 32, 98,115,100,102, 32, 61, 32,109, 97, +120, 40,100,111,116, 40, 78, 44, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 41, 44, 32, 48, 46, 48, 41, 59, 10, + 9, 9, 76, 32, 43, 61, 32,108,105,103,104,116, 95,100,105,102,102,117,115,101, 42, 98,115,100,102, 59, 10, 9,125, 10, 10, 9, +114,101,115,117,108,116, 32, 61, 32,118,101, 99, 52, 40, 76, 42, 99,111,108,111,114, 46,114,103, 98, 44, 32, 49, 46, 48, 41, 59, + 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,103,108,111,115,115,121, 40,118,101, 99, 52, 32, 99, +111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118, +101, 99, 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9, 47, 42, 32, 97,109, + 98,105,101,110,116, 32,108,105,103,104,116, 32, 42, 47, 10, 9,118,101, 99, 51, 32, 76, 32, 61, 32,118,101, 99, 51, 40, 48, 46, + 50, 41, 59, 10, 10, 9, 47, 42, 32,100,105,114,101, 99,116,105,111,110, 97,108, 32,108,105,103,104,116,115, 32, 42, 47, 10, 9, +102,111,114, 40,105,110,116, 32,105, 32, 61, 32, 48, 59, 32,105, 32, 60, 32, 78, 85, 77, 95, 76, 73, 71, 72, 84, 83, 59, 32,105, + 43, 43, 41, 32,123, 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 32, 61, 32,103,108, + 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,112,111,115,105,116,105,111,110, 46,120,121,122, 59, 10, 9, 9, +118,101, 99, 51, 32, 72, 32, 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,104, 97,108,102, 86, +101, 99,116,111,114, 46,120,121,122, 59, 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,100,105,102,102,117,115,101, 32, + 61, 32,103,108, 95, 76,105,103,104,116, 83,111,117,114, 99,101, 91,105, 93, 46,100,105,102,102,117,115,101, 46,114,103, 98, 59, + 10, 9, 9,118,101, 99, 51, 32,108,105,103,104,116, 95,115,112,101, 99,117,108, 97,114, 32, 61, 32,103,108, 95, 76,105,103,104, +116, 83,111,117,114, 99,101, 91,105, 93, 46,115,112,101, 99,117,108, 97,114, 46,114,103, 98, 59, 10, 10, 9, 9, 47, 42, 32,119, +101, 32,109,105,120, 32,105,110, 32,115,111,109,101, 32,100,105,102,102,117,115,101, 32,115,111, 32,108,111,119, 32,114,111,117, +103,104,110,101,115,115, 32,115,116,105,108,108, 32,115,104,111,119,115, 32,117,112, 32, 42, 47, 10, 9, 9,102,108,111, 97,116, + 32, 98,115,100,102, 32, 61, 32, 48, 46, 53, 42,112,111,119, 40,109, 97,120, 40,100,111,116, 40, 78, 44, 32, 72, 41, 44, 32, 48, + 46, 48, 41, 44, 32, 49, 46, 48, 47,114,111,117,103,104,110,101,115,115, 41, 59, 10, 9, 9, 98,115,100,102, 32, 43, 61, 32, 48, + 46, 53, 42,109, 97,120, 40,100,111,116, 40, 78, 44, 32,108,105,103,104,116, 95,112,111,115,105,116,105,111,110, 41, 44, 32, 48, + 46, 48, 41, 59, 10, 9, 9, 76, 32, 43, 61, 32,108,105,103,104,116, 95,115,112,101, 99,117,108, 97,114, 42, 98,115,100,102, 59, + 10, 9,125, 10, 10, 9,114,101,115,117,108,116, 32, 61, 32,118,101, 99, 52, 40, 76, 42, 99,111,108,111,114, 46,114,103, 98, 44, + 32, 49, 46, 48, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95, 97,110,105,115,111,116,114, +111,112,105, 99, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, + 85, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 86, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, + 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115, 100,102, 95,100,105,102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, - 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,116,114, 97,110,115,112, 97,114,101,110,116, - 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, - 9, 47, 42, 32,116,104,105,115, 32,105,115,110, 39,116, 32,114,105,103,104,116, 32, 42, 47, 10, 9,114,101,115,117,108,116, 46, -114, 32, 61, 32, 99,111,108,111,114, 46,114, 59, 10, 9,114,101,115,117,108,116, 46,103, 32, 61, 32, 99,111,108,111,114, 46,103, - 59, 10, 9,114,101,115,117,108,116, 46, 98, 32, 61, 32, 99,111,108,111,114, 46, 98, 59, 10, 9,114,101,115,117,108,116, 46, 97, - 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,118,101,108,118,101,116, - 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,115,105,103,109, 97, 44, 32,118,101, 99, 51, 32, 78, - 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115,100,102, 95, -100,105,102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, 10, -125, 10, 10, 47, 42, 32,101,109,105,115,115,105,111,110, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,101,109,105, -115,115,105,111,110, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,115,116,114,101,110,103,116,104, - 44, 32,118,101, 99, 51, 32, 78, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,114,101, -115,117,108,116, 32, 61, 32, 99,111,108,111,114, 42,115,116,114,101,110,103,116,104, 59, 10,125, 10, 10, 47, 42, 32, 99,108,111, -115,117,114,101,115, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,109,105,120, 95,115,104, 97,100,101,114, 40,102, -108,111, 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 49, 44, 32,118,101, 99, 52, 32,115,104, 97, -100,101,114, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 41, 10,123, 10, 9,115,104, 97,100,101,114, - 32, 61, 32,109,105,120, 40,115,104, 97,100,101,114, 49, 44, 32,115,104, 97,100,101,114, 50, 44, 32,102, 97, 99, 41, 59, 10,125, - 10, 10,118,111,105,100, 32,110,111,100,101, 95, 97,100,100, 95,115,104, 97,100,101,114, 40,118,101, 99, 52, 32,115,104, 97,100, -101,114, 49, 44, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,115,104, 97,100, -101,114, 41, 10,123, 10, 9,115,104, 97,100,101,114, 32, 61, 32,115,104, 97,100,101,114, 49, 32, 43, 32,115,104, 97,100,101,114, - 50, 59, 10,125, 10, 10, 47, 42, 32,102,114,101,115,110,101,108, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,102, -114,101,115,110,101,108, 40,102,108,111, 97,116, 32,105,111,114, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, 51, 32, 73, - 44, 32,111,117,116, 32,102,108,111, 97,116, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,102,108,111, 97,116, 32,101,116, 97, - 32, 61, 32,109, 97,120, 40,105,111,114, 44, 32, 48, 46, 48, 48, 48, 48, 49, 41, 59, 10, 9,114,101,115,117,108,116, 32, 61, 32, -102,114,101,115,110,101,108, 95,100,105,101,108,101, 99,116,114,105, 99, 40, 73, 44, 32, 78, 44, 32,101,116, 97, 41, 59, 32, 47, - 47, 98, 97, 99,107,102, 97, 99,105,110,103, 40, 41, 63, 32, 49, 46, 48, 47,101,116, 97, 58, 32,101,116, 97, 41, 59, 10,125, 10, - 10, 47, 42, 32,103,101,111,109,101,116,114,121, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,103,101,111,109,101, -116,114,121, 40,118,101, 99, 51, 32, 73, 44, 32,118,101, 99, 51, 32, 78, 44, 32,109, 97,116, 52, 32,116,111,119,111,114,108,100, - 44, 10, 9,111,117,116, 32,118,101, 99, 51, 32,112,111,115,105,116,105,111,110, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110, -111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,116, 97,110,103,101,110,116, 44, 10, 9,111,117,116, 32,118,101, - 99, 51, 32,116,114,117,101, 95,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,109,105,110, -103, 44, 32,111,117,116, 32,118,101, 99, 51, 32,112, 97,114, 97,109,101,116,114,105, 99, 44, 10, 9,111,117,116, 32,102,108,111, - 97,116, 32, 98, 97, 99,107,102, 97, 99,105,110,103, 41, 10,123, 10, 9,112,111,115,105,116,105,111,110, 32, 61, 32, 40,116,111, -119,111,114,108,100, 42,118,101, 99, 52, 40, 73, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,110,111,114,109, 97,108, - 32, 61, 32, 78, 59, 10, 9,116, 97,110,103,101,110,116, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10, 9,116,114,117, -101, 95,110,111,114,109, 97,108, 32, 61, 32, 78, 59, 10, 9,105,110, 99,111,109,105,110,103, 32, 61, 32, 73, 59, 10, 9,112, 97, -114, 97,109,101,116,114,105, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10, 9, 98, 97, 99,107,102, 97, 99,105,110, -103, 32, 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95, 99,111,111,114,100, 40, -118,101, 99, 51, 32, 73, 44, 32,118,101, 99, 51, 32, 78, 44, 32,109, 97,116, 52, 32,116,111,119,111,114,108,100, 44, 10, 9,118, -101, 99, 51, 32, 97,116,116,114, 95,111,114, 99,111, 44, 32,118,101, 99, 51, 32, 97,116,116,114, 95,117,118, 44, 10, 9,111,117, -116, 32,118,101, 99, 51, 32,103,101,110,101,114, 97,116,101,100, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32,111, -117,116, 32,118,101, 99, 51, 32,111, 98,106,101, 99,116, 44, 10, 9,111,117,116, 32,118,101, 99, 51, 32, 99, 97,109,101,114, 97, - 44, 32,111,117,116, 32,118,101, 99, 51, 32,119,105,110,100,111,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,114,101,102,108, -101, 99,116,105,111,110, 41, 10,123, 10, 9,103,101,110,101,114, 97,116,101,100, 32, 61, 32, 97,116,116,114, 95,111,114, 99,111, + 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,103,108, 97,115,115, 40,118,101, 99, 52, 32, + 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,114,111,117,103,104,110,101,115,115, 44, 32,102,108,111, 97,116, 32,105,111, +114, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, 51, 32, 73, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117, +108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115,100,102, 95,100,105,102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, + 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115, +100,102, 95,116,114, 97,110,115,108,117, 99,101,110,116, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,118,101, 99, 51, 32, + 78, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115,100,102, + 95,100,105,102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, + 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,116,114, 97,110,115,112, 97,114,101,110,116, 40,118, +101, 99, 52, 32, 99,111,108,111,114, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9, 47, + 42, 32,116,104,105,115, 32,105,115,110, 39,116, 32,114,105,103,104,116, 32, 42, 47, 10, 9,114,101,115,117,108,116, 46,114, 32, + 61, 32, 99,111,108,111,114, 46,114, 59, 10, 9,114,101,115,117,108,116, 46,103, 32, 61, 32, 99,111,108,111,114, 46,103, 59, 10, + 9,114,101,115,117,108,116, 46, 98, 32, 61, 32, 99,111,108,111,114, 46, 98, 59, 10, 9,114,101,115,117,108,116, 46, 97, 32, 61, + 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95, 98,115,100,102, 95,118,101,108,118,101,116, 40,118, +101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,115,105,103,109, 97, 44, 32,118,101, 99, 51, 32, 78, 44, 32, +111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,110,111,100,101, 95, 98,115,100,102, 95,100,105, +102,102,117,115,101, 40, 99,111,108,111,114, 44, 32, 48, 46, 48, 44, 32, 78, 44, 32,114,101,115,117,108,116, 41, 59, 10,125, 10, + 10, 47, 42, 32,101,109,105,115,115,105,111,110, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,101,109,105,115,115, +105,111,110, 40,118,101, 99, 52, 32, 99,111,108,111,114, 44, 32,102,108,111, 97,116, 32,115,116,114,101,110,103,116,104, 44, 32, +118,101, 99, 51, 32, 78, 44, 32,111,117,116, 32,118,101, 99, 52, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,114,101,115,117, +108,116, 32, 61, 32, 99,111,108,111,114, 42,115,116,114,101,110,103,116,104, 59, 10,125, 10, 10, 47, 42, 32, 99,108,111,115,117, +114,101,115, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,109,105,120, 95,115,104, 97,100,101,114, 40,102,108,111, + 97,116, 32,102, 97, 99, 44, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 49, 44, 32,118,101, 99, 52, 32,115,104, 97,100,101, +114, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 41, 10,123, 10, 9,115,104, 97,100,101,114, 32, 61, + 32,109,105,120, 40,115,104, 97,100,101,114, 49, 44, 32,115,104, 97,100,101,114, 50, 44, 32,102, 97, 99, 41, 59, 10,125, 10, 10, +118,111,105,100, 32,110,111,100,101, 95, 97,100,100, 95,115,104, 97,100,101,114, 40,118,101, 99, 52, 32,115,104, 97,100,101,114, + 49, 44, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, 50, 44, 32,111,117,116, 32,118,101, 99, 52, 32,115,104, 97,100,101,114, + 41, 10,123, 10, 9,115,104, 97,100,101,114, 32, 61, 32,115,104, 97,100,101,114, 49, 32, 43, 32,115,104, 97,100,101,114, 50, 59, + 10,125, 10, 10, 47, 42, 32,102,114,101,115,110,101,108, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,102,114,101, +115,110,101,108, 40,102,108,111, 97,116, 32,105,111,114, 44, 32,118,101, 99, 51, 32, 78, 44, 32,118,101, 99, 51, 32, 73, 44, 32, +111,117,116, 32,102,108,111, 97,116, 32,114,101,115,117,108,116, 41, 10,123, 10, 9,102,108,111, 97,116, 32,101,116, 97, 32, 61, + 32,109, 97,120, 40,105,111,114, 44, 32, 48, 46, 48, 48, 48, 48, 49, 41, 59, 10, 9,114,101,115,117,108,116, 32, 61, 32,102,114, +101,115,110,101,108, 95,100,105,101,108,101, 99,116,114,105, 99, 40, 73, 44, 32, 78, 44, 32,101,116, 97, 41, 59, 32, 47, 47, 98, + 97, 99,107,102, 97, 99,105,110,103, 40, 41, 63, 32, 49, 46, 48, 47,101,116, 97, 58, 32,101,116, 97, 41, 59, 10,125, 10, 10, 47, + 42, 32,103,101,111,109,101,116,114,121, 32, 42, 47, 10, 10,118,111,105,100, 32,110,111,100,101, 95,103,101,111,109,101,116,114, +121, 40,118,101, 99, 51, 32, 73, 44, 32,118,101, 99, 51, 32, 78, 44, 32,109, 97,116, 52, 32,116,111,119,111,114,108,100, 44, 10, + 9,111,117,116, 32,118,101, 99, 51, 32,112,111,115,105,116,105,111,110, 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114, +109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,116, 97,110,103,101,110,116, 44, 10, 9,111,117,116, 32,118,101, 99, 51, + 32,116,114,117,101, 95,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,105,110, 99,111,109,105,110,103, 44, + 32,111,117,116, 32,118,101, 99, 51, 32,112, 97,114, 97,109,101,116,114,105, 99, 44, 10, 9,111,117,116, 32,102,108,111, 97,116, + 32, 98, 97, 99,107,102, 97, 99,105,110,103, 41, 10,123, 10, 9,112,111,115,105,116,105,111,110, 32, 61, 32, 40,116,111,119,111, +114,108,100, 42,118,101, 99, 52, 40, 73, 44, 32, 49, 46, 48, 41, 41, 46,120,121,122, 59, 10, 9,110,111,114,109, 97,108, 32, 61, + 32, 78, 59, 10, 9,116, 97,110,103,101,110,116, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10, 9,116,114,117,101, 95, +110,111,114,109, 97,108, 32, 61, 32, 78, 59, 10, 9,105,110, 99,111,109,105,110,103, 32, 61, 32, 73, 59, 10, 9,112, 97,114, 97, +109,101,116,114,105, 99, 32, 61, 32,118,101, 99, 51, 40, 48, 46, 48, 41, 59, 10, 9, 98, 97, 99,107,102, 97, 99,105,110,103, 32, + 61, 32, 48, 46, 48, 59, 10,125, 10, 10,118,111,105,100, 32,110,111,100,101, 95,116,101,120, 95, 99,111,111,114,100, 40,118,101, + 99, 51, 32, 73, 44, 32,118,101, 99, 51, 32, 78, 44, 32,109, 97,116, 52, 32,118,105,101,119,105,110,118,109, 97,116, 44, 32,109, + 97,116, 52, 32,111, 98,105,110,118,109, 97,116, 44, 10, 9,118,101, 99, 51, 32, 97,116,116,114, 95,111,114, 99,111, 44, 32,118, +101, 99, 51, 32, 97,116,116,114, 95,117,118, 44, 10, 9,111,117,116, 32,118,101, 99, 51, 32,103,101,110,101,114, 97,116,101,100, + 44, 32,111,117,116, 32,118,101, 99, 51, 32,110,111,114,109, 97,108, 44, 32,111,117,116, 32,118,101, 99, 51, 32,117,118, 44, 32, +111,117,116, 32,118,101, 99, 51, 32,111, 98,106,101, 99,116, 44, 10, 9,111,117,116, 32,118,101, 99, 51, 32, 99, 97,109,101,114, + 97, 44, 32,111,117,116, 32,118,101, 99, 51, 32,119,105,110,100,111,119, 44, 32,111,117,116, 32,118,101, 99, 51, 32,114,101,102, +108,101, 99,116,105,111,110, 41, 10,123, 10, 9,103,101,110,101,114, 97,116,101,100, 32, 61, 32, 97,116,116,114, 95,111,114, 99, +111, 59, 10, 9,110,111,114,109, 97,108, 32, 61, 32,110,111,114,109, 97,108,105,122,101, 40, 40,111, 98,105,110,118,109, 97,116, + 42, 40,118,105,101,119,105,110,118,109, 97,116, 42,118,101, 99, 52, 40, 78, 44, 32, 48, 46, 48, 41, 41, 41, 46,120,121,122, 41, 59, 10, 9,117,118, 32, 61, 32, 97,116,116,114, 95,117,118, 59, 10, 9,111, 98,106,101, 99,116, 32, 61, 32, 73, 59, 10, 9, 99, 97,109,101,114, 97, 32, 61, 32, 73, 59, 10, 9,119,105,110,100,111,119, 32, 61, 32,103,108, 95, 70,114, 97,103, 67,111,111,114, 100, 46,120,121,122, 59, 10, 9,114,101,102,108,101, 99,116,105,111,110, 32, 61, 32,114,101,102,108,101, 99,116, 40, 78, 44, 32, diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index d2df799bc94..83688e30643 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -176,14 +176,16 @@ typedef struct SceneRenderLayer { struct Material *mat_override; struct Group *light_override; - unsigned int lay; /* scene->lay itself has priority over this */ - unsigned int lay_zmask; /* has to be after lay, this is for Z-masking */ + unsigned int lay; /* scene->lay itself has priority over this */ + unsigned int lay_zmask; /* has to be after lay, this is for Z-masking */ + unsigned int lay_exclude; /* not used by internal, exclude */ int layflag; - int pad; - int passflag; /* pass_xor has to be after passflag */ int pass_xor; + + int samples; + int pad; } SceneRenderLayer; /* srl->layflag */ diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index d2eef1cdd43..359b1e4ee00 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -1905,6 +1905,19 @@ void rna_def_render_layer_common(StructRNA *srna, int scene) if (scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_Scene_glsl_update"); else RNA_def_property_clear_flag(prop, PROP_EDITABLE); + prop = RNA_def_property(srna, "layers_exclude", PROP_BOOLEAN, PROP_LAYER); + RNA_def_property_boolean_sdna(prop, NULL, "lay_exclude", 1); + RNA_def_property_array(prop, 20); + RNA_def_property_ui_text(prop, "Exclude Layers", "Exclude scene layers from having any influence"); + if (scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_Scene_glsl_update"); + else RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + if(scene) { + prop = RNA_def_property(srna, "samples", PROP_INT, PROP_UNSIGNED); + RNA_def_property_ui_text(prop, "Samples", "Override number of render samples for this render layer, 0 will use the scene setting"); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + } + /* layer options */ prop = RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "layflag", SCE_LAY_DISABLE); diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index 315995475e9..2a3c8e60638 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -82,7 +82,7 @@ typedef struct RenderLayer { /* copy of RenderData */ char name[RE_MAXNAME]; - unsigned int lay, lay_zmask; + unsigned int lay, lay_zmask, lay_exclude; int layflag, passflag, pass_xor; struct Material *mat_override; diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c index 37d6479e7bc..162fc160915 100644 --- a/source/blender/render/intern/source/render_result.c +++ b/source/blender/render/intern/source/render_result.c @@ -458,6 +458,7 @@ RenderResult *render_result_new(Render *re, rcti *partrct, int crop, int savebuf BLI_strncpy(rl->name, srl->name, sizeof(rl->name)); rl->lay= srl->lay; rl->lay_zmask= srl->lay_zmask; + rl->lay_exclude= srl->lay_exclude; rl->layflag= srl->layflag; rl->passflag= srl->passflag; // for debugging: srl->passflag|SCE_PASS_RAYHITS; rl->pass_xor= srl->pass_xor; -- cgit v1.2.3 From 61752c926d0f86aefeb2d8e60fb2bf2f1d9d191f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 28 Apr 2012 09:00:09 +0000 Subject: Addons: "persistent" parameter for addon_utils.enable(), so that you can enable addons from a startup script and keep them enabled after loading .blend files. --- release/scripts/modules/addon_utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/release/scripts/modules/addon_utils.py b/release/scripts/modules/addon_utils.py index 588c10eea54..695bb8cb6b6 100644 --- a/release/scripts/modules/addon_utils.py +++ b/release/scripts/modules/addon_utils.py @@ -212,10 +212,13 @@ def check(module_name): loaded_state = False + if mod and getattr(mod, "__addon_persistent__", False): + loaded_default = True + return loaded_default, loaded_state -def enable(module_name, default_set=True): +def enable(module_name, default_set=True, persistent=False): """ Enables an addon by name. @@ -283,6 +286,7 @@ def enable(module_name, default_set=True): ext.module = module_name mod.__addon_enabled__ = True + mod.__addon_persistent__ = persistent if _bpy.app.debug_python: print("\taddon_utils.enable", mod.__name__) @@ -305,6 +309,7 @@ def disable(module_name, default_set=True): # the addon in the user prefs. if mod: mod.__addon_enabled__ = False + mod.__addon_persistent = False try: mod.unregister() -- cgit v1.2.3 From 2c592b0d964c3931b7fd0fa99b2efa4baa8f266c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 28 Apr 2012 09:00:11 +0000 Subject: Point Cache: allow baking external smoke caches. This needs to be cleaned up a bit, I couldn't fully understand how the External setting is supposed to work to make further changes, but this should make it work at least. --- .../startup/bl_ui/properties_physics_common.py | 28 ++++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/release/scripts/startup/bl_ui/properties_physics_common.py b/release/scripts/startup/bl_ui/properties_physics_common.py index f623d9a37eb..4db056e77a2 100644 --- a/release/scripts/startup/bl_ui/properties_physics_common.py +++ b/release/scripts/startup/bl_ui/properties_physics_common.py @@ -94,18 +94,25 @@ def point_cache_ui(self, context, cache, enabled, cachetype): if cachetype in {'PSYS', 'HAIR', 'SMOKE'}: row.prop(cache, "use_external") - if cache.use_external: - split = layout.split(percentage=0.80) - split.prop(cache, "name", text="File Name") - split.prop(cache, "index", text="") - - row = layout.row() - row.label(text="File Path:") - row.prop(cache, "use_library_path", "Use Lib Path") + if cachetype == 'SMOKE': + row.prop(cache, "use_library_path", "Use Lib Path") - layout.prop(cache, "filepath", text="") + if cache.use_external: + split = layout.split(percentage=0.35) + col = split.column() + col.label(text="File Name:") + if cache.use_external: + col.label(text="File Path:") - layout.label(text=cache.info) + col = split.column() + sub = col.split(percentage=0.70, align=True) + sub.prop(cache, "name", text="") + sub.prop(cache, "index", text="") + col.prop(cache, "filepath", text="") + + cache_info = cache.info + if cache_info: + layout.label(text=cache_info) else: if cachetype in {'SMOKE', 'DYNAMIC_PAINT'}: if not bpy.data.is_saved: @@ -117,6 +124,7 @@ def point_cache_ui(self, context, cache, enabled, cachetype): else: layout.prop(cache, "name", text="Cache Name") + if not cache.use_external or cachetype == 'SMOKE': row = layout.row(align=True) if cachetype not in {'PSYS', 'DYNAMIC_PAINT'}: -- cgit v1.2.3 From 44924a2e5e10cf645e2a81e0041defa05b542e83 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 28 Apr 2012 09:10:20 +0000 Subject: Cycles: fix for CUDA build. --- intern/cycles/util/util_math.h | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/intern/cycles/util/util_math.h b/intern/cycles/util/util_math.h index 25d81481d12..33e351c74e9 100644 --- a/intern/cycles/util/util_math.h +++ b/intern/cycles/util/util_math.h @@ -515,15 +515,6 @@ __device_inline void print_float3(const char *label, const float3& a) printf("%s: %.8f %.8f %.8f\n", label, a.x, a.y, a.z); } -__device_inline float reduce_add(const float3& a) -{ -#ifdef __KERNEL_SSE__ - return (a.x + a.y + a.z); -#else - return (a.x + a.y + a.z); -#endif -} - __device_inline float3 rcp(const float3& a) { #ifdef __KERNEL_SSE__ @@ -550,6 +541,15 @@ __device_inline bool is_zero(const float3 a) #endif } +__device_inline float reduce_add(const float3& a) +{ +#ifdef __KERNEL_SSE__ + return (a.x + a.y + a.z); +#else + return (a.x + a.y + a.z); +#endif +} + __device_inline float average(const float3 a) { return reduce_add(a)*(1.0f/3.0f); @@ -783,16 +783,6 @@ __device_inline float4 reduce_add(const float4& a) } #endif -__device_inline float reduce_add(const float4& a) -{ -#ifdef __KERNEL_SSE__ - float4 h = shuffle<1,0,3,2>(a) + a; - return _mm_cvtss_f32(shuffle<2,3,0,1>(h) + h); /* todo: efficiency? */ -#else - return ((a.x + a.y) + (a.z + a.w)); -#endif -} - __device_inline void print_float4(const char *label, const float4& a) { printf("%s: %.8f %.8f %.8f %.8f\n", label, a.x, a.y, a.z, a.w); @@ -811,6 +801,16 @@ __device_inline bool is_zero(const float4& a) #endif } +__device_inline float reduce_add(const float4& a) +{ +#ifdef __KERNEL_SSE__ + float4 h = shuffle<1,0,3,2>(a) + a; + return _mm_cvtss_f32(shuffle<2,3,0,1>(h) + h); /* todo: efficiency? */ +#else + return ((a.x + a.y) + (a.z + a.w)); +#endif +} + __device_inline float average(const float4& a) { return reduce_add(a) * 0.25f; -- cgit v1.2.3 From 5a860b840ddfc208c11df5d6a621a8478514f113 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 28 Apr 2012 09:21:16 +0000 Subject: Fix: #31095: Incorrect clamping of labels for multibyte languages --- source/blender/editors/interface/interface_widgets.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 03ceeb68c4c..4666232c232 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1047,9 +1047,8 @@ static void ui_text_label_rightclip(uiFontStyle *fstyle, uiBut *but, rcti *rect) /* chop off the leading text, starting from the right */ while (but->strwidth > okwidth && cp2 > but->drawstr) { - int bytes = BLI_str_utf8_size(cp2); - if (bytes < 0) - bytes = 1; + char *prev_utf8 = BLI_str_find_prev_char_utf8(but->drawstr, cp2); + int bytes = cp2 - prev_utf8; /* shift the text after and including cp2 back by 1 char, +1 to include null terminator */ memmove(cp2 - bytes, cp2, strlen(cp2) + 1); -- cgit v1.2.3 From 54911f52d87be169bf62ffc8088c81d3b7580681 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 28 Apr 2012 09:32:55 +0000 Subject: Fix #31117: Segfault when removing Meshdeform Modifier --- source/blender/editors/object/object_modifier.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index cd2fa4f93b6..445047ac321 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -1343,6 +1343,7 @@ static int meshdeform_bind_exec(bContext *C, wmOperator *op) mmd->bindcagecos= NULL; mmd->dyngrid= NULL; mmd->dyninfluences= NULL; + mmd->bindinfluences= NULL; mmd->bindoffsets= NULL; mmd->dynverts= NULL; mmd->bindweights= NULL; /* deprecated */ -- cgit v1.2.3 From a434572654d95b2910324f3c6125580f4ee28afe Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 28 Apr 2012 10:09:58 +0000 Subject: Camera tracking: if there's no image for current frame display default grid and allow to interact with tracks for operators which doesn't require image. Merged from tomato branch: svn merge ^/branches/soc-2011-tomato -r45624:45625 --- source/blender/blenkernel/intern/movieclip.c | 4 +- source/blender/editors/include/ED_screen.h | 1 + source/blender/editors/screen/area.c | 60 +++++++++++++++++++++ source/blender/editors/space_clip/clip_draw.c | 5 ++ source/blender/editors/space_clip/tracking_ops.c | 33 +++++++++--- source/blender/editors/space_image/image_draw.c | 61 +--------------------- .../editors/transform/transform_conversions.c | 5 +- 7 files changed, 99 insertions(+), 70 deletions(-) diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c index f23578e07d7..a3baa883a4a 100644 --- a/source/blender/blenkernel/intern/movieclip.c +++ b/source/blender/blenkernel/intern/movieclip.c @@ -925,8 +925,8 @@ void BKE_movieclip_get_size(MovieClip *clip, MovieClipUser *user, int *width, in real_ibuf_size(clip, user, ibuf, width, height); } else { - *width = 0; - *height = 0; + *width = clip->lastsize[0]; + *height = clip->lastsize[1]; } if (ibuf) diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index f0fffb34b73..f62befdaa31 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -66,6 +66,7 @@ void ED_region_header(const struct bContext *C, struct ARegion *ar); void ED_region_toggle_hidden(struct bContext *C, struct ARegion *ar); void region_scissor_winrct(struct ARegion *ar, struct rcti *winrct); void ED_region_info_draw(struct ARegion *ar, const char *text, int block, float alpha); +void ED_region_grid_draw(struct ARegion *ar, float zoomx, float zoomy); /* spaces */ void ED_spacetypes_init(void); diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index eb1688a76e2..2a561a6bc6c 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1813,3 +1813,63 @@ void ED_region_info_draw(ARegion *ar, const char *text, int block, float alpha) BLF_position(fontid, 12, rect.ymin + 5, 0.0f); BLF_draw(fontid, text, BLF_DRAW_STR_DUMMY_MAX); } + +void ED_region_grid_draw(ARegion *ar, float zoomx, float zoomy) +{ + float gridsize, gridstep = 1.0f / 32.0f; + float fac, blendfac; + int x1, y1, x2, y2; + + /* the image is located inside (0,0),(1, 1) as set by view2d */ + UI_ThemeColorShade(TH_BACK, 20); + + UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &x1, &y1); + UI_view2d_to_region_no_clip(&ar->v2d, 1.0f, 1.0f, &x2, &y2); + glRectf(x1, y1, x2, y2); + + /* gridsize adapted to zoom level */ + gridsize = 0.5f * (zoomx + zoomy); + if (gridsize <= 0.0f) + return; + + if (gridsize < 1.0f) { + while (gridsize < 1.0f) { + gridsize *= 4.0f; + gridstep *= 4.0f; + } + } + else { + while (gridsize >= 4.0f) { + gridsize /= 4.0f; + gridstep /= 4.0f; + } + } + + /* the fine resolution level */ + blendfac = 0.25f * gridsize - floorf(0.25f * gridsize); + CLAMP(blendfac, 0.0f, 1.0f); + UI_ThemeColorShade(TH_BACK, (int)(20.0f * (1.0f - blendfac))); + + fac = 0.0f; + glBegin(GL_LINES); + while (fac < 1.0f) { + glVertex2f(x1, y1 * (1.0f - fac) + y2 * fac); + glVertex2f(x2, y1 * (1.0f - fac) + y2 * fac); + glVertex2f(x1 * (1.0f - fac) + x2 * fac, y1); + glVertex2f(x1 * (1.0f - fac) + x2 * fac, y2); + fac += gridstep; + } + + /* the large resolution level */ + UI_ThemeColor(TH_BACK); + + fac = 0.0f; + while (fac < 1.0f) { + glVertex2f(x1, y1 * (1.0f - fac) + y2 * fac); + glVertex2f(x2, y1 * (1.0f - fac) + y2 * fac); + glVertex2f(x1 * (1.0f - fac) + x2 * fac, y1); + glVertex2f(x1 * (1.0f - fac) + x2 * fac, y2); + fac += 4.0f * gridstep; + } + glEnd(); +} diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c index bf8976035a8..2f9956fc143 100644 --- a/source/blender/editors/space_clip/clip_draw.c +++ b/source/blender/editors/space_clip/clip_draw.c @@ -1380,7 +1380,12 @@ void clip_draw_main(SpaceClip *sc, ARegion *ar, Scene *scene) if (ibuf) { draw_movieclip_buffer(sc, ar, ibuf, width, height, zoomx, zoomy); IMB_freeImBuf(ibuf); + } + else { + ED_region_grid_draw(ar, zoomx, zoomy); + } + if (width && height) { draw_tracking_tracks(sc, ar, clip, width, height, zoomx, zoomy); draw_distortion(sc, ar, clip, width, height, zoomx, zoomy); } diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index 2b1b311b89d..f4454394ca3 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -92,6 +92,25 @@ static int space_clip_frame_poll(bContext *C) return FALSE; } +static int space_clip_size_poll(bContext *C) +{ + SpaceClip *sc = CTX_wm_space_clip(C); + + if (sc) { + MovieClip *clip = ED_space_clip(sc); + + if (clip) { + int width, height; + + BKE_movieclip_get_size(clip, &sc->user, &width, &height); + + return width > 0 && height > 0; + } + } + + return FALSE; +} + /********************** add marker operator *********************/ static void add_marker(SpaceClip *sc, float x, float y) @@ -156,7 +175,7 @@ void CLIP_OT_add_marker(wmOperatorType *ot) /* api callbacks */ ot->invoke = add_marker_invoke; ot->exec = add_marker_exec; - ot->poll = space_clip_frame_poll; + ot->poll = space_clip_size_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -643,7 +662,7 @@ void CLIP_OT_slide_marker(wmOperatorType *ot) ot->idname = "CLIP_OT_slide_marker"; /* api callbacks */ - ot->poll = space_clip_frame_poll; + ot->poll = space_clip_size_poll; ot->invoke = slide_marker_invoke; ot->modal = slide_marker_modal; @@ -1200,7 +1219,7 @@ void CLIP_OT_select_grouped(wmOperatorType *ot) /* api callbacks */ ot->exec = select_groped_exec; - ot->poll = space_clip_frame_poll; + ot->poll = space_clip_size_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -2016,7 +2035,7 @@ static Object *get_orientation_object(bContext *C) static int set_orientation_poll(bContext *C) { - if (space_clip_frame_poll(C)) { + if (space_clip_size_poll(C)) { Scene *scene = CTX_data_scene(C); SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); @@ -2626,7 +2645,7 @@ void CLIP_OT_set_scale(wmOperatorType *ot) static int set_solution_scale_poll(bContext *C) { - if (space_clip_frame_poll(C)) { + if (space_clip_size_poll(C)) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); MovieTracking *tracking = &clip->tracking; @@ -2974,7 +2993,7 @@ void CLIP_OT_frame_jump(wmOperatorType *ot) /* api callbacks */ ot->exec = frame_jump_exec; - ot->poll = space_clip_frame_poll; + ot->poll = ED_space_clip_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; @@ -3031,7 +3050,7 @@ void CLIP_OT_join_tracks(wmOperatorType *ot) /* api callbacks */ ot->exec = join_tracks_exec; - ot->poll = space_clip_frame_poll; + ot->poll = space_clip_size_poll; /* flags */ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c index 29bd5f5117d..793e5712c8c 100644 --- a/source/blender/editors/space_image/image_draw.c +++ b/source/blender/editors/space_image/image_draw.c @@ -334,65 +334,6 @@ void ED_image_draw_info(ARegion *ar, int color_manage, int channels, int x, int /* image drawing */ -static void draw_image_grid(ARegion *ar, float zoomx, float zoomy) -{ - float gridsize, gridstep = 1.0f / 32.0f; - float fac, blendfac; - int x1, y1, x2, y2; - - /* the image is located inside (0,0),(1, 1) as set by view2d */ - UI_ThemeColorShade(TH_BACK, 20); - - UI_view2d_to_region_no_clip(&ar->v2d, 0.0f, 0.0f, &x1, &y1); - UI_view2d_to_region_no_clip(&ar->v2d, 1.0f, 1.0f, &x2, &y2); - glRectf(x1, y1, x2, y2); - - /* gridsize adapted to zoom level */ - gridsize = 0.5f * (zoomx + zoomy); - if (gridsize <= 0.0f) return; - - if (gridsize < 1.0f) { - while (gridsize < 1.0f) { - gridsize *= 4.0f; - gridstep *= 4.0f; - } - } - else { - while (gridsize >= 4.0f) { - gridsize /= 4.0f; - gridstep /= 4.0f; - } - } - - /* the fine resolution level */ - blendfac = 0.25f * gridsize - floorf(0.25f * gridsize); - CLAMP(blendfac, 0.0f, 1.0f); - UI_ThemeColorShade(TH_BACK, (int)(20.0f * (1.0f - blendfac))); - - fac = 0.0f; - glBegin(GL_LINES); - while (fac < 1.0f) { - glVertex2f(x1, y1 * (1.0f - fac) + y2 * fac); - glVertex2f(x2, y1 * (1.0f - fac) + y2 * fac); - glVertex2f(x1 * (1.0f - fac) + x2 * fac, y1); - glVertex2f(x1 * (1.0f - fac) + x2 * fac, y2); - fac += gridstep; - } - - /* the large resolution level */ - UI_ThemeColor(TH_BACK); - - fac = 0.0f; - while (fac < 1.0f) { - glVertex2f(x1, y1 * (1.0f - fac) + y2 * fac); - glVertex2f(x2, y1 * (1.0f - fac) + y2 * fac); - glVertex2f(x1 * (1.0f - fac) + x2 * fac, y1); - glVertex2f(x1 * (1.0f - fac) + x2 * fac, y2); - fac += 4.0f * gridstep; - } - glEnd(); -} - static void sima_draw_alpha_pixels(float x1, float y1, int rectx, int recty, unsigned int *recti) { @@ -781,7 +722,7 @@ void draw_image_main(SpaceImage *sima, ARegion *ar, Scene *scene) /* draw the image or grid */ if (ibuf == NULL) - draw_image_grid(ar, zoomx, zoomy); + ED_region_grid_draw(ar, zoomx, zoomy); else if (sima->flag & SI_DRAW_TILE) draw_image_buffer_repeated(sima, ar, scene, ima, ibuf, zoomx, zoomy); else if (ima && (ima->tpageflag & IMA_TILES)) diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index d33b8787121..ebbc2ca9267 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -5731,10 +5731,13 @@ static void createTransTrackingData(bContext *C, TransInfo *t) ARegion *ar = CTX_wm_region(C); SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip(sc); + int width, height; t->total = 0; - if (!clip || !BKE_movieclip_has_frame(clip, &sc->user)) + BKE_movieclip_get_size(clip, &sc->user, &width, &height); + + if (!clip || width == 0 || height == 0) return; if (!ELEM(t->mode, TFM_RESIZE, TFM_TRANSLATION)) -- cgit v1.2.3 From 9caab2e26501f709109024ade3063e3762a19929 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 10:33:32 +0000 Subject: code cleanup: replace some long ELEM7 checks with macro OB_TYPE_SUPPORT_EDITMODE() --- source/blender/editors/object/object_edit.c | 6 +++--- source/blender/editors/space_view3d/view3d_header.c | 8 ++++---- source/blender/editors/util/undo.c | 15 +++++++++------ source/blender/makesdna/DNA_object_types.h | 8 ++++++-- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 8531ec5701d..69ced0c0f8a 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -1351,11 +1351,11 @@ static EnumPropertyItem *object_mode_set_itemsf(bContext *C, PointerRNA *UNUSED( if (!C) /* needed for docs */ return object_mode_items; + + ob = CTX_data_active_object(C); while (ob && input->identifier) { - if ((input->value == OB_MODE_EDIT && ((ob->type == OB_MESH) || (ob->type == OB_ARMATURE) || - (ob->type == OB_CURVE) || (ob->type == OB_SURF) || - (ob->type == OB_FONT) || (ob->type == OB_MBALL) || (ob->type == OB_LATTICE))) || + if ((input->value == OB_MODE_EDIT && OB_TYPE_SUPPORT_EDITMODE(ob->type)) || (input->value == OB_MODE_POSE && (ob->type == OB_ARMATURE)) || (input->value == OB_MODE_PARTICLE_EDIT && ob->particlesystem.first) || ((input->value == OB_MODE_SCULPT || input->value == OB_MODE_VERTEX_PAINT || diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index ab4eca2e303..c4309980b18 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -294,15 +294,15 @@ static char *view3d_modeselect_pup(Scene *scene) if (!((ID *)ob->data)->lib) { /* if active object is editable */ - if (ELEM6(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL, OB_LATTICE)) { - str += modeselect_addmode(str, N_("Edit Mode"), OB_MODE_EDIT, ICON_EDITMODE_HLT); - } - else if (ob->type == OB_ARMATURE) { + if (ob->type == OB_ARMATURE) { if (ob->mode & OB_MODE_POSE) str += modeselect_addmode(str, N_("Edit Mode"), OB_MODE_EDIT | OB_MODE_POSE, ICON_EDITMODE_HLT); else str += modeselect_addmode(str, N_("Edit Mode"), OB_MODE_EDIT, ICON_EDITMODE_HLT); } + else if (OB_TYPE_SUPPORT_EDITMODE(ob->type)) { + str += modeselect_addmode(str, N_("Edit Mode"), OB_MODE_EDIT, ICON_EDITMODE_HLT); + } if (ob->type == OB_MESH) { diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c index a43d549cba1..cd88614f8fe 100644 --- a/source/blender/editors/util/undo.c +++ b/source/blender/editors/util/undo.c @@ -155,7 +155,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname) ED_text_undo_step(C, step); } else if (obedit) { - if (ELEM7(obedit->type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE)) { + if (OB_TYPE_SUPPORT_EDITMODE(obedit->type)) { if (undoname) undo_editmode_name(C, undoname); else @@ -247,7 +247,7 @@ int ED_undo_valid(const bContext *C, const char *undoname) return 1; } else if (obedit) { - if (ELEM7(obedit->type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE)) { + if (OB_TYPE_SUPPORT_EDITMODE(obedit->type)) { return undo_editmode_valid(undoname); } } @@ -413,9 +413,11 @@ void ED_undo_operator_repeat_cb_evt(bContext *C, void *arg_op, int UNUSED(arg_ev /* ************************** */ -#define UNDOSYSTEM_GLOBAL 1 -#define UNDOSYSTEM_EDITMODE 2 -#define UNDOSYSTEM_PARTICLE 3 +enum { + UNDOSYSTEM_GLOBAL = 1, + UNDOSYSTEM_EDITMODE = 2, + UNDOSYSTEM_PARTICLE = 3 +}; static int get_undo_system(bContext *C) { @@ -423,8 +425,9 @@ static int get_undo_system(bContext *C) /* find out which undo system */ if (obedit) { - if (ELEM7(obedit->type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE)) + if (OB_TYPE_SUPPORT_EDITMODE(obedit->type)) { return UNDOSYSTEM_EDITMODE; + } } else { Object *obact = CTX_data_active_object(C); diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 86a2bb60cc9..05a96ef2f35 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -319,8 +319,12 @@ typedef struct DupliObject { #define OB_ARMATURE 25 /* check if the object type supports materials */ -#define OB_TYPE_SUPPORT_MATERIAL(_type) ((_type) >= OB_MESH && (_type) <= OB_MBALL) -#define OB_TYPE_SUPPORT_VGROUP(_type) (ELEM(_type, OB_MESH, OB_LATTICE)) +#define OB_TYPE_SUPPORT_MATERIAL(_type) \ + ((_type) >= OB_MESH && (_type) <= OB_MBALL) +#define OB_TYPE_SUPPORT_VGROUP(_type) \ + (ELEM(_type, OB_MESH, OB_LATTICE)) +#define OB_TYPE_SUPPORT_EDITMODE(_type) \ + (ELEM7(_type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE)) /* partype: first 4 bits: type */ #define PARTYPE 15 -- cgit v1.2.3 From 4dd552fef9bc009dcad052121f827be84b8e8f86 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 11:45:28 +0000 Subject: patch [#31104] Correct comment for mul_qt_v3 from Bill Currie (taniwha) --- source/blender/blenlib/intern/math_rotation.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c index bb3265bdf33..37402f9391c 100644 --- a/source/blender/blenlib/intern/math_rotation.c +++ b/source/blender/blenlib/intern/math_rotation.c @@ -78,7 +78,23 @@ void mul_qt_qtqt(float q[4], const float q1[4], const float q2[4]) q[2] = t2; } -/* Assumes a unit quaternion */ +/** + * \note: + * Assumes a unit quaternion? + * + * infact not, but you may wan't to use a unit quat, read on... + * + * Shortcut for 'q v q*' when \a v is actually a quaternion. + * This removes the need for converting a vector to a quaternion, + * calculating q's conjugate and converting back to a vector. + * It also happens to be faster (17+,24* vs * 24+,32*). + * If \a q is not a unit quaternion, then \a v will be both rotated by + * the same amount as if q was a unit quaternion, and scaled by the square of + * the length of q. + * + * For people used to python mathutils, its like: + * def mul_qt_v3(q, v): (q * Quaternion((0.0, v[0], v[1], v[2])) * q.conjugated())[1:] + */ void mul_qt_v3(const float q[4], float v[3]) { float t0, t1, t2; -- cgit v1.2.3 From c91fd5a0bf60a03a404fe9157bbf3fccb40e590b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 12:23:05 +0000 Subject: code cleanup: remove editmesh code left hanging around thats already been ported to bmesh, also remove main editmesh header. --- source/blender/blenlib/BLI_editVert.h | 191 --------------------- source/blender/blenlib/CMakeLists.txt | 1 - source/blender/editors/armature/reeb.c | 17 +- source/blender/editors/mesh/editmesh_tools.c | 16 -- .../blender/editors/space_view3d/view3d_select.c | 60 ------- source/blender/editors/util/crazyspace.c | 69 -------- 6 files changed, 12 insertions(+), 342 deletions(-) delete mode 100644 source/blender/blenlib/BLI_editVert.h diff --git a/source/blender/blenlib/BLI_editVert.h b/source/blender/blenlib/BLI_editVert.h deleted file mode 100644 index 0f754d5fc98..00000000000 --- a/source/blender/blenlib/BLI_editVert.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifndef __BLI_EDITVERT_H__ -#define __BLI_EDITVERT_H__ - -/** \file BLI_editVert.h - * \ingroup bli - * \since March 2001 - * \author nzc - * \brief Some editing types needed in the lib (unfortunately) for - * scanfill.c - */ - -#include "DNA_customdata_types.h" -#include "DNA_mesh_types.h" - -#include "BLO_sys_types.h" // for intptr_t support - -struct DerivedMesh; - -/* note; changing this also might affect the undo copy in editmesh.c */ -typedef struct EditVert -{ - struct EditVert *next, *prev; - union { - /* some lean storage for temporary usage - * in editmesh routines - */ - struct EditVert *v; - struct EditEdge *e; - struct EditFace *f; - void *p; - intptr_t l; - float fp; - int t; - } tmp; - float no[3]; /*vertex normal */ - float co[3]; /*vertex location */ - short xs, ys; /* used to store a screenspace 2d projection of the verts */ - - /* f stores selection eg. if (eve->f & SELECT) {... - * h for hidden. if (!eve->h) {... - * f1 and f2 can be used for temp data, clear them first*/ - unsigned char f, h, f1, f2; - float bweight; - short fast; /* only 0 or 1, for editmesh_fastmalloc, do not store temp data here! */ - int hash; /* internal editmesh.c use only, don't touch! */ - int keyindex; /* original index #, for restoring key information */ - - void *data; /* custom vertex data */ -} EditVert; - -struct EditEdge; - -typedef struct HashEdge { - struct EditEdge *eed; - struct HashEdge *next; -} HashEdge; - -/* note; changing this also might affect the undo copy in editmesh.c */ -typedef struct EditEdge -{ - struct EditEdge *next, *prev; - struct EditVert *v1, *v2; - union { - /* some lean storage for temporary usage - * in editmesh routines - */ - struct EditVert *v; - struct EditEdge *e; - struct EditFace *f; - void *p; - intptr_t l; - float fp; - } tmp; - short f1, f2; /* short, f1 is (ab)used in subdiv */ - unsigned char f, h, dir, seam, sharp; - float crease; - float bweight; - short fast; /* only 0 or 1, for editmesh_fastmalloc */ - short fgoni; /* index for fgon, for search */ - HashEdge hash; - void *data; /*custom edge data*/ -} EditEdge; - -/* note; changing this also might affect the undo copy in editmesh.c */ -typedef struct EditFace -{ - struct EditFace *next, *prev; - struct EditVert *v1, *v2, *v3, *v4; - struct EditEdge *e1, *e2, *e3, *e4; - union { - /* some lean storage for temporary usage - * in editmesh routines - */ - struct EditVert *v; - struct EditEdge *e; - struct EditFace *f; - void *p; - intptr_t l; - float fp; - } tmp; - float n[3], cent[3]; - unsigned char flag; - unsigned char f, f1, h; - unsigned char fast; /* only 0 or 1, for editmesh_fastmalloc */ - unsigned char fgonf; /* flag for fgon options */ - short mat_nr; - void *data; /* custom face data */ -} EditFace; - - -/*selection types*/ -#define EDITVERT 0 -#define EDITEDGE 1 -#define EDITFACE 2 - -typedef struct EditSelection -{ - struct EditSelection *next, *prev; - short type; - void *data; -} EditSelection; - - -typedef struct EditMesh -{ - ListBase verts, edges, faces; - ListBase selected; /*EditSelections. Used to store the order in which things are selected.*/ - HashEdge *hashedgetab; - - /* this is for the editmesh_fastmalloc */ - EditVert *allverts, *curvert; - EditEdge *alledges, *curedge; - EditFace *allfaces, *curface; - /* DerivedMesh caches... note that derived cage can be equivalent - * to derived final, care should be taken on release. - */ - - /* used for keeping track of the last clicked on face - so the space image - * when using the last selected face - (EditSelection) the space image flickered too much - * - * never access this directly, use EM_set_actFace and EM_get_actFace */ - EditFace *act_face; - - /* copy from scene */ - short selectmode; - /* copy from object actcol */ - short mat_nr; - /* stats */ - int totvert, totedge, totface, totvertsel, totedgesel, totfacesel; - /* shape key being edited */ - int shapenr; - - struct DerivedMesh *derivedCage, *derivedFinal; - /* the custom data layer mask that was last used to calculate - * derivedCage and derivedFinal - */ - int lastDataMask; - - CustomData vdata, edata, fdata; - -} EditMesh; - -#endif - diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt index 61fe3b560e2..d4b9bc3d2bc 100644 --- a/source/blender/blenlib/CMakeLists.txt +++ b/source/blender/blenlib/CMakeLists.txt @@ -103,7 +103,6 @@ set(SRC BLI_dynlib.h BLI_dynstr.h BLI_edgehash.h - BLI_editVert.h BLI_fileops.h BLI_fileops_types.h BLI_fnmatch.h diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c index f5e7770a7fc..eebdeafcea9 100644 --- a/source/blender/editors/armature/reeb.c +++ b/source/blender/editors/armature/reeb.c @@ -41,7 +41,6 @@ #include "BLI_blenlib.h" #include "BLI_math.h" #include "BLI_utildefines.h" -#include "BLI_editVert.h" #include "BLI_edgehash.h" #include "BLI_ghash.h" #include "BLI_heap.h" @@ -81,15 +80,23 @@ static ReebGraph *FILTERED_RG = NULL; #define DEBUG_REEB #define DEBUG_REEB_NODE -typedef struct VertexData -{ +/* place-holders! */ +typedef struct EditEdge { + void *fake; +} EditEdge; + +typedef struct EditFace { + void *fake; +} EditFace; +/* end place-holders! */ + +typedef struct VertexData { float w; /* weight */ int i; /* index */ ReebNode *n; } VertexData; -typedef struct EdgeIndex -{ +typedef struct EdgeIndex { EditEdge **edges; int *offset; } EdgeIndex; diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index f68c40d5f8a..7eae8b4d67e 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -3640,22 +3640,6 @@ static int vergxco(const void *v1, const void *v2) return (x2->org_idx < 0) - (x1->org_idx < 0); } -#if 0 /* Unused */ -struct facesort { - uintptr_t x; - struct EditFace *efa; -}; - -static int vergface(const void *v1, const void *v2) -{ - const struct facesort *x1 = v1, *x2 = v2; - - if (x1->x > x2->x) return 1; - else if (x1->x < x2->x) return -1; - return 0; -} -#endif - static void xsortvert_flag__doSetX(void *userData, BMVert *UNUSED(eve), int x, int UNUSED(y), int index) { xvertsort *sortblock = userData; diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 09cc6b9c7a5..d7e992e70e9 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -487,66 +487,6 @@ static void do_lasso_select_mesh(ViewContext *vc, int mcords[][2], short moves, EDBM_selectmode_flush(vc->em); } -/* BMESH_TODO */ -#if 0 -/* this is an exception in that its the only lasso that dosnt use the 3d view (uses space image view) */ -static void do_lasso_select_mesh_uv(int mcords[][2], short moves, short select) -{ - EditFace *efa; - MTFace *tf; - int screenUV[2], nverts, i, ok = 1; - rcti rect; - - BLI_lasso_boundbox(&rect, mcords, moves); - - if (draw_uvs_face_check()) { /* Face Center Sel */ - float cent[2]; - ok = 0; - for (efa = em->faces.first; efa; efa = efa->next) { - /* assume not touched */ - efa->tmp.l = 0; - tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); - if ((select) != (simaFaceSel_Check(efa, tf))) { - uv_center(tf->uv, cent, (void *)efa->v4); - uvco_to_areaco_noclip(cent, screenUV); - if (BLI_in_rcti(&rect, screenUV[0], screenUV[1]) && BLI_lasso_is_point_inside(mcords, moves, screenUV[0], screenUV[1])) { - efa->tmp.l = ok = 1; - } - } - } - /* (de)selects all tagged faces and deals with sticky modes */ - if (ok) - uvface_setsel__internal(select); - - } - else { /* Vert Sel*/ - for (efa = em->faces.first; efa; efa = efa->next) { - tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); - if (uvedit_face_visible_test(scene, ima, efa, tf)) { - nverts = efa->v4 ? 4 : 3; - for (i = 0; i < nverts; i++) { - if ((select) != (simaUVSel_Check(efa, tf, i))) { - uvco_to_areaco_noclip(tf->uv[i], screenUV); - if (BLI_in_rcti(&rect, screenUV[0], screenUV[1]) && BLI_lasso_is_point_inside(mcords, moves, screenUV[0], screenUV[1])) { - if (select) { - simaUVSel_Set(efa, tf, i); - } - else { - simaUVSel_UnSet(efa, tf, i); - } - } - } - } - } - } - } - if (ok && G.sima->flag & SI_SYNC_UVSEL) { - if (select) EM_select_flush(vc->em); - else EM_deselect_flush(vc->em); - } -} -#endif - static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) { LassoSelectUserData *data = userData; diff --git a/source/blender/editors/util/crazyspace.c b/source/blender/editors/util/crazyspace.c index 4b03c846f3e..5430a9a1c90 100644 --- a/source/blender/editors/util/crazyspace.c +++ b/source/blender/editors/util/crazyspace.c @@ -187,75 +187,6 @@ void crazyspace_set_quats_editmesh(BMEditMesh *em, float *origcos, float *mapped em->bm->elem_index_dirty |= BM_VERT; MEM_freeN(vert_table); -#if 0 - BMEditVert *eve, *prev; - BMEditFace *efa; - BMIter iter; - float *v1, *v2, *v3, *v4, *co1, *co2, *co3, *co4; - intptr_t index = 0; - - /* two abused locations in vertices */ - for (eve = em->verts.first; eve; eve = eve->next, index++) { - eve->tmp.p = NULL; - eve->prev = (EditVert *)index; - } - - /* first store two sets of tangent vectors in vertices, we derive it just from the face-edges */ - for (efa = em->faces.first; efa; efa = efa->next) { - - /* retrieve mapped coordinates */ - v1 = mappedcos + 3 * (intptr_t)(efa->v1->prev); - v2 = mappedcos + 3 * (intptr_t)(efa->v2->prev); - v3 = mappedcos + 3 * (intptr_t)(efa->v3->prev); - - co1 = (origcos) ? origcos + 3 * (intptr_t)(efa->v1->prev) : efa->v1->co; - co2 = (origcos) ? origcos + 3 * (intptr_t)(efa->v2->prev) : efa->v2->co; - co3 = (origcos) ? origcos + 3 * (intptr_t)(efa->v3->prev) : efa->v3->co; - - if (efa->v2->tmp.p == NULL && efa->v2->f1) { - set_crazy_vertex_quat(quats, co2, co3, co1, v2, v3, v1); - efa->v2->tmp.p = (void *)quats; - quats += 4; - } - - if (efa->v4) { - v4 = mappedcos + 3 * (intptr_t)(efa->v4->prev); - co4 = (origcos) ? origcos + 3 * (intptr_t)(efa->v4->prev) : efa->v4->co; - - if (efa->v1->tmp.p == NULL && efa->v1->f1) { - set_crazy_vertex_quat(quats, co1, co2, co4, v1, v2, v4); - efa->v1->tmp.p = (void *)quats; - quats += 4; - } - if (efa->v3->tmp.p == NULL && efa->v3->f1) { - set_crazy_vertex_quat(quats, co3, co4, co2, v3, v4, v2); - efa->v3->tmp.p = (void *)quats; - quats += 4; - } - if (efa->v4->tmp.p == NULL && efa->v4->f1) { - set_crazy_vertex_quat(quats, co4, co1, co3, v4, v1, v3); - efa->v4->tmp.p = (void *)quats; - quats += 4; - } - } - else { - if (efa->v1->tmp.p == NULL && efa->v1->f1) { - set_crazy_vertex_quat(quats, co1, co2, co3, v1, v2, v3); - efa->v1->tmp.p = (void *)quats; - quats += 4; - } - if (efa->v3->tmp.p == NULL && efa->v3->f1) { - set_crazy_vertex_quat(quats, co3, co1, co2, v3, v1, v2); - efa->v3->tmp.p = (void *)quats; - quats += 4; - } - } - } - - /* restore abused prev pointer */ - for (prev = NULL, eve = em->verts.first; eve; prev = eve, eve = eve->next) - eve->prev = prev; -#endif } /* BMESH_TODO - use MPolys over MFace's */ -- cgit v1.2.3 From ef3acaedc1eb530b263e9235d83d853f8282a278 Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Sat, 28 Apr 2012 13:16:29 +0000 Subject: Audio: * Fix for [#31099] Audio in Meta-Strips Plays Beyond Strip Cut * Adding a split files option to the mixdown operator which then renders each channel into a separate file --- intern/audaspace/intern/AUD_C-API.cpp | 42 ++++++++++++++++++++++++++++ intern/audaspace/intern/AUD_C-API.h | 15 ++++++++++ intern/audaspace/intern/AUD_FileWriter.cpp | 36 ++++++++++++++++++++++++ intern/audaspace/intern/AUD_FileWriter.h | 10 +++++++ source/blender/blenkernel/intern/sequencer.c | 26 +++++++++++++---- source/blender/editors/sound/sound_ops.c | 11 ++++++-- 6 files changed, 132 insertions(+), 8 deletions(-) diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp index 9100a277124..50b47650696 100644 --- a/intern/audaspace/intern/AUD_C-API.cpp +++ b/intern/audaspace/intern/AUD_C-API.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include "AUD_NULLDevice.h" #include "AUD_I3DDevice.h" @@ -1236,6 +1237,47 @@ const char* AUD_mixdown(AUD_Sound* sound, unsigned int start, unsigned int lengt } } +const char* AUD_mixdown_per_channel(AUD_Sound* sound, unsigned int start, unsigned int length, unsigned int buffersize, const char* filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate) +{ + try + { + AUD_SequencerFactory* f = dynamic_cast(sound->get()); + + f->setSpecs(specs.specs); + + std::vector > writers; + + int channels = specs.channels; + specs.channels = AUD_CHANNELS_MONO; + + for(int i = 0; i < channels; i++) + { + std::stringstream stream; + std::string fn = filename; + size_t index = fn.find_last_of('.'); + size_t index_slash = fn.find_last_of('/'); + size_t index_backslash = fn.find_last_of('\\'); + if((index == std::string::npos) || + ((index < index_slash) && (index_slash != std::string::npos)) || + ((index < index_backslash) && (index_backslash != std::string::npos))) + stream << filename << "_" << (i + 1); + else + stream << fn.substr(0, index) << "_" << (i + 1) << fn.substr(index); + writers.push_back(AUD_FileWriter::createWriter(stream.str(), specs, format, codec, bitrate)); + } + + AUD_Reference reader = f->createQualityReader(); + reader->seek(start); + AUD_FileWriter::writeReader(reader, writers, length, buffersize); + + return NULL; + } + catch(AUD_Exception& e) + { + return e.str; + } +} + AUD_Device* AUD_openMixdownDevice(AUD_DeviceSpecs specs, AUD_Sound* sequencer, float volume, float start) { try diff --git a/intern/audaspace/intern/AUD_C-API.h b/intern/audaspace/intern/AUD_C-API.h index 8388af2170d..a52a1fa8369 100644 --- a/intern/audaspace/intern/AUD_C-API.h +++ b/intern/audaspace/intern/AUD_C-API.h @@ -709,6 +709,21 @@ extern void* AUD_getSet(void* set); */ extern const char* AUD_mixdown(AUD_Sound* sound, unsigned int start, unsigned int length, unsigned int buffersize, const char* filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate); +/** + * Mixes a sound down into multiple files. + * \param sound The sound scene to mix down. + * \param start The start frame. + * \param length The count of frames to write. + * \param buffersize How many samples should be written at once. + * \param filename The file to write to, the channel number and an underscore are added at the beginning. + * \param specs The file's audio specification. + * \param format The file's container format. + * \param codec The codec used for encoding the audio data. + * \param bitrate The bitrate for encoding. + * \return An error message or NULL in case of success. + */ +extern const char* AUD_mixdown_per_channel(AUD_Sound* sound, unsigned int start, unsigned int length, unsigned int buffersize, const char* filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate); + /** * Opens a read device and prepares it for mixdown of the sound scene. * \param specs Output audio specifications. diff --git a/intern/audaspace/intern/AUD_FileWriter.cpp b/intern/audaspace/intern/AUD_FileWriter.cpp index df76b667e3f..f74021acad1 100644 --- a/intern/audaspace/intern/AUD_FileWriter.cpp +++ b/intern/audaspace/intern/AUD_FileWriter.cpp @@ -93,3 +93,39 @@ void AUD_FileWriter::writeReader(AUD_Reference reader, AUD_Referenc writer->write(len, buf); } } + +void AUD_FileWriter::writeReader(AUD_Reference reader, std::vector >& writers, unsigned int length, unsigned int buffersize) +{ + AUD_Buffer buffer(buffersize * AUD_SAMPLE_SIZE(reader->getSpecs())); + AUD_Buffer buffer2(buffersize * sizeof(sample_t)); + sample_t* buf = buffer.getBuffer(); + sample_t* buf2 = buffer2.getBuffer(); + + int len; + bool eos = false; + int channels = reader->getSpecs().channels; + + for(unsigned int pos = 0; ((pos < length) || (length <= 0)) && !eos; pos += len) + { + len = buffersize; + if((len > length - pos) && (length > 0)) + len = length - pos; + reader->read(len, eos, buf); + + for(int channel = 0; channel < channels; channel++) + { + for(int i = 0; i < len; i++) + { + // clamping! + if(buf[i * channels + channel] > 1) + buf2[i] = 1; + else if(buf[i * channels + channel] < -1) + buf2[i] = -1; + else + buf2[i] = buf[i * channels + channel]; + } + + writers[channel]->write(len, buf2); + } + } +} diff --git a/intern/audaspace/intern/AUD_FileWriter.h b/intern/audaspace/intern/AUD_FileWriter.h index c9ee2b1ee12..385aba5ef45 100644 --- a/intern/audaspace/intern/AUD_FileWriter.h +++ b/intern/audaspace/intern/AUD_FileWriter.h @@ -31,6 +31,7 @@ #define __AUD_FILEWRITER_H__ #include +#include #include "AUD_Reference.h" @@ -68,6 +69,15 @@ public: * \param buffersize How many samples should be transfered at once. */ static void writeReader(AUD_Reference reader, AUD_Reference writer, unsigned int length, unsigned int buffersize); + + /** + * Writes a reader to several writers. + * \param reader The reader to read from. + * \param writers The writers to write to. + * \param length How many samples should be transfered. + * \param buffersize How many samples should be transfered at once. + */ + static void writeReader(AUD_Reference reader, std::vector >& writers, unsigned int length, unsigned int buffersize); }; #endif //__AUD_FILEWRITER_H__ diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 1c06f1da018..470e1a1c529 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -515,8 +515,17 @@ void build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int *totseq, *seqar = tseqar; } +static int metaseq_start(Sequence *metaseq) +{ + return metaseq->start + metaseq->startofs; +} -static void seq_update_sound_bounds_recursive(Scene *scene, Sequence *metaseq) +static int metaseq_end(Sequence *metaseq) +{ + return metaseq->start + metaseq->len - metaseq->endofs; +} + +static void seq_update_sound_bounds_recursive_rec(Scene *scene, Sequence *metaseq, int start, int end) { Sequence *seq; @@ -524,23 +533,28 @@ static void seq_update_sound_bounds_recursive(Scene *scene, Sequence *metaseq) * since sound is played outside of evaluating the imbufs, */ for (seq = metaseq->seqbase.first; seq; seq = seq->next) { if (seq->type == SEQ_META) { - seq_update_sound_bounds_recursive(scene, seq); + seq_update_sound_bounds_recursive_rec(scene, seq, MAX2(start, metaseq_start(seq)), MIN2(end, metaseq_end(seq))); } else if (ELEM(seq->type, SEQ_SOUND, SEQ_SCENE)) { if (seq->scene_sound) { int startofs = seq->startofs; int endofs = seq->endofs; - if (seq->startofs + seq->start < metaseq->start + metaseq->startofs) - startofs = metaseq->start + metaseq->startofs - seq->start; + if (seq->startofs + seq->start < start) + startofs = start - seq->start; - if (seq->start + seq->len - seq->endofs > metaseq->start + metaseq->len - metaseq->endofs) - endofs = seq->start + seq->len - metaseq->start - metaseq->len + metaseq->endofs; + if (seq->start + seq->len - seq->endofs > end) + endofs = seq->start + seq->len - end; sound_move_scene_sound(scene, seq->scene_sound, seq->start + startofs, seq->start + seq->len - endofs, startofs); } } } } +static void seq_update_sound_bounds_recursive(Scene *scene, Sequence *metaseq) +{ + seq_update_sound_bounds_recursive_rec(scene, metaseq, metaseq_start(metaseq), metaseq_end(metaseq)); +} + void calc_sequence_disp(Scene *scene, Sequence *seq) { if (seq->startofs && seq->startstill) seq->startstill = 0; diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c index c238789446f..49eb85d62b4 100644 --- a/source/blender/editors/sound/sound_ops.c +++ b/source/blender/editors/sound/sound_ops.c @@ -318,6 +318,7 @@ static int sound_mixdown_exec(bContext *C, wmOperator *op) char filename[FILE_MAX]; Scene *scene; Main *bmain; + int split; int bitrate, accuracy; AUD_DeviceSpecs specs; @@ -333,6 +334,7 @@ static int sound_mixdown_exec(bContext *C, wmOperator *op) specs.format = RNA_enum_get(op->ptr, "format"); container = RNA_enum_get(op->ptr, "container"); codec = RNA_enum_get(op->ptr, "codec"); + split = RNA_boolean_get(op->ptr, "split_channels"); scene = CTX_data_scene(C); bmain = CTX_data_main(C); specs.channels = scene->r.ffcodecdata.audio_channels; @@ -341,8 +343,12 @@ static int sound_mixdown_exec(bContext *C, wmOperator *op) BLI_strncpy(filename, path, sizeof(filename)); BLI_path_abs(filename, bmain->name); - result = AUD_mixdown(scene->sound_scene, SFRA * specs.rate / FPS, (EFRA - SFRA) * specs.rate / FPS, - accuracy, filename, specs, container, codec, bitrate); + if(split) + result = AUD_mixdown_per_channel(scene->sound_scene, SFRA * specs.rate / FPS, (EFRA - SFRA) * specs.rate / FPS, + accuracy, filename, specs, container, codec, bitrate); + else + result = AUD_mixdown(scene->sound_scene, SFRA * specs.rate / FPS, (EFRA - SFRA) * specs.rate / FPS, + accuracy, filename, specs, container, codec, bitrate); if (result) { BKE_report(op->reports, RPT_ERROR, result); @@ -590,6 +596,7 @@ static void SOUND_OT_mixdown(wmOperatorType *ot) RNA_def_enum(ot->srna, "codec", codec_items, AUD_CODEC_FLAC, "Codec", "Audio Codec"); RNA_def_enum(ot->srna, "format", format_items, AUD_FORMAT_S16, "Format", "Sample format"); RNA_def_int(ot->srna, "bitrate", 192, 32, 512, "Bitrate", "Bitrate in kbit/s", 32, 512); + RNA_def_boolean(ot->srna, "split_channels", 0, "Split channels", "Each channel will be rendered into a mono file."); #endif // WITH_AUDASPACE } -- cgit v1.2.3 From 6e40b8b3cf33980d406bf8b6c405c112159926db Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Sat, 28 Apr 2012 13:37:44 +0000 Subject: Hopefully a fix for [#31097] glibc error when playing sound using BGE --- intern/audaspace/intern/AUD_Reference.h | 18 ++++++++++++++++++ intern/audaspace/intern/AUD_ReferenceHandler.cpp | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/intern/audaspace/intern/AUD_Reference.h b/intern/audaspace/intern/AUD_Reference.h index 2e07417154b..0c9f02c0155 100644 --- a/intern/audaspace/intern/AUD_Reference.h +++ b/intern/audaspace/intern/AUD_Reference.h @@ -31,6 +31,7 @@ #include #include +#include // #define MEM_DEBUG @@ -49,8 +50,13 @@ private: * Saves the reference counts. */ static std::map m_references; + static pthread_mutex_t m_mutex; + static bool m_mutex_initialised; public: + + static pthread_mutex_t* getMutex(); + /** * Reference increment. * \param reference The reference. @@ -108,6 +114,7 @@ public: template AUD_Reference(U* reference) { + pthread_mutex_lock(AUD_ReferenceHandler::getMutex()); m_original = reference; m_reference = dynamic_cast(reference); AUD_ReferenceHandler::incref(m_original); @@ -115,6 +122,7 @@ public: if(m_reference != NULL) std::cerr << "+" << typeid(*m_reference).name() << std::endl; #endif + pthread_mutex_unlock(AUD_ReferenceHandler::getMutex()); } AUD_Reference() @@ -129,6 +137,7 @@ public: */ AUD_Reference(const AUD_Reference& ref) { + pthread_mutex_lock(AUD_ReferenceHandler::getMutex()); m_original = ref.m_original; m_reference = ref.m_reference; AUD_ReferenceHandler::incref(m_original); @@ -136,11 +145,13 @@ public: if(m_reference != NULL) std::cerr << "+" << typeid(*m_reference).name() << std::endl; #endif + pthread_mutex_unlock(AUD_ReferenceHandler::getMutex()); } template explicit AUD_Reference(const AUD_Reference& ref) { + pthread_mutex_lock(AUD_ReferenceHandler::getMutex()); m_original = ref.get(); m_reference = dynamic_cast(ref.get()); AUD_ReferenceHandler::incref(m_original); @@ -148,6 +159,7 @@ public: if(m_reference != NULL) std::cerr << "+" << typeid(*m_reference).name() << std::endl; #endif + pthread_mutex_unlock(AUD_ReferenceHandler::getMutex()); } /** @@ -156,12 +168,14 @@ public: */ ~AUD_Reference() { + pthread_mutex_lock(AUD_ReferenceHandler::getMutex()); #ifdef MEM_DEBUG if(m_reference != NULL) std::cerr << "-" << typeid(*m_reference).name() << std::endl; #endif if(AUD_ReferenceHandler::decref(m_original)) delete m_reference; + pthread_mutex_unlock(AUD_ReferenceHandler::getMutex()); } /** @@ -173,6 +187,8 @@ public: if(&ref == this) return *this; + pthread_mutex_lock(AUD_ReferenceHandler::getMutex()); + #ifdef MEM_DEBUG if(m_reference != NULL) std::cerr << "-" << typeid(*m_reference).name() << std::endl; @@ -188,6 +204,8 @@ public: std::cerr << "+" << typeid(*m_reference).name() << std::endl; #endif + pthread_mutex_unlock(AUD_ReferenceHandler::getMutex()); + return *this; } diff --git a/intern/audaspace/intern/AUD_ReferenceHandler.cpp b/intern/audaspace/intern/AUD_ReferenceHandler.cpp index 24f645df761..3e9f6707262 100644 --- a/intern/audaspace/intern/AUD_ReferenceHandler.cpp +++ b/intern/audaspace/intern/AUD_ReferenceHandler.cpp @@ -29,3 +29,24 @@ #include "AUD_Reference.h" std::map AUD_ReferenceHandler::m_references; +pthread_mutex_t AUD_ReferenceHandler::m_mutex; +bool AUD_ReferenceHandler::m_mutex_initialised = false; + +pthread_mutex_t *AUD_ReferenceHandler::getMutex() +{ + if(!m_mutex_initialised) + { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + + pthread_mutex_init(&m_mutex, &attr); + + pthread_mutexattr_destroy(&attr); + + m_mutex_initialised = true; + } + + return &m_mutex; +} + -- cgit v1.2.3 From 887d1533f81b0ee89975efd8162a011b99c976af Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 28 Apr 2012 15:05:35 +0000 Subject: Correction to recent commmit related on splitting audio channels: descriptions shouldn't end with dot. --- source/blender/editors/sound/sound_ops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c index 49eb85d62b4..1bae6406c03 100644 --- a/source/blender/editors/sound/sound_ops.c +++ b/source/blender/editors/sound/sound_ops.c @@ -596,7 +596,7 @@ static void SOUND_OT_mixdown(wmOperatorType *ot) RNA_def_enum(ot->srna, "codec", codec_items, AUD_CODEC_FLAC, "Codec", "Audio Codec"); RNA_def_enum(ot->srna, "format", format_items, AUD_FORMAT_S16, "Format", "Sample format"); RNA_def_int(ot->srna, "bitrate", 192, 32, 512, "Bitrate", "Bitrate in kbit/s", 32, 512); - RNA_def_boolean(ot->srna, "split_channels", 0, "Split channels", "Each channel will be rendered into a mono file."); + RNA_def_boolean(ot->srna, "split_channels", 0, "Split channels", "Each channel will be rendered into a mono file"); #endif // WITH_AUDASPACE } -- cgit v1.2.3 From ef054e165cad35715a5b2388aac3db68a65ea275 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 15:14:16 +0000 Subject: style cleanup: format 'for' loop macros the same as for loops, some renaming to BLI_array macros. --- source/blender/blenkernel/intern/DerivedMesh.c | 2 +- source/blender/blenkernel/intern/editderivedmesh.c | 6 +-- source/blender/blenkernel/intern/ipo.c | 2 +- source/blender/blenkernel/intern/mesh.c | 22 ++++----- source/blender/blenkernel/intern/modifiers_bmesh.c | 4 +- source/blender/blenkernel/intern/object.c | 7 +-- source/blender/blenkernel/intern/sequencer.c | 5 +- source/blender/blenkernel/intern/subsurf_ccg.c | 10 ++-- source/blender/blenlib/BLI_array.h | 14 +++--- source/blender/blenlib/intern/bpath.c | 2 +- source/blender/blenloader/intern/readfile.c | 20 ++++---- source/blender/blenloader/intern/writefile.c | 4 +- source/blender/bmesh/intern/bmesh_construct.c | 4 +- source/blender/bmesh/intern/bmesh_mesh_conv.c | 4 +- source/blender/bmesh/intern/bmesh_mods.c | 2 +- source/blender/bmesh/operators/bmo_bevel.c | 12 ++--- source/blender/bmesh/operators/bmo_connect.c | 12 ++--- source/blender/bmesh/operators/bmo_create.c | 12 ++--- source/blender/bmesh/operators/bmo_dupe.c | 4 +- source/blender/bmesh/operators/bmo_extrude.c | 6 +-- .../blender/bmesh/operators/bmo_join_triangles.c | 2 +- source/blender/bmesh/operators/bmo_mirror.c | 2 +- source/blender/bmesh/operators/bmo_removedoubles.c | 10 ++-- source/blender/bmesh/operators/bmo_subdivide.c | 18 +++---- source/blender/bmesh/operators/bmo_triangulate.c | 4 +- source/blender/bmesh/operators/bmo_utils.c | 10 ++-- source/blender/editors/animation/keyframing.c | 3 +- source/blender/editors/armature/editarmature.c | 36 ++++++-------- .../editors/armature/editarmature_retarget.c | 2 +- source/blender/editors/armature/poseUtils.c | 6 +-- source/blender/editors/armature/poseobject.c | 57 ++++++++-------------- source/blender/editors/curve/editcurve.c | 2 +- source/blender/editors/gpencil/gpencil_paint.c | 2 +- .../blender/editors/interface/interface_handlers.c | 2 +- .../blender/editors/interface/interface_layout.c | 4 +- .../editors/interface/interface_templates.c | 8 +-- source/blender/editors/interface/interface_utils.c | 2 +- source/blender/editors/mesh/editmesh_loopcut.c | 4 +- source/blender/editors/mesh/editmesh_rip.c | 4 +- source/blender/editors/mesh/editmesh_select.c | 4 +- source/blender/editors/mesh/editmesh_slide.c | 2 +- source/blender/editors/mesh/mesh_navmesh.c | 2 +- source/blender/editors/mesh/meshtools.c | 13 ++--- source/blender/editors/object/object_add.c | 12 ++--- source/blender/editors/object/object_bake.c | 8 +-- source/blender/editors/object/object_constraint.c | 21 +++----- source/blender/editors/object/object_edit.c | 25 +++++----- source/blender/editors/object/object_group.c | 8 +-- source/blender/editors/object/object_hook.c | 3 +- source/blender/editors/object/object_modifier.c | 2 +- source/blender/editors/object/object_relations.c | 41 ++++++++-------- source/blender/editors/object/object_select.c | 45 +++++++++-------- source/blender/editors/object/object_transform.c | 27 +++++----- source/blender/editors/object/object_vgroup.c | 3 +- source/blender/editors/physics/particle_edit.c | 2 +- source/blender/editors/render/render_shading.c | 2 +- source/blender/editors/sculpt_paint/paint_image.c | 2 +- source/blender/editors/sculpt_paint/paint_stroke.c | 2 +- source/blender/editors/sound/sound_ops.c | 2 +- source/blender/editors/space_logic/logic_buttons.c | 2 +- source/blender/editors/space_node/node_edit.c | 2 +- .../editors/space_sequencer/sequencer_add.c | 7 ++- .../editors/space_sequencer/sequencer_edit.c | 20 +++----- .../editors/space_sequencer/sequencer_select.c | 24 ++++----- source/blender/editors/space_time/space_time.c | 3 +- .../blender/editors/space_view3d/view3d_select.c | 10 ++-- source/blender/editors/space_view3d/view3d_snap.c | 6 +-- .../editors/transform/transform_conversions.c | 5 +- source/blender/editors/uvedit/uvedit_draw.c | 20 ++++---- source/blender/editors/uvedit/uvedit_ops.c | 12 ++--- .../blender/editors/uvedit/uvedit_smart_stitch.c | 2 +- source/blender/makesrna/intern/rna_access.c | 12 ++--- source/blender/python/intern/bpy_rna.c | 24 ++++----- .../blender/windowmanager/intern/wm_event_system.c | 5 +- source/blender/windowmanager/intern/wm_operators.c | 9 ++-- 75 files changed, 333 insertions(+), 388 deletions(-) diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 511b4603791..0fd030be39c 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -1223,7 +1223,7 @@ void DM_update_weight_mcol(Object *ob, DerivedMesh *dm, int const draw_flag, for (i=0; inumPolyData; i++, mp++) { ml = mloop + mp->loopstart; - BLI_array_growitems(wtcol_l, mp->totloop); + BLI_array_grow_items(wtcol_l, mp->totloop); for (j = 0; j < mp->totloop; j++, ml++, totloop++) { copy_v4_v4_char((char *)&wtcol_l[totloop], (char *)&wtcol_v[4 * ml->v]); diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c index 857f6e75e2c..263f89a363e 100644 --- a/source/blender/blenkernel/intern/editderivedmesh.c +++ b/source/blender/blenkernel/intern/editderivedmesh.c @@ -162,7 +162,7 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) /* no need to ensure the loop order, we know its ok */ else if (f->len == 3) { - BLI_array_growone(looptris); + BLI_array_grow_one(looptris); l = BM_iter_new(&liter, bm, BM_LOOPS_OF_FACE, f); for (j=0; l; l=BM_iter_step(&liter), j++) { looptris[i][j] = l; @@ -171,7 +171,7 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) } else if (f->len == 4) { BMLoop *ltmp[4]; - BLI_array_growitems(looptris, 2); + BLI_array_grow_items(looptris, 2); l = BM_iter_new(&liter, bm, BM_LOOPS_OF_FACE, f); for (j=0; l; l=BM_iter_step(&liter), j++) { @@ -219,7 +219,7 @@ static void BMEdit_RecalcTessellation_intern(BMEditMesh *tm) BLI_addfilledge(&sf_ctx, firstv, v); totfilltri = BLI_edgefill_ex(&sf_ctx, FALSE, f->no); - BLI_array_growitems(looptris, totfilltri); + BLI_array_grow_items(looptris, totfilltri); for (efa = sf_ctx.fillfacebase.first; efa; efa=efa->next) { BMLoop *l1= efa->v1->tmp.p; diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index 2fd1d291363..c33bb973385 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -1906,7 +1906,7 @@ void do_versions_ipos_to_animato(Main *main) AnimData *adt= BKE_id_add_animdata(id); - SEQ_BEGIN(ed, seq) { + SEQ_BEGIN (ed, seq) { IpoCurve *icu = (seq->ipo) ? seq->ipo->curve.first : NULL; short adrcode = SEQ_FAC1; diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 7509260d503..14ccd401a30 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -1875,8 +1875,8 @@ void mesh_calc_normals(MVert *mverts, int numVerts, MLoop *mloop, MPoly *mpolys, BLI_array_empty(vertcos); BLI_array_empty(vertnos); - BLI_array_growitems(vertcos, mp->totloop); - BLI_array_growitems(vertnos, mp->totloop); + BLI_array_grow_items(vertcos, mp->totloop); + BLI_array_grow_items(vertnos, mp->totloop); for (j=0; j < mp->totloop; j++) { int vindex = ml[j].v; @@ -1885,7 +1885,7 @@ void mesh_calc_normals(MVert *mverts, int numVerts, MLoop *mloop, MPoly *mpolys, } BLI_array_empty(edgevecbuf); - BLI_array_growitems(edgevecbuf, mp->totloop); + BLI_array_grow_items(edgevecbuf, mp->totloop); accumulate_vertex_normals_poly(vertnos, pnors[i], vertcos, edgevecbuf, mp->totloop); } @@ -2422,8 +2422,8 @@ int mesh_recalcTessellation(CustomData *fdata, #ifdef USE_TESSFACE_SPEEDUP #define ML_TO_MF(i1, i2, i3) \ - BLI_array_growone(mface_to_poly_map); \ - BLI_array_growone(mface); \ + BLI_array_grow_one(mface_to_poly_map); \ + BLI_array_grow_one(mface); \ mface_to_poly_map[mface_index] = poly_index; \ mf= &mface[mface_index]; \ /* set loop indices, transformed to vert indices later */ \ @@ -2441,8 +2441,8 @@ int mesh_recalcTessellation(CustomData *fdata, /* ALMOST IDENTICAL TO DEFINE ABOVE (see EXCEPTION) */ #define ML_TO_MF_QUAD() \ - BLI_array_growone(mface_to_poly_map); \ - BLI_array_growone(mface); \ + BLI_array_grow_one(mface_to_poly_map); \ + BLI_array_grow_one(mface); \ mface_to_poly_map[mface_index] = poly_index; \ mf= &mface[mface_index]; \ /* set loop indices, transformed to vert indices later */ \ @@ -2500,10 +2500,10 @@ int mesh_recalcTessellation(CustomData *fdata, totfilltri = BLI_edgefill(&sf_ctx, FALSE); if (totfilltri) { - BLI_array_growitems(mface_to_poly_map, totfilltri); - BLI_array_growitems(mface, totfilltri); + BLI_array_grow_items(mface_to_poly_map, totfilltri); + BLI_array_grow_items(mface, totfilltri); if (poly_orig_index) { - BLI_array_growitems(mface_orig_index, totfilltri); + BLI_array_grow_items(mface_orig_index, totfilltri); } for (f = sf_ctx.fillfacebase.first; f; f = f->next, mf++) { @@ -2672,7 +2672,7 @@ int mesh_mpoly_to_mface(struct CustomData *fdata, struct CustomData *ldata, k = 0; for (i = 0; itotloop, 3, 4)) { - BLI_array_growone(mface); + BLI_array_grow_one(mface); mf = &mface[k]; mf->mat_nr = mp->mat_nr; diff --git a/source/blender/blenkernel/intern/modifiers_bmesh.c b/source/blender/blenkernel/intern/modifiers_bmesh.c index 573b8a725b3..99bb3468320 100644 --- a/source/blender/blenkernel/intern/modifiers_bmesh.c +++ b/source/blender/blenkernel/intern/modifiers_bmesh.c @@ -117,8 +117,8 @@ void DM_to_bmesh_ex(DerivedMesh *dm, BMesh *bm) BLI_array_empty(verts); BLI_array_empty(edges); - BLI_array_growitems(verts, mp->totloop); - BLI_array_growitems(edges, mp->totloop); + BLI_array_grow_items(verts, mp->totloop); + BLI_array_grow_items(edges, mp->totloop); ml = mloop + mp->loopstart; for (j = 0; j < mp->totloop; j++, ml++) { diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 6d3cce6ccfc..6b44ba976d5 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -625,10 +625,11 @@ void unlink_object(Object *ob) #endif if (sce->ed) { Sequence *seq; - SEQ_BEGIN(sce->ed, seq) - if (seq->scene_camera==ob) { - seq->scene_camera= NULL; + SEQ_BEGIN (sce->ed, seq) { + if (seq->scene_camera == ob) { + seq->scene_camera = NULL; } + } SEQ_END } } diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 470e1a1c529..9291cb90dff 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -259,8 +259,7 @@ void seq_free_editing(Scene *scene) if (ed == NULL) return; - SEQ_BEGIN(ed, seq) - { + SEQ_BEGIN (ed, seq) { seq_free_sequence(scene, seq); } SEQ_END @@ -363,7 +362,7 @@ unsigned int seq_hash_render_data(const SeqRenderData *a) /* ************************* iterator ************************** */ /* *************** (replaces old WHILE_SEQ) ********************* */ -/* **************** use now SEQ_BEGIN() SEQ_END ***************** */ +/* **************** use now SEQ_BEGIN () SEQ_END ***************** */ /* sequence strip iterator: * - builds a full array, recursively into meta strips */ diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 83225163ea3..129d3a3f698 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -314,7 +314,7 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, DerivedMesh *dm, MLoop *ml = mloop + mp->loopstart; BLI_array_empty(fverts); - BLI_array_growitems(fverts, nverts); + BLI_array_grow_items(fverts, nverts); get_face_uv_map_vert(vmap, mpoly, ml, i, fverts); @@ -350,7 +350,7 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, DerivedMesh *dm, CCGFace *f; BLI_array_empty(fverts); - BLI_array_growitems(fverts, nverts); + BLI_array_grow_items(fverts, nverts); get_face_uv_map_vert(vmap, mpoly, ml, i, fverts); ccgSubSurf_syncFace(ss, SET_INT_IN_POINTER(i), nverts, fverts, &f); @@ -583,7 +583,7 @@ static void ss_sync_from_derivedmesh(CCGSubSurf *ss, DerivedMesh *dm, CCGFace *f; BLI_array_empty(fVerts); - BLI_array_growitems(fVerts, mp->totloop); + BLI_array_grow_items(fVerts, mp->totloop); ml = mloop + mp->loopstart; for (j = 0; j < mp->totloop; j++, ml++) { @@ -3150,13 +3150,13 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, *((int *)ccgSubSurf_getFaceUserData(ss, f)) = vertNum; BLI_array_empty(loopidx); - BLI_array_growitems(loopidx, numVerts); + BLI_array_grow_items(loopidx, numVerts); for (s = 0; s < numVerts; s++) { loopidx[s] = loopindex++; } BLI_array_empty(vertidx); - BLI_array_growitems(vertidx, numVerts); + BLI_array_grow_items(vertidx, numVerts); for (s = 0; s < numVerts; s++) { CCGVert *v = ccgSubSurf_getFaceVert(f, s); vertidx[s] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v)); diff --git a/source/blender/blenlib/BLI_array.h b/source/blender/blenlib/BLI_array.h index dac0143b5b6..7069732eeb6 100644 --- a/source/blender/blenlib/BLI_array.h +++ b/source/blender/blenlib/BLI_array.h @@ -44,7 +44,7 @@ * int i; * * for (i=0; i<10; i++) { - * BLI_array_growone(arr); + * BLI_array_grow_one(arr); * arr[i] = something; * } * BLI_array_free(arr); @@ -116,32 +116,32 @@ ) /* grow an array by a specified number of items */ -#define BLI_array_growitems(arr, num) ( \ +#define BLI_array_grow_items(arr, num) ( \ ((void *)(arr) == NULL && (void *)(_##arr##_static) != NULL) ? \ ((arr = (void*)_##arr##_static), (_##arr##_count += num)) : \ _bli_array_grow_items(arr, num) \ ) /* returns length of array */ -#define BLI_array_growone(arr) BLI_array_growitems(arr, 1) +#define BLI_array_grow_one(arr) BLI_array_grow_items(arr, 1) /* appends an item to the array. */ #define BLI_array_append(arr, item) ( \ - (void) BLI_array_growone(arr), \ + (void) BLI_array_grow_one(arr), \ (void) (arr[_##arr##_count - 1] = item) \ ) /* appends an item to the array and returns a pointer to the item in the array. * item is not a pointer, but actual data value.*/ #define BLI_array_append_r(arr, item) ( \ - (void) BLI_array_growone(arr), \ + (void) BLI_array_grow_one(arr), \ (void) (arr[_##arr##_count - 1] = item), \ (&arr[_##arr##_count - 1]) \ ) #define BLI_array_reserve(arr, num) \ - BLI_array_growitems(arr, num), (void)(_##arr##_count -= (num)) + BLI_array_grow_items(arr, num), (void)(_##arr##_count -= (num)) #define BLI_array_free(arr) \ @@ -163,7 +163,7 @@ /* set the count of the array, doesn't actually increase the allocated array * size. don't use this unless you know what you're doing. */ -#define BLI_array_set_length(arr, count) \ +#define BLI_array_length_set(arr, count) \ _##arr##_count = (count) /* only to prevent unused warnings */ diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c index 7c3ad2c62a2..8534621ccf1 100644 --- a/source/blender/blenlib/intern/bpath.c +++ b/source/blender/blenlib/intern/bpath.c @@ -510,7 +510,7 @@ void bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int fla if (scene->ed) { Sequence *seq; - SEQ_BEGIN(scene->ed, seq) { + SEQ_BEGIN (scene->ed, seq) { if (SEQ_HAS_PATH(seq)) { if (ELEM(seq->type, SEQ_MOVIE, SEQ_SOUND)) { rewrite_path_fixed_dirfile(seq->strip->dir, seq->strip->stripdata->name, diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 545ba2f198f..9aa87a86b3e 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4841,7 +4841,7 @@ static void lib_link_scene(FileData *fd, Main *main) } } - SEQ_BEGIN(sce->ed, seq) { + SEQ_BEGIN (sce->ed, seq) { if (seq->ipo) seq->ipo= newlibadr_us(fd, sce->id.lib, seq->ipo); seq->scene_sound = NULL; if (seq->scene) { @@ -4972,7 +4972,7 @@ static void direct_link_scene(FileData *fd, Scene *sce) /* recursive link sequences, lb will be correctly initialized */ link_recurs_seq(fd, &ed->seqbase); - SEQ_BEGIN(ed, seq) { + SEQ_BEGIN (ed, seq) { seq->seq1= newdataadr(fd, seq->seq1); seq->seq2= newdataadr(fd, seq->seq2); seq->seq3= newdataadr(fd, seq->seq3); @@ -8994,7 +8994,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) while (sce) { ed= sce->ed; if (ed) { - SEQ_BEGIN(sce->ed, seq) { + SEQ_BEGIN (sce->ed, seq) { if (seq->type==SEQ_IMAGE || seq->type==SEQ_MOVIE) seq->flag |= SEQ_MAKE_PREMUL; } @@ -10409,7 +10409,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) Sequence *seq; for (sce=main->scene.first; sce; sce=sce->id.next) { - SEQ_BEGIN(sce->ed, seq) { + SEQ_BEGIN (sce->ed, seq) { if (seq->blend_mode == 0) seq->blend_opacity = 100.0f; } @@ -10762,7 +10762,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) while (sce) { ed= sce->ed; if (ed) { - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (seq->strip && seq->strip->proxy) { seq->strip->proxy->quality =90; } @@ -10831,7 +10831,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) for (scene = main->scene.first; scene; scene = scene->id.next) { if (scene->ed && scene->ed->seqbasep) { - SEQ_BEGIN(scene->ed, seq) { + SEQ_BEGIN (scene->ed, seq) { if (seq->type == SEQ_HD_SOUND) { char str[FILE_MAX]; BLI_join_dirfile(str, sizeof(str), seq->strip->dir, seq->strip->stripdata->name); @@ -11801,7 +11801,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) if ((sce->r.ffcodecdata.flags & FFMPEG_MULTIPLEX_AUDIO) == 0) sce->r.ffcodecdata.audio_codec = 0x0; // CODEC_ID_NONE - SEQ_BEGIN(sce->ed, seq) { + SEQ_BEGIN (sce->ed, seq) { seq->volume = 1.0f; } SEQ_END @@ -12070,7 +12070,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) for (scene= main->scene.first; scene; scene=scene->id.next) { if (scene) { Sequence *seq; - SEQ_BEGIN(scene->ed, seq) { + SEQ_BEGIN (scene->ed, seq) { if (seq->sat==0.0f) { seq->sat= 1.0f; } @@ -12545,7 +12545,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) for (scene=main->scene.first; scene; scene=scene->id.next) { scene->r.ffcodecdata.audio_channels = 2; scene->audio.volume = 1.0f; - SEQ_BEGIN(scene->ed, seq) { + SEQ_BEGIN (scene->ed, seq) { seq->pitch = 1.0f; } SEQ_END @@ -14220,7 +14220,7 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce) if (sce->ed) { Sequence *seq; - SEQ_BEGIN(sce->ed, seq) { + SEQ_BEGIN (sce->ed, seq) { if (seq->scene) expand_doit(fd, mainvar, seq->scene); if (seq->scene_camera) expand_doit(fd, mainvar, seq->scene_camera); if (seq->sound) expand_doit(fd, mainvar, seq->sound); diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index ab620e983d5..42736b6b787 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -2108,13 +2108,13 @@ static void write_scenes(WriteData *wd, ListBase *scebase) /* reset write flags too */ - SEQ_BEGIN(ed, seq) { + SEQ_BEGIN (ed, seq) { if (seq->strip) seq->strip->done= 0; writestruct(wd, DATA, "Sequence", 1, seq); } SEQ_END - SEQ_BEGIN(ed, seq) { + SEQ_BEGIN (ed, seq) { if (seq->strip && seq->strip->done==0) { /* write strip with 'done' at 0 because readfile */ diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c index cbdd5dd6983..c2d5d93cbc3 100644 --- a/source/blender/bmesh/intern/bmesh_construct.c +++ b/source/blender/bmesh/intern/bmesh_construct.c @@ -871,8 +871,8 @@ BMesh *BM_mesh_copy(BMesh *bm_old) BLI_array_empty(loops); BLI_array_empty(edges); - BLI_array_growitems(loops, f->len); - BLI_array_growitems(edges, f->len); + BLI_array_grow_items(loops, f->len); + BLI_array_grow_items(edges, f->len); l = BM_iter_new(&liter, bm_old, BM_LOOPS_OF_FACE, f); for (j = 0; j < f->len; j++, l = BM_iter_step(&liter)) { diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c index f72efe8ab5f..351fb8e941b 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.c +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c @@ -282,8 +282,8 @@ void BM_mesh_bm_from_me(BMesh *bm, Mesh *me, int set_key, int act_key_nr) BLI_array_empty(fedges); BLI_array_empty(verts); - BLI_array_growitems(fedges, mpoly->totloop); - BLI_array_growitems(verts, mpoly->totloop); + BLI_array_grow_items(fedges, mpoly->totloop); + BLI_array_grow_items(verts, mpoly->totloop); for (j = 0; j < mpoly->totloop; j++) { ml = &me->mloop[mpoly->loopstart + j]; diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c index a5e761af783..5f3836cc413 100644 --- a/source/blender/bmesh/intern/bmesh_mods.c +++ b/source/blender/bmesh/intern/bmesh_mods.c @@ -771,7 +771,7 @@ int BM_face_validate(BMFace *face, FILE *err) fflush(err); } - BLI_array_growitems(verts, face->len); + BLI_array_grow_items(verts, face->len); BM_ITER_ELEM_INDEX (l, &iter, face, BM_LOOPS_OF_FACE, i) { verts[i] = l->v; if (l->e->v1 == l->e->v2) { diff --git a/source/blender/bmesh/operators/bmo_bevel.c b/source/blender/bmesh/operators/bmo_bevel.c index 46dd7606940..b6b54b82f3d 100644 --- a/source/blender/bmesh/operators/bmo_bevel.c +++ b/source/blender/bmesh/operators/bmo_bevel.c @@ -242,7 +242,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) if (!BMO_elem_flag_test(bm, e, EDGE_OLD)) { BM_elem_index_set(e, BLI_array_count(etags)); /* set_dirty! */ - BLI_array_growone(etags); + BLI_array_grow_one(etags); BMO_elem_flag_enable(bm, e, EDGE_OLD); } @@ -256,11 +256,11 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) BM_ITER_ELEM (l2, &liter2, l->f, BM_LOOPS_OF_FACE) { BM_elem_index_set(l2, BLI_array_count(tags)); /* set_loop */ - BLI_array_growone(tags); + BLI_array_grow_one(tags); if (!BMO_elem_flag_test(bm, l2->e, EDGE_OLD)) { BM_elem_index_set(l2->e, BLI_array_count(etags)); /* set_dirty! */ - BLI_array_growone(etags); + BLI_array_grow_one(etags); BMO_elem_flag_enable(bm, l2->e, EDGE_OLD); } @@ -291,7 +291,7 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) } if (!BLI_smallhash_haskey(&hash, (intptr_t)e)) { - BLI_array_growone(etags); + BLI_array_grow_one(etags); BM_elem_index_set(e, BLI_array_count(etags) - 1); /* set_dirty! */ BLI_smallhash_insert(&hash, (intptr_t)e, NULL); BMO_elem_flag_enable(bm, e, EDGE_OLD); @@ -309,11 +309,11 @@ void bmo_bevel_exec(BMesh *bm, BMOperator *op) /* create tags for all loops in l-> */ BM_ITER_ELEM (l2, &liter2, l->f, BM_LOOPS_OF_FACE) { - BLI_array_growone(tags); + BLI_array_grow_one(tags); BM_elem_index_set(l2, BLI_array_count(tags) - 1); /* set_loop */ if (!BLI_smallhash_haskey(&hash, (intptr_t)l2->e)) { - BLI_array_growone(etags); + BLI_array_grow_one(etags); BM_elem_index_set(l2->e, BLI_array_count(etags) - 1); /* set_dirty! */ BLI_smallhash_insert(&hash, (intptr_t)l2->e, NULL); BMO_elem_flag_enable(bm, l2->e, EDGE_OLD); diff --git a/source/blender/bmesh/operators/bmo_connect.c b/source/blender/bmesh/operators/bmo_connect.c index 3c1f10be4c4..b8abe112c4d 100644 --- a/source/blender/bmesh/operators/bmo_connect.c +++ b/source/blender/bmesh/operators/bmo_connect.c @@ -71,10 +71,10 @@ void bmo_connectverts_exec(BMesh *bm, BMOperator *op) } if (lastl != l->prev && lastl != l->next) { - BLI_array_growone(loops); + BLI_array_grow_one(loops); loops[BLI_array_count(loops) - 1] = lastl; - BLI_array_growone(loops); + BLI_array_grow_one(loops); loops[BLI_array_count(loops) - 1] = l; } @@ -87,10 +87,10 @@ void bmo_connectverts_exec(BMesh *bm, BMOperator *op) } if (BLI_array_count(loops) > 2) { - BLI_array_growone(loops); + BLI_array_grow_one(loops); loops[BLI_array_count(loops) - 1] = loops[BLI_array_count(loops) - 2]; - BLI_array_growone(loops); + BLI_array_grow_one(loops); loops[BLI_array_count(loops) - 1] = loops[0]; } @@ -101,10 +101,10 @@ void bmo_connectverts_exec(BMesh *bm, BMOperator *op) continue; } - BLI_array_growone(verts); + BLI_array_grow_one(verts); verts[BLI_array_count(verts) - 1] = loops[i * 2]->v; - BLI_array_growone(verts); + BLI_array_grow_one(verts); verts[BLI_array_count(verts) - 1] = loops[i * 2 + 1]->v; } diff --git a/source/blender/bmesh/operators/bmo_create.c b/source/blender/bmesh/operators/bmo_create.c index f2ba110b43d..6f08ab421f3 100644 --- a/source/blender/bmesh/operators/bmo_create.c +++ b/source/blender/bmesh/operators/bmo_create.c @@ -766,7 +766,7 @@ static EPath *edge_find_shortest_path(BMesh *bm, BMOperator *op, BMEdge *edge, E i = 0; BLI_array_empty(verts); for (i = 0, node = path->nodes.first; node; node = node->next, i++) { - BLI_array_growone(verts); + BLI_array_grow_one(verts); verts[i] = node->v; } @@ -999,7 +999,7 @@ void bmo_edgenet_fill_exec(BMesh *bm, BMOperator *op) } edata[BM_elem_index_get(e)].ftag++; - BLI_array_growone(edges); + BLI_array_grow_one(edges); edges[i++] = e; BLI_array_append(verts, node->v); @@ -1009,7 +1009,7 @@ void bmo_edgenet_fill_exec(BMesh *bm, BMOperator *op) vote_on_winding(edge, path->nodes.last, winding); } - BLI_array_growone(edges); + BLI_array_grow_one(edges); edges[i++] = edge; edata[BM_elem_index_get(edge)].ftag++; @@ -1157,7 +1157,7 @@ void bmo_edgenet_prepare(BMesh *bm, BMOperator *op) i = 0; while (e) { BMO_elem_flag_enable(bm, e, EDGE_VIS); - BLI_array_growone(edges); + BLI_array_grow_one(edges); edges[i] = e; e = edge_next(bm, e); @@ -1166,11 +1166,11 @@ void bmo_edgenet_prepare(BMesh *bm, BMOperator *op) if (!count) { edges1 = edges; - BLI_array_set_length(edges1, BLI_array_count(edges)); + BLI_array_length_set(edges1, BLI_array_count(edges)); } else { edges2 = edges; - BLI_array_set_length(edges2, BLI_array_count(edges)); + BLI_array_length_set(edges2, BLI_array_count(edges)); } BLI_array_empty(edges); diff --git a/source/blender/bmesh/operators/bmo_dupe.c b/source/blender/bmesh/operators/bmo_dupe.c index 36d446a0a8c..0659a42c26d 100644 --- a/source/blender/bmesh/operators/bmo_dupe.c +++ b/source/blender/bmesh/operators/bmo_dupe.c @@ -277,8 +277,8 @@ static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target) BLI_array_empty(vtar); BLI_array_empty(edar); - BLI_array_growitems(vtar, f->len); - BLI_array_growitems(edar, f->len); + BLI_array_grow_items(vtar, f->len); + BLI_array_grow_items(edar, f->len); copy_face(op, source, f, target, vtar, edar, vhash, ehash); BMO_elem_flag_enable(source, f, DUPE_DONE); diff --git a/source/blender/bmesh/operators/bmo_extrude.c b/source/blender/bmesh/operators/bmo_extrude.c index 19e2dd85b0e..4fced09c588 100644 --- a/source/blender/bmesh/operators/bmo_extrude.c +++ b/source/blender/bmesh/operators/bmo_extrude.c @@ -58,7 +58,7 @@ void bmo_extrude_face_indiv_exec(BMesh *bm, BMOperator *op) BMO_ITER (f, &siter, bm, op, "faces", BM_FACE) { BLI_array_empty(edges); - BLI_array_growitems(edges, f->len); + BLI_array_grow_items(edges, f->len); i = 0; firstv = lastv = NULL; @@ -573,12 +573,12 @@ static void solidify_add_thickness(BMesh *bm, const float dist) continue; } - BLI_array_growitems(verts, f->len); + BLI_array_grow_items(verts, f->len); BM_ITER_ELEM_INDEX (l, &loopIter, f, BM_LOOPS_OF_FACE, i) { verts[i] = l->v->co; } - BLI_array_growitems(face_angles, f->len); + BLI_array_grow_items(face_angles, f->len); angle_poly_v3(face_angles, (const float **)verts, f->len); i = 0; diff --git a/source/blender/bmesh/operators/bmo_join_triangles.c b/source/blender/bmesh/operators/bmo_join_triangles.c index 582039fc1a2..d780e309118 100644 --- a/source/blender/bmesh/operators/bmo_join_triangles.c +++ b/source/blender/bmesh/operators/bmo_join_triangles.c @@ -293,7 +293,7 @@ void bmo_join_triangles_exec(BMesh *bm, BMOperator *op) measure = measure_facepair(v1, v2, v3, v4, limit); if (measure < limit) { - BLI_array_growone(jedges); + BLI_array_grow_one(jedges); jedges[i].e = e; jedges[i].weight = measure; diff --git a/source/blender/bmesh/operators/bmo_mirror.c b/source/blender/bmesh/operators/bmo_mirror.c index cf1669d441e..53c51dfd483 100644 --- a/source/blender/bmesh/operators/bmo_mirror.c +++ b/source/blender/bmesh/operators/bmo_mirror.c @@ -71,7 +71,7 @@ void bmo_mirror_exec(BMesh *bm, BMOperator *op) i = 0; /* v2 = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); */ /* UNUSED */ BMO_ITER (v, &siter, bm, &dupeop, "newout", BM_VERT) { - BLI_array_growone(vmap); + BLI_array_grow_one(vmap); vmap[i] = v; /* v2 = BM_iter_step(&iter); */ /* UNUSED */ i++; diff --git a/source/blender/bmesh/operators/bmo_removedoubles.c b/source/blender/bmesh/operators/bmo_removedoubles.c index 149f2537a12..70dcc6fa3ae 100644 --- a/source/blender/bmesh/operators/bmo_removedoubles.c +++ b/source/blender/bmesh/operators/bmo_removedoubles.c @@ -191,8 +191,8 @@ void bmo_weldverts_exec(BMesh *bm, BMOperator *op) continue; } - BLI_array_growone(edges); - BLI_array_growone(loops); + BLI_array_grow_one(edges); + BLI_array_grow_one(loops); edges[a] = e2; loops[a] = l; @@ -393,7 +393,7 @@ void bmo_collapse_exec(BMesh *bm, BMOperator *op) INIT_MINMAX(min, max); for (tot = 0; e; tot++, e = BMW_step(&walker)) { - BLI_array_growone(edges); + BLI_array_grow_one(edges); edges[tot] = e; DO_MINMAX(e->v1->co, min, max); @@ -454,7 +454,7 @@ static void bmo_collapsecon_do_layer(BMesh *bm, BMOperator *op, int layer) CustomData_data_initminmax(type, &min, &max); for (tot = 0; l2; tot++, l2 = BMW_step(&walker)) { - BLI_array_growone(blocks); + BLI_array_grow_one(blocks); blocks[tot] = CustomData_bmesh_get_layer_n(&bm->ldata, l2->head.data, layer); CustomData_data_dominmax(type, blocks[tot], &min, &max); } @@ -501,7 +501,7 @@ void bmesh_finddoubles_common(BMesh *bm, BMOperator *op, BMOperator *optarget, c i = 0; BMO_ITER (v, &oiter, bm, op, "verts", BM_VERT) { - BLI_array_growone(verts); + BLI_array_grow_one(verts); verts[i++] = v; } diff --git a/source/blender/bmesh/operators/bmo_subdivide.c b/source/blender/bmesh/operators/bmo_subdivide.c index 7da02a594d5..d96d0f6c74d 100644 --- a/source/blender/bmesh/operators/bmo_subdivide.c +++ b/source/blender/bmesh/operators/bmo_subdivide.c @@ -778,8 +778,8 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) BLI_array_empty(edges); BLI_array_empty(verts); - BLI_array_growitems(edges, face->len); - BLI_array_growitems(verts, face->len); + BLI_array_grow_items(edges, face->len); + BLI_array_grow_items(verts, face->len); matched = 0; @@ -825,7 +825,7 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) } } if (matched) { - BLI_array_growone(facedata); + BLI_array_grow_one(facedata); b = BLI_array_count(facedata) - 1; facedata[b].pat = pat; facedata[b].start = verts[i]; @@ -861,7 +861,7 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) } } if (matched) { - BLI_array_growone(facedata); + BLI_array_grow_one(facedata); j = BLI_array_count(facedata) - 1; BMO_elem_flag_enable(bm, face, SUBD_SPLIT); @@ -877,7 +877,7 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) } if (!matched && totesel) { - BLI_array_growone(facedata); + BLI_array_grow_one(facedata); j = BLI_array_count(facedata) - 1; BMO_elem_flag_enable(bm, face, SUBD_SPLIT); @@ -918,7 +918,7 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) /* for case of two edges, connecting them shouldn't be too hard */ BM_ITER_ELEM (l, &liter, face, BM_LOOPS_OF_FACE) { - BLI_array_growone(loops); + BLI_array_grow_one(loops); loops[BLI_array_count(loops) - 1] = l; } @@ -951,10 +951,10 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) b += numcuts - 1; for (j = 0; j < numcuts; j++) { - BLI_array_growone(splits); + BLI_array_grow_one(splits); splits[BLI_array_count(splits) - 1] = loops[a]; - BLI_array_growone(splits); + BLI_array_grow_one(splits); splits[BLI_array_count(splits) - 1] = loops[b]; b = (b - 1) % vlen; @@ -989,7 +989,7 @@ void bmo_esubd_exec(BMesh *bm, BMOperator *op) } for (j = 0; j < face->len; j++) { - BLI_array_growone(verts); + BLI_array_grow_one(verts); } j = 0; diff --git a/source/blender/bmesh/operators/bmo_triangulate.c b/source/blender/bmesh/operators/bmo_triangulate.c index 7fd6cf6769c..9632a79b7dd 100644 --- a/source/blender/bmesh/operators/bmo_triangulate.c +++ b/source/blender/bmesh/operators/bmo_triangulate.c @@ -59,8 +59,8 @@ void bmo_triangulate_exec(BMesh *bm, BMOperator *op) BLI_array_empty(projectverts); BLI_array_empty(newfaces); - BLI_array_growitems(projectverts, face->len * 3); - BLI_array_growitems(newfaces, face->len); + BLI_array_grow_items(projectverts, face->len * 3); + BLI_array_grow_items(newfaces, face->len); BM_face_triangulate(bm, face, projectverts, EDGE_NEW, FACE_NEW, newfaces, use_beauty); diff --git a/source/blender/bmesh/operators/bmo_utils.c b/source/blender/bmesh/operators/bmo_utils.c index 3cfa70f6e6c..8409c5b76b8 100644 --- a/source/blender/bmesh/operators/bmo_utils.c +++ b/source/blender/bmesh/operators/bmo_utils.c @@ -348,7 +348,7 @@ void bmo_righthandfaces_exec(BMesh *bm, BMOperator *op) * stack (if we use simple function recursion, we'd end up overloading * the stack on large meshes). */ - BLI_array_growone(fstack); + BLI_array_grow_one(fstack); fstack[0] = startf; BMO_elem_flag_enable(bm, startf, FACE_VIS); @@ -382,7 +382,7 @@ void bmo_righthandfaces_exec(BMesh *bm, BMOperator *op) } if (i == maxi) { - BLI_array_growone(fstack); + BLI_array_grow_one(fstack); maxi++; } @@ -420,7 +420,7 @@ void bmo_vertexsmooth_exec(BMesh *bm, BMOperator *op) i = 0; BMO_ITER (v, &siter, bm, op, "verts", BM_VERT) { - BLI_array_growone(cos); + BLI_array_grow_one(cos); co = cos[i]; j = 0; @@ -1035,7 +1035,7 @@ void bmo_face_reverseuvs_exec(BMesh *bm, BMOperator *op) int i; BLI_array_empty(uvs); - BLI_array_growitems(uvs, fs->len); + BLI_array_grow_items(uvs, fs->len); BM_ITER_ELEM_INDEX (lf, &l_iter, fs, BM_LOOPS_OF_FACE, i) { MLoopUV *luv = CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPUV); @@ -1141,7 +1141,7 @@ void bmo_face_reversecolors_exec(BMesh *bm, BMOperator *op) int i; BLI_array_empty(cols); - BLI_array_growitems(cols, fs->len); + BLI_array_grow_items(cols, fs->len); BM_ITER_ELEM_INDEX (lf, &l_iter, fs, BM_LOOPS_OF_FACE, i) { cols[i] = *((MLoopCol *)CustomData_bmesh_get(&bm->ldata, lf->head.data, CD_MLOOPCOL)); diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 47972ca2c6f..dcaa4073bae 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -1353,8 +1353,7 @@ static int delete_key_v3d_exec (bContext *C, wmOperator *op) float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap // XXX more comprehensive tests will be needed - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { ID *id= (ID *)ob; FCurve *fcu, *fcn; short success= 0; diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index c529ad66d73..cd698bbf09f 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -755,8 +755,7 @@ static int pose_visual_transform_apply_exec (bContext *C, wmOperator *UNUSED(op) * * TODO, loop over children before parents if multiple bones * at once are to be predictable*/ - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { float delta_mat[4][4]; /* chan_mat already contains the delta transform from rest pose to pose-mode pose @@ -922,7 +921,7 @@ int join_armature_exec(bContext *C, wmOperator *UNUSED(op)) pose= ob->pose; ob->mode &= ~OB_MODE_POSE; - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { if ((base->object->type==OB_ARMATURE) && (base->object!=ob)) { bArmature *curarm= base->object->data; @@ -1193,7 +1192,7 @@ static int separate_armature_exec (bContext *C, wmOperator *UNUSED(op)) /* 1) only edit-base selected */ // TODO: use context iterators for this? - CTX_DATA_BEGIN(C, Base *, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { if (base->object==obedit) base->flag |= 1; else base->flag &= ~1; } @@ -2816,8 +2815,7 @@ static int armature_fill_bones_exec (bContext *C, wmOperator *op) return OPERATOR_CANCELLED; /* loop over all bones, and only consider if visible */ - CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) - { + CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) { if (!(ebone->flag & BONE_CONNECTED) && (ebone->flag & BONE_ROOTSEL)) fill_add_joint(ebone, 0, &points); if (ebone->flag & BONE_TIPSEL) @@ -3530,8 +3528,7 @@ static int armature_subdivide_exec(bContext *C, wmOperator *op) /* loop over all editable bones */ // XXX the old code did this in reverse order though! - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) - { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { for (i=numcuts+1; i>1; i--) { /* compute cut ratio first */ float cutratio= 1.0f / (float)i; @@ -3819,7 +3816,7 @@ static int armature_parent_set_exec(bContext *C, wmOperator *op) */ /* parent selected bones to the active one */ - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { if (ELEM(ebone, actbone, actmirb) == 0) { if (ebone->flag & BONE_SELECTED) bone_connect_to_new_parent(arm->edbo, ebone, actbone, val); @@ -3844,7 +3841,7 @@ static int armature_parent_set_invoke(bContext *C, wmOperator *UNUSED(op), wmEve uiLayout *layout= uiPupMenuLayout(pup); int allchildbones = 0; - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { if (ebone != actbone) { if (ebone->parent != actbone) allchildbones= 1; } @@ -3903,7 +3900,7 @@ static int armature_parent_clear_exec(bContext *C, wmOperator *op) bArmature *arm= (bArmature *)ob->data; int val = RNA_enum_get(op->ptr, "type"); - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { editbone_clear_parent(ebone, val); } CTX_DATA_END; @@ -3939,7 +3936,7 @@ void ARMATURE_OT_parent_clear(wmOperatorType *ot) static int armature_select_inverse_exec(bContext *C, wmOperator *UNUSED(op)) { /* Set the flags */ - CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) { /* ignore bone if selection can't change */ if ((ebone->flag & BONE_UNSELECTABLE) == 0) { /* select bone */ @@ -3981,7 +3978,7 @@ static int armature_de_select_all_exec(bContext *C, wmOperator *op) } /* Set the flags */ - CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, visible_bones) { /* ignore bone if selection can't change */ if ((ebone->flag & BONE_UNSELECTABLE) == 0) { switch (action) { @@ -4215,7 +4212,7 @@ static int armature_align_bones_exec(bContext *C, wmOperator *op) */ /* align selected bones to the active one */ - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { if (ELEM(ebone, actbone, actmirb) == 0) { if (ebone->flag & BONE_SELECTED) bone_align_to_bone(arm->edbo, ebone, actbone); @@ -4904,8 +4901,7 @@ static int pose_clear_transform_generic_exec(bContext *C, wmOperator *op, } /* only clear relevant transforms for selected bones */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { /* run provided clearing function */ clear_func(pchan); @@ -5046,7 +5042,7 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op) } /* Set the flags */ - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { /* select pchan only if selectable, but deselect works always */ switch (action) { case SEL_SELECT: @@ -5435,8 +5431,7 @@ static int armature_flip_names_exec (bContext *C, wmOperator *UNUSED(op)) arm= ob->data; /* loop through selected bones, auto-naming them */ - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) - { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { flip_side_name(newname, ebone->name, TRUE); // 1 = do strip off number extensions ED_armature_bone_rename(arm, ebone->name, newname); } @@ -5480,8 +5475,7 @@ static int armature_autoside_names_exec (bContext *C, wmOperator *op) arm= ob->data; /* loop through selected bones, auto-naming them */ - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) - { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { BLI_strncpy(newname, ebone->name, sizeof(newname)); if (bone_autoside_name(newname, 1, axis, ebone->head[axis], ebone->tail[axis])) ED_armature_bone_rename(arm, ebone->name, newname); diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c index 7e4d76cb794..77b035024a9 100644 --- a/source/blender/editors/armature/editarmature_retarget.c +++ b/source/blender/editors/armature/editarmature_retarget.c @@ -2555,7 +2555,7 @@ void BIF_retargetArmature(bContext *C) printf("Reeb Graph created\n"); - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { Object *ob = base->object; if (ob->type==OB_ARMATURE) { diff --git a/source/blender/editors/armature/poseUtils.c b/source/blender/editors/armature/poseUtils.c index 1a9ff73e5dc..88d219137f7 100644 --- a/source/blender/editors/armature/poseUtils.c +++ b/source/blender/editors/armature/poseUtils.c @@ -131,8 +131,7 @@ void poseAnim_mapping_get (bContext *C, ListBase *pfLinks, Object *ob, bAction * /* for each Pose-Channel which gets affected, get the F-Curves for that channel * and set the relevant transform flags... */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { fcurves_to_pchan_links_get(pfLinks, ob, act, pchan); } CTX_DATA_END; @@ -141,8 +140,7 @@ void poseAnim_mapping_get (bContext *C, ListBase *pfLinks, Object *ob, bAction * * i.e. if nothing selected, do whole pose */ if (pfLinks->first == NULL) { - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, visible_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, visible_pose_bones) { fcurves_to_pchan_links_get(pfLinks, ob, act, pchan); } CTX_DATA_END; diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index 043383d79a3..f54cdb330e3 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -216,8 +216,7 @@ static int pose_calculate_paths_exec (bContext *C, wmOperator *op) return OPERATOR_CANCELLED; /* set up path data for bones being calculated */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { /* verify makes sure that the selected bone has a bone with the appropriate settings */ animviz_verify_motionpaths(op->reports, scene, ob, pchan); } @@ -324,8 +323,7 @@ static int pose_select_constraint_target_exec(bContext *C, wmOperator *UNUSED(op bConstraint *con; int found= 0; - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { if (pchan->bone->flag & BONE_SELECTED) { for (con= pchan->constraints.first; con; con= con->next) { bConstraintTypeInfo *cti= constraint_get_typeinfo(con); @@ -387,8 +385,7 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) int add_to_sel = RNA_boolean_get(op->ptr, "extend"); int found= 0; - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { curbone= pchan->bone; if ((curbone->flag & BONE_UNSELECTABLE)==0) { @@ -505,8 +502,7 @@ static short pose_select_same_group (bContext *C, Object *ob, short extend) */ group_flags= MEM_callocN(numGroups+1, "pose_select_same_group"); - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { /* keep track of group as group to use later? */ if (pchan->bone->flag & BONE_SELECTED) { group_flags[pchan->agrp_index] = 1; @@ -522,8 +518,7 @@ static short pose_select_same_group (bContext *C, Object *ob, short extend) /* small optimization: only loop through bones a second time if there are any groups tagged */ if (tagged) { /* only if group matches (and is not selected or current bone) */ - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) { /* check if the group used by this bone is counted */ if (group_flags[pchan->agrp_index]) { @@ -552,8 +547,7 @@ static short pose_select_same_layer (bContext *C, Object *ob, short extend) return 0; /* figure out what bones are selected */ - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { /* keep track of layers to use later? */ if (pchan->bone->flag & BONE_SELECTED) layers |= pchan->bone->layer; @@ -567,8 +561,7 @@ static short pose_select_same_layer (bContext *C, Object *ob, short extend) return 0; /* select bones that are on same layers as layers flag */ - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { /* if bone is on a suitable layer, and the bone can have its selection changed, select it */ if ((layers & pchan->bone->layer) && (pchan->bone->flag & BONE_UNSELECTABLE)==0) { pchan->bone->flag |= BONE_SELECTED; @@ -598,8 +591,7 @@ static int pose_select_same_keyingset(bContext *C, Object *ob, short extend) /* if not extending selection, deselect all selected first */ if (extend == 0) { - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) pchan->bone->flag &= ~BONE_SELECTED; } @@ -1403,8 +1395,7 @@ static int pose_group_assign_exec (bContext *C, wmOperator *op) pose_add_group(ob); /* add selected bones to group then */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { pchan->agrp_index= pose->active_group; done= 1; } @@ -1457,8 +1448,7 @@ static int pose_group_unassign_exec (bContext *C, wmOperator *UNUSED(op)) return OPERATOR_CANCELLED; /* find selected bones to remove from all bone groups */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { if (pchan->agrp_index) { pchan->agrp_index= 0; done= 1; @@ -1660,8 +1650,7 @@ static void pose_group_select(bContext *C, Object *ob, int select) { bPose *pose= ob->pose; - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, visible_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, visible_pose_bones) { if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) { if (select) { if (pchan->agrp_index == pose->active_group) @@ -1765,8 +1754,7 @@ static int pose_flip_names_exec (bContext *C, wmOperator *UNUSED(op)) arm= ob->data; /* loop through selected bones, auto-naming them */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { char newname[MAXBONENAME]; flip_side_name(newname, pchan->name, TRUE); ED_armature_bone_rename(arm, pchan->name, newname); @@ -1812,8 +1800,7 @@ static int pose_autoside_names_exec (bContext *C, wmOperator *op) arm= ob->data; /* loop through selected bones, auto-naming them */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { BLI_strncpy(newname, pchan->name, sizeof(newname)); if (bone_autoside_name(newname, 1, axis, pchan->bone->head[axis], pchan->bone->tail[axis])) ED_armature_bone_rename(arm, pchan->name, newname); @@ -1862,8 +1849,7 @@ static int pose_bone_rotmode_exec (bContext *C, wmOperator *op) int mode = RNA_enum_get(op->ptr, "type"); /* set rotation mode of selected bones */ - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { pchan->rotmode = mode; } CTX_DATA_END; @@ -2046,8 +2032,7 @@ static int pose_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt) int layers[32]= {0}; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ /* get layers that are active already */ - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { short bit; /* loop over the bits for this pchan's layers, adding layers where they're needed */ @@ -2080,8 +2065,7 @@ static int pose_bone_layers_exec (bContext *C, wmOperator *op) RNA_boolean_get_array(op->ptr, "layers", layers); /* set layers of pchans based on the values set in the operator props */ - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { /* get pointer for pchan, and write flags this way */ RNA_pointer_create((ID *)ob->data, &RNA_Bone, pchan->bone, &ptr); RNA_boolean_set_array(&ptr, "layers", layers); @@ -2121,8 +2105,7 @@ static int armature_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *ev int layers[32]= {0}; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ /* get layers that are active already */ - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) - { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { short bit; /* loop over the bits for this pchan's layers, adding layers where they're needed */ @@ -2152,8 +2135,7 @@ static int armature_bone_layers_exec (bContext *C, wmOperator *op) RNA_boolean_get_array(op->ptr, "layers", layers); /* set layers of pchans based on the values set in the operator props */ - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) - { + CTX_DATA_BEGIN (C, EditBone *, ebone, selected_editable_bones) { /* get pointer for pchan, and write flags this way */ RNA_pointer_create((ID *)arm, &RNA_EditBone, ebone, &ptr); RNA_boolean_set_array(&ptr, "layers", layers); @@ -2195,8 +2177,7 @@ static int pose_flip_quats_exec (bContext *C, wmOperator *UNUSED(op)) KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_LOC_ROT_SCALE_ID); /* loop through all selected pchans, flipping and keying (as needed) */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { /* only if bone is using quaternion rotation */ if (pchan->rotmode == ROT_MODE_QUAT) { /* quaternions have 720 degree range */ diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 0b21e514f0e..d339af39b22 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -6071,7 +6071,7 @@ int join_curve_exec(bContext *C, wmOperator *UNUSED(op)) /* trasnform all selected curves inverse in obact */ invert_m4_m4(imat, ob->obmat); - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { if (base->object->type==ob->type) { if (base->object != ob) { diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index c366de6fa43..303ca89b168 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -1611,7 +1611,7 @@ static int gpencil_draw_exec (bContext *C, wmOperator *op) /* loop over the stroke RNA elements recorded (i.e. progress of mouse movement), * setting the relevant values in context at each step, then applying */ - RNA_BEGIN(op->ptr, itemptr, "stroke") { + RNA_BEGIN (op->ptr, itemptr, "stroke") { float mousef[2]; //printf("\t\tGP - stroke elem\n"); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index e64446be84b..42005c0888c 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -781,7 +781,7 @@ static void ui_add_smart_controller(bContext *C, uiBut *from, uiBut *to) act_to = (bActuator *)(to->poin); /* (1) get the object */ - CTX_DATA_BEGIN(C, Object *, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { for (sens_iter = ob_iter->sensors.first; sens_iter; sens_iter = sens_iter->next) { if (&(sens_iter->links) == sens_from_links) { ob = ob_iter; diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 67e295503c2..31bc9497ab5 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -1265,7 +1265,7 @@ static void rna_search_cb(const struct bContext *C, void *arg_but, const char *s const int skip_filter = !but->changed; /* build a temporary list of relevant items first */ - RNA_PROP_BEGIN(&but->rnasearchpoin, itemptr, but->rnasearchprop) { + RNA_PROP_BEGIN (&but->rnasearchpoin, itemptr, but->rnasearchprop) { if (flag & PROP_ID_SELF_CHECK) if (itemptr.data == but->rnapoin.id.data) continue; @@ -1333,7 +1333,7 @@ static void search_id_collection(StructRNA *ptype, PointerRNA *ptr, PropertyRNA *prop = NULL; - RNA_STRUCT_BEGIN(ptr, iprop) { + RNA_STRUCT_BEGIN (ptr, iprop) { /* if it's a collection and has same pointer type, we've got it */ if (RNA_property_type(iprop) == PROP_COLLECTION) { srna = RNA_property_pointer_type(ptr, iprop); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index d0f760d16fb..bafd85e9451 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -2362,7 +2362,7 @@ void uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, const char * if (ptr->data && prop) { /* create list items */ - RNA_PROP_BEGIN(ptr, itemptr, prop) { + RNA_PROP_BEGIN (ptr, itemptr, prop) { /* create button */ if (!(i % 9)) row = uiLayoutRow(col, 0); @@ -2384,7 +2384,7 @@ void uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, const char * if (ptr->data && prop) { /* create list items */ - RNA_PROP_BEGIN(ptr, itemptr, prop) { + RNA_PROP_BEGIN (ptr, itemptr, prop) { found = (activei == i); if (found) { @@ -2446,7 +2446,7 @@ void uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, const char * if (ptr->data && prop) { /* create list items */ - RNA_PROP_BEGIN(ptr, itemptr, prop) { + RNA_PROP_BEGIN (ptr, itemptr, prop) { if (i >= pa->list_scroll && i < pa->list_scroll + items) list_item_row(C, col, ptr, &itemptr, i, rnaicon, activeptr, activeprop, prop_list); @@ -2703,7 +2703,7 @@ static void template_keymap_item_properties(uiLayout *layout, const char *title, flow = uiLayoutColumnFlow(layout, 2, 0); - RNA_STRUCT_BEGIN(ptr, prop) { + RNA_STRUCT_BEGIN (ptr, prop) { int flag = RNA_property_flag(prop); if (flag & PROP_HIDDEN) diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index c903040a6b9..9220491a60c 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -139,7 +139,7 @@ int uiDefAutoButsRNA(uiLayout *layout, PointerRNA *ptr, int (*check_prop)(Pointe assert(ELEM3(label_align, '\0', 'H', 'V')); - RNA_STRUCT_BEGIN(ptr, prop) { + RNA_STRUCT_BEGIN (ptr, prop) { flag = RNA_property_flag(prop); if (flag & PROP_HIDDEN || (check_prop && check_prop(ptr, prop) == FALSE)) continue; diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c index 12174d5b9fa..beb5345ca9b 100644 --- a/source/blender/editors/mesh/editmesh_loopcut.c +++ b/source/blender/editors/mesh/editmesh_loopcut.c @@ -240,7 +240,7 @@ static void edgering_sel(tringselOpData *lcd, int previewlines, int select) edgering_find_order(lasteed, eed, lastv1, v); lastv1 = v[0][0]; - BLI_array_growitems(edges, previewlines); + BLI_array_grow_items(edges, previewlines); for (i = 1; i <= previewlines; i++) { co[0][0] = (v[0][1]->co[0] - v[0][0]->co[0]) * (i / ((float)previewlines + 1)) + v[0][0]->co[0]; @@ -265,7 +265,7 @@ static void edgering_sel(tringselOpData *lcd, int previewlines, int select) edgering_find_order(lasteed, startedge, lastv1, v); - BLI_array_growitems(edges, previewlines); + BLI_array_grow_items(edges, previewlines); for (i = 1; i <= previewlines; i++) { if (!v[0][0] || !v[0][1] || !v[1][0] || !v[1][1]) diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index b5f486947b4..b490dbe49c8 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -263,7 +263,7 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) uid_start = uid; uid = uid_end + bm->totedge; - BLI_array_growone(eloop_pairs); + BLI_array_grow_one(eloop_pairs); lp = &eloop_pairs[BLI_array_count(eloop_pairs) - 1]; BM_edge_loop_pair(e_last, &lp->l_a, &lp->l_b); /* no need to check, we know this will be true */ @@ -277,7 +277,7 @@ static EdgeLoopPair *edbm_ripsel_looptag_helper(BMesh *bm) } /* null terminate */ - BLI_array_growone(eloop_pairs); + BLI_array_grow_one(eloop_pairs); lp = &eloop_pairs[BLI_array_count(eloop_pairs) - 1]; lp->l_a = lp->l_b = NULL; diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 05352938aba..0a0eb7964f6 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -2307,7 +2307,7 @@ static int edbm_select_linked_flat_faces_exec(bContext *C, wmOperator *op) BLI_array_empty(stack); i = 1; - BLI_array_growone(stack); + BLI_array_grow_one(stack); stack[i - 1] = f; while (i) { @@ -2330,7 +2330,7 @@ static int edbm_select_linked_flat_faces_exec(bContext *C, wmOperator *op) /* invalidate: edge too sharp */ if (angle < sharp) { - BLI_array_growone(stack); + BLI_array_grow_one(stack); stack[i] = l2->f; i++; } diff --git a/source/blender/editors/mesh/editmesh_slide.c b/source/blender/editors/mesh/editmesh_slide.c index 3cbb099a0a9..6c3af98dee9 100644 --- a/source/blender/editors/mesh/editmesh_slide.c +++ b/source/blender/editors/mesh/editmesh_slide.c @@ -505,7 +505,7 @@ static int vtx_slide_set_frame(VertexSlideOp *vso) BM_ITER_ELEM_INDEX (edge, &iter, sel_vtx, BM_EDGES_OF_VERT, idx) { curr_vert = BM_edge_other_vert(edge, sel_vtx); if (curr_vert) { - BLI_array_growone(vtx_frame); + BLI_array_grow_one(vtx_frame); copy_v3_v3(vtx_frame[idx], curr_vert->co); diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c index 71aaacb7e49..d9f35aaeedd 100644 --- a/source/blender/editors/mesh/mesh_navmesh.c +++ b/source/blender/editors/mesh/mesh_navmesh.c @@ -430,7 +430,7 @@ static int navmesh_create_exec(bContext *C, wmOperator *op) LinkNode *obs = NULL; Base *navmeshBase = NULL; - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { if (base->object->type == OB_MESH) { if (base->object->body_type == OB_BODY_TYPE_NAVMESH) { if (!navmeshBase || base == scene->basact) { diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index b3ac3069cd9..d8e9dea598c 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -122,7 +122,7 @@ int join_mesh_exec(bContext *C, wmOperator *op) } /* count & check */ - CTX_DATA_BEGIN(C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { if (base->object->type == OB_MESH) { me = base->object->data; @@ -198,8 +198,7 @@ int join_mesh_exec(bContext *C, wmOperator *op) } /* first pass over objects - copying materials and vertexgroups across */ - CTX_DATA_BEGIN(C, Base *, base, selected_editable_bases) - { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { /* only act if a mesh, and not the one we're joining to */ if ((ob != base->object) && (base->object->type == OB_MESH)) { me = base->object->data; @@ -299,8 +298,7 @@ int join_mesh_exec(bContext *C, wmOperator *op) /* inverse transform for all selected meshes in this object */ invert_m4_m4(imat, ob->obmat); - CTX_DATA_BEGIN(C, Base *, base, selected_editable_bases) - { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { /* only join if this is a mesh */ if (base->object->type == OB_MESH) { me = base->object->data; @@ -569,7 +567,7 @@ int join_mesh_shapes_exec(bContext *C, wmOperator *op) KeyBlock *kb; int ok = 0, nonequal_verts = 0; - CTX_DATA_BEGIN(C, Base *, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { if (base->object == ob) continue; if (base->object->type == OB_MESH) { @@ -601,8 +599,7 @@ int join_mesh_shapes_exec(bContext *C, wmOperator *op) } /* now ready to add new keys from selected meshes */ - CTX_DATA_BEGIN(C, Base *, base, selected_editable_bases) - { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { if (base->object == ob) continue; if (base->object->type == OB_MESH) { diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index ba527e6fa6a..082b6f6dc93 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -906,7 +906,7 @@ static int object_delete_exec(bContext *C, wmOperator *op) if (CTX_data_edit_object(C)) return OPERATOR_CANCELLED; - CTX_DATA_BEGIN(C, Base*, base, selected_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_bases) { /* if (base->object->type==OB_LAMP) islamp= 1; */ @@ -972,7 +972,7 @@ static void copy_object_set_idnew(bContext *C, int dupflag) int a; /* XXX check object pointers */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { object_relink(ob); } CTX_DATA_END; @@ -1189,7 +1189,7 @@ static int object_duplicates_make_real_exec(bContext *C, wmOperator *op) clear_id_newpoins(); - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { make_object_duplilist_real(C, scene, base, use_base_parent, use_hierarchy); /* dependencies were changed */ @@ -1294,7 +1294,7 @@ static int convert_exec(bContext *C, wmOperator *op) /* don't forget multiple users! */ /* reset flags */ - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { ob= base->object; ob->flag &= ~OB_DONE; @@ -1305,7 +1305,7 @@ static int convert_exec(bContext *C, wmOperator *op) } CTX_DATA_END; - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { ob= base->object; if (ob->flag & OB_DONE || !IS_TAGGED(ob->data)) { @@ -1879,7 +1879,7 @@ static int duplicate_exec(bContext *C, wmOperator *op) clear_id_newpoins(); clear_sca_new_poins(); /* sensor/contr/act */ - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { Base *basen= object_add_duplicate_internal(bmain, scene, base, dupflag); /* note that this is safe to do with this context iterator, diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 8b22b4613b8..dffcaad42fd 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -922,7 +922,7 @@ static int multiresbake_check(bContext *C, wmOperator *op) MultiresModifierData *mmd; int ok= 1, a; - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { ob= base->object; if (ob->type != OB_MESH) { @@ -1079,7 +1079,7 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; if (scene->r.bake_flag&R_BAKE_CLEAR) { /* clear images */ - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { Mesh *me; ob= base->object; @@ -1090,7 +1090,7 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) CTX_DATA_END; } - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { MultiresBakeRender bkr= {0}; ob= base->object; @@ -1139,7 +1139,7 @@ static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj) bkj->use_lores_mesh= scene->r.bake_flag&R_BAKE_LORES_MESH; bkj->bake_clear= scene->r.bake_flag&R_BAKE_CLEAR; - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { MultiresBakerJobData *data; DerivedMesh *lores_dm; int lvl; diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index ec3567454df..158d323b802 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -1150,8 +1150,7 @@ static int pose_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op)) Object *ob= object_pose_armature_get(CTX_data_active_object(C)); /* free constraints for all selected bones */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { free_constraints(&pchan->constraints); pchan->constflag &= ~(PCHAN_HAS_IK|PCHAN_HAS_SPLINEIK|PCHAN_HAS_CONST); } @@ -1188,8 +1187,7 @@ static int object_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op)) Scene *scene= CTX_data_scene(C); /* do freeing */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { free_constraints(&ob->constraints); DAG_id_tag_update(&ob->id, OB_RECALC_OB); } @@ -1231,8 +1229,7 @@ static int pose_constraint_copy_exec(bContext *C, wmOperator *op) } /* copy all constraints from active posebone to all selected posebones */ - CTX_DATA_BEGIN(C, bPoseChannel*, chan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, chan, selected_pose_bones) { /* if we're not handling the object we're copying from, copy all constraints over */ if (pchan != chan) { copy_constraints(&chan->constraints, &pchan->constraints, TRUE); @@ -1272,8 +1269,7 @@ static int object_constraint_copy_exec(bContext *C, wmOperator *UNUSED(op)) Object *obact = ED_object_active_context(C); /* copy all constraints from active object to all selected objects */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { /* if we're not handling the object we're copying from, copy all constraints over */ if (obact != ob) { copy_constraints(&ob->constraints, &obact->constraints, TRUE); @@ -1363,8 +1359,7 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* if the active Object is Armature, and we can search for bones, do so... */ if ((obact->type == OB_ARMATURE) && (only_ob == 0)) { /* search in list of selected Pose-Channels for target */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { /* just use the first one that we encounter, as long as it is not the active one */ if (pchan != pchanact) { *tar_ob= obact; @@ -1380,8 +1375,7 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* if not yet found, try selected Objects... */ if (found == 0) { /* search in selected objects context */ - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { /* just use the first object we encounter (that isn't the active object) * and which fulfills the criteria for the object-target that we've got */ @@ -1776,8 +1770,7 @@ static int pose_ik_clear_exec(bContext *C, wmOperator *UNUSED(op)) Object *ob= object_pose_armature_get(CTX_data_active_object(C)); /* only remove IK Constraints */ - CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones) - { + CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { bConstraint *con, *next; // TODO: should we be checking if these contraints were local before we try and remove them? diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 69ced0c0f8a..3043900bce4 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -180,7 +180,7 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op) short changed = 0; const int unselected= RNA_boolean_get(op->ptr, "unselected"); - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { if (!unselected) { if (base->flag & SELECT) { base->flag &= ~SELECT; @@ -236,7 +236,7 @@ static int object_hide_render_clear_exec(bContext *C, wmOperator *UNUSED(op)) short changed= 0; /* XXX need a context loop to handle such cases */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob->restrictflag & OB_RESTRICT_RENDER) { ob->restrictflag &= ~OB_RESTRICT_RENDER; changed= 1; @@ -270,7 +270,7 @@ static int object_hide_render_set_exec(bContext *C, wmOperator *op) { const int unselected= RNA_boolean_get(op->ptr, "unselected"); - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { if (!unselected) { if (base->flag & SELECT) { base->object->restrictflag |= OB_RESTRICT_RENDER; @@ -1108,8 +1108,7 @@ void ED_objects_recalculate_paths(bContext *C, Scene *scene) ListBase targets = {NULL, NULL}; /* loop over objects in scene */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { /* set flag to force recalc, then grab the relevant bones to target */ ob->avs.recalc |= ANIMVIZ_RECALC_PATHS; animviz_get_object_motionpaths(ob, &targets); @@ -1129,7 +1128,7 @@ static int object_calculate_paths_exec (bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); /* set up path data for bones being calculated */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { /* verify makes sure that the selected bone has a bone with the appropriate settings */ animviz_verify_motionpaths(op->reports, scene, ob, NULL); @@ -1167,7 +1166,7 @@ void OBJECT_OT_paths_calculate (wmOperatorType *ot) void ED_objects_clear_paths(bContext *C) { /* loop over objects in scene */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob->mpath) { animviz_free_motionpath(ob->mpath); @@ -1215,7 +1214,7 @@ static int shade_smooth_exec(bContext *C, wmOperator *op) int clear= (strcmp(op->idname, "OBJECT_OT_shade_flat") == 0); int done= 0; - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob->type==OB_MESH) { mesh_set_smooth_flag(ob, !clear); @@ -1632,7 +1631,7 @@ static int game_property_copy_exec(bContext *C, wmOperator *op) prop = BLI_findlink(&ob->prop, propid-1); if (prop) { - CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob_iter, selected_editable_objects) { if (ob != ob_iter) set_ob_property(ob_iter, prop); } CTX_DATA_END; @@ -1640,7 +1639,7 @@ static int game_property_copy_exec(bContext *C, wmOperator *op) } else { - CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob_iter, selected_editable_objects) { if (ob != ob_iter) { if (type == COPY_PROPERTIES_REPLACE) copy_properties(&ob_iter->prop, &ob->prop); @@ -1679,7 +1678,7 @@ void OBJECT_OT_game_property_copy(wmOperatorType *ot) static int game_property_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob_iter, selected_editable_objects) { free_properties(&ob_iter->prop); } CTX_DATA_END; @@ -1707,7 +1706,7 @@ static int logicbricks_copy_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob=ED_object_active_context(C); - CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob_iter, selected_editable_objects) { if (ob != ob_iter) { /* first: free all logic */ free_sensors(&ob_iter->sensors); @@ -1763,7 +1762,7 @@ static int game_physics_copy_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob=ED_object_active_context(C); - CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob_iter, selected_editable_objects) { if (ob != ob_iter) { ob_iter->gameflag = ob->gameflag; ob_iter->gameflag2 = ob->gameflag2; diff --git a/source/blender/editors/object/object_group.c b/source/blender/editors/object/object_group.c index 3867b1e34cb..97367b2e340 100644 --- a/source/blender/editors/object/object_group.c +++ b/source/blender/editors/object/object_group.c @@ -75,7 +75,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op) for (group= bmain->group.first; group; group=group->id.next) { if (object_in_group(ob, group)) { /* Assign groups to selected objects */ - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { if (base->object->dup_group != group) add_to_group(group, base->object, scene, base); else @@ -127,7 +127,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op) for (group= bmain->group.first; group; group=group->id.next) { if (object_in_group(ob, group)) { /* Assign groups to selected objects */ - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { rem_from_group(group, base->object, scene, base); ok = 1; } @@ -164,7 +164,7 @@ static int group_objects_remove_exec(bContext *C, wmOperator *UNUSED(op)) Scene *scene= CTX_data_scene(C); Group *group= NULL; - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { group = NULL; while ((group = find_group(base->object, group))) rem_from_group(group, base->object, scene, base); @@ -203,7 +203,7 @@ static int group_create_exec(bContext *C, wmOperator *op) group= add_group(name); - CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { add_to_group(group, base->object, scene, base); } CTX_DATA_END; diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index f4d8cd5ae11..495f0b40802 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -483,8 +483,7 @@ static int object_add_hook_selob_exec(bContext *C, wmOperator *op) Object *obedit = CTX_data_edit_object(C); Object *obsel=NULL; - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { if (ob != obedit) { obsel = ob; break; diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 445047ac321..6eb1ad3a13d 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -1119,7 +1119,7 @@ static int multires_reshape_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN(C, Object*, selob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, selob, selected_editable_objects) { if (selob->type == OB_MESH && selob != ob) { secondob= selob; break; diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 40e852ebf7c..624d6e52926 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -211,7 +211,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob != obedit) { ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; par= obedit->parent; @@ -428,8 +428,7 @@ void ED_object_parent_clear(bContext *C, int type) Main *bmain= CTX_data_main(C); Scene *scene= CTX_data_scene(C); - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob->parent == NULL) continue; @@ -674,8 +673,7 @@ static int parent_set_exec(bContext *C, wmOperator *op) int partype= RNA_enum_get(op->ptr, "type"); int ok = 1; - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (!ED_object_parent_set(op->reports, bmain, scene, ob, par, partype)) { ok = 0; break; @@ -756,7 +754,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op) par->recalc |= OB_RECALC_OB; /* context iterator */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob != par) { if (BKE_object_parent_loop_check(par, ob)) { BKE_report(op->reports, RPT_ERROR, "Loop in parents"); @@ -807,7 +805,7 @@ static int object_slow_parent_clear_exec(bContext *C, wmOperator *UNUSED(op)) Main *bmain= CTX_data_main(C); Scene *scene= CTX_data_scene(C); - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob->parent) { if (ob->partype & PARSLOW) { ob->partype -= PARSLOW; @@ -849,7 +847,7 @@ static int object_slow_parent_set_exec(bContext *C, wmOperator *UNUSED(op)) Main *bmain= CTX_data_main(C); Scene *scene= CTX_data_scene(C); - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob->parent) ob->partype |= PARSLOW; @@ -900,7 +898,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op) BKE_report(op->reports, RPT_ERROR, "Operation cannot be performed in EditMode"); return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { bConstraint *con, *pcon; /* remove track-object for old track */ @@ -966,7 +964,7 @@ static int track_set_exec(bContext *C, wmOperator *op) bConstraint *con; bDampTrackConstraint *data; - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob!=obact) { con = add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_DAMPTRACK); @@ -985,7 +983,7 @@ static int track_set_exec(bContext *C, wmOperator *op) bConstraint *con; bTrackToConstraint *data; - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob!=obact) { con = add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_TRACKTO); @@ -1006,7 +1004,7 @@ static int track_set_exec(bContext *C, wmOperator *op) bConstraint *con; bLockTrackConstraint *data; - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob!=obact) { con = add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_LOCKTRACK); @@ -1060,7 +1058,7 @@ static unsigned int move_to_layer_init(bContext *C, wmOperator *op) if (!RNA_struct_property_is_set(op->ptr, "layers")) { /* note: layers are set in bases, library objects work for this */ - CTX_DATA_BEGIN(C, Base*, base, selected_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_bases) { lay |= base->lay; } CTX_DATA_END; @@ -1109,7 +1107,7 @@ static int move_to_layer_exec(bContext *C, wmOperator *op) if (v3d && v3d->localvd) { /* now we can move out of localview. */ /* note: layers are set in bases, library objects work for this */ - CTX_DATA_BEGIN(C, Base*, base, selected_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_bases) { lay= base->lay & ~v3d->lay; base->lay= lay; base->object->lay= lay; @@ -1122,7 +1120,7 @@ static int move_to_layer_exec(bContext *C, wmOperator *op) else { /* normal non localview operation */ /* note: layers are set in bases, library objects work for this */ - CTX_DATA_BEGIN(C, Base*, base, selected_bases) { + CTX_DATA_BEGIN (C, Base*, base, selected_bases) { /* upper byte is used for local view */ local= base->lay & 0xFF000000; base->lay= lay + local; @@ -1204,8 +1202,7 @@ static int make_links_scene_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN(C, Base*, base, selected_bases) - { + CTX_DATA_BEGIN (C, Base*, base, selected_bases) { if (!object_in_scene(base->object, scene_to)) { Base *nbase= MEM_mallocN( sizeof(Base), "newbase"); *nbase= *base; @@ -1265,7 +1262,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op) ob= ED_object_active_context(C); - CTX_DATA_BEGIN(C, Object*, obt, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, obt, selected_editable_objects) { if (ob != obt) { if (allow_make_links_data(event, ob, obt)) { switch (event) { @@ -1728,21 +1725,21 @@ static int make_local_exec(bContext *C, wmOperator *op) clear_id_newpoins(); - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { if (ob->id.lib) id_make_local(&ob->id, 0); } CTX_DATA_END; /* maybe object pointers */ - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { if (ob->id.lib==NULL) { ID_NEW(ob->parent); } } CTX_DATA_END; - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { id= ob->data; if (id && mode>1) { @@ -1770,7 +1767,7 @@ static int make_local_exec(bContext *C, wmOperator *op) CTX_DATA_END; if (mode>1) { - CTX_DATA_BEGIN(C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { if (ob->type==OB_LAMP) { la= ob->data; diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index 388766f5fa3..386541c5262 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -144,13 +144,13 @@ static int object_select_by_type_exec(bContext *C, wmOperator *op) extend= RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; } - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { if (base->object->type==obtype) { ED_base_object_select(base, BA_SELECT); } @@ -218,7 +218,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op) extend= RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; @@ -263,7 +263,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op) else return OPERATOR_CANCELLED; - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { if (nr==1) { // XXX old animation system //if (base->object->ipo==ipo) base->flag |= SELECT; @@ -386,7 +386,7 @@ static short select_grouped_children(bContext *C, Object *ob, int recursive) { short changed = 0; - CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { if (ob == base->object->parent) { if (!(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); @@ -444,7 +444,7 @@ static short select_grouped_group(bContext *C, Object *ob) /* Select objects in return 0; else if (group_count == 1) { group = ob_groups[0]; - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { if (!(base->flag & SELECT) && object_in_group(base->object, group)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -498,7 +498,7 @@ static short select_grouped_siblings(bContext *C, Object *ob) { short changed = 0; - CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { if ((base->object->parent==ob->parent) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -512,7 +512,7 @@ static short select_grouped_type(bContext *C, Object *ob) { short changed = 0; - CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { if ((base->object->type == ob->type) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -526,7 +526,7 @@ static short select_grouped_layer(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { if ((base->lay & ob->lay) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -540,7 +540,7 @@ static short select_grouped_index_object(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { if ((base->object->index == ob->index) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -554,7 +554,7 @@ static short select_grouped_color(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { if (!(base->flag & SELECT) && (compare_v3v3(base->object->col, ob->col, 0.005f))) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -580,7 +580,7 @@ static short select_grouped_gameprops(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN(C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { if (!(base->flag & SELECT) && (objects_share_gameprop(base->object, ob))) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -602,8 +602,7 @@ static short select_grouped_keyingset(bContext *C, Object *UNUSED(ob)) /* select each object that Keying Set refers to */ // TODO: perhaps to be more in line with the rest of these, we should only take objects // if the passed in object is included in this too - CTX_DATA_BEGIN(C, Base*, base, selectable_bases) - { + CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { /* only check for this object if it isn't selected already, to limit time wasted */ if ((base->flag & SELECT) == 0) { KS_Path *ksp; @@ -636,7 +635,7 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op) extend= RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); changed = 1; } @@ -701,13 +700,13 @@ static int object_select_by_layer_exec(bContext *C, wmOperator *op) layernum = RNA_int_get(op->ptr, "layers"); if (extend == 0) { - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; } - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { if (base->lay == (1<< (layernum -1))) ED_base_object_select(base, BA_SELECT); } @@ -750,7 +749,7 @@ static int object_select_all_exec(bContext *C, wmOperator *op) if (action == SEL_TOGGLE) { action = SEL_SELECT; - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { if (base->flag & SELECT) { action = SEL_DESELECT; break; @@ -759,7 +758,7 @@ static int object_select_all_exec(bContext *C, wmOperator *op) CTX_DATA_END; } - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { switch (action) { case SEL_SELECT: ED_base_object_select(base, BA_SELECT); @@ -822,7 +821,7 @@ static int object_select_same_group_exec(bContext *C, wmOperator *op) if (!group) return OPERATOR_PASS_THROUGH; - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { if (!(base->flag & SELECT) && object_in_group(base->object, group)) ED_base_object_select(base, BA_SELECT); } @@ -859,7 +858,7 @@ static int object_select_mirror_exec(bContext *C, wmOperator *op) extend= RNA_boolean_get(op->ptr, "extend"); - CTX_DATA_BEGIN(C, Base*, primbase, selected_bases) { + CTX_DATA_BEGIN (C, Base*, primbase, selected_bases) { char tmpname[MAXBONENAME]; flip_side_name(tmpname, primbase->object->id.name+2, TRUE); @@ -915,14 +914,14 @@ static int object_select_random_exec(bContext *C, wmOperator *op) extend= RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; } percent = RNA_float_get(op->ptr, "percent")/100.0f; - CTX_DATA_BEGIN(C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base*, base, visible_bases) { if (BLI_frand() < percent) { ED_base_object_select(base, BA_SELECT); } diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 55954790687..d0fc4f79817 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -227,8 +227,7 @@ static int object_clear_transform_generic_exec(bContext *C, wmOperator *op, /* operate on selected objects only if they aren't in weight-paint mode * (so that object-transform clearing won't be applied at same time as bone-clearing) */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (!(ob->mode & OB_MODE_WEIGHT_PAINT)) { /* run provided clearing function */ clear_func(ob); @@ -320,8 +319,7 @@ static int object_origin_clear_exec(bContext *C, wmOperator *UNUSED(op)) float *v1, *v3; float mat[3][3]; - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob->parent) { /* vectors pointed to by v1 and v3 will get modified */ v1= ob->loc; @@ -385,7 +383,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo int a, change = 0; /* first check if we can execute */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (ob->type==OB_MESH) { if (ID_REAL_USERS(ob->data) > 1) { @@ -428,7 +426,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo CTX_DATA_END; /* now execute */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { /* calculate rotation/scale matrix */ if (apply_scale && apply_rot) @@ -569,7 +567,7 @@ static int visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op)) Scene *scene= CTX_data_scene(C); int change = 0; - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { where_is_object(scene, ob); object_apply_mat4(ob, ob->obmat, TRUE, TRUE); where_is_object(scene, ob); @@ -711,7 +709,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) } /* reset flags */ - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { ob->flag &= ~OB_DONE; } CTX_DATA_END; @@ -723,7 +721,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) ((ID *)tob->dup_group)->flag &= ~LIB_DOIT; } - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if ((ob->flag & OB_DONE)==0) { int do_inverse_offset = FALSE; ob->flag |= OB_DONE; @@ -896,11 +894,12 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) ignore_parent_tx(bmain, scene, ob); /* other users? */ - CTX_DATA_BEGIN(C, Object*, ob_other, selected_editable_objects) { - if ( (ob_other->flag & OB_DONE)==0 && - ( (ob->data && (ob->data == ob_other->data)) || - (ob->dup_group==ob_other->dup_group && (ob->transflag|ob_other->transflag) & OB_DUPLIGROUP) ) - ) { + CTX_DATA_BEGIN (C, Object*, ob_other, selected_editable_objects) { + if ((ob_other->flag & OB_DONE) == 0 && + ((ob->data && (ob->data == ob_other->data)) || + (ob->dup_group == ob_other->dup_group && + (ob->transflag | ob_other->transflag) & OB_DUPLIGROUP))) + { ob_other->flag |= OB_DONE; DAG_id_tag_update(&ob_other->id, OB_RECALC_OB|OB_RECALC_DATA); diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index e74819f10bf..1ddbc86a73f 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -2713,8 +2713,7 @@ static int vertex_group_copy_to_selected_exec(bContext *C, wmOperator *op) int change= 0; int fail= 0; - CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) - { + CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { if (obact != ob) { if (ED_vgroup_copy_array(ob, obact)) change++; else fail++; diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 4f8f2ea3642..131034848de 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -3671,7 +3671,7 @@ static int brush_edit_exec(bContext *C, wmOperator *op) if (!brush_edit_init(C, op)) return OPERATOR_CANCELLED; - RNA_BEGIN(op->ptr, itemptr, "stroke") { + RNA_BEGIN (op->ptr, itemptr, "stroke") { brush_edit_apply(C, op, &itemptr); } RNA_END; diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index 6722ac5e686..bced6f07564 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -329,7 +329,7 @@ static int material_slot_copy_exec(bContext *C, wmOperator *UNUSED(op)) if (!ob || !(matar = give_matarar(ob))) return OPERATOR_CANCELLED; - CTX_DATA_BEGIN(C, Object *, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { if (ob != ob_iter && give_matarar(ob_iter)) { if (ob->data != ob_iter->data) assign_matarar(ob_iter, matar, ob->totcol); diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index 55cf827fea6..ac327b56fb9 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -5038,7 +5038,7 @@ static int paint_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - RNA_BEGIN(op->ptr, itemptr, "stroke") { + RNA_BEGIN (op->ptr, itemptr, "stroke") { paint_apply(C, op, &itemptr); } RNA_END; diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index fb640346a99..9fe941253f6 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -377,7 +377,7 @@ int paint_stroke_exec(bContext *C, wmOperator *op) stroke->stroke_started = 1; } - RNA_BEGIN(op->ptr, itemptr, "stroke") { + RNA_BEGIN (op->ptr, itemptr, "stroke") { stroke->update_step(C, stroke, &itemptr); } RNA_END; diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c index 1bae6406c03..73dfde8fd6f 100644 --- a/source/blender/editors/sound/sound_ops.c +++ b/source/blender/editors/sound/sound_ops.c @@ -221,7 +221,7 @@ static int sound_update_animation_flags_exec(bContext *C, wmOperator *UNUSED(op) struct FCurve* fcu; char driven; - SEQ_BEGIN(scene->ed, seq) { + SEQ_BEGIN (scene->ed, seq) { fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, "volume", 0, &driven); if (fcu || driven) seq->flag |= SEQ_AUDIO_VOLUME_ANIMATED; diff --git a/source/blender/editors/space_logic/logic_buttons.c b/source/blender/editors/space_logic/logic_buttons.c index 16fe48f314a..22df7432ecb 100644 --- a/source/blender/editors/space_logic/logic_buttons.c +++ b/source/blender/editors/space_logic/logic_buttons.c @@ -104,7 +104,7 @@ static int cut_links_exec(bContext *C, wmOperator *op) float mcoords[256][2]; int i= 0; - RNA_BEGIN(op->ptr, itemptr, "path") { + RNA_BEGIN (op->ptr, itemptr, "path") { float loc[2]; RNA_float_get_array(&itemptr, "loc", loc); diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index 247dd0c1fa7..f38e3e0d272 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -2651,7 +2651,7 @@ static int cut_links_exec(bContext *C, wmOperator *op) float mcoords[256][2]; int i= 0; - RNA_BEGIN(op->ptr, itemptr, "path") { + RNA_BEGIN (op->ptr, itemptr, "path") { float loc[2]; RNA_float_get_array(&itemptr, "loc", loc); diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index dfa733deac6..09d974fe4b8 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -188,7 +188,7 @@ static void seq_load_operator_info(SeqLoadInfo *seq_load, wmOperator *op) else if (RNA_struct_find_property(op->ptr, "files")) { /* used for image strip */ /* best guess, first images name */ - RNA_BEGIN(op->ptr, itemptr, "files") { + RNA_BEGIN (op->ptr, itemptr, "files") { char *name = RNA_string_get_alloc(&itemptr, "name", NULL, 0); BLI_strncpy(seq_load->name, name, sizeof(seq_load->name)); MEM_freeN(name); @@ -420,8 +420,7 @@ static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoad BLI_split_dir_part(seq_load.path, dir_only, sizeof(dir_only)); - RNA_BEGIN(op->ptr, itemptr, "files") - { + RNA_BEGIN (op->ptr, itemptr, "files") { RNA_string_get(&itemptr, "name", file_only); BLI_join_dirfile(seq_load.path, sizeof(seq_load.path), dir_only, file_only); @@ -595,7 +594,7 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op) strip = seq->strip; se = strip->stripdata; - RNA_BEGIN(op->ptr, itemptr, "files") { + RNA_BEGIN (op->ptr, itemptr, "files") { char *filename = RNA_string_get_alloc(&itemptr, "name", NULL, 0); BLI_strncpy(se->name, filename, sizeof(se->name)); MEM_freeN(filename); diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 5bd1ba4dcf2..d2b1cccfefc 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -201,7 +201,7 @@ static void seq_proxy_build_job(const bContext *C) WM_jobs_callbacks(steve, proxy_startjob, NULL, NULL, proxy_endjob); } - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if ((seq->flag & SELECT)) { context = seq_proxy_rebuild_context(pj->main, pj->scene, seq); link = BLI_genericNodeN(context); @@ -461,8 +461,7 @@ void deselect_all_seq(Scene *scene) if (ed == NULL) return; - SEQP_BEGIN(ed, seq) - { + SEQP_BEGIN (ed, seq) { seq->flag &= ~SEQ_ALLSEL; } SEQ_END @@ -845,7 +844,7 @@ static int insert_gap(Scene *scene, int gap, int cfra) if (ed == NULL) return 0; - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (seq->startdisp >= cfra) { seq->start += gap; calc_sequence(scene, seq); @@ -871,8 +870,7 @@ static void UNUSED_FUNCTION(touch_seq_files) (Scene * scene) WM_cursor_wait(1); - SEQP_BEGIN(ed, seq) - { + SEQP_BEGIN (ed, seq) { if (seq->flag & SELECT) { if (seq->type == SEQ_MOVIE) { if (seq->strip && seq->strip->stripdata) { @@ -899,8 +897,7 @@ static void set_filter_seq(Scene *scene) if (okee("Set Deinterlace") == 0) return; - SEQP_BEGIN(ed, seq) - { + SEQP_BEGIN (ed, seq) { if (seq->flag & SELECT) { if (seq->type == SEQ_MOVIE) { seq->flag |= SEQ_FILTERY; @@ -935,8 +932,7 @@ static void UNUSED_FUNCTION(seq_remap_paths) (Scene * scene) if (strcmp(to, from) == 0) return; - SEQP_BEGIN(ed, seq) - { + SEQP_BEGIN (ed, seq) { if (seq->flag & SELECT) { if (strncmp(seq->strip->dir, from, strlen(from)) == 0) { printf("found %s\n", seq->strip->dir); @@ -1481,7 +1477,7 @@ static int sequencer_cut_exec(bContext *C, wmOperator *op) BLI_movelisttolist(ed->seqbasep, &newlist); if (cut_side != SEQ_SIDE_BOTH) { - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (cut_side == SEQ_SIDE_LEFT) { if (seq->startdisp >= cut_frame) { seq->flag &= ~SEQ_ALLSEL; @@ -3014,7 +3010,7 @@ static int sequencer_change_path_exec(bContext *C, wmOperator *op) } seq->strip->stripdata = se = MEM_callocN(len * sizeof(StripElem), "stripelem"); - RNA_BEGIN(op->ptr, itemptr, "files") { + RNA_BEGIN (op->ptr, itemptr, "files") { char *filename = RNA_string_get_alloc(&itemptr, "name", NULL, 0); BLI_strncpy(se->name, filename, sizeof(se->name)); MEM_freeN(filename); diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index 2447ca6cfbe..f326052ea60 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -362,7 +362,7 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, wmEvent *event) deselect_all_seq(scene); UI_view2d_region_to_view(v2d, event->mval[0], event->mval[1], &x, NULL); - SEQP_BEGIN(ed, seq) + SEQP_BEGIN (ed, seq) { if (x < CFRA) { if (seq->enddisp < CFRA) { @@ -940,7 +940,7 @@ static short select_grouped_type(Editing *ed, Sequence *actseq) Sequence *seq; short changed = FALSE; - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (seq->type == actseq->type) { seq->flag |= SELECT; changed = TRUE; @@ -957,7 +957,7 @@ static short select_grouped_type_basic(Editing *ed, Sequence *actseq) short changed = FALSE; short is_sound = SEQ_IS_SOUND(actseq); - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (is_sound ? SEQ_IS_SOUND(seq) : !SEQ_IS_SOUND(seq)) { seq->flag |= SELECT; changed = TRUE; @@ -974,7 +974,7 @@ static short select_grouped_type_effect(Editing *ed, Sequence *actseq) short changed = FALSE; short is_effect = SEQ_IS_EFFECT(actseq); - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (is_effect ? SEQ_IS_EFFECT(seq) : !SEQ_IS_EFFECT(seq)) { seq->flag |= SELECT; changed = TRUE; @@ -995,7 +995,7 @@ static short select_grouped_data(Editing *ed, Sequence *actseq) return changed; if (SEQ_HAS_PATH(actseq) && dir) { - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (SEQ_HAS_PATH(seq) && seq->strip && strcmp(seq->strip->dir, dir) == 0) { seq->flag |= SELECT; changed = TRUE; @@ -1005,7 +1005,7 @@ static short select_grouped_data(Editing *ed, Sequence *actseq) } else if (actseq->type == SEQ_SCENE) { Scene *sce = actseq->scene; - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (seq->type == SEQ_SCENE && seq->scene == sce) { seq->flag |= SELECT; changed = TRUE; @@ -1015,7 +1015,7 @@ static short select_grouped_data(Editing *ed, Sequence *actseq) } else if (actseq->type == SEQ_MOVIECLIP) { MovieClip *clip = actseq->clip; - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (seq->type == SEQ_MOVIECLIP && seq->clip == clip) { seq->flag |= SELECT; changed = TRUE; @@ -1037,14 +1037,14 @@ static short select_grouped_effect(Editing *ed, Sequence *actseq) for (i = 0; i <= SEQ_EFFECT_MAX; i++) effects[i] = FALSE; - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (ELEM3(actseq, seq->seq1, seq->seq2, seq->seq3)) { effects[seq->type] = TRUE; } } SEQ_END; - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (effects[seq->type]) { if (seq->seq1) seq->seq1->flag |= SELECT; if (seq->seq2) seq->seq2->flag |= SELECT; @@ -1062,7 +1062,7 @@ static short select_grouped_time_overlap(Editing *ed, Sequence *actseq) Sequence *seq; short changed = FALSE; - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { if (!((seq->startdisp >= actseq->enddisp) || (seq->enddisp < actseq->startdisp))) { seq->flag |= SELECT; changed = TRUE; @@ -1083,7 +1083,7 @@ static short select_grouped_effect_link(Editing *ed, Sequence *actseq) int machine = actseq->machine; SeqIterator iter; - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { seq->tmp= NULL; } SEQ_END; @@ -1153,7 +1153,7 @@ static int sequencer_select_grouped_exec(bContext *C, wmOperator *op) } if (extend == 0) { - SEQP_BEGIN(ed, seq) { + SEQP_BEGIN (ed, seq) { seq->flag &= ~SELECT; changed = TRUE; } diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index fbb3f3c609f..674dd670cf7 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -357,8 +357,7 @@ static void time_draw_keyframes(const bContext *C, SpaceTime *stime, ARegion *ar short active_done = 0; /* draw keyframes from all selected objects */ - CTX_DATA_BEGIN(C, Object*, obsel, selected_objects) - { + CTX_DATA_BEGIN (C, Object*, obsel, selected_objects) { /* last arg is 0, since onlysel doesn't apply here... */ time_draw_idblock_keyframes(v2d, (ID *)obsel, 0); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index d7e992e70e9..e1bbc0e1545 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -830,7 +830,7 @@ static int view3d_lasso_select_exec(bContext *C, wmOperator *op) int i = 0; int mcords[1024][2]; - RNA_BEGIN(op->ptr, itemptr, "path") { + RNA_BEGIN (op->ptr, itemptr, "path") { float loc[2]; RNA_float_get_array(&itemptr, "loc", loc); @@ -975,7 +975,7 @@ static int object_select_menu_exec(bContext *C, wmOperator *op) const char *name = object_mouse_select_menu_data[name_index].idname; if (!extend) { - CTX_DATA_BEGIN(C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { if (base->flag & SELECT) { ED_base_object_select(base, BA_DESELECT); changed = 1; @@ -984,7 +984,7 @@ static int object_select_menu_exec(bContext *C, wmOperator *op) CTX_DATA_END; } - CTX_DATA_BEGIN(C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { /* this is a bit dodjy, there should only be ONE object with this name, but library objects can mess this up */ if (strcmp(name, base->object->id.name + 2) == 0) { ED_base_object_activate(C, base); @@ -1051,7 +1051,7 @@ static Base *object_mouse_select_menu(bContext *C, ViewContext *vc, unsigned int short ok; LinkNode *linklist = NULL; - CTX_DATA_BEGIN(C, Base *, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { ok = FALSE; /* two selection methods, the CTRL select uses max dist of 15 */ @@ -1829,7 +1829,7 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, i if (extend == 0 && select) { if (bone_only) { - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, visible_pose_bones) { if ((pchan->bone->flag & BONE_UNSELECTABLE) == 0) { pchan->bone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); } diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 1c1fa4c7fac..2c301dc8abc 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -557,7 +557,7 @@ static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op)) else { struct KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, ANIM_KS_LOCATION_ID); - CTX_DATA_BEGIN(C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (ob->mode & OB_MODE_POSE) { bPoseChannel *pchan; bArmature *arm = ob->data; @@ -691,7 +691,7 @@ static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op)) else { struct KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, ANIM_KS_LOCATION_ID); - CTX_DATA_BEGIN(C, Object *, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (ob->mode & OB_MODE_POSE) { bPoseChannel *pchan; bArmature *arm = ob->data; @@ -928,7 +928,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op)) } } else { - CTX_DATA_BEGIN(C, Object *, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { copy_v3_v3(vec, ob->obmat[3]); /* special case for camera -- snap to bundles */ diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index ebbc2ca9267..bdae2c0c84f 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -5289,8 +5289,7 @@ static void createTransObject(bContext *C, TransInfo *t) td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransOb"); tx = t->ext = MEM_callocN(t->total*sizeof(TransDataExtension), "TransObExtension"); - CTX_DATA_BEGIN(C, Base*, base, selected_bases) - { + CTX_DATA_BEGIN (C, Base*, base, selected_bases) { Object *ob= base->object; td->flag = TD_SELECTED; @@ -5396,7 +5395,7 @@ static void createTransNodeData(bContext *C, TransInfo *t) td = t->data = MEM_callocN(t->total*sizeof(TransData), "TransNode TransData"); td2d = t->data2d = MEM_callocN(t->total*sizeof(TransData2D), "TransNode TransData2D"); - CTX_DATA_BEGIN(C, bNode *, selnode, selected_nodes) + CTX_DATA_BEGIN (C, bNode *, selnode, selected_nodes) NodeToTransData(td++, td2d++, selnode); CTX_DATA_END } diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index 987f6b250cb..fb7e2254e45 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -186,8 +186,8 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe BLI_array_empty(tf_uv); BLI_array_empty(tf_uvorig); - BLI_array_growitems(tf_uv, efa->len); - BLI_array_growitems(tf_uvorig, efa->len); + BLI_array_grow_items(tf_uv, efa->len); + BLI_array_grow_items(tf_uvorig, efa->len); i = 0; BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { @@ -236,8 +236,8 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe BLI_array_empty(tf_uv); BLI_array_empty(tf_uvorig); - BLI_array_growitems(tf_uv, efa->len); - BLI_array_growitems(tf_uvorig, efa->len); + BLI_array_grow_items(tf_uv, efa->len); + BLI_array_grow_items(tf_uvorig, efa->len); i = 0; BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { @@ -303,12 +303,12 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe BLI_array_empty(ang); BLI_array_empty(av); BLI_array_empty(auv); - BLI_array_growitems(tf_uv, nverts); - BLI_array_growitems(tf_uvorig, nverts); - BLI_array_growitems(uvang, nverts); - BLI_array_growitems(ang, nverts); - BLI_array_growitems(av, nverts); - BLI_array_growitems(auv, nverts); + BLI_array_grow_items(tf_uv, nverts); + BLI_array_grow_items(tf_uvorig, nverts); + BLI_array_grow_items(uvang, nverts); + BLI_array_grow_items(ang, nverts); + BLI_array_grow_items(av, nverts); + BLI_array_grow_items(auv, nverts); BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) { luv = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_MLOOPUV); diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 7883fac3ec2..a30274c0f2c 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -1756,8 +1756,8 @@ static int mouse_select(bContext *C, const float co[2], int extend, int loop) } /* mark 1 vertex as being hit */ - BLI_array_growitems(hitv, hit.efa->len); - BLI_array_growitems(hituv, hit.efa->len); + BLI_array_grow_items(hitv, hit.efa->len); + BLI_array_grow_items(hituv, hit.efa->len); for (i = 0; i < hit.efa->len; i++) { hitv[i] = 0xFFFFFFFF; } @@ -1777,8 +1777,8 @@ static int mouse_select(bContext *C, const float co[2], int extend, int loop) } /* mark 2 edge vertices as being hit */ - BLI_array_growitems(hitv, hit.efa->len); - BLI_array_growitems(hituv, hit.efa->len); + BLI_array_grow_items(hitv, hit.efa->len); + BLI_array_grow_items(hituv, hit.efa->len); fill_vn_i(hitv, hit.efa->len, 0xFFFFFFFF); hitv[hit.lindex] = hit.vert1; @@ -1802,8 +1802,8 @@ static int mouse_select(bContext *C, const float co[2], int extend, int loop) /* mark all face vertices as being hit */ - BLI_array_growitems(hitv, hit.efa->len); - BLI_array_growitems(hituv, hit.efa->len); + BLI_array_grow_items(hitv, hit.efa->len); + BLI_array_grow_items(hituv, hit.efa->len); i = 0; BM_ITER_ELEM (l, &liter, hit.efa, BM_LOOPS_OF_FACE) { luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.c b/source/blender/editors/uvedit/uvedit_smart_stitch.c index 36b1e77e5e5..e1b2d87c4f2 100644 --- a/source/blender/editors/uvedit/uvedit_smart_stitch.c +++ b/source/blender/editors/uvedit/uvedit_smart_stitch.c @@ -1162,7 +1162,7 @@ static int stitch_init(bContext *C, wmOperator *op) EDBM_index_arrays_init(em, 0, 0, 1); - RNA_BEGIN(op->ptr, itemptr, "selection") { + RNA_BEGIN (op->ptr, itemptr, "selection") { faceIndex = RNA_int_get(&itemptr, "face_index"); elementIndex = RNA_int_get(&itemptr, "element_index"); efa = EDBM_face_at_index(em, faceIndex); diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index a0335402060..18edcf1344f 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -615,7 +615,7 @@ PropertyRNA *RNA_struct_find_nested(PointerRNA *ptr, StructRNA *srna) { PropertyRNA *prop = NULL; - RNA_STRUCT_BEGIN(ptr, iprop) { + RNA_STRUCT_BEGIN (ptr, iprop) { /* This assumes that there can only be one user of this nested struct */ if (RNA_property_pointer_type(ptr, iprop) == srna) { prop = iprop; @@ -637,7 +637,7 @@ int RNA_struct_contains_property(PointerRNA *ptr, PropertyRNA *prop_test) iterprop = RNA_struct_iterator_property(ptr->type); - RNA_PROP_BEGIN(ptr, itemptr, iterprop) { + RNA_PROP_BEGIN (ptr, itemptr, iterprop) { /* PropertyRNA *prop= itemptr.data; */ if (prop_test == (PropertyRNA *)itemptr.data) { found = TRUE; @@ -684,7 +684,7 @@ FunctionRNA *RNA_struct_find_function(PointerRNA *ptr, const char *identifier) func = NULL; - RNA_PROP_BEGIN(&tptr, funcptr, iterprop) { + RNA_PROP_BEGIN (&tptr, funcptr, iterprop) { if (strcmp(identifier, RNA_function_identifier(funcptr.data)) == 0) { func = funcptr.data; break; @@ -3128,7 +3128,7 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro } /* no item property pointer, can still be id property, or * property of a type derived from the collection pointer type */ - RNA_PROP_BEGIN(ptr, itemptr, prop) { + RNA_PROP_BEGIN (ptr, itemptr, prop) { if (itemptr.data) { if (itemprop) { /* we got the property already */ @@ -4499,7 +4499,7 @@ char *RNA_pointer_as_string(bContext *C, PointerRNA *ptr) BLI_dynstr_append(dynstr, "{"); - RNA_STRUCT_BEGIN(ptr, prop) { + RNA_STRUCT_BEGIN (ptr, prop) { propname = RNA_property_identifier(prop); if (strcmp(propname, "rna_type") == 0) @@ -4542,7 +4542,7 @@ char *RNA_pointer_as_string_keywords_ex(bContext *C, PointerRNA *ptr, PointerRNA PropertyRNA *prop_default; char *buf_default; - RNA_PROP_BEGIN(ptr, propptr, iterprop) { + RNA_PROP_BEGIN (ptr, propptr, iterprop) { prop = propptr.data; flag = RNA_property_flag(prop); diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 7259ea8e2f5..7c8f28d0979 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -1424,7 +1424,7 @@ int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, int all_args, const cha totkw = kw ? PyDict_Size(kw) : 0; - RNA_STRUCT_BEGIN(ptr, prop) { + RNA_STRUCT_BEGIN (ptr, prop) { arg_name = RNA_property_identifier(prop); if (strcmp(arg_name, "rna_type") == 0) continue; @@ -2203,7 +2203,7 @@ int pyrna_prop_collection_subscript_str_lib_pair_ptr(BPy_PropertyRNA *self, PyOb /* lib is either a valid poniter or NULL, * either way can do direct comparison with id.lib */ - RNA_PROP_BEGIN(&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { ID *id = itemptr.data; /* always an ID */ if (id->lib == lib && (strncmp(keyname, id->name + 2, sizeof(id->name) - 2) == 0)) { found = TRUE; @@ -3346,7 +3346,7 @@ static void pyrna_dir_members_rna(PyObject *list, PointerRNA *ptr) RNA_pointer_create(NULL, &RNA_Struct, ptr->type, &tptr); iterprop = RNA_struct_find_property(&tptr, "functions"); - RNA_PROP_BEGIN(&tptr, itemptr, iterprop) { + RNA_PROP_BEGIN (&tptr, itemptr, iterprop) { idname = RNA_function_identifier(itemptr.data); pystring = PyUnicode_FromString(idname); @@ -3365,7 +3365,7 @@ static void pyrna_dir_members_rna(PyObject *list, PointerRNA *ptr) iterprop = RNA_struct_iterator_property(ptr->type); - RNA_PROP_BEGIN(ptr, itemptr, iterprop) { + RNA_PROP_BEGIN (ptr, itemptr, iterprop) { nameptr = RNA_struct_name_get_alloc(&itemptr, name, sizeof(name), &namelen); if (nameptr) { @@ -3980,7 +3980,7 @@ static PyObject *pyrna_prop_collection_keys(BPy_PropertyRNA *self) char name[256], *nameptr; int namelen; - RNA_PROP_BEGIN(&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { nameptr = RNA_struct_name_get_alloc(&itemptr, name, sizeof(name), &namelen); if (nameptr) { @@ -4017,7 +4017,7 @@ static PyObject *pyrna_prop_collection_items(BPy_PropertyRNA *self) int namelen; int i = 0; - RNA_PROP_BEGIN(&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { if (itemptr.data) { /* add to python list */ item = PyTuple_New(2); @@ -4189,7 +4189,7 @@ static PyObject *pyrna_prop_collection_find(BPy_PropertyRNA *self, PyObject *key PYRNA_PROP_CHECK_OBJ(self); - RNA_PROP_BEGIN(&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { nameptr = RNA_struct_name_get_alloc(&itemptr, name, sizeof(name), &namelen); if (nameptr) { @@ -4220,7 +4220,7 @@ static void foreach_attr_type(BPy_PropertyRNA *self, const char *attr, *attr_signed = FALSE; /* note: this is fail with zero length lists, so don't let this get caled in that case */ - RNA_PROP_BEGIN(&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { prop = RNA_struct_find_property(&itemptr, attr); *raw_type = RNA_property_raw_type(prop); *attr_tot = RNA_property_array_length(&itemptr, prop); @@ -6401,7 +6401,7 @@ static PyObject *pyrna_basetype_dir(BPy_BaseTypeRNA *self) PyObject *ret = PyList_New(0); PyObject *item; - RNA_PROP_BEGIN(&self->ptr, itemptr, self->prop) { + RNA_PROP_BEGIN (&self->ptr, itemptr, self->prop) { StructRNA *srna = itemptr.data; StructRNA *srna_base = RNA_struct_base(itemptr.data); /* skip own operators, these double up [#29666] */ @@ -7189,7 +7189,7 @@ void pyrna_alloc_types(void) RNA_blender_rna_pointer_create(&ptr); prop = RNA_struct_find_property(&ptr, "structs"); - RNA_PROP_BEGIN(&ptr, itemptr, prop) { + RNA_PROP_BEGIN (&ptr, itemptr, prop) { PyObject *item = pyrna_struct_Subtype(&itemptr); if (item == NULL) { if (PyErr_Occurred()) { @@ -7217,7 +7217,7 @@ void pyrna_free_types(void) prop = RNA_struct_find_property(&ptr, "structs"); - RNA_PROP_BEGIN(&ptr, itemptr, prop) { + RNA_PROP_BEGIN (&ptr, itemptr, prop) { StructRNA *srna = srna_from_ptr(&itemptr); void *py_ptr = RNA_struct_py_type_get(srna); @@ -7477,7 +7477,7 @@ static PyObject *pyrna_unregister_class(PyObject *UNUSED(self), PyObject *py_cla /* loop over all structs */ - RNA_PROP_BEGIN(&ptr_rna, itemptr, prop_rna) { + RNA_PROP_BEGIN (&ptr_rna, itemptr, prop_rna) { srna_iter = itemptr.data; if (pyrna_srna_contains_pointer_prop_srna(srna_iter, srna, &prop_identifier)) { break; diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index ae02ff33950..78ad364b8e8 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -691,8 +691,7 @@ static wmOperator *wm_operator_create(wmWindowManager *wm, wmOperatorType *ot, P if (properties) { otmacro = ot->macro.first; - RNA_STRUCT_BEGIN(properties, prop) - { + RNA_STRUCT_BEGIN (properties, prop) { if (otmacro == NULL) break; @@ -761,7 +760,7 @@ int WM_operator_last_properties_init(wmOperator *op) iterprop = RNA_struct_iterator_property(op->type->srna); - RNA_PROP_BEGIN(op->ptr, itemptr, iterprop) { + RNA_PROP_BEGIN (op->ptr, itemptr, iterprop) { PropertyRNA *prop = itemptr.data; if ((RNA_property_flag(prop) & PROP_SKIP_SAVE) == 0) { if (!RNA_property_is_set(op->ptr, prop)) { /* don't override a setting already set */ diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 52a73988039..7fbdce097a9 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -589,7 +589,7 @@ void WM_operator_properties_alloc(PointerRNA **ptr, IDProperty **properties, con void WM_operator_properties_sanitize(PointerRNA *ptr, const short no_context) { - RNA_STRUCT_BEGIN(ptr, prop) { + RNA_STRUCT_BEGIN (ptr, prop) { switch (RNA_property_type(prop)) { case PROP_ENUM: if (no_context) @@ -622,7 +622,7 @@ void WM_operator_properties_reset(wmOperator *op) PropertyRNA *iterprop; iterprop = RNA_struct_iterator_property(op->type->srna); - RNA_PROP_BEGIN(op->ptr, itemptr, iterprop) { + RNA_PROP_BEGIN (op->ptr, itemptr, iterprop) { PropertyRNA *prop = itemptr.data; if ((RNA_property_flag(prop) & PROP_SKIP_SAVE) == 0) { @@ -1796,7 +1796,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op) BLO_library_append_named_part_ex(C, mainl, &bh, name, idcode, flag); } else { - RNA_BEGIN(op->ptr, itemptr, "files") { + RNA_BEGIN (op->ptr, itemptr, "files") { RNA_string_get(&itemptr, "name", name); BLO_library_append_named_part_ex(C, mainl, &bh, name, idcode, flag); } @@ -2774,8 +2774,7 @@ int WM_gesture_lines_cancel(bContext *C, wmOperator *op) static int gesture_lasso_exec(bContext *C, wmOperator *op) { - RNA_BEGIN(op->ptr, itemptr, "path") - { + RNA_BEGIN (op->ptr, itemptr, "path") { float loc[2]; RNA_float_get_array(&itemptr, "loc", loc); -- cgit v1.2.3 From e2c453b5f9d3a0a26333b6585f07ebf9e3a24819 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 15:42:27 +0000 Subject: style cleanup: editors / mesh & object --- source/blender/editors/mesh/editmesh_rip.c | 6 +- source/blender/editors/mesh/editmesh_select.c | 2 +- source/blender/editors/mesh/editmesh_slide.c | 14 +- source/blender/editors/mesh/mesh_intern.h | 2 +- source/blender/editors/mesh/mesh_navmesh.c | 2 +- source/blender/editors/object/object_add.c | 681 ++++++++--------- source/blender/editors/object/object_bake.c | 824 ++++++++++---------- source/blender/editors/object/object_constraint.c | 458 +++++------ source/blender/editors/object/object_edit.c | 705 ++++++++--------- source/blender/editors/object/object_group.c | 90 +-- source/blender/editors/object/object_hook.c | 318 ++++---- source/blender/editors/object/object_intern.h | 2 +- source/blender/editors/object/object_lattice.c | 198 ++--- source/blender/editors/object/object_modifier.c | 424 +++++----- source/blender/editors/object/object_ops.c | 42 +- source/blender/editors/object/object_relations.c | 830 ++++++++++---------- source/blender/editors/object/object_select.c | 320 ++++---- source/blender/editors/object/object_shapekey.c | 166 ++-- source/blender/editors/object/object_transform.c | 272 +++---- source/blender/editors/object/object_vgroup.c | 891 +++++++++++----------- 20 files changed, 3125 insertions(+), 3122 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index b490dbe49c8..b74e8797d72 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -112,9 +112,9 @@ static float edbm_rip_edge_side_measure(BMEdge *e, BMLoop *e_l, score = len_v2v2(e_v1_co, e_v2_co); if (dist_to_line_segment_v2(fmval_tweak, e_v1_co, e_v2_co) > - dist_to_line_segment_v2(fmval, e_v1_co, e_v2_co)) + dist_to_line_segment_v2(fmval, e_v1_co, e_v2_co)) { - return score; + return score; } else { return -score; @@ -348,7 +348,7 @@ static int edbm_rip_call_edgesplit(BMEditMesh *em, wmOperator *op) BMOperator bmop; if (!EDBM_op_init(em, &bmop, op, "edgesplit edges=%he verts=%hv use_verts=%b", - BM_ELEM_TAG, BM_ELEM_SELECT, TRUE)) { + BM_ELEM_TAG, BM_ELEM_SELECT, TRUE)) { return FALSE; } BMO_op_exec(em->bm, &bmop); diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 0a0eb7964f6..32e70e798fe 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -1512,7 +1512,7 @@ int mouse_mesh(bContext *C, const int mval[2], short extend) vc.obedit->actcol = efa->mat_nr + 1; vc.em->mat_nr = efa->mat_nr; - WM_event_add_notifier(C, NC_MATERIAL|ND_SHADING, NULL); + WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING, NULL); } diff --git a/source/blender/editors/mesh/editmesh_slide.c b/source/blender/editors/mesh/editmesh_slide.c index 6c3af98dee9..a82f34a4649 100644 --- a/source/blender/editors/mesh/editmesh_slide.c +++ b/source/blender/editors/mesh/editmesh_slide.c @@ -88,7 +88,7 @@ typedef struct VertexSlideOp { int disk_edges; /* Edges */ - BMEdge** edge_frame; + BMEdge **edge_frame; /* Slide Frame Endpoints */ float (*vtx_frame)[3]; @@ -194,7 +194,7 @@ static void vtx_slide_confirm(bContext *C, wmOperator *op) { VertexSlideOp *vso = op->customdata; BMEditMesh *em = BMEdit_FromObject(vso->obj); - BMesh* bm = em->bm; + BMesh *bm = em->bm; /* Select new edge */ BM_edge_select_set(bm, vso->sel_edge, TRUE); @@ -204,7 +204,7 @@ static void vtx_slide_confirm(bContext *C, wmOperator *op) if (vso->snap_n_merge) { float other_d; - BMVert* other = BM_edge_other_vert(vso->sel_edge, vso->start_vtx); + BMVert *other = BM_edge_other_vert(vso->sel_edge, vso->start_vtx); other_d = len_v3v3(vso->interp, other->co); /* Only snap if within threshold */ @@ -339,12 +339,12 @@ static void vtx_slide_draw(const bContext *C, ARegion *UNUSED(ar), void *arg) } } -static BMEdge* vtx_slide_nrst_in_frame(VertexSlideOp *vso, const float mval[2]) +static BMEdge *vtx_slide_nrst_in_frame(VertexSlideOp *vso, const float mval[2]) { - BMEdge* cl_edge = NULL; + BMEdge *cl_edge = NULL; if (vso->disk_edges > 0) { int i = 0; - BMEdge* edge = NULL; + BMEdge *edge = NULL; float v1_proj[3], v2_proj[3]; float dist = 0; @@ -481,7 +481,7 @@ static int vtx_slide_set_frame(VertexSlideOp *vso) { BMEdge *edge; float (*vtx_frame)[3] = NULL; - BMEdge** edge_frame = NULL; + BMEdge **edge_frame = NULL; BMVert *curr_vert = NULL; BLI_array_declare(vtx_frame); BLI_array_declare(edge_frame); diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index 70ae9704d3e..b6403f33bc9 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -106,7 +106,7 @@ void MESH_OT_duplicate(struct wmOperatorType *ot); extern int EM_view3d_poll(struct bContext *C); -struct wmKeyMap* knifetool_modal_keymap(struct wmKeyConfig *keyconf); +struct wmKeyMap *knifetool_modal_keymap(struct wmKeyConfig *keyconf); /* ******************* knifetool.c */ diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c index d9f35aaeedd..43cd89af3ac 100644 --- a/source/blender/editors/mesh/mesh_navmesh.c +++ b/source/blender/editors/mesh/mesh_navmesh.c @@ -430,7 +430,7 @@ static int navmesh_create_exec(bContext *C, wmOperator *op) LinkNode *obs = NULL; Base *navmeshBase = NULL; - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { if (base->object->type == OB_MESH) { if (base->object->body_type == OB_BODY_TYPE_NAVMESH) { if (!navmeshBase || base == scene->basact) { diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 082b6f6dc93..21c9f776b94 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -111,8 +111,8 @@ void ED_object_location_from_view(bContext *C, float *loc) { - View3D *v3d= CTX_wm_view3d(C); - Scene *scene= CTX_data_scene(C); + View3D *v3d = CTX_wm_view3d(C); + Scene *scene = CTX_data_scene(C); float *cursor; cursor = give_cursor(scene, v3d); @@ -122,11 +122,11 @@ void ED_object_location_from_view(bContext *C, float *loc) void ED_object_rotation_from_view(bContext *C, float *rot) { - RegionView3D *rv3d= CTX_wm_region_view3d(C); + RegionView3D *rv3d = CTX_wm_region_view3d(C); if (rv3d) { float quat[4]; copy_qt_qt(quat, rv3d->viewquat); - quat[0]= -quat[0]; + quat[0] = -quat[0]; quat_to_eul(rot, quat); } else { @@ -136,8 +136,8 @@ void ED_object_rotation_from_view(bContext *C, float *rot) void ED_object_base_init_transform(bContext *C, Base *base, float *loc, float *rot) { - Object *ob= base->object; - Scene *scene= CTX_data_scene(C); + Object *ob = base->object; + Scene *scene = CTX_data_scene(C); if (!scene) return; @@ -195,19 +195,19 @@ void ED_object_add_generic_props(wmOperatorType *ot, int do_editmode) if (do_editmode) { prop = RNA_def_boolean(ot->srna, "enter_editmode", 0, "Enter Editmode", - "Enter editmode when adding this object"); - RNA_def_property_flag(prop, PROP_HIDDEN|PROP_SKIP_SAVE); + "Enter editmode when adding this object"); + RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); } prop = RNA_def_float_vector_xyz(ot->srna, "location", 3, NULL, -FLT_MAX, FLT_MAX, "Location", - "Location for the newly added object", -FLT_MAX, FLT_MAX); + "Location for the newly added object", -FLT_MAX, FLT_MAX); RNA_def_property_flag(prop, PROP_SKIP_SAVE); prop = RNA_def_float_rotation(ot->srna, "rotation", 3, NULL, -FLT_MAX, FLT_MAX, "Rotation", - "Rotation for the newly added object", (float)-M_PI * 2.0f, (float)M_PI * 2.0f); + "Rotation for the newly added object", (float)-M_PI * 2.0f, (float)M_PI * 2.0f); RNA_def_property_flag(prop, PROP_SKIP_SAVE); prop = RNA_def_boolean_layer_member(ot->srna, "layers", 20, NULL, "Layer", ""); - RNA_def_property_flag(prop, PROP_HIDDEN|PROP_SKIP_SAVE); + RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); } static void object_add_generic_invoke_options(bContext *C, wmOperator *op) @@ -229,14 +229,14 @@ static void object_add_generic_invoke_options(bContext *C, wmOperator *op) int a, values[20], layer; if (v3d) { - layer = (v3d->scenelock && !v3d->localvd)? scene->layact: v3d->layact; + layer = (v3d->scenelock && !v3d->localvd) ? scene->layact : v3d->layact; } else { layer = scene->layact; } - for (a=0; a<20; a++) { - values[a]= (layer & (1<ptr, "layers", values); @@ -250,7 +250,7 @@ int ED_object_add_generic_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(ev } int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, - float *rot, int *enter_editmode, unsigned int *layer, int *is_view_aligned) + float *rot, int *enter_editmode, unsigned int *layer, int *is_view_aligned) { View3D *v3d = CTX_wm_view3d(C); int a, layer_values[20]; @@ -263,8 +263,8 @@ int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, if (RNA_struct_property_is_set(op->ptr, "layers")) { RNA_boolean_get_array(op->ptr, "layers", layer_values); - *layer= 0; - for (a=0; a<20; a++) { + *layer = 0; + for (a = 0; a < 20; a++) { if (layer_values[a]) *layer |= (1 << a); else @@ -314,18 +314,18 @@ int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, /* for object add primitive operators */ /* do not call undo push in this function (users of this function have to) */ Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, - int enter_editmode, unsigned int layer) + int enter_editmode, unsigned int layer) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); Object *ob; /* for as long scene has editmode... */ if (CTX_data_edit_object(C)) - ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR|EM_DO_UNDO); /* freedata, and undo */ + ED_object_exit_editmode(C, EM_FREEDATA | EM_FREEUNDO | EM_WAITCURSOR | EM_DO_UNDO); /* freedata, and undo */ /* deselects all, sets scene->basact */ - ob= add_object(scene, type); + ob = add_object(scene, type); BASACT->lay = ob->lay = layer; /* editor level activate, notifiers */ ED_base_object_activate(C, BASACT); @@ -342,7 +342,7 @@ Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, if (enter_editmode) ED_object_enter_editmode(C, EM_IGNORE_LAYER); - WM_event_add_notifier(C, NC_SCENE|ND_LAYER_CONTENT, scene); + WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene); return ob; } @@ -376,7 +376,7 @@ void OBJECT_OT_add(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_enum(ot->srna, "type", object_type_items, 0, "Type", ""); @@ -414,20 +414,20 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type) if (!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL)) return NULL; - if (type==PFIELD_GUIDE) { - ob= ED_object_add_type(C, OB_CURVE, loc, rot, FALSE, layer); + if (type == PFIELD_GUIDE) { + ob = ED_object_add_type(C, OB_CURVE, loc, rot, FALSE, layer); rename_id(&ob->id, "CurveGuide"); - ((Curve*)ob->data)->flag |= CU_PATH|CU_3D; + ((Curve *)ob->data)->flag |= CU_PATH | CU_3D; ED_object_enter_editmode(C, 0); ED_object_new_primitive_matrix(C, ob, loc, rot, mat); - BLI_addtail(object_editcurve_get(ob), add_nurbs_primitive(C, mat, CU_NURBS|CU_PRIM_PATH, 1)); + BLI_addtail(object_editcurve_get(ob), add_nurbs_primitive(C, mat, CU_NURBS | CU_PRIM_PATH, 1)); if (!enter_editmode) ED_object_exit_editmode(C, EM_FREEDATA); } else { - ob= ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer); + ob = ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer); rename_id(&ob->id, "Field"); switch (type) { @@ -438,7 +438,7 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type) } } - ob->pd= object_add_collision_fields(type); + ob->pd = object_add_collision_fields(type); DAG_scene_sort(CTX_data_main(C), CTX_data_scene(C)); @@ -468,7 +468,7 @@ void OBJECT_OT_effector_add(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ot->prop = RNA_def_enum(ot->srna, "type", field_type_items, 0, "Type", ""); @@ -480,7 +480,7 @@ void OBJECT_OT_effector_add(wmOperatorType *ot) static int object_camera_add_exec(bContext *C, wmOperator *op) { View3D *v3d = CTX_wm_view3d(C); - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); Object *ob; int enter_editmode; unsigned int layer; @@ -494,12 +494,12 @@ static int object_camera_add_exec(bContext *C, wmOperator *op) if (!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL)) return OPERATOR_CANCELLED; - ob= ED_object_add_type(C, OB_CAMERA, loc, rot, FALSE, layer); + ob = ED_object_add_type(C, OB_CAMERA, loc, rot, FALSE, layer); if (v3d) { if (v3d->camera == NULL) v3d->camera = ob; - if (v3d->scenelock && scene->camera==NULL) { + if (v3d->scenelock && scene->camera == NULL) { scene->camera = ob; } } @@ -521,12 +521,12 @@ void OBJECT_OT_camera_add(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ED_object_add_generic_props(ot, TRUE); /* hide this for cameras, default */ - prop= RNA_struct_type_find_property(ot->srna, "view_align"); + prop = RNA_struct_type_find_property(ot->srna, "view_align"); RNA_def_property_flag(prop, PROP_HIDDEN); } @@ -535,9 +535,9 @@ void OBJECT_OT_camera_add(wmOperatorType *ot) /* ***************** add primitives *************** */ static int object_metaball_add_exec(bContext *C, wmOperator *op) { - Object *obedit= CTX_data_edit_object(C); + Object *obedit = CTX_data_edit_object(C); /*MetaElem *elem;*/ /*UNUSED*/ - int newob= 0; + int newob = 0; int enter_editmode; unsigned int layer; float loc[3], rot[3]; @@ -548,8 +548,8 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op) if (!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL)) return OPERATOR_CANCELLED; - if (obedit==NULL || obedit->type!=OB_MBALL) { - obedit= ED_object_add_type(C, OB_MBALL, loc, rot, TRUE, layer); + if (obedit == NULL || obedit->type != OB_MBALL) { + obedit = ED_object_add_type(C, OB_MBALL, loc, rot, TRUE, layer); newob = 1; } else DAG_id_tag_update(&obedit->id, OB_RECALC_DATA); @@ -563,21 +563,21 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op) ED_object_exit_editmode(C, EM_FREEDATA); } - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); return OPERATOR_FINISHED; } static int object_metaball_add_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { - Object *obedit= CTX_data_edit_object(C); + Object *obedit = CTX_data_edit_object(C); uiPopupMenu *pup; uiLayout *layout; object_add_generic_invoke_options(C, op); - pup= uiPupMenuBegin(C, op->type->name, ICON_NONE); - layout= uiPupMenuLayout(pup); + pup = uiPupMenuBegin(C, op->type->name, ICON_NONE); + layout = uiPupMenuLayout(pup); if (!obedit || obedit->type == OB_MBALL) uiItemsEnumO(layout, op->type->idname, "type"); else @@ -600,7 +600,7 @@ void OBJECT_OT_metaball_add(wmOperatorType *ot) ot->poll = ED_operator_scene_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_enum(ot->srna, "type", metaelem_type_items, 0, "Primitive", ""); ED_object_add_generic_props(ot, TRUE); @@ -608,7 +608,7 @@ void OBJECT_OT_metaball_add(wmOperatorType *ot) static int object_add_text_exec(bContext *C, wmOperator *op) { - Object *obedit= CTX_data_edit_object(C); + Object *obedit = CTX_data_edit_object(C); int enter_editmode; unsigned int layer; float loc[3], rot[3]; @@ -617,12 +617,12 @@ static int object_add_text_exec(bContext *C, wmOperator *op) if (!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL)) return OPERATOR_CANCELLED; - if (obedit && obedit->type==OB_FONT) + if (obedit && obedit->type == OB_FONT) return OPERATOR_CANCELLED; - obedit= ED_object_add_type(C, OB_FONT, loc, rot, enter_editmode, layer); + obedit = ED_object_add_type(C, OB_FONT, loc, rot, enter_editmode, layer); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); return OPERATOR_FINISHED; } @@ -640,16 +640,16 @@ void OBJECT_OT_text_add(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ED_object_add_generic_props(ot, TRUE); } static int object_armature_add_exec(bContext *C, wmOperator *op) { - Object *obedit= CTX_data_edit_object(C); - View3D *v3d= CTX_wm_view3d(C); - RegionView3D *rv3d= CTX_wm_region_view3d(C); - int newob= 0; + Object *obedit = CTX_data_edit_object(C); + View3D *v3d = CTX_wm_view3d(C); + RegionView3D *rv3d = CTX_wm_region_view3d(C); + int newob = 0; int enter_editmode; unsigned int layer; float loc[3], rot[3]; @@ -658,14 +658,14 @@ static int object_armature_add_exec(bContext *C, wmOperator *op) if (!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL)) return OPERATOR_CANCELLED; - if ((obedit==NULL) || (obedit->type != OB_ARMATURE)) { - obedit= ED_object_add_type(C, OB_ARMATURE, loc, rot, TRUE, layer); + if ((obedit == NULL) || (obedit->type != OB_ARMATURE)) { + obedit = ED_object_add_type(C, OB_ARMATURE, loc, rot, TRUE, layer); ED_object_enter_editmode(C, 0); newob = 1; } else DAG_id_tag_update(&obedit->id, OB_RECALC_DATA); - if (obedit==NULL) { + if (obedit == NULL) { BKE_report(op->reports, RPT_ERROR, "Cannot create editmode armature"); return OPERATOR_CANCELLED; } @@ -677,7 +677,7 @@ static int object_armature_add_exec(bContext *C, wmOperator *op) if (newob && !enter_editmode) ED_object_exit_editmode(C, EM_FREEDATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, obedit); return OPERATOR_FINISHED; } @@ -695,7 +695,7 @@ void OBJECT_OT_armature_add(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ED_object_add_generic_props(ot, TRUE); } @@ -714,10 +714,10 @@ static const char *get_lamp_defname(int type) static int object_lamp_add_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); Object *ob; Lamp *la; - int type= RNA_enum_get(op->ptr, "type"); + int type = RNA_enum_get(op->ptr, "type"); int enter_editmode; unsigned int layer; float loc[3], rot[3]; @@ -726,16 +726,16 @@ static int object_lamp_add_exec(bContext *C, wmOperator *op) if (!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL)) return OPERATOR_CANCELLED; - ob= ED_object_add_type(C, OB_LAMP, loc, rot, FALSE, layer); - la= (Lamp*)ob->data; + ob = ED_object_add_type(C, OB_LAMP, loc, rot, FALSE, layer); + la = (Lamp *)ob->data; - la->type= type; + la->type = type; rename_id(&ob->id, get_lamp_defname(type)); rename_id(&la->id, get_lamp_defname(type)); if (scene_use_new_shading_nodes(scene)) { ED_node_shader_default(scene, &la->id); - la->use_nodes= 1; + la->use_nodes = 1; } return OPERATOR_FINISHED; @@ -762,7 +762,7 @@ void OBJECT_OT_lamp_add(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ ot->prop = RNA_def_enum(ot->srna, "type", lamp_type_items, 0, "Type", ""); @@ -772,7 +772,7 @@ void OBJECT_OT_lamp_add(wmOperatorType *ot) static int group_instance_add_exec(bContext *C, wmOperator *op) { - Group *group= BLI_findlink(&CTX_data_main(C)->group, RNA_enum_get(op->ptr, "group")); + Group *group = BLI_findlink(&CTX_data_main(C)->group, RNA_enum_get(op->ptr, "group")); int enter_editmode; unsigned int layer; @@ -783,18 +783,18 @@ static int group_instance_add_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; if (group) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Object *ob= ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer); - rename_id(&ob->id, group->id.name+2); - ob->dup_group= group; + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Object *ob = ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer); + rename_id(&ob->id, group->id.name + 2); + ob->dup_group = group; ob->transflag |= OB_DUPLIGROUP; id_lib_extern(&group->id); /* works without this except if you try render right after, see: 22027 */ DAG_scene_sort(bmain, scene); - WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -814,7 +814,7 @@ static int object_speaker_add_exec(bContext *C, wmOperator *op) if (!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL)) return OPERATOR_CANCELLED; - ob= ED_object_add_type(C, OB_SPEAKER, loc, rot, FALSE, layer); + ob = ED_object_add_type(C, OB_SPEAKER, loc, rot, FALSE, layer); /* to make it easier to start using this immediately in NLA, a default sound clip is created * ready to be moved around to retime the sound and/or make new sound clips @@ -834,7 +834,7 @@ static int object_speaker_add_exec(bContext *C, wmOperator *op) strcpy(nlt->name, "SoundTrack"); BKE_nlastrip_validate_name(adt, strip); - WM_event_add_notifier(C, NC_ANIMATION|ND_NLA|NA_EDITED, NULL); + WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); } return OPERATOR_FINISHED; @@ -852,7 +852,7 @@ void OBJECT_OT_speaker_add(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ED_object_add_generic_props(ot, TRUE); } @@ -874,10 +874,10 @@ void OBJECT_OT_group_instance_add(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "group", DummyRNA_NULL_items, 0, "Group", ""); + prop = RNA_def_enum(ot->srna, "group", DummyRNA_NULL_items, 0, "Group", ""); RNA_def_enum_funcs(prop, RNA_group_itemf); ot->prop = prop; ED_object_add_generic_props(ot, FALSE); @@ -892,21 +892,21 @@ void ED_base_object_free_and_unlink(Main *bmain, Scene *scene, Base *base) DAG_id_type_tag(bmain, ID_OB); BLI_remlink(&scene->base, base); free_libblock_us(&bmain->object, base->object); - if (scene->basact==base) scene->basact= NULL; + if (scene->basact == base) scene->basact = NULL; MEM_freeN(base); } static int object_delete_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - const short use_global= RNA_boolean_get(op->ptr, "use_global"); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + const short use_global = RNA_boolean_get(op->ptr, "use_global"); /* int islamp= 0; */ /* UNUSED */ if (CTX_data_edit_object(C)) return OPERATOR_CANCELLED; - CTX_DATA_BEGIN (C, Base*, base, selected_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_bases) { /* if (base->object->type==OB_LAMP) islamp= 1; */ @@ -920,9 +920,9 @@ static int object_delete_exec(bContext *C, wmOperator *op) Scene *scene_iter; Base *base_other; - for (scene_iter= bmain->scene.first; scene_iter; scene_iter= scene_iter->id.next) { + for (scene_iter = bmain->scene.first; scene_iter; scene_iter = scene_iter->id.next) { if (scene_iter != scene && !(scene_iter->id.lib)) { - base_other= object_in_scene(base->object, scene_iter); + base_other = object_in_scene(base->object, scene_iter); if (base_other) { ED_base_object_free_and_unlink(bmain, scene_iter, base_other); } @@ -937,8 +937,8 @@ static int object_delete_exec(bContext *C, wmOperator *op) DAG_scene_sort(bmain, scene); DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene); - WM_event_add_notifier(C, NC_SCENE|ND_LAYER_CONTENT, scene); + WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene); + WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene); return OPERATOR_FINISHED; } @@ -956,7 +956,7 @@ void OBJECT_OT_delete(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_boolean(ot->srna, "use_global", 0, "Delete Globally", "Remove object from all scenes"); } @@ -966,81 +966,81 @@ void OBJECT_OT_delete(wmOperatorType *ot) /* after copying objects, copied data should get new pointers */ static void copy_object_set_idnew(bContext *C, int dupflag) { - Main *bmain= CTX_data_main(C); + Main *bmain = CTX_data_main(C); Material *ma, *mao; ID *id; int a; /* XXX check object pointers */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { object_relink(ob); } CTX_DATA_END; /* materials */ - if ( dupflag & USER_DUP_MAT) { - mao= bmain->mat.first; + if (dupflag & USER_DUP_MAT) { + mao = bmain->mat.first; while (mao) { if (mao->id.newid) { - ma= (Material *)mao->id.newid; + ma = (Material *)mao->id.newid; if (dupflag & USER_DUP_TEX) { - for (a=0; amtex[a]) { - id= (ID *)ma->mtex[a]->tex; + id = (ID *)ma->mtex[a]->tex; if (id) { ID_NEW_US(ma->mtex[a]->tex) - else ma->mtex[a]->tex= copy_texture(ma->mtex[a]->tex); + else ma->mtex[a]->tex = copy_texture(ma->mtex[a]->tex); id->us--; } } } } #if 0 // XXX old animation system - id= (ID *)ma->ipo; + id = (ID *)ma->ipo; if (id) { ID_NEW_US(ma->ipo) - else ma->ipo= copy_ipo(ma->ipo); + else ma->ipo = copy_ipo(ma->ipo); id->us--; } #endif // XXX old animation system } - mao= mao->id.next; + mao = mao->id.next; } } #if 0 // XXX old animation system - /* lamps */ - if ( dupflag & USER_DUP_IPO) { - Lamp *la= bmain->lamp.first; + /* lamps */ + if (dupflag & USER_DUP_IPO) { + Lamp *la = bmain->lamp.first; while (la) { if (la->id.newid) { - Lamp *lan= (Lamp *)la->id.newid; - id= (ID *)lan->ipo; + Lamp *lan = (Lamp *)la->id.newid; + id = (ID *)lan->ipo; if (id) { ID_NEW_US(lan->ipo) - else lan->ipo= copy_ipo(lan->ipo); + else lan->ipo = copy_ipo(lan->ipo); id->us--; } } - la= la->id.next; + la = la->id.next; } } /* ipos */ - ipo= bmain->ipo.first; + ipo = bmain->ipo.first; while (ipo) { - if (ipo->id.lib==NULL && ipo->id.newid) { - Ipo *ipon= (Ipo *)ipo->id.newid; + if (ipo->id.lib == NULL && ipo->id.newid) { + Ipo *ipon = (Ipo *)ipo->id.newid; IpoCurve *icu; - for (icu= ipon->curve.first; icu; icu= icu->next) { + for (icu = ipon->curve.first; icu; icu = icu->next) { if (icu->driver) { ID_NEW(icu->driver->ob); } } } - ipo= ipo->id.next; + ipo = ipo->id.next; } #endif // XXX old animation system @@ -1057,42 +1057,42 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base, { ListBase *lb; DupliObject *dob; - GHash *dupli_gh= NULL, *parent_gh= NULL; + GHash *dupli_gh = NULL, *parent_gh = NULL; if (!(base->object->transflag & OB_DUPLI)) return; - lb= object_duplilist(scene, base->object); + lb = object_duplilist(scene, base->object); if (use_hierarchy || use_base_parent) { - dupli_gh= BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "make_object_duplilist_real dupli_gh"); - parent_gh= BLI_ghash_new(BLI_ghashutil_pairhash, BLI_ghashutil_paircmp, "make_object_duplilist_real parent_gh"); + dupli_gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "make_object_duplilist_real dupli_gh"); + parent_gh = BLI_ghash_new(BLI_ghashutil_pairhash, BLI_ghashutil_paircmp, "make_object_duplilist_real parent_gh"); } - for (dob= lb->first; dob; dob= dob->next) { + for (dob = lb->first; dob; dob = dob->next) { Base *basen; - Object *ob= copy_object(dob->ob); + Object *ob = copy_object(dob->ob); /* font duplis can have a totcol without material, we get them from parent * should be implemented better... */ - if (ob->mat==NULL) ob->totcol= 0; + if (ob->mat == NULL) ob->totcol = 0; - basen= MEM_dupallocN(base); - basen->flag &= ~(OB_FROMDUPLI|OB_FROMGROUP); - ob->flag= basen->flag; - basen->lay= base->lay; - BLI_addhead(&scene->base, basen); /* addhead: othwise eternal loop */ - basen->object= ob; + basen = MEM_dupallocN(base); + basen->flag &= ~(OB_FROMDUPLI | OB_FROMGROUP); + ob->flag = basen->flag; + basen->lay = base->lay; + BLI_addhead(&scene->base, basen); /* addhead: othwise eternal loop */ + basen->object = ob; /* make sure apply works */ BKE_free_animdata(&ob->id); ob->adt = NULL; - ob->parent= NULL; - ob->constraints.first= ob->constraints.last= NULL; - ob->disp.first= ob->disp.last= NULL; + ob->parent = NULL; + ob->constraints.first = ob->constraints.last = NULL; + ob->disp.first = ob->disp.last = NULL; ob->transflag &= ~OB_DUPLI; - ob->lay= base->lay; + ob->lay = base->lay; copy_m4_m4(ob->obmat, dob->mat); object_apply_mat4(ob, ob->obmat, FALSE, FALSE); @@ -1104,13 +1104,13 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base, } if (use_hierarchy) { - for (dob= lb->first; dob; dob= dob->next) { + for (dob = lb->first; dob; dob = dob->next) { /* original parents */ - Object *ob_src= dob->ob; - Object *ob_src_par= ob_src->parent; + Object *ob_src = dob->ob; + Object *ob_src_par = ob_src->parent; - Object *ob_dst= BLI_ghash_lookup(dupli_gh, dob); - Object *ob_dst_par= NULL; + Object *ob_dst = BLI_ghash_lookup(dupli_gh, dob); + Object *ob_dst_par = NULL; /* find parent that was also made real */ if (ob_src_par) { @@ -1121,19 +1121,19 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base, if (ob_dst_par) { /* allow for all possible parent types */ - ob_dst->partype= ob_src->partype; + ob_dst->partype = ob_src->partype; BLI_strncpy(ob_dst->parsubstr, ob_src->parsubstr, sizeof(ob_dst->parsubstr)); - ob_dst->par1= ob_src->par1; - ob_dst->par2= ob_src->par2; - ob_dst->par3= ob_src->par3; + ob_dst->par1 = ob_src->par1; + ob_dst->par2 = ob_src->par2; + ob_dst->par3 = ob_src->par3; copy_m4_m4(ob_dst->parentinv, ob_src->parentinv); - ob_dst->parent= ob_dst_par; + ob_dst->parent = ob_dst_par; } else if (use_base_parent) { - ob_dst->parent= base->object; - ob_dst->partype= PAROBJECT; + ob_dst->parent = base->object; + ob_dst->partype = PAROBJECT; } if (ob_dst->parent) { @@ -1151,12 +1151,12 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base, else if (use_base_parent) { /* since we are ignoring the internal hierarchy - parent all to the * base object */ - for (dob= lb->first; dob; dob= dob->next) { + for (dob = lb->first; dob; dob = dob->next) { /* original parents */ - Object *ob_dst= BLI_ghash_lookup(dupli_gh, dob); + Object *ob_dst = BLI_ghash_lookup(dupli_gh, dob); - ob_dst->parent= base->object; - ob_dst->partype= PAROBJECT; + ob_dst->parent = base->object; + ob_dst->partype = PAROBJECT; /* similer to the code above, see comments */ invert_m4_m4(ob_dst->parentinv, dob->mat); @@ -1181,26 +1181,26 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base, static int object_duplicates_make_real_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); - const short use_base_parent= RNA_boolean_get(op->ptr, "use_base_parent"); - const short use_hierarchy= RNA_boolean_get(op->ptr, "use_hierarchy"); + const short use_base_parent = RNA_boolean_get(op->ptr, "use_base_parent"); + const short use_hierarchy = RNA_boolean_get(op->ptr, "use_hierarchy"); clear_id_newpoins(); - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { make_object_duplilist_real(C, scene, base, use_base_parent, use_hierarchy); /* dependencies were changed */ - WM_event_add_notifier(C, NC_OBJECT|ND_PARENT, base->object); + WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, base->object); } CTX_DATA_END; DAG_scene_sort(bmain, scene); DAG_ids_flush_update(bmain, 0); WM_event_add_notifier(C, NC_SCENE, scene); - WM_main_add_notifier(NC_OBJECT|ND_DRAW, NULL); + WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL); return OPERATOR_FINISHED; } @@ -1219,7 +1219,7 @@ void OBJECT_OT_duplicates_make_real(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_boolean(ot->srna, "use_base_parent", 0, "Parent", "Parent newly created objects to the original duplicator"); RNA_def_boolean(ot->srna, "use_hierarchy", 0, "Keep Hierarchy", "Maintain parent child relationships"); @@ -1227,15 +1227,16 @@ void OBJECT_OT_duplicates_make_real(wmOperatorType *ot) /**************************** Convert **************************/ -static EnumPropertyItem convert_target_items[]= { +static EnumPropertyItem convert_target_items[] = { {OB_CURVE, "CURVE", ICON_OUTLINER_OB_CURVE, "Curve from Mesh/Text", ""}, {OB_MESH, "MESH", ICON_OUTLINER_OB_MESH, "Mesh from Curve/Meta/Surf/Text", ""}, - {0, NULL, 0, NULL, NULL}}; + {0, NULL, 0, NULL, NULL} +}; static void curvetomesh(Scene *scene, Object *ob) { if (ob->disp.first == NULL) - makeDispListCurveTypes(scene, ob, 0); /* force creation */ + makeDispListCurveTypes(scene, ob, 0); /* force creation */ nurbs_to_mesh(ob); /* also does users */ @@ -1245,8 +1246,8 @@ static void curvetomesh(Scene *scene, Object *ob) static int convert_poll(bContext *C) { - Object *obact= CTX_data_active_object(C); - Scene *scene= CTX_data_scene(C); + Object *obact = CTX_data_active_object(C); + Scene *scene = CTX_data_scene(C); return (!scene->id.lib && obact && scene->obedit != obact && (obact->flag & SELECT) && !(obact->id.lib)); } @@ -1258,16 +1259,16 @@ static Base *duplibase_for_convert(Scene *scene, Base *base, Object *ob) Base *basen; if (ob == NULL) { - ob= base->object; + ob = base->object; } - obn= copy_object(ob); - obn->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + obn = copy_object(ob); + obn->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; - basen= MEM_mallocN(sizeof(Base), "duplibase"); - *basen= *base; - BLI_addhead(&scene->base, basen); /* addhead: otherwise eternal loop */ - basen->object= obn; + basen = MEM_mallocN(sizeof(Base), "duplibase"); + *basen = *base; + BLI_addhead(&scene->base, basen); /* addhead: otherwise eternal loop */ + basen->object = obn; basen->flag |= SELECT; obn->flag |= SELECT; base->flag &= ~SELECT; @@ -1278,24 +1279,24 @@ static Base *duplibase_for_convert(Scene *scene, Base *base, Object *ob) static int convert_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Base *basen=NULL, *basact=NULL, *basedel=NULL; - Object *ob, *ob1, *newob, *obact= CTX_data_active_object(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Base *basen = NULL, *basact = NULL, *basedel = NULL; + Object *ob, *ob1, *newob, *obact = CTX_data_active_object(C); DerivedMesh *dm; Curve *cu; Nurb *nu; MetaBall *mb; Mesh *me; - const short target= RNA_enum_get(op->ptr, "target"); - const short keep_original= RNA_boolean_get(op->ptr, "keep_original"); - int a, mballConverted= 0; + const short target = RNA_enum_get(op->ptr, "target"); + const short keep_original = RNA_boolean_get(op->ptr, "keep_original"); + int a, mballConverted = 0; /* don't forget multiple users! */ /* reset flags */ - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { - ob= base->object; + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + ob = base->object; ob->flag &= ~OB_DONE; /* flag data thats not been edited (only needed for !keep_original) */ @@ -1305,8 +1306,8 @@ static int convert_exec(bContext *C, wmOperator *op) } CTX_DATA_END; - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { - ob= base->object; + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + ob = base->object; if (ob->flag & OB_DONE || !IS_TAGGED(ob->data)) { if (ob->type != target) { @@ -1319,23 +1320,23 @@ static int convert_exec(bContext *C, wmOperator *op) /* When 2 objects with linked data are selected, converting both * would keep modifiers on all but the converted object [#26003] */ if (ob->type == OB_MESH) { - object_free_modifiers(ob); /* after derivedmesh calls! */ + object_free_modifiers(ob); /* after derivedmesh calls! */ } } } - else if (ob->type==OB_MESH && target == OB_CURVE) { + else if (ob->type == OB_MESH && target == OB_CURVE) { ob->flag |= OB_DONE; if (keep_original) { - basen= duplibase_for_convert(scene, base, NULL); - newob= basen->object; + basen = duplibase_for_convert(scene, base, NULL); + newob = basen->object; /* decrement original mesh's usage count */ - me= newob->data; + me = newob->data; me->id.us--; /* make a new copy of the mesh */ - newob->data= copy_mesh(me); + newob->data = copy_mesh(me); } else { newob = ob; @@ -1343,33 +1344,33 @@ static int convert_exec(bContext *C, wmOperator *op) mesh_to_curve(scene, newob); - if (newob->type==OB_CURVE) - object_free_modifiers(newob); /* after derivedmesh calls! */ + if (newob->type == OB_CURVE) + object_free_modifiers(newob); /* after derivedmesh calls! */ } - else if (ob->type==OB_MESH && ob->modifiers.first) { /* converting a mesh with no modifiers causes a segfault */ + else if (ob->type == OB_MESH && ob->modifiers.first) { /* converting a mesh with no modifiers causes a segfault */ ob->flag |= OB_DONE; if (keep_original) { - basen= duplibase_for_convert(scene, base, NULL); - newob= basen->object; + basen = duplibase_for_convert(scene, base, NULL); + newob = basen->object; /* decrement original mesh's usage count */ - me= newob->data; + me = newob->data; me->id.us--; /* make a new copy of the mesh */ - newob->data= copy_mesh(me); + newob->data = copy_mesh(me); } else { newob = ob; - ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; } /* make new mesh data from the original copy */ /* note: get the mesh from the original, not from the copy in some * cases this doesnt give correct results (when MDEF is used for eg) */ - dm= mesh_get_derived_final(scene, newob, CD_MASK_MESH); + dm = mesh_get_derived_final(scene, newob, CD_MASK_MESH); /* dm= mesh_create_derived_no_deform(ob1, NULL); this was called original (instead of get_derived). man o man why! (ton) */ DM_to_mesh(dm, newob->data, newob); @@ -1377,64 +1378,64 @@ static int convert_exec(bContext *C, wmOperator *op) /* re-tessellation is called by DM_to_mesh */ dm->release(dm); - object_free_modifiers(newob); /* after derivedmesh calls! */ + object_free_modifiers(newob); /* after derivedmesh calls! */ } - else if (ob->type==OB_FONT) { + else if (ob->type == OB_FONT) { ob->flag |= OB_DONE; if (keep_original) { - basen= duplibase_for_convert(scene, base, NULL); - newob= basen->object; + basen = duplibase_for_convert(scene, base, NULL); + newob = basen->object; /* decrement original curve's usage count */ ((Curve *)newob->data)->id.us--; /* make a new copy of the curve */ - newob->data= copy_curve(ob->data); + newob->data = copy_curve(ob->data); } else { - newob= ob; + newob = ob; } - cu= newob->data; + cu = newob->data; if (!newob->disp.first) makeDispListCurveTypes(scene, newob, 0); - newob->type= OB_CURVE; - cu->type= OB_CURVE; + newob->type = OB_CURVE; + cu->type = OB_CURVE; if (cu->vfont) { cu->vfont->id.us--; - cu->vfont= NULL; + cu->vfont = NULL; } if (cu->vfontb) { cu->vfontb->id.us--; - cu->vfontb= NULL; + cu->vfontb = NULL; } if (cu->vfonti) { cu->vfonti->id.us--; - cu->vfonti= NULL; + cu->vfonti = NULL; } if (cu->vfontbi) { cu->vfontbi->id.us--; - cu->vfontbi= NULL; + cu->vfontbi = NULL; } if (!keep_original) { /* other users */ - if (cu->id.us>1) { - for (ob1= bmain->object.first; ob1; ob1=ob1->id.next) { - if (ob1->data==ob->data) { - ob1->type= OB_CURVE; - ob1->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + if (cu->id.us > 1) { + for (ob1 = bmain->object.first; ob1; ob1 = ob1->id.next) { + if (ob1->data == ob->data) { + ob1->type = OB_CURVE; + ob1->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; } } } } - for (nu=cu->nurb.first; nu; nu=nu->next) - nu->charidx= 0; + for (nu = cu->nurb.first; nu; nu = nu->next) + nu->charidx = 0; if (target == OB_MESH) { curvetomesh(scene, newob); @@ -1448,17 +1449,17 @@ static int convert_exec(bContext *C, wmOperator *op) if (target == OB_MESH) { if (keep_original) { - basen= duplibase_for_convert(scene, base, NULL); - newob= basen->object; + basen = duplibase_for_convert(scene, base, NULL); + newob = basen->object; /* decrement original curve's usage count */ ((Curve *)newob->data)->id.us--; /* make a new copy of the curve */ - newob->data= copy_curve(ob->data); + newob->data = copy_curve(ob->data); } else { - newob= ob; + newob = ob; /* meshes doesn't use displist */ freedisplist(&newob->disp); @@ -1467,13 +1468,13 @@ static int convert_exec(bContext *C, wmOperator *op) curvetomesh(scene, newob); } } - else if (ob->type==OB_MBALL && target == OB_MESH) { + else if (ob->type == OB_MBALL && target == OB_MESH) { Object *baseob; base->flag &= ~SELECT; ob->flag &= ~SELECT; - baseob= find_basis_mball(scene, ob); + baseob = find_basis_mball(scene, ob); if (ob != baseob) { /* if motherball is converting it would be marked as done later */ @@ -1487,29 +1488,29 @@ static int convert_exec(bContext *C, wmOperator *op) if (!(baseob->flag & OB_DONE)) { baseob->flag |= OB_DONE; - basen= duplibase_for_convert(scene, base, baseob); - newob= basen->object; + basen = duplibase_for_convert(scene, base, baseob); + newob = basen->object; - mb= newob->data; + mb = newob->data; mb->id.us--; - newob->data= add_mesh("Mesh"); - newob->type= OB_MESH; + newob->data = add_mesh("Mesh"); + newob->type = OB_MESH; - me= newob->data; - me->totcol= mb->totcol; + me = newob->data; + me->totcol = mb->totcol; if (newob->totcol) { - me->mat= MEM_dupallocN(mb->mat); - for (a=0; atotcol; a++) id_us_plus((ID *)me->mat[a]); + me->mat = MEM_dupallocN(mb->mat); + for (a = 0; a < newob->totcol; a++) id_us_plus((ID *)me->mat[a]); } mball_to_mesh(&baseob->disp, newob->data); if (obact->type == OB_MBALL) { - basact= basen; + basact = basen; } - mballConverted= 1; + mballConverted = 1; } } else { @@ -1522,10 +1523,10 @@ static int convert_exec(bContext *C, wmOperator *op) if (basen) { if (ob == obact) { /* store new active base to update BASACT */ - basact= basen; + basact = basen; } - basen= NULL; + basen = NULL; } if (!keep_original && (ob->flag & OB_DONE)) { @@ -1545,11 +1546,11 @@ static int convert_exec(bContext *C, wmOperator *op) if (!keep_original) { if (mballConverted) { - Base *base= scene->base.first, *tmpbase; + Base *base = scene->base.first, *tmpbase; while (base) { - ob= base->object; - tmpbase= base; - base= base->next; + ob = base->object; + tmpbase = base; + base = base->next; if (ob->type == OB_MBALL) { ED_base_object_free_and_unlink(bmain, scene, tmpbase); @@ -1567,16 +1568,16 @@ static int convert_exec(bContext *C, wmOperator *op) if (basact) { /* active base was changed */ ED_base_object_activate(C, basact); - BASACT= basact; + BASACT = basact; } else if (BASACT->object->flag & OB_DONE) { - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, BASACT->object); - WM_event_add_notifier(C, NC_OBJECT|ND_DATA, BASACT->object); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, BASACT->object); + WM_event_add_notifier(C, NC_OBJECT | ND_DATA, BASACT->object); } DAG_scene_sort(bmain, scene); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, scene); - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, scene); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene); return OPERATOR_FINISHED; } @@ -1595,7 +1596,7 @@ void OBJECT_OT_convert(wmOperatorType *ot) ot->poll = convert_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ ot->prop = RNA_def_enum(ot->srna, "target", convert_target_items, OB_MESH, "Target", "Type of object to convert to"); @@ -1614,28 +1615,28 @@ void OBJECT_OT_convert(wmOperatorType *ot) /* leaves selection of base/object unaltered */ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base, int dupflag) { - Base *basen= NULL; + Base *basen = NULL; Material ***matarar; Object *ob, *obn; ID *id; int a, didit; - ob= base->object; + ob = base->object; if (ob->mode & OB_MODE_POSE) { ; /* nothing? */ } else { - obn= copy_object(ob); - obn->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + obn = copy_object(ob); + obn->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; - basen= MEM_mallocN(sizeof(Base), "duplibase"); - *basen= *base; - BLI_addhead(&scene->base, basen); /* addhead: prevent eternal loop */ - basen->object= obn; + basen = MEM_mallocN(sizeof(Base), "duplibase"); + *basen = *base; + BLI_addhead(&scene->base, basen); /* addhead: prevent eternal loop */ + basen->object = obn; if (basen->flag & OB_FROMGROUP) { Group *group; - for (group= bmain->group.first; group; group= group->id.next) { + for (group = bmain->group.first; group; group = group->id.next) { if (object_in_group(ob, group)) add_to_group(group, obn, scene, basen); } @@ -1647,11 +1648,11 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base } if (dupflag & USER_DUP_MAT) { - for (a=0; atotcol; a++) { - id= (ID *)obn->mat[a]; + for (a = 0; a < obn->totcol; a++) { + id = (ID *)obn->mat[a]; if (id) { ID_NEW_US(obn->mat[a]) - else obn->mat[a]= copy_material(obn->mat[a]); + else obn->mat[a] = copy_material(obn->mat[a]); id->us--; if (dupflag & USER_DUP_ACT) { @@ -1662,11 +1663,11 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base } if (dupflag & USER_DUP_PSYS) { ParticleSystem *psys; - for (psys=obn->particlesystem.first; psys; psys=psys->next) { - id= (ID*) psys->part; + for (psys = obn->particlesystem.first; psys; psys = psys->next) { + id = (ID *) psys->part; if (id) { ID_NEW_US(psys->part) - else psys->part= psys_copy_settings(psys->part); + else psys->part = psys_copy_settings(psys->part); if (dupflag & USER_DUP_ACT) { BKE_copy_animdata_id_action(&psys->part->id); @@ -1677,71 +1678,71 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base } } - id= obn->data; - didit= 0; + id = obn->data; + didit = 0; switch (obn->type) { case OB_MESH: if (dupflag & USER_DUP_MESH) { - ID_NEW_US2( obn->data ) + ID_NEW_US2(obn->data) else { - obn->data= copy_mesh(obn->data); + obn->data = copy_mesh(obn->data); if (obn->fluidsimSettings) { obn->fluidsimSettings->orgMesh = (Mesh *)obn->data; } - didit= 1; + didit = 1; } id->us--; } break; case OB_CURVE: if (dupflag & USER_DUP_CURVE) { - ID_NEW_US2(obn->data ) + ID_NEW_US2(obn->data) else { - obn->data= copy_curve(obn->data); - didit= 1; + obn->data = copy_curve(obn->data); + didit = 1; } id->us--; } break; case OB_SURF: if (dupflag & USER_DUP_SURF) { - ID_NEW_US2( obn->data ) + ID_NEW_US2(obn->data) else { - obn->data= copy_curve(obn->data); - didit= 1; + obn->data = copy_curve(obn->data); + didit = 1; } id->us--; } break; case OB_FONT: if (dupflag & USER_DUP_FONT) { - ID_NEW_US2( obn->data ) + ID_NEW_US2(obn->data) else { - obn->data= copy_curve(obn->data); - didit= 1; + obn->data = copy_curve(obn->data); + didit = 1; } id->us--; } break; case OB_MBALL: if (dupflag & USER_DUP_MBALL) { - ID_NEW_US2(obn->data ) + ID_NEW_US2(obn->data) else { - obn->data= copy_mball(obn->data); - didit= 1; + obn->data = copy_mball(obn->data); + didit = 1; } id->us--; } break; case OB_LAMP: if (dupflag & USER_DUP_LAMP) { - ID_NEW_US2(obn->data ) + ID_NEW_US2(obn->data) else { - obn->data= copy_lamp(obn->data); - didit= 1; + obn->data = copy_lamp(obn->data); + didit = 1; } id->us--; } @@ -1751,44 +1752,44 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base obn->recalc |= OB_RECALC_DATA; if (obn->pose) obn->pose->flag |= POSE_RECALC; - if (dupflag & USER_DUP_ARM) { - ID_NEW_US2(obn->data ) - else { - obn->data= copy_armature(obn->data); - armature_rebuild_pose(obn, obn->data); - didit= 1; - } - id->us--; + if (dupflag & USER_DUP_ARM) { + ID_NEW_US2(obn->data) + else { + obn->data = copy_armature(obn->data); + armature_rebuild_pose(obn, obn->data); + didit = 1; } + id->us--; + } - break; + break; case OB_LATTICE: - if (dupflag!=0) { - ID_NEW_US2(obn->data ) + if (dupflag != 0) { + ID_NEW_US2(obn->data) else { - obn->data= copy_lattice(obn->data); - didit= 1; + obn->data = copy_lattice(obn->data); + didit = 1; } id->us--; } break; case OB_CAMERA: - if (dupflag!=0) { - ID_NEW_US2(obn->data ) + if (dupflag != 0) { + ID_NEW_US2(obn->data) else { - obn->data= copy_camera(obn->data); - didit= 1; + obn->data = copy_camera(obn->data); + didit = 1; } id->us--; } break; case OB_SPEAKER: - if (dupflag!=0) { - ID_NEW_US2(obn->data ) + if (dupflag != 0) { + ID_NEW_US2(obn->data) else { - obn->data= copy_speaker(obn->data); - didit= 1; + obn->data = copy_speaker(obn->data); + didit = 1; } id->us--; } @@ -1805,13 +1806,13 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base BKE_copy_animdata_id_action((ID *)obn->data); if (key) { - BKE_copy_animdata_id_action((ID*)key); + BKE_copy_animdata_id_action((ID *)key); } /* Update the duplicated action in the action actuators */ for (act = obn->actuators.first; act; act = act->next) { if (act->type == ACT_ACTION) { - bActionActuator* actact = (bActionActuator*) act->data; + bActionActuator *actact = (bActionActuator *) act->data; if (ob->adt && actact->act == ob->adt->action) { actact->act = obn->adt->action; } @@ -1820,13 +1821,13 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base } if (dupflag & USER_DUP_MAT) { - matarar= give_matarar(obn); + matarar = give_matarar(obn); if (matarar) { - for (a=0; atotcol; a++) { - id= (ID *)(*matarar)[a]; + for (a = 0; a < obn->totcol; a++) { + id = (ID *)(*matarar)[a]; if (id) { - ID_NEW_US( (*matarar)[a] ) - else (*matarar)[a]= copy_material((*matarar)[a]); + ID_NEW_US( (*matarar)[a]) + else (*matarar)[a] = copy_material((*matarar)[a]); id->us--; } @@ -1847,14 +1848,14 @@ Base *ED_object_add_duplicate(Main *bmain, Scene *scene, Base *base, int dupflag Object *ob; clear_id_newpoins(); - clear_sca_new_poins(); /* sensor/contr/act */ + clear_sca_new_poins(); /* sensor/contr/act */ - basen= object_add_duplicate_internal(bmain, scene, base, dupflag); + basen = object_add_duplicate_internal(bmain, scene, base, dupflag); if (basen == NULL) { return NULL; } - ob= basen->object; + ob = basen->object; /* link own references to the newly duplicated data [#26816] */ object_relink(ob); @@ -1871,16 +1872,16 @@ Base *ED_object_add_duplicate(Main *bmain, Scene *scene, Base *base, int dupflag /* contextual operator dupli */ static int duplicate_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - int linked= RNA_boolean_get(op->ptr, "linked"); - int dupflag= (linked)? 0: U.dupflag; + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + int linked = RNA_boolean_get(op->ptr, "linked"); + int dupflag = (linked) ? 0 : U.dupflag; clear_id_newpoins(); - clear_sca_new_poins(); /* sensor/contr/act */ + clear_sca_new_poins(); /* sensor/contr/act */ - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { - Base *basen= object_add_duplicate_internal(bmain, scene, base, dupflag); + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + Base *basen = object_add_duplicate_internal(bmain, scene, base, dupflag); /* note that this is safe to do with this context iterator, * the list is made in advance */ @@ -1891,7 +1892,7 @@ static int duplicate_exec(bContext *C, wmOperator *op) } /* new object becomes active */ - if (BASACT==base) + if (BASACT == base) ED_base_object_activate(C, basen); if (basen->object->data) { @@ -1905,7 +1906,7 @@ static int duplicate_exec(bContext *C, wmOperator *op) DAG_scene_sort(bmain, scene); DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene); return OPERATOR_FINISHED; } @@ -1924,11 +1925,11 @@ void OBJECT_OT_duplicate(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* to give to transform */ RNA_def_boolean(ot->srna, "linked", 0, "Linked", "Duplicate object but not object data, linking to the original data"); - prop= RNA_def_enum(ot->srna, "mode", transform_mode_types, TFM_TRANSLATION, "Mode", ""); + prop = RNA_def_enum(ot->srna, "mode", transform_mode_types, TFM_TRANSLATION, "Mode", ""); RNA_def_property_flag(prop, PROP_HIDDEN); } @@ -1937,36 +1938,36 @@ void OBJECT_OT_duplicate(wmOperatorType *ot) static int add_named_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); Base *basen, *base; Object *ob; - int linked= RNA_boolean_get(op->ptr, "linked"); - int dupflag= (linked)? 0: U.dupflag; - char name[MAX_ID_NAME-2]; + int linked = RNA_boolean_get(op->ptr, "linked"); + int dupflag = (linked) ? 0 : U.dupflag; + char name[MAX_ID_NAME - 2]; /* find object, create fake base */ RNA_string_get(op->ptr, "name", name); - ob= (Object *)find_id("OB", name); - if (ob==NULL) + ob = (Object *)find_id("OB", name); + if (ob == NULL) return OPERATOR_CANCELLED; - base= MEM_callocN(sizeof(Base), "duplibase"); - base->object= ob; - base->flag= ob->flag; + base = MEM_callocN(sizeof(Base), "duplibase"); + base->object = ob; + base->flag = ob->flag; /* prepare dupli */ clear_id_newpoins(); - clear_sca_new_poins(); /* sensor/contr/act */ + clear_sca_new_poins(); /* sensor/contr/act */ - basen= object_add_duplicate_internal(bmain, scene, base, dupflag); + basen = object_add_duplicate_internal(bmain, scene, base, dupflag); if (basen == NULL) { MEM_freeN(base); return OPERATOR_CANCELLED; } - basen->lay= basen->object->lay= scene->lay; + basen->lay = basen->object->lay = scene->lay; ED_object_location_from_view(C, basen->object->loc); ED_base_object_activate(C, basen); @@ -1978,7 +1979,7 @@ static int add_named_exec(bContext *C, wmOperator *op) MEM_freeN(base); - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene); return OPERATOR_FINISHED; } @@ -1995,10 +1996,10 @@ void OBJECT_OT_add_named(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_boolean(ot->srna, "linked", 0, "Linked", "Duplicate object but not object data, linking to the original data"); - RNA_def_string(ot->srna, "name", "Cube", MAX_ID_NAME-2, "Name", "Object name to add"); + RNA_def_string(ot->srna, "name", "Cube", MAX_ID_NAME - 2, "Name", "Object name to add"); } @@ -2006,7 +2007,7 @@ void OBJECT_OT_add_named(wmOperatorType *ot) /**************************** Join *************************/ static int join_poll(bContext *C) { - Object *ob= CTX_data_active_object(C); + Object *ob = CTX_data_active_object(C); if (!ob || ob->id.lib) return 0; @@ -2019,8 +2020,8 @@ static int join_poll(bContext *C) static int join_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); - Object *ob= CTX_data_active_object(C); + Scene *scene = CTX_data_scene(C); + Object *ob = CTX_data_active_object(C); if (scene->obedit) { BKE_report(op->reports, RPT_ERROR, "This data does not support joining in editmode"); @@ -2053,13 +2054,13 @@ void OBJECT_OT_join(wmOperatorType *ot) ot->poll = join_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /**************************** Join as Shape Key*************************/ static int join_shapes_poll(bContext *C) { - Object *ob= CTX_data_active_object(C); + Object *ob = CTX_data_active_object(C); if (!ob || ob->id.lib) return 0; @@ -2072,8 +2073,8 @@ static int join_shapes_poll(bContext *C) static int join_shapes_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); - Object *ob= CTX_data_active_object(C); + Scene *scene = CTX_data_scene(C); + Object *ob = CTX_data_active_object(C); if (scene->obedit) { BKE_report(op->reports, RPT_ERROR, "This data does not support joining in editmode"); @@ -2102,5 +2103,5 @@ void OBJECT_OT_join_shapes(wmOperatorType *ot) ot->poll = join_shapes_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index dffcaad42fd..9e8381a72c6 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -115,9 +115,9 @@ typedef void (*MPassKnownData)(DerivedMesh *lores_dm, DerivedMesh *hires_dm, con const int face_index, const int lvl, const float st[2], float tangmat[3][3], const int x, const int y); -typedef void* (*MInitBakeData)(MultiresBakeRender *bkr, Image* ima); -typedef void (*MApplyBakeData)(void *bake_data); -typedef void (*MFreeBakeData)(void *bake_data); +typedef void * (*MInitBakeData)(MultiresBakeRender *bkr, Image *ima); +typedef void (*MApplyBakeData)(void *bake_data); +typedef void (*MFreeBakeData)(void *bake_data); typedef struct { MVert *mvert; @@ -157,25 +157,25 @@ typedef struct { static void multiresbake_get_normal(const MResolvePixelData *data, float norm[], const int face_num, const int vert_index) { - unsigned int indices[]= {data->mface[face_num].v1, data->mface[face_num].v2, - data->mface[face_num].v3, data->mface[face_num].v4}; - const int smoothnormal= (data->mface[face_num].flag & ME_SMOOTH); + unsigned int indices[] = {data->mface[face_num].v1, data->mface[face_num].v2, + data->mface[face_num].v3, data->mface[face_num].v4}; + const int smoothnormal = (data->mface[face_num].flag & ME_SMOOTH); if (!smoothnormal) { /* flat */ if (data->precomputed_normals) { - copy_v3_v3(norm, &data->precomputed_normals[3*face_num]); + copy_v3_v3(norm, &data->precomputed_normals[3 * face_num]); } else { float nor[3]; float *p0, *p1, *p2; - const int iGetNrVerts= data->mface[face_num].v4!=0 ? 4 : 3; + const int iGetNrVerts = data->mface[face_num].v4 != 0 ? 4 : 3; - p0= data->mvert[indices[0]].co; - p1= data->mvert[indices[1]].co; - p2= data->mvert[indices[2]].co; + p0 = data->mvert[indices[0]].co; + p1 = data->mvert[indices[1]].co; + p2 = data->mvert[indices[2]].co; - if (iGetNrVerts==4) { - float *p3= data->mvert[indices[3]].co; + if (iGetNrVerts == 4) { + float *p3 = data->mvert[indices[3]].co; normal_quad_v3(nor, p0, p1, p2, p3); } else { @@ -186,7 +186,7 @@ static void multiresbake_get_normal(const MResolvePixelData *data, float norm[], } } else { - short *no= data->mvert[indices[vert_index]].no; + short *no = data->mvert[indices[vert_index]].no; normal_short_to_float_v3(norm, no); normalize_v3(norm); @@ -198,15 +198,15 @@ static void init_bake_rast(MBakeRast *bake_rast, const ImBuf *ibuf, const MResol memset(bake_rast, 0, sizeof(MBakeRast)); bake_rast->texels = ibuf->userdata; - bake_rast->w= ibuf->x; - bake_rast->h= ibuf->y; - bake_rast->data= data; - bake_rast->flush_pixel= flush_pixel; + bake_rast->w = ibuf->x; + bake_rast->h = ibuf->y; + bake_rast->data = data; + bake_rast->flush_pixel = flush_pixel; } static void flush_pixel(const MResolvePixelData *data, const int x, const int y) { - float st[2]= {(x+0.5f)/data->w, (y+0.5f)/data->h}; + float st[2] = {(x + 0.5f) / data->w, (y + 0.5f) / data->h}; float *st0, *st1, *st2; float *tang0, *tang1, *tang2; float no0[3], no1[3], no2[3]; @@ -214,37 +214,37 @@ static void flush_pixel(const MResolvePixelData *data, const int x, const int y) float u, v, w, sign; int r; - const int i0= data->i0; - const int i1= data->i1; - const int i2= data->i2; + const int i0 = data->i0; + const int i1 = data->i1; + const int i2 = data->i2; - st0= data->mtface[data->face_index].uv[i0]; - st1= data->mtface[data->face_index].uv[i1]; - st2= data->mtface[data->face_index].uv[i2]; + st0 = data->mtface[data->face_index].uv[i0]; + st1 = data->mtface[data->face_index].uv[i1]; + st2 = data->mtface[data->face_index].uv[i2]; - tang0= data->pvtangent + data->face_index*16 + i0*4; - tang1= data->pvtangent + data->face_index*16 + i1*4; - tang2= data->pvtangent + data->face_index*16 + i2*4; + tang0 = data->pvtangent + data->face_index * 16 + i0 * 4; + tang1 = data->pvtangent + data->face_index * 16 + i1 * 4; + tang2 = data->pvtangent + data->face_index * 16 + i2 * 4; - multiresbake_get_normal(data, no0, data->face_index, i0); /* can optimize these 3 into one call */ + multiresbake_get_normal(data, no0, data->face_index, i0); /* can optimize these 3 into one call */ multiresbake_get_normal(data, no1, data->face_index, i1); multiresbake_get_normal(data, no2, data->face_index, i2); resolve_tri_uv(fUV, st, st0, st1, st2); - u= fUV[0]; - v= fUV[1]; - w= 1-u-v; + u = fUV[0]; + v = fUV[1]; + w = 1 - u - v; /* the sign is the same at all face vertices for any non degenerate face. * Just in case we clamp the interpolated value though. */ - sign= (tang0[3]*u + tang1[3]*v + tang2[3]*w)<0 ? (-1.0f) : 1.0f; + sign = (tang0[3] * u + tang1[3] * v + tang2[3] * w) < 0 ? (-1.0f) : 1.0f; /* this sequence of math is designed specifically as is with great care * to be compatible with our shader. Please don't change without good reason. */ - for (r= 0; r<3; r++) { - from_tang[0][r]= tang0[r]*u + tang1[r]*v + tang2[r]*w; - from_tang[2][r]= no0[r]*u + no1[r]*v + no2[r]*w; + for (r = 0; r < 3; r++) { + from_tang[0][r] = tang0[r] * u + tang1[r] * v + tang2[r] * w; + from_tang[2][r] = no0[r] * u + no1[r] * v + no2[r] * w; } cross_v3_v3v3(from_tang[1], from_tang[2], from_tang[0]); /* B = sign * cross(N, T) */ @@ -258,13 +258,13 @@ static void flush_pixel(const MResolvePixelData *data, const int x, const int y) static void set_rast_triangle(const MBakeRast *bake_rast, const int x, const int y) { - const int w= bake_rast->w; - const int h= bake_rast->h; + const int w = bake_rast->w; + const int h = bake_rast->h; - if (x>=0 && x=0 && ytexels[y*w+x])==0) { + if (x >= 0 && x < w && y >= 0 && y < h) { + if ((bake_rast->texels[y * w + x]) == 0) { flush_pixel(bake_rast->data, x, y); - bake_rast->texels[y*w+x]= FILTER_MASK_USED; + bake_rast->texels[y * w + x] = FILTER_MASK_USED; } } } @@ -274,35 +274,35 @@ static void rasterize_half(const MBakeRast *bake_rast, const float s0_l, const float t0_l, const float s1_l, const float t1_l, const int y0_in, const int y1_in, const int is_mid_right) { - const int s_stable= fabsf(t1_s-t0_s)>FLT_EPSILON ? 1 : 0; - const int l_stable= fabsf(t1_l-t0_l)>FLT_EPSILON ? 1 : 0; - const int w= bake_rast->w; - const int h= bake_rast->h; + const int s_stable = fabsf(t1_s - t0_s) > FLT_EPSILON ? 1 : 0; + const int l_stable = fabsf(t1_l - t0_l) > FLT_EPSILON ? 1 : 0; + const int w = bake_rast->w; + const int h = bake_rast->h; int y, y0, y1; - if (y1_in<=0 || y0_in>=h) + if (y1_in <= 0 || y0_in >= h) return; - y0= y0_in<0 ? 0 : y0_in; - y1= y1_in>=h ? h : y1_in; + y0 = y0_in < 0 ? 0 : y0_in; + y1 = y1_in >= h ? h : y1_in; - for (y= y0; y0 && iXl=w?w:iXr; + if (iXr > 0 && iXl < w) { + iXl = iXl < 0 ? 0 : iXl; + iXr = iXr >= w ? w : iXr; - for (x= iXl; xw; - const int h= bake_rast->h; - float slo= st0_in[0]*w - 0.5f; - float tlo= st0_in[1]*h - 0.5f; - float smi= st1_in[0]*w - 0.5f; - float tmi= st1_in[1]*h - 0.5f; - float shi= st2_in[0]*w - 0.5f; - float thi= st2_in[1]*h - 0.5f; - int is_mid_right= 0, ylo, yhi, yhi_beg; + const int w = bake_rast->w; + const int h = bake_rast->h; + float slo = st0_in[0] * w - 0.5f; + float tlo = st0_in[1] * h - 0.5f; + float smi = st1_in[0] * w - 0.5f; + float tmi = st1_in[1] * h - 0.5f; + float shi = st2_in[0] * w - 0.5f; + float thi = st2_in[1] * h - 0.5f; + int is_mid_right = 0, ylo, yhi, yhi_beg; /* skip degenerates */ - if ((slo==smi && tlo==tmi) || (slo==shi && tlo==thi) || (smi==shi && tmi==thi)) + if ((slo == smi && tlo == tmi) || (slo == shi && tlo == thi) || (smi == shi && tmi == thi)) return; /* sort by T */ - if (tlo>tmi && tlo>thi) { + if (tlo > tmi && tlo > thi) { SWAP(float, shi, slo); SWAP(float, thi, tlo); } - else if (tmi>thi) { + else if (tmi > thi) { SWAP(float, shi, smi); SWAP(float, thi, tmi); } - if (tlo>tmi) { + if (tlo > tmi) { SWAP(float, slo, smi); SWAP(float, tlo, tmi); } /* check if mid point is to the left or to the right of the lo-hi edge */ - is_mid_right= (-(shi-slo)*(tmi-thi) + (thi-tlo)*(smi-shi))>0 ? 1 : 0; - ylo= (int) ceilf(tlo); - yhi_beg= (int) ceilf(tmi); - yhi= (int) ceilf(thi); + is_mid_right = (-(shi - slo) * (tmi - thi) + (thi - tlo) * (smi - shi)) > 0 ? 1 : 0; + ylo = (int) ceilf(tlo); + yhi_beg = (int) ceilf(tmi); + yhi = (int) ceilf(thi); /*if (fTmi>ceilf(fTlo))*/ rasterize_half(bake_rast, slo, tlo, smi, tmi, slo, tlo, shi, thi, ylo, yhi_beg, is_mid_right); @@ -360,69 +360,69 @@ static int multiresbake_test_break(MultiresBakeRender *bkr) return G.afbreek; } -static void do_multires_bake(MultiresBakeRender *bkr, Image* ima, MPassKnownData passKnownData, +static void do_multires_bake(MultiresBakeRender *bkr, Image *ima, MPassKnownData passKnownData, MInitBakeData initBakeData, MApplyBakeData applyBakeData, MFreeBakeData freeBakeData) { - DerivedMesh *dm= bkr->lores_dm; - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); - const int lvl= bkr->lvl; - const int tot_face= dm->getNumTessFaces(dm); - MVert *mvert= dm->getVertArray(dm); - MFace *mface= dm->getTessFaceArray(dm); - MTFace *mtface= dm->getTessFaceDataArray(dm, CD_MTFACE); - float *pvtangent= NULL; + DerivedMesh *dm = bkr->lores_dm; + ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL); + const int lvl = bkr->lvl; + const int tot_face = dm->getNumTessFaces(dm); + MVert *mvert = dm->getVertArray(dm); + MFace *mface = dm->getTessFaceArray(dm); + MTFace *mtface = dm->getTessFaceDataArray(dm, CD_MTFACE); + float *pvtangent = NULL; if (CustomData_get_layer_index(&dm->faceData, CD_TANGENT) == -1) DM_add_tangent_layer(dm); - pvtangent= DM_get_tessface_data_layer(dm, CD_TANGENT); + pvtangent = DM_get_tessface_data_layer(dm, CD_TANGENT); if (tot_face > 0) { /* sanity check */ - int f= 0; + int f = 0; MBakeRast bake_rast; - MResolvePixelData data={NULL}; - - data.mface= mface; - data.mvert= mvert; - data.mtface= mtface; - data.pvtangent= pvtangent; - data.precomputed_normals= dm->getTessFaceDataArray(dm, CD_NORMAL); /* don't strictly need this */ - data.w= ibuf->x; - data.h= ibuf->y; - data.lores_dm= dm; - data.hires_dm= bkr->hires_dm; - data.lvl= lvl; - data.pass_data= passKnownData; + MResolvePixelData data = {NULL}; + + data.mface = mface; + data.mvert = mvert; + data.mtface = mtface; + data.pvtangent = pvtangent; + data.precomputed_normals = dm->getTessFaceDataArray(dm, CD_NORMAL); /* don't strictly need this */ + data.w = ibuf->x; + data.h = ibuf->y; + data.lores_dm = dm; + data.hires_dm = bkr->hires_dm; + data.lvl = lvl; + data.pass_data = passKnownData; if (initBakeData) - data.bake_data= initBakeData(bkr, ima); + data.bake_data = initBakeData(bkr, ima); init_bake_rast(&bake_rast, ibuf, &data, flush_pixel); - for (f= 0; ftpage!=ima) + if (mtfate->tpage != ima) continue; - data.face_index= f; + data.face_index = f; /* might support other forms of diagonal splits later on such as * split by shortest diagonal.*/ - verts[0][0]=0; - verts[1][0]=1; - verts[2][0]=2; + verts[0][0] = 0; + verts[1][0] = 1; + verts[2][0] = 2; - verts[0][1]=0; - verts[1][1]=2; - verts[2][1]=3; + verts[0][1] = 0; + verts[1][1] = 2; + verts[2][1] = 3; - nr_tris= mface[f].v4!=0 ? 2 : 1; - for (t= 0; tbaked_faces++; if (bkr->do_update) - *bkr->do_update= 1; + *bkr->do_update = 1; if (bkr->progress) - *bkr->progress= ((float)bkr->baked_objects + (float)bkr->baked_faces / tot_face) / bkr->tot_obj; + *bkr->progress = ((float)bkr->baked_objects + (float)bkr->baked_faces / tot_face) / bkr->tot_obj; } if (applyBakeData) @@ -452,13 +452,13 @@ static void interp_bilinear_quad_data(float data[4][3], float u, float v, float float vec[3]; copy_v3_v3(res, data[0]); - mul_v3_fl(res, (1-u)*(1-v)); + mul_v3_fl(res, (1 - u) * (1 - v)); copy_v3_v3(vec, data[1]); - mul_v3_fl(vec, u*(1-v)); add_v3_v3(res, vec); + mul_v3_fl(vec, u * (1 - v)); add_v3_v3(res, vec); copy_v3_v3(vec, data[2]); - mul_v3_fl(vec, u*v); add_v3_v3(res, vec); + mul_v3_fl(vec, u * v); add_v3_v3(res, vec); copy_v3_v3(vec, data[3]); - mul_v3_fl(vec, (1-u)*v); add_v3_v3(res, vec); + mul_v3_fl(vec, (1 - u) * v); add_v3_v3(res, vec); } static void interp_barycentric_tri_data(float data[3][3], float u, float v, float res[3]) @@ -470,7 +470,7 @@ static void interp_barycentric_tri_data(float data[3][3], float u, float v, floa copy_v3_v3(vec, data[1]); mul_v3_fl(vec, v); add_v3_v3(res, vec); copy_v3_v3(vec, data[2]); - mul_v3_fl(vec, 1.0f-u-v); add_v3_v3(res, vec); + mul_v3_fl(vec, 1.0f - u - v); add_v3_v3(res, vec); } /* mode = 0: interpolate normals, @@ -481,14 +481,14 @@ static void interp_bilinear_grid(DMGridData *grid, int grid_size, float crn_x, f float u, v; float data[4][3]; - x0= (int) crn_x; - x1= x0>=(grid_size-1) ? (grid_size-1) : (x0+1); + x0 = (int) crn_x; + x1 = x0 >= (grid_size - 1) ? (grid_size - 1) : (x0 + 1); - y0= (int) crn_y; - y1= y0>=(grid_size-1) ? (grid_size-1) : (y0+1); + y0 = (int) crn_y; + y1 = y0 >= (grid_size - 1) ? (grid_size - 1) : (y0 + 1); - u= crn_x-x0; - v= crn_y-y0; + u = crn_x - x0; + v = crn_y - y0; if (mode == 0) { copy_v3_v3(data[0], grid[y0 * grid_size + x0].no); @@ -516,30 +516,30 @@ static void get_ccgdm_data(DerivedMesh *lodm, DerivedMesh *hidm, const int *orig lodm->getTessFace(lodm, face_index, &mface); - grid_size= hidm->getGridSize(hidm); - grid_data= hidm->getGridData(hidm); - grid_offset= hidm->getGridOffset(hidm); + grid_size = hidm->getGridSize(hidm); + grid_data = hidm->getGridData(hidm); + grid_offset = hidm->getGridOffset(hidm); - face_side= (grid_size<<1)-1; + face_side = (grid_size << 1) - 1; - if (lvl==0) { - g_index= grid_offset[face_index]; - S= mdisp_rot_face_to_crn(mface.v4 ? 4 : 3, face_side, u*(face_side-1), v*(face_side-1), &crn_x, &crn_y); + if (lvl == 0) { + g_index = grid_offset[face_index]; + S = mdisp_rot_face_to_crn(mface.v4 ? 4 : 3, face_side, u * (face_side - 1), v * (face_side - 1), &crn_x, &crn_y); } else { - int side= (1 << (lvl-1)) + 1; - int grid_index= origindex[face_index]; - int loc_offs= face_index % (1<<(2*lvl)); - int cell_index= loc_offs % ((side-1)*(side-1)); - int cell_side= grid_size / (side-1); - int row= cell_index / (side-1); - int col= cell_index % (side-1); - - S= face_index / (1<<(2*(lvl-1))) - grid_offset[grid_index]; - g_index= grid_offset[grid_index]; - - crn_y= (row * cell_side) + u * cell_side; - crn_x= (col * cell_side) + v * cell_side; + int side = (1 << (lvl - 1)) + 1; + int grid_index = origindex[face_index]; + int loc_offs = face_index % (1 << (2 * lvl)); + int cell_index = loc_offs % ((side - 1) * (side - 1)); + int cell_side = grid_size / (side - 1); + int row = cell_index / (side - 1); + int col = cell_index % (side - 1); + + S = face_index / (1 << (2 * (lvl - 1))) - grid_offset[grid_index]; + g_index = grid_offset[grid_index]; + + crn_y = (row * cell_side) + u * cell_side; + crn_x = (col * cell_side) + v * cell_side; } CLAMP(crn_x, 0.0f, grid_size); @@ -597,95 +597,95 @@ static void interp_barycentric_mface(DerivedMesh *dm, MFace *mface, const float static void *init_heights_data(MultiresBakeRender *bkr, Image *ima) { MHeightBakeData *height_data; - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); - DerivedMesh *lodm= bkr->lores_dm; + ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL); + DerivedMesh *lodm = bkr->lores_dm; - height_data= MEM_callocN(sizeof(MHeightBakeData), "MultiresBake heightData"); + height_data = MEM_callocN(sizeof(MHeightBakeData), "MultiresBake heightData"); - height_data->ima= ima; - height_data->heights= MEM_callocN(sizeof(float)*ibuf->x*ibuf->y, "MultiresBake heights"); - height_data->height_max= -FLT_MAX; - height_data->height_min= FLT_MAX; + height_data->ima = ima; + height_data->heights = MEM_callocN(sizeof(float) * ibuf->x * ibuf->y, "MultiresBake heights"); + height_data->height_max = -FLT_MAX; + height_data->height_min = FLT_MAX; if (!bkr->use_lores_mesh) { - SubsurfModifierData smd= {{NULL}}; - int ss_lvl= bkr->tot_lvl - bkr->lvl; + SubsurfModifierData smd = {{NULL}}; + int ss_lvl = bkr->tot_lvl - bkr->lvl; CLAMP(ss_lvl, 0, 6); - smd.levels= smd.renderLevels= ss_lvl; - smd.flags|= eSubsurfModifierFlag_SubsurfUv; + smd.levels = smd.renderLevels = ss_lvl; + smd.flags |= eSubsurfModifierFlag_SubsurfUv; if (bkr->simple) - smd.subdivType= ME_SIMPLE_SUBSURF; + smd.subdivType = ME_SIMPLE_SUBSURF; - height_data->ssdm= subsurf_make_derived_from_derived(bkr->lores_dm, &smd, 0, NULL, 0, 0, 0); + height_data->ssdm = subsurf_make_derived_from_derived(bkr->lores_dm, &smd, 0, NULL, 0, 0, 0); } - height_data->origindex= lodm->getTessFaceDataArray(lodm, CD_ORIGINDEX); + height_data->origindex = lodm->getTessFaceDataArray(lodm, CD_ORIGINDEX); - return (void*)height_data; + return (void *)height_data; } static void *init_normal_data(MultiresBakeRender *bkr, Image *UNUSED(ima)) { MNormalBakeData *normal_data; - DerivedMesh *lodm= bkr->lores_dm; + DerivedMesh *lodm = bkr->lores_dm; - normal_data= MEM_callocN(sizeof(MNormalBakeData), "MultiresBake normalData"); + normal_data = MEM_callocN(sizeof(MNormalBakeData), "MultiresBake normalData"); - normal_data->origindex= lodm->getTessFaceDataArray(lodm, CD_ORIGINDEX); + normal_data->origindex = lodm->getTessFaceDataArray(lodm, CD_ORIGINDEX); - return (void*)normal_data; + return (void *)normal_data; } static void free_normal_data(void *bake_data) { - MNormalBakeData *normal_data= (MNormalBakeData*)bake_data; + MNormalBakeData *normal_data = (MNormalBakeData *)bake_data; MEM_freeN(normal_data); } static void apply_heights_data(void *bake_data) { - MHeightBakeData *height_data= (MHeightBakeData*)bake_data; - ImBuf *ibuf= BKE_image_get_ibuf(height_data->ima, NULL); + MHeightBakeData *height_data = (MHeightBakeData *)bake_data; + ImBuf *ibuf = BKE_image_get_ibuf(height_data->ima, NULL); int x, y, i; - float height, *heights= height_data->heights; - float min= height_data->height_min, max= height_data->height_max; + float height, *heights = height_data->heights; + float min = height_data->height_min, max = height_data->height_max; - for (x= 0; xx; x++) { - for (y =0; yy; y++) { - i= ibuf->x*y + x; + for (x = 0; x < ibuf->x; x++) { + for (y = 0; y < ibuf->y; y++) { + i = ibuf->x * y + x; - if (((char*)ibuf->userdata)[i] != FILTER_MASK_USED) + if (((char *)ibuf->userdata)[i] != FILTER_MASK_USED) continue; if (ibuf->rect_float) { - float *rrgbf= ibuf->rect_float + i*4; + float *rrgbf = ibuf->rect_float + i * 4; - if (max-min > 1e-5f) height= (heights[i]-min)/(max-min); - else height= 0; + if (max - min > 1e-5f) height = (heights[i] - min) / (max - min); + else height = 0; - rrgbf[0]=rrgbf[1]=rrgbf[2]= height; + rrgbf[0] = rrgbf[1] = rrgbf[2] = height; } else { - char *rrgb= (char*)ibuf->rect + i*4; + char *rrgb = (char *)ibuf->rect + i * 4; - if (max-min > 1e-5f) height= (heights[i]-min)/(max-min); - else height= 0; + if (max - min > 1e-5f) height = (heights[i] - min) / (max - min); + else height = 0; - rrgb[0]=rrgb[1]=rrgb[2]= FTOCHAR(height); + rrgb[0] = rrgb[1] = rrgb[2] = FTOCHAR(height); } } } - ibuf->userflags= IB_RECT_INVALID; + ibuf->userflags = IB_RECT_INVALID; } static void free_heights_data(void *bake_data) { - MHeightBakeData *height_data= (MHeightBakeData*)bake_data; + MHeightBakeData *height_data = (MHeightBakeData *)bake_data; if (height_data->ssdm) height_data->ssdm->release(height_data->ssdm); @@ -704,23 +704,23 @@ static void apply_heights_callback(DerivedMesh *lores_dm, DerivedMesh *hires_dm, const int face_index, const int lvl, const float st[2], float UNUSED(tangmat[3][3]), const int x, const int y) { - MTFace *mtface= CustomData_get_layer(&lores_dm->faceData, CD_MTFACE); + MTFace *mtface = CustomData_get_layer(&lores_dm->faceData, CD_MTFACE); MFace mface; - Image *ima= mtface[face_index].tpage; - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); - MHeightBakeData *height_data= (MHeightBakeData*)bake_data; + Image *ima = mtface[face_index].tpage; + ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL); + MHeightBakeData *height_data = (MHeightBakeData *)bake_data; float uv[2], *st0, *st1, *st2, *st3; - int pixel= ibuf->x*y + x; + int pixel = ibuf->x * y + x; float vec[3], p0[3], p1[3], n[3], len; lores_dm->getTessFace(lores_dm, face_index, &mface); - st0= mtface[face_index].uv[0]; - st1= mtface[face_index].uv[1]; - st2= mtface[face_index].uv[2]; + st0 = mtface[face_index].uv[0]; + st1 = mtface[face_index].uv[1]; + st2 = mtface[face_index].uv[2]; if (mface.v4) { - st3= mtface[face_index].uv[3]; + st3 = mtface[face_index].uv[3]; resolve_quad_uv(uv, st, st0, st1, st2, st3); } else @@ -748,21 +748,21 @@ static void apply_heights_callback(DerivedMesh *lores_dm, DerivedMesh *hires_dm, } sub_v3_v3v3(vec, p1, p0); - len= dot_v3v3(n, vec); + len = dot_v3v3(n, vec); - height_data->heights[pixel]= len; - if (lenheight_min) height_data->height_min= len; - if (len>height_data->height_max) height_data->height_max= len; + height_data->heights[pixel] = len; + if (len < height_data->height_min) height_data->height_min = len; + if (len > height_data->height_max) height_data->height_max = len; if (ibuf->rect_float) { - float *rrgbf= ibuf->rect_float + pixel*4; - rrgbf[3]= 1.0f; + float *rrgbf = ibuf->rect_float + pixel * 4; + rrgbf[3] = 1.0f; - ibuf->userflags= IB_RECT_INVALID; + ibuf->userflags = IB_RECT_INVALID; } else { - char *rrgb= (char*)ibuf->rect + pixel*4; - rrgb[3]= 255; + char *rrgb = (char *)ibuf->rect + pixel * 4; + rrgb[3] = 255; } } @@ -775,23 +775,23 @@ static void apply_tangmat_callback(DerivedMesh *lores_dm, DerivedMesh *hires_dm, const int face_index, const int lvl, const float st[2], float tangmat[3][3], const int x, const int y) { - MTFace *mtface= CustomData_get_layer(&lores_dm->faceData, CD_MTFACE); + MTFace *mtface = CustomData_get_layer(&lores_dm->faceData, CD_MTFACE); MFace mface; - Image *ima= mtface[face_index].tpage; - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); - MNormalBakeData *normal_data= (MNormalBakeData*)bake_data; + Image *ima = mtface[face_index].tpage; + ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL); + MNormalBakeData *normal_data = (MNormalBakeData *)bake_data; float uv[2], *st0, *st1, *st2, *st3; - int pixel= ibuf->x*y + x; - float n[3], vec[3], tmp[3]= {0.5, 0.5, 0.5}; + int pixel = ibuf->x * y + x; + float n[3], vec[3], tmp[3] = {0.5, 0.5, 0.5}; lores_dm->getTessFace(lores_dm, face_index, &mface); - st0= mtface[face_index].uv[0]; - st1= mtface[face_index].uv[1]; - st2= mtface[face_index].uv[2]; + st0 = mtface[face_index].uv[0]; + st1 = mtface[face_index].uv[1]; + st2 = mtface[face_index].uv[2]; if (mface.v4) { - st3= mtface[face_index].uv[3]; + st3 = mtface[face_index].uv[3]; resolve_quad_uv(uv, st, st0, st1, st2, st3); } else @@ -808,59 +808,59 @@ static void apply_tangmat_callback(DerivedMesh *lores_dm, DerivedMesh *hires_dm, add_v3_v3(vec, tmp); if (ibuf->rect_float) { - float *rrgbf= ibuf->rect_float + pixel*4; - rrgbf[0]= vec[0]; - rrgbf[1]= vec[1]; - rrgbf[2]= vec[2]; - rrgbf[3]= 1.0f; + float *rrgbf = ibuf->rect_float + pixel * 4; + rrgbf[0] = vec[0]; + rrgbf[1] = vec[1]; + rrgbf[2] = vec[2]; + rrgbf[3] = 1.0f; - ibuf->userflags= IB_RECT_INVALID; + ibuf->userflags = IB_RECT_INVALID; } else { - unsigned char *rrgb= (unsigned char *)ibuf->rect + pixel*4; + unsigned char *rrgb = (unsigned char *)ibuf->rect + pixel * 4; rgb_float_to_uchar(rrgb, vec); - rrgb[3]= 255; + rrgb[3] = 255; } } static void count_images(MultiresBakeRender *bkr) { int a, totface; - DerivedMesh *dm= bkr->lores_dm; - MTFace *mtface= CustomData_get_layer(&dm->faceData, CD_MTFACE); + DerivedMesh *dm = bkr->lores_dm; + MTFace *mtface = CustomData_get_layer(&dm->faceData, CD_MTFACE); - bkr->image.first= bkr->image.last= NULL; - bkr->tot_image= 0; + bkr->image.first = bkr->image.last = NULL; + bkr->tot_image = 0; - totface= dm->getNumTessFaces(dm); + totface = dm->getNumTessFaces(dm); - for (a= 0; aid.flag&= ~LIB_DOIT; + for (a = 0; a < totface; a++) + mtface[a].tpage->id.flag &= ~LIB_DOIT; - for (a= 0; aid.flag&LIB_DOIT)==0) { - LinkData *data= BLI_genericNodeN(ima); + for (a = 0; a < totface; a++) { + Image *ima = mtface[a].tpage; + if ((ima->id.flag & LIB_DOIT) == 0) { + LinkData *data = BLI_genericNodeN(ima); BLI_addtail(&bkr->image, data); bkr->tot_image++; - ima->id.flag|= LIB_DOIT; + ima->id.flag |= LIB_DOIT; } } - for (a= 0; aid.flag&= ~LIB_DOIT; + for (a = 0; a < totface; a++) + mtface[a].tpage->id.flag &= ~LIB_DOIT; } static void bake_images(MultiresBakeRender *bkr) { LinkData *link; - for (link= bkr->image.first; link; link= link->next) { - Image *ima= (Image*)link->data; - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); + for (link = bkr->image.first; link; link = link->next) { + Image *ima = (Image *)link->data; + ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL); - if (ibuf->x>0 && ibuf->y>0) { - ibuf->userdata= MEM_callocN(ibuf->y*ibuf->x, "MultiresBake imbuf mask"); + if (ibuf->x > 0 && ibuf->y > 0) { + ibuf->userdata = MEM_callocN(ibuf->y * ibuf->x, "MultiresBake imbuf mask"); switch (bkr->mode) { case RE_BAKE_NORMALS: @@ -873,7 +873,7 @@ static void bake_images(MultiresBakeRender *bkr) } } - ima->id.flag|= LIB_DOIT; + ima->id.flag |= LIB_DOIT; } } @@ -881,28 +881,28 @@ static void finish_images(MultiresBakeRender *bkr) { LinkData *link; - for (link= bkr->image.first; link; link= link->next) { - Image *ima= (Image*)link->data; - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); + for (link = bkr->image.first; link; link = link->next) { + Image *ima = (Image *)link->data; + ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL); - if (ibuf->x<=0 || ibuf->y<=0) + if (ibuf->x <= 0 || ibuf->y <= 0) continue; RE_bake_ibuf_filter(ibuf, (char *)ibuf->userdata, bkr->bake_filter); - ibuf->userflags|= IB_BITMAPDIRTY; + ibuf->userflags |= IB_BITMAPDIRTY; if (ibuf->rect_float) - ibuf->userflags|= IB_RECT_INVALID; + ibuf->userflags |= IB_RECT_INVALID; if (ibuf->mipmap[0]) { - ibuf->userflags|= IB_MIPMAP_INVALID; + ibuf->userflags |= IB_MIPMAP_INVALID; imb_freemipmapImBuf(ibuf); } if (ibuf->userdata) { MEM_freeN(ibuf->userdata); - ibuf->userdata= NULL; + ibuf->userdata = NULL; } } } @@ -916,38 +916,38 @@ static void multiresbake_start(MultiresBakeRender *bkr) static int multiresbake_check(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); Object *ob; Mesh *me; MultiresModifierData *mmd; - int ok= 1, a; + int ok = 1, a; - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { - ob= base->object; + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + ob = base->object; if (ob->type != OB_MESH) { BKE_report(op->reports, RPT_ERROR, "Basking of multires data only works with active object which is a mesh"); - ok= 0; + ok = 0; break; } - me= (Mesh*)ob->data; - mmd= get_multires_modifier(scene, ob, 0); + me = (Mesh *)ob->data; + mmd = get_multires_modifier(scene, ob, 0); /* Multi-resolution should be and be last in the stack */ if (ok && mmd) { ModifierData *md; - ok= mmd->totlvl>0; + ok = mmd->totlvl > 0; - for (md = (ModifierData*)mmd->modifier.next; md && ok; md = md->next) { + for (md = (ModifierData *)mmd->modifier.next; md && ok; md = md->next) { if (modifier_isEnabled(scene, md, eModifierMode_Realtime)) { - ok= 0; + ok = 0; } } } - else ok= 0; + else ok = 0; if (!ok) { BKE_report(op->reports, RPT_ERROR, "Multires data baking requires multi-resolution object"); @@ -958,7 +958,7 @@ static int multiresbake_check(bContext *C, wmOperator *op) if (!me->mtpoly) { BKE_report(op->reports, RPT_ERROR, "Mesh should be unwrapped before multires data baking"); - ok= 0; + ok = 0; } else { a = me->totpoly; @@ -968,22 +968,22 @@ static int multiresbake_check(bContext *C, wmOperator *op) if (!ima) { BKE_report(op->reports, RPT_ERROR, "You should have active texture to use multires baker"); - ok= 0; + ok = 0; } else { - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); + ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL); if (!ibuf) { BKE_report(op->reports, RPT_ERROR, "Baking should happend to image with image buffer"); - ok= 0; + ok = 0; } else { - if (ibuf->rect==NULL && ibuf->rect_float==NULL) - ok= 0; + if (ibuf->rect == NULL && ibuf->rect_float == NULL) + ok = 0; - if (ibuf->rect_float && !(ibuf->channels==0 || ibuf->channels==4)) - ok= 0; + if (ibuf->rect_float && !(ibuf->channels == 0 || ibuf->channels == 4)) + ok = 0; if (!ok) BKE_report(op->reports, RPT_ERROR, "Baking to unsupported image type"); @@ -1003,23 +1003,23 @@ static int multiresbake_check(bContext *C, wmOperator *op) static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *lvl) { DerivedMesh *dm; - MultiresModifierData *mmd= get_multires_modifier(scene, ob, 0); - Mesh *me= (Mesh*)ob->data; + MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0); + Mesh *me = (Mesh *)ob->data; - *lvl= mmd->lvl; + *lvl = mmd->lvl; - if (*lvl==0) { - DerivedMesh *tmp_dm= CDDM_from_mesh(me, ob); - dm= CDDM_copy(tmp_dm); + if (*lvl == 0) { + DerivedMesh *tmp_dm = CDDM_from_mesh(me, ob); + dm = CDDM_copy(tmp_dm); tmp_dm->release(tmp_dm); } else { - MultiresModifierData tmp_mmd= *mmd; - DerivedMesh *cddm= CDDM_from_mesh(me, ob); + MultiresModifierData tmp_mmd = *mmd; + DerivedMesh *cddm = CDDM_from_mesh(me, ob); - tmp_mmd.lvl= *lvl; - tmp_mmd.sculptlvl= *lvl; - dm= multires_dm_create_from_derived(&tmp_mmd, 1, cddm, ob, 0); + tmp_mmd.lvl = *lvl; + tmp_mmd.sculptlvl = *lvl; + dm = multires_dm_create_from_derived(&tmp_mmd, 1, cddm, ob, 0); cddm->release(cddm); } @@ -1028,18 +1028,18 @@ static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *l static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *lvl, int *simple) { - Mesh *me= (Mesh*)ob->data; - MultiresModifierData *mmd= get_multires_modifier(scene, ob, 0); - MultiresModifierData tmp_mmd= *mmd; - DerivedMesh *cddm= CDDM_from_mesh(me, ob); + Mesh *me = (Mesh *)ob->data; + MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0); + MultiresModifierData tmp_mmd = *mmd; + DerivedMesh *cddm = CDDM_from_mesh(me, ob); DerivedMesh *dm; - *lvl= mmd->totlvl; - *simple= mmd->simple; + *lvl = mmd->totlvl; + *simple = mmd->simple; - tmp_mmd.lvl= mmd->totlvl; - tmp_mmd.sculptlvl= mmd->totlvl; - dm= multires_dm_create_from_derived(&tmp_mmd, 1, cddm, ob, 0); + tmp_mmd.lvl = mmd->totlvl; + tmp_mmd.sculptlvl = mmd->totlvl; + dm = multires_dm_create_from_derived(&tmp_mmd, 1, cddm, ob, 0); cddm->release(cddm); return dm; @@ -1048,67 +1048,67 @@ static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *l static void clear_images(MTFace *mtface, int totface) { int a; - const float vec_alpha[4]= {0.0f, 0.0f, 0.0f, 0.0f}; - const float vec_solid[4]= {0.0f, 0.0f, 0.0f, 1.0f}; + const float vec_alpha[4] = {0.0f, 0.0f, 0.0f, 0.0f}; + const float vec_solid[4] = {0.0f, 0.0f, 0.0f, 1.0f}; - for (a= 0; aid.flag&= ~LIB_DOIT; + for (a = 0; a < totface; a++) + mtface[a].tpage->id.flag &= ~LIB_DOIT; - for (a= 0; aid.flag&LIB_DOIT)==0) { - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); + if ((ima->id.flag & LIB_DOIT) == 0) { + ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL); IMB_rectfill(ibuf, (ibuf->planes == R_IMF_PLANES_RGBA) ? vec_alpha : vec_solid); - ima->id.flag|= LIB_DOIT; + ima->id.flag |= LIB_DOIT; } } - for (a= 0; aid.flag&= ~LIB_DOIT; + for (a = 0; a < totface; a++) + mtface[a].tpage->id.flag &= ~LIB_DOIT; } static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) { Object *ob; - Scene *scene= CTX_data_scene(C); - int objects_baked= 0; + Scene *scene = CTX_data_scene(C); + int objects_baked = 0; if (!multiresbake_check(C, op)) return OPERATOR_CANCELLED; - if (scene->r.bake_flag&R_BAKE_CLEAR) { /* clear images */ - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + if (scene->r.bake_flag & R_BAKE_CLEAR) { /* clear images */ + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { Mesh *me; - ob= base->object; - me= (Mesh*)ob->data; + ob = base->object; + me = (Mesh *)ob->data; clear_images(me->mtface, me->totface); } CTX_DATA_END; } - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { - MultiresBakeRender bkr= {0}; + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { + MultiresBakeRender bkr = {0}; - ob= base->object; + ob = base->object; multires_force_update(ob); /* copy data stored in job descriptor */ - bkr.bake_filter= scene->r.bake_filter; - bkr.mode= scene->r.bake_mode; - bkr.use_lores_mesh= scene->r.bake_flag&R_BAKE_LORES_MESH; + bkr.bake_filter = scene->r.bake_filter; + bkr.mode = scene->r.bake_mode; + bkr.use_lores_mesh = scene->r.bake_flag & R_BAKE_LORES_MESH; /* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */ - bkr.lores_dm= multiresbake_create_loresdm(scene, ob, &bkr.lvl); + bkr.lores_dm = multiresbake_create_loresdm(scene, ob, &bkr.lvl); if (!bkr.lores_dm) continue; - bkr.hires_dm= multiresbake_create_hiresdm(scene, ob, &bkr.tot_lvl, &bkr.simple); + bkr.hires_dm = multiresbake_create_hiresdm(scene, ob, &bkr.tot_lvl, &bkr.simple); multiresbake_start(&bkr); @@ -1130,20 +1130,20 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) /* Multiresbake adopted for job-system executing */ static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); Object *ob; /* backup scene settings, so their changing in UI would take no effect on baker */ - bkj->bake_filter= scene->r.bake_filter; - bkj->mode= scene->r.bake_mode; - bkj->use_lores_mesh= scene->r.bake_flag&R_BAKE_LORES_MESH; - bkj->bake_clear= scene->r.bake_flag&R_BAKE_CLEAR; + bkj->bake_filter = scene->r.bake_filter; + bkj->mode = scene->r.bake_mode; + bkj->use_lores_mesh = scene->r.bake_flag & R_BAKE_LORES_MESH; + bkj->bake_clear = scene->r.bake_flag & R_BAKE_CLEAR; - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { MultiresBakerJobData *data; DerivedMesh *lores_dm; int lvl; - ob= base->object; + ob = base->object; multires_force_update(ob); @@ -1151,7 +1151,7 @@ static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj) if (!lores_dm) continue; - data= MEM_callocN(sizeof(MultiresBakerJobData), "multiresBaker derivedMesh_data"); + data = MEM_callocN(sizeof(MultiresBakerJobData), "multiresBaker derivedMesh_data"); data->lores_dm = lores_dm; data->lvl = lvl; data->hires_dm = multiresbake_create_hiresdm(scene, ob, &data->tot_lvl, &data->simple); @@ -1164,42 +1164,42 @@ static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj) static void multiresbake_startjob(void *bkv, short *stop, short *do_update, float *progress) { MultiresBakerJobData *data; - MultiresBakeJob *bkj= bkv; - int baked_objects= 0, tot_obj; + MultiresBakeJob *bkj = bkv; + int baked_objects = 0, tot_obj; - tot_obj= BLI_countlist(&bkj->data); + tot_obj = BLI_countlist(&bkj->data); if (bkj->bake_clear) { /* clear images */ - for (data= bkj->data.first; data; data= data->next) { - DerivedMesh *dm= data->lores_dm; - MTFace *mtface= CustomData_get_layer(&dm->faceData, CD_MTFACE); + for (data = bkj->data.first; data; data = data->next) { + DerivedMesh *dm = data->lores_dm; + MTFace *mtface = CustomData_get_layer(&dm->faceData, CD_MTFACE); clear_images(mtface, dm->getNumTessFaces(dm)); } } - for (data= bkj->data.first; data; data= data->next) { - MultiresBakeRender bkr= {0}; + for (data = bkj->data.first; data; data = data->next) { + MultiresBakeRender bkr = {0}; /* copy data stored in job descriptor */ - bkr.bake_filter= bkj->bake_filter; - bkr.mode= bkj->mode; - bkr.use_lores_mesh= bkj->use_lores_mesh; + bkr.bake_filter = bkj->bake_filter; + bkr.mode = bkj->mode; + bkr.use_lores_mesh = bkj->use_lores_mesh; /* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */ - bkr.lores_dm= data->lores_dm; - bkr.hires_dm= data->hires_dm; - bkr.tot_lvl= data->tot_lvl; - bkr.lvl= data->lvl; - bkr.simple= data->simple; + bkr.lores_dm = data->lores_dm; + bkr.hires_dm = data->hires_dm; + bkr.tot_lvl = data->tot_lvl; + bkr.lvl = data->lvl; + bkr.simple = data->simple; /* needed for proper progress bar */ - bkr.tot_obj= tot_obj; - bkr.baked_objects= baked_objects; + bkr.tot_obj = tot_obj; + bkr.baked_objects = baked_objects; - bkr.stop= stop; - bkr.do_update= do_update; - bkr.progress= progress; + bkr.stop = stop; + bkr.do_update = do_update; + bkr.progress = progress; multiresbake_start(&bkr); @@ -1211,16 +1211,16 @@ static void multiresbake_startjob(void *bkv, short *stop, short *do_update, floa static void multiresbake_freejob(void *bkv) { - MultiresBakeJob *bkj= bkv; + MultiresBakeJob *bkj = bkv; MultiresBakerJobData *data, *next; - data= bkj->data.first; + data = bkj->data.first; while (data) { - next= data->next; + next = data->next; data->lores_dm->release(data->lores_dm); data->hires_dm->release(data->hires_dm); MEM_freeN(data); - data= next; + data = next; } MEM_freeN(bkj); @@ -1228,14 +1228,14 @@ static void multiresbake_freejob(void *bkv) static int multiresbake_image_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); MultiresBakeJob *bkr; wmJob *steve; if (!multiresbake_check(C, op)) return OPERATOR_CANCELLED; - bkr= MEM_callocN(sizeof(MultiresBakeJob), "MultiresBakeJob data"); + bkr = MEM_callocN(sizeof(MultiresBakeJob), "MultiresBakeJob data"); init_multiresbake_job(C, bkr); if (!bkr->data.first) { @@ -1244,12 +1244,12 @@ static int multiresbake_image_exec(bContext *C, wmOperator *op) } /* setup job */ - steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Multires Bake", WM_JOB_EXCL_RENDER|WM_JOB_PRIORITY|WM_JOB_PROGRESS); + steve = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Multires Bake", WM_JOB_EXCL_RENDER | WM_JOB_PRIORITY | WM_JOB_PROGRESS); WM_jobs_customdata(steve, bkr, multiresbake_freejob); WM_jobs_timer(steve, 0.2, NC_IMAGE, 0); /* TODO - only draw bake image, can we enforce this */ WM_jobs_callbacks(steve, multiresbake_startjob, NULL, NULL, NULL); - G.afbreek= 0; + G.afbreek = 0; WM_jobs_start(CTX_wm_manager(C), steve); WM_cursor_wait(0); @@ -1294,12 +1294,12 @@ typedef struct BakeRender { /* use by exec and invoke */ static int test_bake_internal(bContext *C, ReportList *reports) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); - if ((scene->r.bake_flag & R_BAKE_TO_ACTIVE) && CTX_data_active_object(C)==NULL) { + if ((scene->r.bake_flag & R_BAKE_TO_ACTIVE) && CTX_data_active_object(C) == NULL) { BKE_report(reports, RPT_ERROR, "No active object"); } - else if (scene->r.bake_mode==RE_BAKE_AO && scene->world==NULL) { + else if (scene->r.bake_mode == RE_BAKE_AO && scene->world == NULL) { BKE_report(reports, RPT_ERROR, "No world set up"); } else { @@ -1311,23 +1311,23 @@ static int test_bake_internal(bContext *C, ReportList *reports) static void init_bake_internal(BakeRender *bkr, bContext *C) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); /* get editmode results */ ED_object_exit_editmode(C, 0); /* 0 = does not exit editmode */ - bkr->sa= BKE_screen_find_big_area(CTX_wm_screen(C), SPACE_IMAGE, 10); /* can be NULL */ - bkr->main= CTX_data_main(C); - bkr->scene= scene; - bkr->actob= (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT : NULL; - bkr->re= RE_NewRender("_Bake View_"); + bkr->sa = BKE_screen_find_big_area(CTX_wm_screen(C), SPACE_IMAGE, 10); /* can be NULL */ + bkr->main = CTX_data_main(C); + bkr->scene = scene; + bkr->actob = (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT : NULL; + bkr->re = RE_NewRender("_Bake View_"); - if (scene->r.bake_mode==RE_BAKE_AO) { + if (scene->r.bake_mode == RE_BAKE_AO) { /* If raytracing or AO is disabled, switch it on temporarily for baking. */ bkr->prev_wo_amb_occ = (scene->world->mode & WO_AMB_OCC) != 0; scene->world->mode |= WO_AMB_OCC; } - if (scene->r.bake_mode==RE_BAKE_AO || bkr->actob) { + if (scene->r.bake_mode == RE_BAKE_AO || bkr->actob) { bkr->prev_r_raytrace = (scene->r.mode & R_RAYTRACE) != 0; scene->r.mode |= R_RAYTRACE; } @@ -1338,20 +1338,20 @@ static void finish_bake_internal(BakeRender *bkr) RE_Database_Free(bkr->re); /* restore raytrace and AO */ - if (bkr->scene->r.bake_mode==RE_BAKE_AO) + if (bkr->scene->r.bake_mode == RE_BAKE_AO) if (bkr->prev_wo_amb_occ == 0) bkr->scene->world->mode &= ~WO_AMB_OCC; - if (bkr->scene->r.bake_mode==RE_BAKE_AO || bkr->actob) + if (bkr->scene->r.bake_mode == RE_BAKE_AO || bkr->actob) if (bkr->prev_r_raytrace == 0) bkr->scene->r.mode &= ~R_RAYTRACE; - if (bkr->result==BAKE_RESULT_OK) { + if (bkr->result == BAKE_RESULT_OK) { Image *ima; /* force OpenGL reload and mipmap recalc */ - for (ima= G.main->image.first; ima; ima= ima->id.next) { - if (ima->ok==IMA_OK_LOADED) { - ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL); + for (ima = G.main->image.first; ima; ima = ima->id.next) { + if (ima->ok == IMA_OK_LOADED) { + ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL); if (ibuf) { if (ibuf->userflags & IB_BITMAPDIRTY) { GPU_free_image(ima); @@ -1361,7 +1361,7 @@ static void finish_bake_internal(BakeRender *bkr) /* freed when baking is done, but if its canceled we need to free here */ if (ibuf->userdata) { MEM_freeN(ibuf->userdata); - ibuf->userdata= NULL; + ibuf->userdata = NULL; } } } @@ -1371,52 +1371,52 @@ static void finish_bake_internal(BakeRender *bkr) static void *do_bake_render(void *bake_v) { - BakeRender *bkr= bake_v; + BakeRender *bkr = bake_v; - bkr->result= RE_bake_shade_all_selected(bkr->re, bkr->scene->r.bake_mode, bkr->actob, NULL, bkr->progress); - bkr->ready= 1; + bkr->result = RE_bake_shade_all_selected(bkr->re, bkr->scene->r.bake_mode, bkr->actob, NULL, bkr->progress); + bkr->ready = 1; return NULL; } static void bake_startjob(void *bkv, short *stop, short *do_update, float *progress) { - BakeRender *bkr= bkv; - Scene *scene= bkr->scene; - Main *bmain= bkr->main; + BakeRender *bkr = bkv; + Scene *scene = bkr->scene; + Main *bmain = bkr->main; - bkr->stop= stop; - bkr->do_update= do_update; - bkr->progress= progress; + bkr->stop = stop; + bkr->do_update = do_update; + bkr->progress = progress; RE_test_break_cb(bkr->re, NULL, thread_break); - G.afbreek= 0; /* blender_test_break uses this global */ + G.afbreek = 0; /* blender_test_break uses this global */ RE_Database_Baking(bkr->re, bmain, scene, scene->lay, scene->r.bake_mode, bkr->actob); /* baking itself is threaded, cannot use test_break in threads. we also update optional imagewindow */ - bkr->result= RE_bake_shade_all_selected(bkr->re, scene->r.bake_mode, bkr->actob, bkr->do_update, bkr->progress); + bkr->result = RE_bake_shade_all_selected(bkr->re, scene->r.bake_mode, bkr->actob, bkr->do_update, bkr->progress); } static void bake_update(void *bkv) { - BakeRender *bkr= bkv; + BakeRender *bkr = bkv; - if (bkr->sa && bkr->sa->spacetype==SPACE_IMAGE) { /* in case the user changed while baking */ - SpaceImage *sima= bkr->sa->spacedata.first; + if (bkr->sa && bkr->sa->spacetype == SPACE_IMAGE) { /* in case the user changed while baking */ + SpaceImage *sima = bkr->sa->spacedata.first; if (sima) - sima->image= RE_bake_shade_get_image(); + sima->image = RE_bake_shade_get_image(); } } static void bake_freejob(void *bkv) { - BakeRender *bkr= bkv; + BakeRender *bkr = bkv; finish_bake_internal(bkr); - if (bkr->result==BAKE_RESULT_NO_OBJECTS) + if (bkr->result == BAKE_RESULT_NO_OBJECTS) BKE_report(bkr->reports, RPT_ERROR, "No objects or images found to bake to"); - else if (bkr->result==BAKE_RESULT_FEEDBACK_LOOP) + else if (bkr->result == BAKE_RESULT_FEEDBACK_LOOP) BKE_report(bkr->reports, RPT_WARNING, "Feedback loop detected"); MEM_freeN(bkr); @@ -1427,8 +1427,8 @@ static void bake_freejob(void *bkv) static int objects_bake_render_modal(bContext *C, wmOperator *UNUSED(op), wmEvent *event) { /* no running blender, remove handler and pass through */ - if (0==WM_jobs_test(CTX_wm_manager(C), CTX_data_scene(C))) - return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH; + if (0 == WM_jobs_test(CTX_wm_manager(C), CTX_data_scene(C))) + return OPERATOR_FINISHED | OPERATOR_PASS_THROUGH; /* running render */ switch (event->type) { @@ -1441,7 +1441,7 @@ static int objects_bake_render_modal(bContext *C, wmOperator *UNUSED(op), wmEven static int is_multires_bake(Scene *scene) { - if ( ELEM(scene->r.bake_mode, RE_BAKE_NORMALS, RE_BAKE_DISPLACEMENT)) + if (ELEM(scene->r.bake_mode, RE_BAKE_NORMALS, RE_BAKE_DISPLACEMENT)) return scene->r.bake_flag & R_BAKE_MULTIRES; return 0; @@ -1449,34 +1449,34 @@ static int is_multires_bake(Scene *scene) static int objects_bake_render_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(_event)) { - Scene *scene= CTX_data_scene(C); - int result= OPERATOR_CANCELLED; + Scene *scene = CTX_data_scene(C); + int result = OPERATOR_CANCELLED; if (is_multires_bake(scene)) { - result= multiresbake_image_exec(C, op); + result = multiresbake_image_exec(C, op); } else { /* only one render job at a time */ if (WM_jobs_test(CTX_wm_manager(C), scene)) return OPERATOR_CANCELLED; - if (test_bake_internal(C, op->reports)==0) { + if (test_bake_internal(C, op->reports) == 0) { return OPERATOR_CANCELLED; } else { - BakeRender *bkr= MEM_callocN(sizeof(BakeRender), "render bake"); + BakeRender *bkr = MEM_callocN(sizeof(BakeRender), "render bake"); wmJob *steve; init_bake_internal(bkr, C); - bkr->reports= op->reports; + bkr->reports = op->reports; /* setup job */ - steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Texture Bake", WM_JOB_EXCL_RENDER|WM_JOB_PRIORITY|WM_JOB_PROGRESS); + steve = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Texture Bake", WM_JOB_EXCL_RENDER | WM_JOB_PRIORITY | WM_JOB_PROGRESS); WM_jobs_customdata(steve, bkr, bake_freejob); WM_jobs_timer(steve, 0.2, NC_IMAGE, 0); /* TODO - only draw bake image, can we enforce this */ WM_jobs_callbacks(steve, bake_startjob, NULL, bake_update, NULL); - G.afbreek= 0; + G.afbreek = 0; G.rendering = 1; WM_jobs_start(CTX_wm_manager(C), steve); @@ -1487,10 +1487,10 @@ static int objects_bake_render_invoke(bContext *C, wmOperator *op, wmEvent *UNUS WM_event_add_modal_handler(C, op); } - result= OPERATOR_RUNNING_MODAL; + result = OPERATOR_RUNNING_MODAL; } - WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, scene); + WM_event_add_notifier(C, NC_SCENE | ND_RENDER_RESULT, scene); return result; } @@ -1498,35 +1498,35 @@ static int objects_bake_render_invoke(bContext *C, wmOperator *op, wmEvent *UNUS static int bake_image_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - int result= OPERATOR_CANCELLED; + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + int result = OPERATOR_CANCELLED; if (is_multires_bake(scene)) { - result= multiresbake_image_exec_locked(C, op); + result = multiresbake_image_exec_locked(C, op); } else { - if (test_bake_internal(C, op->reports)==0) { + if (test_bake_internal(C, op->reports) == 0) { return OPERATOR_CANCELLED; } else { ListBase threads; - BakeRender bkr= {NULL}; + BakeRender bkr = {NULL}; init_bake_internal(&bkr, C); - bkr.reports= op->reports; + bkr.reports = op->reports; RE_test_break_cb(bkr.re, NULL, thread_break); - G.afbreek= 0; /* blender_test_break uses this global */ + G.afbreek = 0; /* blender_test_break uses this global */ - RE_Database_Baking(bkr.re, bmain, scene, scene->lay, scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE)? OBACT: NULL); + RE_Database_Baking(bkr.re, bmain, scene, scene->lay, scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT : NULL); /* baking itself is threaded, cannot use test_break in threads */ BLI_init_threads(&threads, do_bake_render, 1); - bkr.ready= 0; + bkr.ready = 0; BLI_insert_thread(&threads, &bkr); - while (bkr.ready==0) { + while (bkr.ready == 0) { PIL_sleep_ms(50); if (bkr.ready) break; @@ -1537,18 +1537,18 @@ static int bake_image_exec(bContext *C, wmOperator *op) } BLI_end_threads(&threads); - if (bkr.result==BAKE_RESULT_NO_OBJECTS) + if (bkr.result == BAKE_RESULT_NO_OBJECTS) BKE_report(op->reports, RPT_ERROR, "No valid images found to bake to"); - else if (bkr.result==BAKE_RESULT_FEEDBACK_LOOP) + else if (bkr.result == BAKE_RESULT_FEEDBACK_LOOP) BKE_report(op->reports, RPT_ERROR, "Feedback loop detected"); finish_bake_internal(&bkr); - result= OPERATOR_FINISHED; + result = OPERATOR_FINISHED; } } - WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, scene); + WM_event_add_notifier(C, NC_SCENE | ND_RENDER_RESULT, scene); return result; } diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index 158d323b802..a865b1d015d 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -81,7 +81,7 @@ /* -------------- Get Active Constraint Data ---------------------- */ /* if object in posemode, active bone constraints, else object constraints */ -ListBase *get_active_constraints (Object *ob) +ListBase *get_active_constraints(Object *ob) { if (ob == NULL) return NULL; @@ -100,10 +100,10 @@ ListBase *get_active_constraints (Object *ob) } /* Find the list that a given constraint belongs to, and/or also get the posechannel this is from (if applicable) */ -ListBase *get_constraint_lb (Object *ob, bConstraint *con, bPoseChannel **pchan_r) +ListBase *get_constraint_lb(Object *ob, bConstraint *con, bPoseChannel **pchan_r) { if (pchan_r) - *pchan_r= NULL; + *pchan_r = NULL; if (ELEM(NULL, ob, con)) return NULL; @@ -120,11 +120,11 @@ ListBase *get_constraint_lb (Object *ob, bConstraint *con, bPoseChannel **pchan_ /* try each bone in order * NOTE: it's not possible to directly look up the active bone yet, so this will have to do */ - for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { if ((BLI_findindex(&pchan->constraints, con) != -1)) { if (pchan_r) - *pchan_r= pchan; + *pchan_r = pchan; return &pchan->constraints; } @@ -136,7 +136,7 @@ ListBase *get_constraint_lb (Object *ob, bConstraint *con, bPoseChannel **pchan_ } /* single constraint */ -bConstraint *get_active_constraint (Object *ob) +bConstraint *get_active_constraint(Object *ob) { return constraints_get_active(get_active_constraints(ob)); } @@ -146,25 +146,25 @@ bConstraint *get_active_constraint (Object *ob) /* ------------- PyConstraints ------------------ */ /* this callback sets the text-file to be used for selected menu item */ -static void validate_pyconstraint_cb (void *arg1, void *arg2) +static void validate_pyconstraint_cb(void *arg1, void *arg2) { bPythonConstraint *data = arg1; - Text *text= NULL; + Text *text = NULL; int index = *((int *)arg2); int i; /* exception for no script */ if (index) { /* innovative use of a for...loop to search */ - for (text=G.main->text.first, i=1; text && index!=i; i++, text=text->id.next); + for (text = G.main->text.first, i = 1; text && index != i; i++, text = text->id.next) ; } data->text = text; } /* this returns a string for the list of usable pyconstraint script names */ -static char *buildmenu_pyconstraints (Text *con_text, int *pyconindex) +static char *buildmenu_pyconstraints(Text *con_text, int *pyconindex) { - DynStr *pupds= BLI_dynstr_new(); + DynStr *pupds = BLI_dynstr_new(); Text *text; char *str; char buf[64]; @@ -176,16 +176,16 @@ static char *buildmenu_pyconstraints (Text *con_text, int *pyconindex) /* init active-index first */ if (con_text == NULL) - *pyconindex= 0; + *pyconindex = 0; /* loop through markers, adding them */ - for (text=G.main->text.first, i=1; text; i++, text=text->id.next) { + for (text = G.main->text.first, i = 1; text; i++, text = text->id.next) { /* this is important to ensure that right script is shown as active */ if (text == con_text) *pyconindex = i; /* only include valid pyconstraint scripts */ if (BPY_is_pyconstraint(text)) { - BLI_dynstr_append(pupds, text->id.name+2); + BLI_dynstr_append(pupds, text->id.name + 2); sprintf(buf, "%%x%d", i); BLI_dynstr_append(pupds, buf); @@ -196,7 +196,7 @@ static char *buildmenu_pyconstraints (Text *con_text, int *pyconindex) } /* convert to normal MEM_malloc'd string */ - str= BLI_dynstr_get_cstring(pupds); + str = BLI_dynstr_get_cstring(pupds); BLI_dynstr_free(pupds); return str; @@ -205,14 +205,14 @@ static char *buildmenu_pyconstraints (Text *con_text, int *pyconindex) #if 0 // UNUSED, until pyconstraints are added back. /* this callback gets called when the 'refresh' button of a pyconstraint gets pressed */ -static void update_pyconstraint_cb (void *arg1, void *arg2) +static void update_pyconstraint_cb(void *arg1, void *arg2) { #ifndef WITH_PYTHON (void)arg1; /* unused */ (void)arg2; /* unused */ #else - Object *owner= (Object *)arg1; - bConstraint *con= (bConstraint *)arg2; + Object *owner = (Object *)arg1; + bConstraint *con = (bConstraint *)arg2; if (owner && con) BPY_pyconstraint_update(owner, con); #endif @@ -220,30 +220,30 @@ static void update_pyconstraint_cb (void *arg1, void *arg2) #endif // UNUSED /* helper function for add_constriant - sets the last target for the active constraint */ -static void set_constraint_nth_target (bConstraint *con, Object *target, const char subtarget[], int index) +static void set_constraint_nth_target(bConstraint *con, Object *target, const char subtarget[], int index) { - bConstraintTypeInfo *cti= constraint_get_typeinfo(con); + bConstraintTypeInfo *cti = constraint_get_typeinfo(con); ListBase targets = {NULL, NULL}; bConstraintTarget *ct; int num_targets, i; if (cti && cti->get_constraint_targets) { cti->get_constraint_targets(con, &targets); - num_targets= BLI_countlist(&targets); + num_targets = BLI_countlist(&targets); if (index < 0) { if (abs(index) < num_targets) - index= num_targets - abs(index); + index = num_targets - abs(index); else - index= num_targets - 1; + index = num_targets - 1; } else if (index >= num_targets) { - index= num_targets - 1; + index = num_targets - 1; } - for (ct=targets.first, i=0; ct; ct= ct->next, i++) { + for (ct = targets.first, i = 0; ct; ct = ct->next, i++) { if (i == index) { - ct->tar= target; + ct->tar = target; BLI_strncpy(ct->subtarget, subtarget, sizeof(ct->subtarget)); break; } @@ -259,13 +259,13 @@ static void set_constraint_nth_target (bConstraint *con, Object *target, const c /* checks validity of object pointers, and NULLs, * if Bone doesnt exist it sets the CONSTRAINT_DISABLE flag. */ -static void test_constraints (Object *owner, bPoseChannel *pchan) +static void test_constraints(Object *owner, bPoseChannel *pchan) { bConstraint *curcon; - ListBase *conlist= NULL; + ListBase *conlist = NULL; int type; - if (owner==NULL) return; + if (owner == NULL) return; /* Check parents */ if (pchan) { @@ -293,8 +293,8 @@ static void test_constraints (Object *owner, bPoseChannel *pchan) /* Check all constraints - is constraint valid? */ if (conlist) { - for (curcon = conlist->first; curcon; curcon=curcon->next) { - bConstraintTypeInfo *cti= constraint_get_typeinfo(curcon); + for (curcon = conlist->first; curcon; curcon = curcon->next) { + bConstraintTypeInfo *cti = constraint_get_typeinfo(curcon); ListBase targets = {NULL, NULL}; bConstraintTarget *ct; @@ -339,7 +339,7 @@ static void test_constraints (Object *owner, bPoseChannel *pchan) bPivotConstraint *data = curcon->data; /* target doesn't have to exist, but if it is non-null, it must exist! */ - if (data->tar && exist_object(data->tar)==0) { + if (data->tar && exist_object(data->tar) == 0) { data->tar = NULL; curcon->flag |= CONSTRAINT_DISABLE; } @@ -363,26 +363,26 @@ static void test_constraints (Object *owner, bPoseChannel *pchan) bFollowPathConstraint *data = curcon->data; /* don't allow track/up axes to be the same */ - if (data->upflag==data->trackflag) + if (data->upflag == data->trackflag) curcon->flag |= CONSTRAINT_DISABLE; - if (data->upflag+3==data->trackflag) + if (data->upflag + 3 == data->trackflag) curcon->flag |= CONSTRAINT_DISABLE; } else if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { bTrackToConstraint *data = curcon->data; /* don't allow track/up axes to be the same */ - if (data->reserved2==data->reserved1) + if (data->reserved2 == data->reserved1) curcon->flag |= CONSTRAINT_DISABLE; - if (data->reserved2+3==data->reserved1) + if (data->reserved2 + 3 == data->reserved1) curcon->flag |= CONSTRAINT_DISABLE; } else if (curcon->type == CONSTRAINT_TYPE_LOCKTRACK) { bLockTrackConstraint *data = curcon->data; - if (data->lockflag==data->trackflag) + if (data->lockflag == data->trackflag) curcon->flag |= CONSTRAINT_DISABLE; - if (data->lockflag+3==data->trackflag) + if (data->lockflag + 3 == data->trackflag) curcon->flag |= CONSTRAINT_DISABLE; } else if (curcon->type == CONSTRAINT_TYPE_SPLINEIK) { @@ -391,7 +391,7 @@ static void test_constraints (Object *owner, bPoseChannel *pchan) /* if the number of points does not match the amount required by the chain length, * free the points array and request a rebind... */ - if ((data->points == NULL) || (data->numpoints != data->chainlen+1)) { + if ((data->points == NULL) || (data->numpoints != data->chainlen + 1)) { /* free the points array */ if (data->points) { MEM_freeN(data->points); @@ -405,15 +405,15 @@ static void test_constraints (Object *owner, bPoseChannel *pchan) else if (curcon->type == CONSTRAINT_TYPE_FOLLOWTRACK) { bFollowTrackConstraint *data = curcon->data; - if ((data->flag&CAMERASOLVER_ACTIVECLIP)==0) { + if ((data->flag & CAMERASOLVER_ACTIVECLIP) == 0) { if (data->clip != NULL && data->track[0]) { - MovieTracking *tracking= &data->clip->tracking; + MovieTracking *tracking = &data->clip->tracking; MovieTrackingObject *tracking_object; if (data->object[0]) - tracking_object= BKE_tracking_named_object(tracking, data->object); + tracking_object = BKE_tracking_named_object(tracking, data->object); else - tracking_object= BKE_tracking_get_camera_object(tracking); + tracking_object = BKE_tracking_get_camera_object(tracking); if (!tracking_object) { curcon->flag |= CONSTRAINT_DISABLE; @@ -429,13 +429,13 @@ static void test_constraints (Object *owner, bPoseChannel *pchan) else if (curcon->type == CONSTRAINT_TYPE_CAMERASOLVER) { bCameraSolverConstraint *data = curcon->data; - if ((data->flag&CAMERASOLVER_ACTIVECLIP)==0 && data->clip == NULL) + if ((data->flag & CAMERASOLVER_ACTIVECLIP) == 0 && data->clip == NULL) curcon->flag |= CONSTRAINT_DISABLE; } else if (curcon->type == CONSTRAINT_TYPE_OBJECTSOLVER) { bObjectSolverConstraint *data = curcon->data; - if ((data->flag&CAMERASOLVER_ACTIVECLIP)==0 && data->clip == NULL) + if ((data->flag & CAMERASOLVER_ACTIVECLIP) == 0 && data->clip == NULL) curcon->flag |= CONSTRAINT_DISABLE; } @@ -444,7 +444,7 @@ static void test_constraints (Object *owner, bPoseChannel *pchan) cti->get_constraint_targets(curcon, &targets); /* disable and clear constraints targets that are incorrect */ - for (ct= targets.first; ct; ct= ct->next) { + for (ct = targets.first; ct; ct = ct->next) { /* general validity checks (for those constraints that need this) */ if (exist_object(ct->tar) == 0) { /* object doesn't exist, but constraint requires target */ @@ -475,11 +475,11 @@ static void test_constraints (Object *owner, bPoseChannel *pchan) if (ELEM3(curcon->type, CONSTRAINT_TYPE_FOLLOWPATH, CONSTRAINT_TYPE_CLAMPTO, CONSTRAINT_TYPE_SPLINEIK)) { if (ct->tar) { if (ct->tar->type != OB_CURVE) { - ct->tar= NULL; + ct->tar = NULL; curcon->flag |= CONSTRAINT_DISABLE; } else { - Curve *cu= ct->tar->data; + Curve *cu = ct->tar->data; /* auto-set 'Path' setting on curve so this works */ cu->flag |= CU_PATH; @@ -496,15 +496,15 @@ static void test_constraints (Object *owner, bPoseChannel *pchan) } } -void object_test_constraints (Object *owner) +void object_test_constraints(Object *owner) { if (owner->constraints.first) test_constraints(owner, NULL); - if (owner->type==OB_ARMATURE && owner->pose) { + if (owner->type == OB_ARMATURE && owner->pose) { bPoseChannel *pchan; - for (pchan= owner->pose->chanbase.first; pchan; pchan= pchan->next) { + for (pchan = owner->pose->chanbase.first; pchan; pchan = pchan->next) { if (pchan->constraints.first) test_constraints(owner, pchan); } @@ -514,8 +514,8 @@ void object_test_constraints (Object *owner) /************************ generic functions for operators using constraint names and data context *********************/ -#define EDIT_CONSTRAINT_OWNER_OBJECT 0 -#define EDIT_CONSTRAINT_OWNER_BONE 1 +#define EDIT_CONSTRAINT_OWNER_OBJECT 0 +#define EDIT_CONSTRAINT_OWNER_BONE 1 static EnumPropertyItem constraint_owner_items[] = { {EDIT_CONSTRAINT_OWNER_OBJECT, "OBJECT", 0, "Object", "Edit a constraint on the active object"}, @@ -525,11 +525,11 @@ static EnumPropertyItem constraint_owner_items[] = { static int edit_constraint_poll_generic(bContext *C, StructRNA *rna_type) { - PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", rna_type); - Object *ob= (ptr.id.data) ? ptr.id.data : ED_object_active_context(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", rna_type); + Object *ob = (ptr.id.data) ? ptr.id.data : ED_object_active_context(C); if (!ob || ob->id.lib) return 0; - if (ptr.id.data && ((ID*)ptr.id.data)->lib) return 0; + if (ptr.id.data && ((ID *)ptr.id.data)->lib) return 0; return 1; } @@ -547,8 +547,8 @@ static void edit_constraint_properties(wmOperatorType *ot) static int edit_constraint_invoke_properties(bContext *C, wmOperator *op) { - PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint); - Object *ob= (ptr.id.data)?ptr.id.data:ED_object_active_context(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint); + Object *ob = (ptr.id.data) ? ptr.id.data : ED_object_active_context(C); bConstraint *con; ListBase *list; @@ -577,7 +577,7 @@ static bConstraint *edit_constraint_property_get(wmOperator *op, Object *ob, int char constraint_name[MAX_NAME]; int owner = RNA_enum_get(op->ptr, "owner"); bConstraint *con; - ListBase *list=NULL; + ListBase *list = NULL; RNA_string_get(op->ptr, "constraint", constraint_name); @@ -585,7 +585,7 @@ static bConstraint *edit_constraint_property_get(wmOperator *op, Object *ob, int list = &ob->constraints; } else if (owner == EDIT_CONSTRAINT_OWNER_BONE) { - bPoseChannel *pchan= get_active_posechannel(ob); + bPoseChannel *pchan = get_active_posechannel(ob); if (pchan) list = &pchan->constraints; else { @@ -615,11 +615,11 @@ static bConstraint *edit_constraint_property_get(wmOperator *op, Object *ob, int /* ---------- Distance-Dependent Constraints ---------- */ /* StretchTo, Limit Distance */ -static int stretchto_reset_exec (bContext *C, wmOperator *op) +static int stretchto_reset_exec(bContext *C, wmOperator *op) { Object *ob = ED_object_active_context(C); bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_STRETCHTO); - bStretchToConstraint *data= (con) ? (bStretchToConstraint *)con->data : NULL; + bStretchToConstraint *data = (con) ? (bStretchToConstraint *)con->data : NULL; /* despite 3 layers of checks, we may still not be able to find a constraint */ if (data == NULL) @@ -629,7 +629,7 @@ static int stretchto_reset_exec (bContext *C, wmOperator *op) data->orglength = 0.0f; ED_object_constraint_update(ob); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, NULL); return OPERATOR_FINISHED; } @@ -641,7 +641,7 @@ static int stretchto_reset_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(e return OPERATOR_CANCELLED; } -void CONSTRAINT_OT_stretchto_reset (wmOperatorType *ot) +void CONSTRAINT_OT_stretchto_reset(wmOperatorType *ot) { /* identifiers */ ot->name = "Reset Original Length"; @@ -653,16 +653,16 @@ void CONSTRAINT_OT_stretchto_reset (wmOperatorType *ot) ot->poll = edit_constraint_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_constraint_properties(ot); } -static int limitdistance_reset_exec (bContext *C, wmOperator *op) +static int limitdistance_reset_exec(bContext *C, wmOperator *op) { Object *ob = ED_object_active_context(C); bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_DISTLIMIT); - bDistLimitConstraint *data= (con) ? (bDistLimitConstraint *)con->data : NULL; + bDistLimitConstraint *data = (con) ? (bDistLimitConstraint *)con->data : NULL; /* despite 3 layers of checks, we may still not be able to find a constraint */ if (data == NULL) @@ -672,7 +672,7 @@ static int limitdistance_reset_exec (bContext *C, wmOperator *op) data->dist = 0.0f; ED_object_constraint_update(ob); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, NULL); return OPERATOR_FINISHED; } @@ -684,7 +684,7 @@ static int limitdistance_reset_invoke(bContext *C, wmOperator *op, wmEvent *UNUS return OPERATOR_CANCELLED; } -void CONSTRAINT_OT_limitdistance_reset (wmOperatorType *ot) +void CONSTRAINT_OT_limitdistance_reset(wmOperatorType *ot) { /* identifiers */ ot->name = "Reset Distance"; @@ -696,16 +696,16 @@ void CONSTRAINT_OT_limitdistance_reset (wmOperatorType *ot) ot->poll = edit_constraint_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_constraint_properties(ot); } /* ------------- Child-Of Constraint ------------------ */ -static void child_get_inverse_matrix (Scene *scene, Object *ob, bConstraint *con, float invmat[4][4]) +static void child_get_inverse_matrix(Scene *scene, Object *ob, bConstraint *con, float invmat[4][4]) { bConstraint *lastcon = NULL; - bPoseChannel *pchan= NULL; + bPoseChannel *pchan = NULL; /* nullify inverse matrix first */ unit_m4(invmat); @@ -713,13 +713,13 @@ static void child_get_inverse_matrix (Scene *scene, Object *ob, bConstraint *con /* try to find a pose channel - assume that this is the constraint owner */ // TODO: get from context instead? if (ob && ob->pose) - pchan= get_active_posechannel(ob); + pchan = get_active_posechannel(ob); /* calculate/set inverse matrix: - * We just calculate all transform-stack eval up to but not including this constraint. - * This is because inverse should just inverse correct for just the constraint's influence - * when it gets applied; that is, at the time of application, we don't know anything about - * what follows. + * We just calculate all transform-stack eval up to but not including this constraint. + * This is because inverse should just inverse correct for just the constraint's influence + * when it gets applied; that is, at the time of application, we don't know anything about + * what follows. */ if (pchan) { float imat[4][4], tmat[4][4]; @@ -781,23 +781,23 @@ static void child_get_inverse_matrix (Scene *scene, Object *ob, bConstraint *con } /* ChildOf Constraint - set inverse callback */ -static int childof_set_inverse_exec (bContext *C, wmOperator *op) +static int childof_set_inverse_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); Object *ob = ED_object_active_context(C); bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_CHILDOF); - bChildOfConstraint *data= (con) ? (bChildOfConstraint *)con->data : NULL; + bChildOfConstraint *data = (con) ? (bChildOfConstraint *)con->data : NULL; /* despite 3 layers of checks, we may still not be able to find a constraint */ if (data == NULL) { - printf("DEBUG: Child-Of Set Inverse - object = '%s'\n", (ob)? ob->id.name+2 : ""); + printf("DEBUG: Child-Of Set Inverse - object = '%s'\n", (ob) ? ob->id.name + 2 : ""); BKE_report(op->reports, RPT_ERROR, "Couldn't find constraint data for Child-Of Set Inverse"); return OPERATOR_CANCELLED; } child_get_inverse_matrix(scene, ob, con, data->invmat); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob); return OPERATOR_FINISHED; } @@ -810,7 +810,7 @@ static int childof_set_inverse_invoke(bContext *C, wmOperator *op, wmEvent *UNUS return OPERATOR_CANCELLED; } -void CONSTRAINT_OT_childof_set_inverse (wmOperatorType *ot) +void CONSTRAINT_OT_childof_set_inverse(wmOperatorType *ot) { /* identifiers */ ot->name = "Set Inverse"; @@ -822,18 +822,18 @@ void CONSTRAINT_OT_childof_set_inverse (wmOperatorType *ot) ot->poll = edit_constraint_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_constraint_properties(ot); } /* ChildOf Constraint - clear inverse callback */ -static int childof_clear_inverse_exec (bContext *C, wmOperator *op) +static int childof_clear_inverse_exec(bContext *C, wmOperator *op) { Object *ob = ED_object_active_context(C); bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_CHILDOF); - bChildOfConstraint *data= (con) ? (bChildOfConstraint *)con->data : NULL; + bChildOfConstraint *data = (con) ? (bChildOfConstraint *)con->data : NULL; - if (data==NULL) { + if (data == NULL) { BKE_report(op->reports, RPT_ERROR, "Childof constraint not found"); return OPERATOR_CANCELLED; } @@ -841,7 +841,7 @@ static int childof_clear_inverse_exec (bContext *C, wmOperator *op) /* simply clear the matrix */ unit_m4(data->invmat); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob); return OPERATOR_FINISHED; } @@ -854,7 +854,7 @@ static int childof_clear_inverse_invoke(bContext *C, wmOperator *op, wmEvent *UN return OPERATOR_CANCELLED; } -void CONSTRAINT_OT_childof_clear_inverse (wmOperatorType *ot) +void CONSTRAINT_OT_childof_clear_inverse(wmOperatorType *ot) { /* identifiers */ ot->name = "Clear Inverse"; @@ -866,29 +866,29 @@ void CONSTRAINT_OT_childof_clear_inverse (wmOperatorType *ot) ot->poll = edit_constraint_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_constraint_properties(ot); } /* ------------- Object Solver Constraint ------------------ */ -static int objectsolver_set_inverse_exec (bContext *C, wmOperator *op) +static int objectsolver_set_inverse_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); Object *ob = ED_object_active_context(C); bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_OBJECTSOLVER); - bObjectSolverConstraint *data= (con) ? (bObjectSolverConstraint *)con->data : NULL; + bObjectSolverConstraint *data = (con) ? (bObjectSolverConstraint *)con->data : NULL; /* despite 3 layers of checks, we may still not be able to find a constraint */ if (data == NULL) { - printf("DEBUG: Child-Of Set Inverse - object = '%s'\n", (ob)? ob->id.name+2 : ""); + printf("DEBUG: Child-Of Set Inverse - object = '%s'\n", (ob) ? ob->id.name + 2 : ""); BKE_report(op->reports, RPT_ERROR, "Couldn't find constraint data for Child-Of Set Inverse"); return OPERATOR_CANCELLED; } child_get_inverse_matrix(scene, ob, con, data->invmat); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob); return OPERATOR_FINISHED; } @@ -901,7 +901,7 @@ static int objectsolver_set_inverse_invoke(bContext *C, wmOperator *op, wmEvent return OPERATOR_CANCELLED; } -void CONSTRAINT_OT_objectsolver_set_inverse (wmOperatorType *ot) +void CONSTRAINT_OT_objectsolver_set_inverse(wmOperatorType *ot) { /* identifiers */ ot->name = "Set Inverse"; @@ -913,17 +913,17 @@ void CONSTRAINT_OT_objectsolver_set_inverse (wmOperatorType *ot) ot->poll = edit_constraint_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_constraint_properties(ot); } -static int objectsolver_clear_inverse_exec (bContext *C, wmOperator *op) +static int objectsolver_clear_inverse_exec(bContext *C, wmOperator *op) { Object *ob = ED_object_active_context(C); bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_OBJECTSOLVER); - bObjectSolverConstraint *data= (con) ? (bObjectSolverConstraint *)con->data : NULL; + bObjectSolverConstraint *data = (con) ? (bObjectSolverConstraint *)con->data : NULL; - if (data==NULL) { + if (data == NULL) { BKE_report(op->reports, RPT_ERROR, "Childof constraint not found"); return OPERATOR_CANCELLED; } @@ -931,7 +931,7 @@ static int objectsolver_clear_inverse_exec (bContext *C, wmOperator *op) /* simply clear the matrix */ unit_m4(data->invmat); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob); return OPERATOR_FINISHED; } @@ -944,7 +944,7 @@ static int objectsolver_clear_inverse_invoke(bContext *C, wmOperator *op, wmEven return OPERATOR_CANCELLED; } -void CONSTRAINT_OT_objectsolver_clear_inverse (wmOperatorType *ot) +void CONSTRAINT_OT_objectsolver_clear_inverse(wmOperatorType *ot) { /* identifiers */ ot->name = "Clear Inverse"; @@ -956,7 +956,7 @@ void CONSTRAINT_OT_objectsolver_clear_inverse (wmOperatorType *ot) ot->poll = edit_constraint_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_constraint_properties(ot); } @@ -981,7 +981,7 @@ void ED_object_constraint_update(Object *ob) object_test_constraints(ob); - if (ob->type==OB_ARMATURE) DAG_id_tag_update(&ob->id, OB_RECALC_DATA|OB_RECALC_OB); + if (ob->type == OB_ARMATURE) DAG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB); else DAG_id_tag_update(&ob->id, OB_RECALC_OB); } @@ -989,23 +989,23 @@ void ED_object_constraint_dependency_update(Main *bmain, Scene *scene, Object *o { ED_object_constraint_update(ob); - if (ob->pose) ob->pose->flag |= POSE_RECALC; // checks & sorts pose channels + if (ob->pose) ob->pose->flag |= POSE_RECALC; // checks & sorts pose channels DAG_scene_sort(bmain, scene); } static int constraint_poll(bContext *C) { - PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint); + PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint); return (ptr.id.data && ptr.data); } -static int constraint_delete_exec (bContext *C, wmOperator *UNUSED(op)) +static int constraint_delete_exec(bContext *C, wmOperator *UNUSED(op)) { - PointerRNA ptr= CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint); - Object *ob= ptr.id.data; - bConstraint *con= ptr.data; + PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint); + Object *ob = ptr.id.data; + bConstraint *con = ptr.data; ListBase *lb = get_constraint_lb(ob, con, NULL); - const short is_ik= ELEM(con->type, CONSTRAINT_TYPE_KINEMATIC, CONSTRAINT_TYPE_SPLINEIK); + const short is_ik = ELEM(con->type, CONSTRAINT_TYPE_KINEMATIC, CONSTRAINT_TYPE_SPLINEIK); /* free the constraint */ if (remove_constraint(lb, con)) { @@ -1020,7 +1020,7 @@ static int constraint_delete_exec (bContext *C, wmOperator *UNUSED(op)) } /* notifiers */ - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_REMOVED, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, ob); return OPERATOR_FINISHED; } @@ -1030,7 +1030,7 @@ static int constraint_delete_exec (bContext *C, wmOperator *UNUSED(op)) } } -void CONSTRAINT_OT_delete (wmOperatorType *ot) +void CONSTRAINT_OT_delete(wmOperatorType *ot) { /* identifiers */ ot->name = "Delete Constraint"; @@ -1042,23 +1042,23 @@ void CONSTRAINT_OT_delete (wmOperatorType *ot) ot->poll = constraint_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } -static int constraint_move_down_exec (bContext *C, wmOperator *op) +static int constraint_move_down_exec(bContext *C, wmOperator *op) { Object *ob = ED_object_active_context(C); bConstraint *con = edit_constraint_property_get(op, ob, 0); if (con && con->next) { - ListBase *conlist= get_constraint_lb(ob, con, NULL); - bConstraint *nextCon= con->next; + ListBase *conlist = get_constraint_lb(ob, con, NULL); + bConstraint *nextCon = con->next; /* insert the nominated constraint after the one that used to be after it */ BLI_remlink(conlist, con); BLI_insertlinkafter(conlist, nextCon, con); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob); return OPERATOR_FINISHED; } @@ -1075,7 +1075,7 @@ static int constraint_move_down_invoke(bContext *C, wmOperator *op, wmEvent *UNU } -void CONSTRAINT_OT_move_down (wmOperatorType *ot) +void CONSTRAINT_OT_move_down(wmOperatorType *ot) { /* identifiers */ ot->name = "Move Constraint Down"; @@ -1088,25 +1088,25 @@ void CONSTRAINT_OT_move_down (wmOperatorType *ot) ot->poll = edit_constraint_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_constraint_properties(ot); } -static int constraint_move_up_exec (bContext *C, wmOperator *op) +static int constraint_move_up_exec(bContext *C, wmOperator *op) { Object *ob = ED_object_active_context(C); bConstraint *con = edit_constraint_property_get(op, ob, 0); if (con && con->prev) { - ListBase *conlist= get_constraint_lb(ob, con, NULL); - bConstraint *prevCon= con->prev; + ListBase *conlist = get_constraint_lb(ob, con, NULL); + bConstraint *prevCon = con->prev; /* insert the nominated constraint before the one that used to be before it */ BLI_remlink(conlist, con); BLI_insertlinkbefore(conlist, prevCon, con); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob); return OPERATOR_FINISHED; } @@ -1122,7 +1122,7 @@ static int constraint_move_up_invoke(bContext *C, wmOperator *op, wmEvent *UNUSE return OPERATOR_CANCELLED; } -void CONSTRAINT_OT_move_up (wmOperatorType *ot) +void CONSTRAINT_OT_move_up(wmOperatorType *ot) { /* identifiers */ ot->name = "Move Constraint Up"; @@ -1135,7 +1135,7 @@ void CONSTRAINT_OT_move_up (wmOperatorType *ot) ot->poll = edit_constraint_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_constraint_properties(ot); } @@ -1145,25 +1145,25 @@ void CONSTRAINT_OT_move_up (wmOperatorType *ot) static int pose_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Object *ob= object_pose_armature_get(CTX_data_active_object(C)); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Object *ob = object_pose_armature_get(CTX_data_active_object(C)); /* free constraints for all selected bones */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { free_constraints(&pchan->constraints); - pchan->constflag &= ~(PCHAN_HAS_IK|PCHAN_HAS_SPLINEIK|PCHAN_HAS_CONST); + pchan->constflag &= ~(PCHAN_HAS_IK | PCHAN_HAS_SPLINEIK | PCHAN_HAS_CONST); } CTX_DATA_END; /* force depsgraph to get recalculated since relationships removed */ - DAG_scene_sort(bmain, scene); /* sort order of objects */ + DAG_scene_sort(bmain, scene); /* sort order of objects */ /* note, calling BIK_clear_data() isn't needed here */ /* do updates */ DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob); return OPERATOR_FINISHED; } @@ -1183,21 +1183,21 @@ void POSE_OT_constraints_clear(wmOperatorType *ot) static int object_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); /* do freeing */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { free_constraints(&ob->constraints); DAG_id_tag_update(&ob->id, OB_RECALC_OB); } CTX_DATA_END; /* force depsgraph to get recalculated since relationships removed */ - DAG_scene_sort(bmain, scene); /* sort order of objects */ + DAG_scene_sort(bmain, scene); /* sort order of objects */ /* do updates */ - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, NULL); return OPERATOR_FINISHED; } @@ -1218,7 +1218,7 @@ void OBJECT_OT_constraints_clear(wmOperatorType *ot) static int pose_constraint_copy_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); + Main *bmain = CTX_data_main(C); Scene *scene = CTX_data_scene(C); bPoseChannel *pchan = CTX_data_active_pose_bone(C); @@ -1229,7 +1229,7 @@ static int pose_constraint_copy_exec(bContext *C, wmOperator *op) } /* copy all constraints from active posebone to all selected posebones */ - CTX_DATA_BEGIN (C, bPoseChannel*, chan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, chan, selected_pose_bones) { /* if we're not handling the object we're copying from, copy all constraints over */ if (pchan != chan) { copy_constraints(&chan->constraints, &pchan->constraints, TRUE); @@ -1240,9 +1240,9 @@ static int pose_constraint_copy_exec(bContext *C, wmOperator *op) CTX_DATA_END; /* force depsgraph to get recalculated since new relationships added */ - DAG_scene_sort(bmain, scene); /* sort order of objects/bones */ + DAG_scene_sort(bmain, scene); /* sort order of objects/bones */ - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, NULL); return OPERATOR_FINISHED; } @@ -1259,17 +1259,17 @@ void POSE_OT_constraints_copy(wmOperatorType *ot) ot->poll = ED_operator_posemode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int object_constraint_copy_exec(bContext *C, wmOperator *UNUSED(op)) { - Main *bmain= CTX_data_main(C); + Main *bmain = CTX_data_main(C); Scene *scene = CTX_data_scene(C); Object *obact = ED_object_active_context(C); /* copy all constraints from active object to all selected objects */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { /* if we're not handling the object we're copying from, copy all constraints over */ if (obact != ob) { copy_constraints(&ob->constraints, &obact->constraints, TRUE); @@ -1279,10 +1279,10 @@ static int object_constraint_copy_exec(bContext *C, wmOperator *UNUSED(op)) CTX_DATA_END; /* force depsgraph to get recalculated since new relationships added */ - DAG_scene_sort(bmain, scene); /* sort order of objects */ + DAG_scene_sort(bmain, scene); /* sort order of objects */ /* notifiers for updates */ - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_ADDED, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_ADDED, NULL); return OPERATOR_FINISHED; } @@ -1299,7 +1299,7 @@ void OBJECT_OT_constraints_copy(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /************************ add constraint operators *********************/ @@ -1307,25 +1307,25 @@ void OBJECT_OT_constraints_copy(wmOperatorType *ot) /* get the Object and/or PoseChannel to use as target */ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_ob, bPoseChannel **tar_pchan, short add) { - Object *obact= ED_object_active_context(C); - bPoseChannel *pchanact= get_active_posechannel(obact); - short only_curve= 0, only_mesh= 0, only_ob= 0; - short found= 0; + Object *obact = ED_object_active_context(C); + bPoseChannel *pchanact = get_active_posechannel(obact); + short only_curve = 0, only_mesh = 0, only_ob = 0; + short found = 0; /* clear tar_ob and tar_pchan fields before use * - assume for now that both always exist... */ - *tar_ob= NULL; - *tar_pchan= NULL; + *tar_ob = NULL; + *tar_pchan = NULL; /* check if constraint type doesn't requires a target * - if so, no need to get any targets */ switch (con_type) { /* no-target constraints --------------------------- */ - /* null constraint - shouldn't even be added! */ + /* null constraint - shouldn't even be added! */ case CONSTRAINT_TYPE_NULL: - /* limit constraints - no targets needed */ + /* limit constraints - no targets needed */ case CONSTRAINT_TYPE_LOCLIMIT: case CONSTRAINT_TYPE_ROTLIMIT: case CONSTRAINT_TYPE_SIZELIMIT: @@ -1334,37 +1334,37 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* restricted target-type constraints -------------- */ /* NOTE: for these, we cannot try to add a target object if no valid ones are found, since that doesn't work */ - /* curve-based constraints - set the only_curve and only_ob flags */ + /* curve-based constraints - set the only_curve and only_ob flags */ case CONSTRAINT_TYPE_CLAMPTO: case CONSTRAINT_TYPE_FOLLOWPATH: case CONSTRAINT_TYPE_SPLINEIK: - only_curve= 1; - only_ob= 1; - add= 0; + only_curve = 1; + only_ob = 1; + add = 0; break; - /* mesh only? */ + /* mesh only? */ case CONSTRAINT_TYPE_SHRINKWRAP: - only_mesh= 1; - only_ob= 1; - add= 0; + only_mesh = 1; + only_ob = 1; + add = 0; break; - /* object only - add here is ok? */ + /* object only - add here is ok? */ case CONSTRAINT_TYPE_RIGIDBODYJOINT: - only_ob= 1; + only_ob = 1; break; } /* if the active Object is Armature, and we can search for bones, do so... */ if ((obact->type == OB_ARMATURE) && (only_ob == 0)) { /* search in list of selected Pose-Channels for target */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { /* just use the first one that we encounter, as long as it is not the active one */ if (pchan != pchanact) { - *tar_ob= obact; - *tar_pchan= pchan; - found= 1; + *tar_ob = obact; + *tar_pchan = pchan; + found = 1; break; } @@ -1375,22 +1375,22 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* if not yet found, try selected Objects... */ if (found == 0) { /* search in selected objects context */ - CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { /* just use the first object we encounter (that isn't the active object) * and which fulfills the criteria for the object-target that we've got */ if ( (ob != obact) && - ((!only_curve) || (ob->type == OB_CURVE)) && - ((!only_mesh) || (ob->type == OB_MESH)) ) + ((!only_curve) || (ob->type == OB_CURVE)) && + ((!only_mesh) || (ob->type == OB_MESH)) ) { /* set target */ - *tar_ob= ob; - found= 1; + *tar_ob = ob; + found = 1; /* perform some special operations on the target */ if (only_curve) { /* Curve-Path option must be enabled for follow-path constraints to be able to work */ - Curve *cu= (Curve *)ob->data; + Curve *cu = (Curve *)ob->data; cu->flag |= CU_PATH; } @@ -1402,17 +1402,17 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* if still not found, add a new empty to act as a target (if allowed) */ if ((found == 0) && (add)) { - Scene *scene= CTX_data_scene(C); - Base *base= BASACT, *newbase=NULL; + Scene *scene = CTX_data_scene(C); + Base *base = BASACT, *newbase = NULL; Object *obt; /* add new target object */ - obt= add_object(scene, OB_EMPTY); + obt = add_object(scene, OB_EMPTY); /* set layers OK */ - newbase= BASACT; - newbase->lay= base->lay; - obt->lay= newbase->lay; + newbase = BASACT; + newbase->lay = base->lay; + obt->lay = newbase->lay; /* transform cent to global coords for loc */ if (pchanact) { @@ -1429,12 +1429,12 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o } /* restore, add_object sets active */ - BASACT= base; + BASACT = base; base->flag |= SELECT; /* make our new target the new object */ - *tar_ob= obt; - found= 1; + *tar_ob = obt; + found = 1; } /* return whether there's any target */ @@ -1444,16 +1444,16 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o /* used by add constraint operators to add the constraint required */ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase *list, int type, short setTarget) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); bPoseChannel *pchan; bConstraint *con; if (list == &ob->constraints) { - pchan= NULL; + pchan = NULL; } else { - pchan= get_active_posechannel(ob); + pchan = get_active_posechannel(ob); /* ensure not to confuse object/pose adding */ if (pchan == NULL) { @@ -1488,8 +1488,8 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase * - apart from the buttons-window add buttons, we shouldn't add in this way */ if (setTarget) { - Object *tar_ob= NULL; - bPoseChannel *tar_pchan= NULL; + Object *tar_ob = NULL; + bPoseChannel *tar_pchan = NULL; /* get the target objects, adding them as need be */ if (get_new_constraint_target(C, type, &tar_ob, &tar_pchan, 1)) { @@ -1509,7 +1509,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase { #ifdef WITH_PYTHON char *menustr; - int scriptint= 0; + int scriptint = 0; /* popup a list of usable scripts */ menustr = buildmenu_pyconstraints(NULL, &scriptint); // XXX scriptint = pupmenu(menustr); @@ -1539,17 +1539,17 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase /* force depsgraph to get recalculated since new relationships added */ - DAG_scene_sort(bmain, scene); /* sort order of objects */ + DAG_scene_sort(bmain, scene); /* sort order of objects */ - if ((ob->type==OB_ARMATURE) && (pchan)) { - ob->pose->flag |= POSE_RECALC; /* sort pose channels */ - DAG_id_tag_update(&ob->id, OB_RECALC_DATA|OB_RECALC_OB); + if ((ob->type == OB_ARMATURE) && (pchan)) { + ob->pose->flag |= POSE_RECALC; /* sort pose channels */ + DAG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB); } else DAG_id_tag_update(&ob->id, OB_RECALC_DATA); /* notifiers for updates */ - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_ADDED, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_ADDED, ob); return OPERATOR_FINISHED; } @@ -1559,9 +1559,9 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase /* dummy operator callback */ static int object_constraint_add_exec(bContext *C, wmOperator *op) { - Object *ob=ED_object_active_context(C); - int type= RNA_enum_get(op->ptr, "type"); - short with_targets= 0; + Object *ob = ED_object_active_context(C); + int type = RNA_enum_get(op->ptr, "type"); + short with_targets = 0; if (!ob) { BKE_report(op->reports, RPT_ERROR, "No active object to add constraint to"); @@ -1572,7 +1572,7 @@ static int object_constraint_add_exec(bContext *C, wmOperator *op) * operator name included 'with_targets', since the menu doesn't allow multiple properties */ if (strstr(op->idname, "with_targets")) - with_targets= 1; + with_targets = 1; return constraint_add_exec(C, op, ob, &ob->constraints, type, with_targets); } @@ -1580,9 +1580,9 @@ static int object_constraint_add_exec(bContext *C, wmOperator *op) /* dummy operator callback */ static int pose_constraint_add_exec(bContext *C, wmOperator *op) { - Object *ob= object_pose_armature_get(ED_object_active_context(C)); - int type= RNA_enum_get(op->ptr, "type"); - short with_targets= 0; + Object *ob = object_pose_armature_get(ED_object_active_context(C)); + int type = RNA_enum_get(op->ptr, "type"); + short with_targets = 0; if (!ob) { BKE_report(op->reports, RPT_ERROR, "No active object to add constraint to"); @@ -1593,7 +1593,7 @@ static int pose_constraint_add_exec(bContext *C, wmOperator *op) * operator name included 'with_targets', since the menu doesn't allow multiple properties */ if (strstr(op->idname, "with_targets")) - with_targets= 1; + with_targets = 1; return constraint_add_exec(C, op, ob, get_active_constraints(ob), type, with_targets); } @@ -1613,7 +1613,7 @@ void OBJECT_OT_constraint_add(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ ot->prop = RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); @@ -1632,7 +1632,7 @@ void OBJECT_OT_constraint_add_with_targets(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ ot->prop = RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); @@ -1651,7 +1651,7 @@ void POSE_OT_constraint_add(wmOperatorType *ot) ot->poll = ED_operator_posemode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ ot->prop = RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); @@ -1670,7 +1670,7 @@ void POSE_OT_constraint_add_with_targets(wmOperatorType *ot) ot->poll = ED_operator_posemode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ ot->prop = RNA_def_enum(ot->srna, "type", constraint_type_items, 0, "Type", ""); @@ -1683,14 +1683,14 @@ void POSE_OT_constraint_add_with_targets(wmOperatorType *ot) /* present menu with options + validation for targets to use */ static int pose_ik_add_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(evt)) { - Object *ob= object_pose_armature_get(CTX_data_active_object(C)); - bPoseChannel *pchan= get_active_posechannel(ob); - bConstraint *con= NULL; + Object *ob = object_pose_armature_get(CTX_data_active_object(C)); + bPoseChannel *pchan = get_active_posechannel(ob); + bConstraint *con = NULL; uiPopupMenu *pup; uiLayout *layout; - Object *tar_ob= NULL; - bPoseChannel *tar_pchan= NULL; + Object *tar_ob = NULL; + bPoseChannel *tar_pchan = NULL; /* must have active bone */ if (ELEM(NULL, ob, pchan)) { @@ -1699,8 +1699,8 @@ static int pose_ik_add_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(evt)) } /* bone must not have any constraints already */ - for (con= pchan->constraints.first; con; con= con->next) { - if (con->type==CONSTRAINT_TYPE_KINEMATIC) break; + for (con = pchan->constraints.first; con; con = con->next) { + if (con->type == CONSTRAINT_TYPE_KINEMATIC) break; } if (con) { BKE_report(op->reports, RPT_ERROR, "Bone already has IK Constraint"); @@ -1708,8 +1708,8 @@ static int pose_ik_add_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(evt)) } /* prepare popup menu to choose targetting options */ - pup= uiPupMenuBegin(C, "Add IK", ICON_NONE); - layout= uiPupMenuLayout(pup); + pup = uiPupMenuBegin(C, "Add IK", ICON_NONE); + layout = uiPupMenuLayout(pup); /* the type of targets we'll set determines the menu entries to show... */ if (get_new_constraint_target(C, CONSTRAINT_TYPE_KINEMATIC, &tar_ob, &tar_pchan, 0)) { @@ -1736,8 +1736,8 @@ static int pose_ik_add_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(evt)) /* call constraint_add_exec() to add the IK constraint */ static int pose_ik_add_exec(bContext *C, wmOperator *op) { - Object *ob= CTX_data_active_object(C); - int with_targets= RNA_boolean_get(op->ptr, "with_targets"); + Object *ob = CTX_data_active_object(C); + int with_targets = RNA_boolean_get(op->ptr, "with_targets"); /* add the constraint - all necessary checks should have been done by the invoke() callback already... */ return constraint_add_exec(C, op, ob, get_active_constraints(ob), CONSTRAINT_TYPE_KINEMATIC, with_targets); @@ -1756,7 +1756,7 @@ void POSE_OT_ik_add(wmOperatorType *ot) ot->poll = ED_operator_posemode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "with_targets", 1, "With Targets", "Assign IK Constraint with targets derived from the select bones/objects"); @@ -1767,20 +1767,20 @@ void POSE_OT_ik_add(wmOperatorType *ot) /* remove IK constraints from selected bones */ static int pose_ik_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob= object_pose_armature_get(CTX_data_active_object(C)); + Object *ob = object_pose_armature_get(CTX_data_active_object(C)); /* only remove IK Constraints */ - CTX_DATA_BEGIN (C, bPoseChannel*, pchan, selected_pose_bones) { + CTX_DATA_BEGIN (C, bPoseChannel *, pchan, selected_pose_bones) { bConstraint *con, *next; // TODO: should we be checking if these contraints were local before we try and remove them? - for (con= pchan->constraints.first; con; con= next) { - next= con->next; - if (con->type==CONSTRAINT_TYPE_KINEMATIC) { + for (con = pchan->constraints.first; con; con = next) { + next = con->next; + if (con->type == CONSTRAINT_TYPE_KINEMATIC) { remove_constraint(&pchan->constraints, con); } } - pchan->constflag &= ~(PCHAN_HAS_IK|PCHAN_HAS_TARGET); + pchan->constflag &= ~(PCHAN_HAS_IK | PCHAN_HAS_TARGET); } CTX_DATA_END; @@ -1788,7 +1788,7 @@ static int pose_ik_clear_exec(bContext *C, wmOperator *UNUSED(op)) DAG_id_tag_update(&ob->id, OB_RECALC_DATA); /* note, notifier might evolve */ - WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_REMOVED, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, ob); return OPERATOR_FINISHED; } @@ -1805,6 +1805,6 @@ void POSE_OT_ik_clear(wmOperatorType *ot) ot->poll = ED_operator_posemode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 3043900bce4..874b04fe87d 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -101,7 +101,7 @@ #include "WM_api.h" #include "WM_types.h" -#include "object_intern.h" // own include +#include "object_intern.h" // own include /* ************* XXX **************** */ static void error(const char *UNUSED(arg)) {} @@ -109,7 +109,8 @@ static void waitcursor(int UNUSED(val)) {} static int pupmenu(const char *UNUSED(msg)) {return 0;} /* port over here */ -static void error_libdata(void) {} +static void error_libdata(void) { +} Object *ED_object_context(bContext *C) { @@ -120,10 +121,10 @@ Object *ED_object_context(bContext *C) * note: context can be NULL when called from a enum with PROP_ENUM_NO_CONTEXT */ Object *ED_object_active_context(bContext *C) { - Object *ob= NULL; + Object *ob = NULL; if (C) { - ob= ED_object_context(C); - if (!ob) ob= CTX_data_active_object(C); + ob = ED_object_context(C); + if (!ob) ob = CTX_data_active_object(C); } return ob; } @@ -132,15 +133,15 @@ Object *ED_object_active_context(bContext *C) /* ********* clear/set restrict view *********/ static int object_hide_view_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - Main *bmain= CTX_data_main(C); - ScrArea *sa= CTX_wm_area(C); - View3D *v3d= sa->spacedata.first; - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + ScrArea *sa = CTX_wm_area(C); + View3D *v3d = sa->spacedata.first; + Scene *scene = CTX_data_scene(C); Base *base; int changed = 0; /* XXX need a context loop to handle such cases */ - for (base = FIRSTBASE; base; base=base->next) { + for (base = FIRSTBASE; base; base = base->next) { if ((base->lay & v3d->lay) && base->object->restrictflag & OB_RESTRICT_VIEW) { base->flag |= SELECT; base->object->flag = base->flag; @@ -151,7 +152,7 @@ static int object_hide_view_clear_exec(bContext *C, wmOperator *UNUSED(op)) if (changed) { DAG_id_type_tag(bmain, ID_OB); DAG_scene_sort(bmain, scene); - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene); } return OPERATOR_FINISHED; @@ -170,24 +171,24 @@ void OBJECT_OT_hide_view_clear(wmOperatorType *ot) ot->poll = ED_operator_view3d_active; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int object_hide_view_set_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); short changed = 0; - const int unselected= RNA_boolean_get(op->ptr, "unselected"); + const int unselected = RNA_boolean_get(op->ptr, "unselected"); - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { if (!unselected) { if (base->flag & SELECT) { base->flag &= ~SELECT; base->object->flag = base->flag; base->object->restrictflag |= OB_RESTRICT_VIEW; changed = 1; - if (base==BASACT) { + if (base == BASACT) { ED_base_object_activate(C, NULL); } } @@ -205,7 +206,7 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op) DAG_id_type_tag(bmain, ID_OB); DAG_scene_sort(bmain, scene); - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C)); } @@ -224,7 +225,7 @@ void OBJECT_OT_hide_view_set(wmOperatorType *ot) ot->poll = ED_operator_view3d_active; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "Hide unselected rather than selected objects"); @@ -233,19 +234,19 @@ void OBJECT_OT_hide_view_set(wmOperatorType *ot) /* 99% same as above except no need for scene refreshing (TODO, update render preview) */ static int object_hide_render_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - short changed= 0; + short changed = 0; /* XXX need a context loop to handle such cases */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (ob->restrictflag & OB_RESTRICT_RENDER) { ob->restrictflag &= ~OB_RESTRICT_RENDER; - changed= 1; + changed = 1; } } CTX_DATA_END; if (changed) - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_OUTLINER, NULL); + WM_event_add_notifier(C, NC_SPACE | ND_SPACE_OUTLINER, NULL); return OPERATOR_FINISHED; } @@ -263,14 +264,14 @@ void OBJECT_OT_hide_render_clear(wmOperatorType *ot) ot->poll = ED_operator_view3d_active; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int object_hide_render_set_exec(bContext *C, wmOperator *op) { - const int unselected= RNA_boolean_get(op->ptr, "unselected"); + const int unselected = RNA_boolean_get(op->ptr, "unselected"); - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { if (!unselected) { if (base->flag & SELECT) { base->object->restrictflag |= OB_RESTRICT_RENDER; @@ -283,7 +284,7 @@ static int object_hide_render_set_exec(bContext *C, wmOperator *op) } } CTX_DATA_END; - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_OUTLINER, NULL); + WM_event_add_notifier(C, NC_SPACE | ND_SPACE_OUTLINER, NULL); return OPERATOR_FINISHED; } @@ -299,7 +300,7 @@ void OBJECT_OT_hide_render_set(wmOperatorType *ot) ot->poll = ED_operator_view3d_active; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "Hide unselected rather than selected objects"); } @@ -310,19 +311,19 @@ void ED_object_exit_editmode(bContext *C, int flag) { /* Note! only in exceptional cases should 'EM_DO_UNDO' NOT be in the flag */ - Scene *scene= CTX_data_scene(C); - Object *obedit= CTX_data_edit_object(C); + Scene *scene = CTX_data_scene(C); + Object *obedit = CTX_data_edit_object(C); int freedata = flag & EM_FREEDATA; - if (obedit==NULL) return; + if (obedit == NULL) return; if (flag & EM_WAITCURSOR) waitcursor(1); - if (obedit->type==OB_MESH) { - Mesh *me= obedit->data; + if (obedit->type == OB_MESH) { + Mesh *me = obedit->data; // if (EM_texFaceCheck()) - if (me->edit_btmesh->bm->totvert>MESH_MAX_VERTS) { + if (me->edit_btmesh->bm->totvert > MESH_MAX_VERTS) { error("Too many vertices"); return; } @@ -332,14 +333,14 @@ void ED_object_exit_editmode(bContext *C, int flag) if (freedata) { EDBM_mesh_free(me->edit_btmesh); MEM_freeN(me->edit_btmesh); - me->edit_btmesh= NULL; + me->edit_btmesh = NULL; } if (obedit->restore_mode & OB_MODE_WEIGHT_PAINT) { mesh_octree_table(NULL, NULL, NULL, 'e'); mesh_mirrtopo_table(NULL, 'e'); } } - else if (obedit->type==OB_ARMATURE) { + else if (obedit->type == OB_ARMATURE) { ED_armature_from_edit(obedit); if (freedata) ED_armature_edit_free(obedit); @@ -348,15 +349,15 @@ void ED_object_exit_editmode(bContext *C, int flag) load_editNurb(obedit); if (freedata) free_editNurb(obedit); } - else if (obedit->type==OB_FONT && freedata) { + else if (obedit->type == OB_FONT && freedata) { load_editText(obedit); if (freedata) free_editText(obedit); } - else if (obedit->type==OB_LATTICE) { + else if (obedit->type == OB_LATTICE) { load_editLatt(obedit); if (freedata) free_editLatt(obedit); } - else if (obedit->type==OB_MBALL) { + else if (obedit->type == OB_MBALL) { load_editMball(obedit); if (freedata) free_editMball(obedit); } @@ -367,11 +368,11 @@ void ED_object_exit_editmode(bContext *C, int flag) PTCacheID *pid; /* for example; displist make is different in editmode */ - scene->obedit= NULL; // XXX for context + scene->obedit = NULL; // XXX for context /* flag object caches as outdated */ BKE_ptcache_ids_from_object(&pidlist, obedit, NULL, 0); - for (pid=pidlist.first; pid; pid=pid->next) { + for (pid = pidlist.first; pid; pid = pid->next) { if (pid->type != PTCACHE_TYPE_PARTICLES) /* particles don't need reset on geometry change */ pid->cache->flag |= PTCACHE_OUTDATED; } @@ -380,14 +381,14 @@ void ED_object_exit_editmode(bContext *C, int flag) BKE_ptcache_object_reset(scene, obedit, PTCACHE_RESET_OUTDATED); /* also flush ob recalc, doesn't take much overhead, but used for particles */ - DAG_id_tag_update(&obedit->id, OB_RECALC_OB|OB_RECALC_DATA); + DAG_id_tag_update(&obedit->id, OB_RECALC_OB | OB_RECALC_DATA); if (flag & EM_DO_UNDO) ED_undo_push(C, "Editmode"); if (flag & EM_WAITCURSOR) waitcursor(0); - WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, scene); + WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene); obedit->mode &= ~OB_MODE_EDIT; } @@ -396,27 +397,27 @@ void ED_object_exit_editmode(bContext *C, int flag) void ED_object_enter_editmode(bContext *C, int flag) { - Scene *scene= CTX_data_scene(C); - Base *base= NULL; + Scene *scene = CTX_data_scene(C); + Base *base = NULL; Object *ob; - ScrArea *sa= CTX_wm_area(C); - View3D *v3d= NULL; - int ok= 0; + ScrArea *sa = CTX_wm_area(C); + View3D *v3d = NULL; + int ok = 0; if (scene->id.lib) return; - if (sa && sa->spacetype==SPACE_VIEW3D) - v3d= sa->spacedata.first; + if (sa && sa->spacetype == SPACE_VIEW3D) + v3d = sa->spacedata.first; - if ((flag & EM_IGNORE_LAYER)==0) { - base= CTX_data_active_base(C); /* active layer checked here for view3d */ + if ((flag & EM_IGNORE_LAYER) == 0) { + base = CTX_data_active_base(C); /* active layer checked here for view3d */ - if (base==NULL) return; - else if (v3d && (base->lay & v3d->lay)==0) return; - else if (!v3d && (base->lay & scene->lay)==0) return; + if (base == NULL) return; + else if (v3d && (base->lay & v3d->lay) == 0) return; + else if (!v3d && (base->lay & scene->lay) == 0) return; } else { - base= scene->basact; + base = scene->basact; } if (ELEM3(NULL, base, base->object, base->object->data)) return; @@ -434,14 +435,14 @@ void ED_object_enter_editmode(bContext *C, int flag) /* note, when switching scenes the object can have editmode data but * not be scene->obedit: bug 22954, this avoids calling self eternally */ - if ((ob->restore_mode & OB_MODE_EDIT)==0) + if ((ob->restore_mode & OB_MODE_EDIT) == 0) ED_object_toggle_modes(C, ob->mode); - ob->mode= OB_MODE_EDIT; + ob->mode = OB_MODE_EDIT; - if (ob->type==OB_MESH) { + if (ob->type == OB_MESH) { BMEditMesh *em; - ok= 1; + ok = 1; scene->obedit = ob; /* context sees this */ EDBM_mesh_make(CTX_data_tool_settings(C), scene, ob); @@ -455,10 +456,10 @@ void ED_object_enter_editmode(bContext *C, int flag) BM_mesh_select_mode_flush(em->bm); } - WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_EDITMODE_MESH, scene); + WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_MESH, scene); } - else if (ob->type==OB_ARMATURE) { - bArmature *arm= base->object->data; + else if (ob->type == OB_ARMATURE) { + bArmature *arm = base->object->data; if (!arm) return; /* * The function object_data_is_libdata make a problem here, the @@ -472,50 +473,50 @@ void ED_object_enter_editmode(bContext *C, int flag) error_libdata(); return; } - ok=1; - scene->obedit= ob; + ok = 1; + scene->obedit = ob; ED_armature_to_edit(ob); /* to ensure all goes in restposition and without striding */ - DAG_id_tag_update(&ob->id, OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME); // XXX: should this be OB_RECALC_DATA? + DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); // XXX: should this be OB_RECALC_DATA? - WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_EDITMODE_ARMATURE, scene); + WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_ARMATURE, scene); } - else if (ob->type==OB_FONT) { - scene->obedit= ob; // XXX for context - ok= 1; + else if (ob->type == OB_FONT) { + scene->obedit = ob; // XXX for context + ok = 1; make_editText(ob); - WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_EDITMODE_TEXT, scene); + WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_TEXT, scene); } - else if (ob->type==OB_MBALL) { - scene->obedit= ob; // XXX for context - ok= 1; + else if (ob->type == OB_MBALL) { + scene->obedit = ob; // XXX for context + ok = 1; make_editMball(ob); - WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_EDITMODE_MBALL, scene); + WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_MBALL, scene); } - else if (ob->type==OB_LATTICE) { - scene->obedit= ob; // XXX for context - ok= 1; + else if (ob->type == OB_LATTICE) { + scene->obedit = ob; // XXX for context + ok = 1; make_editLatt(ob); - WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_EDITMODE_LATTICE, scene); + WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_LATTICE, scene); } - else if (ob->type==OB_SURF || ob->type==OB_CURVE) { - ok= 1; - scene->obedit= ob; // XXX for context + else if (ob->type == OB_SURF || ob->type == OB_CURVE) { + ok = 1; + scene->obedit = ob; // XXX for context make_editNurb(ob); - WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_EDITMODE_CURVE, scene); + WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_CURVE, scene); } if (ok) { DAG_id_tag_update(&ob->id, OB_RECALC_DATA); } else { - scene->obedit= NULL; // XXX for context + scene->obedit = NULL; // XXX for context ob->mode &= ~OB_MODE_EDIT; - WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, scene); + WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene); } if (flag & EM_DO_UNDO) ED_undo_push(C, "Enter Editmode"); @@ -529,7 +530,7 @@ static int editmode_toggle_exec(bContext *C, wmOperator *UNUSED(op)) if (!CTX_data_edit_object(C)) ED_object_enter_editmode(C, EM_WAITCURSOR); else - ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* had EM_DO_UNDO but op flag calls undo too [#24685] */ + ED_object_exit_editmode(C, EM_FREEDATA | EM_FREEUNDO | EM_WAITCURSOR); /* had EM_DO_UNDO but op flag calls undo too [#24685] */ ED_space_image_uv_sculpt_update(CTX_wm_manager(C), toolsettings); @@ -567,18 +568,18 @@ void OBJECT_OT_editmode_toggle(wmOperatorType *ot) ot->poll = editmode_toggle_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /* *************************** */ static int posemode_exec(bContext *C, wmOperator *UNUSED(op)) { - Base *base= CTX_data_active_base(C); + Base *base = CTX_data_active_base(C); - if (base->object->type==OB_ARMATURE) { - if (base->object==CTX_data_edit_object(C)) { - ED_object_exit_editmode(C, EM_FREEDATA|EM_DO_UNDO); + if (base->object->type == OB_ARMATURE) { + if (base->object == CTX_data_edit_object(C)) { + ED_object_exit_editmode(C, EM_FREEDATA | EM_DO_UNDO); ED_armature_enter_posemode(C, base); } else if (base->object->mode & OB_MODE_POSE) @@ -604,7 +605,7 @@ void OBJECT_OT_posemode_toggle(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flag */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static void copymenu_properties(Scene *scene, View3D *v3d, Object *ob) @@ -612,53 +613,53 @@ static void copymenu_properties(Scene *scene, View3D *v3d, Object *ob) //XXX no longer used - to be removed - replaced by game_properties_copy_exec bProperty *prop; Base *base; - int nr, tot=0; + int nr, tot = 0; char *str; - prop= ob->prop.first; + prop = ob->prop.first; while (prop) { tot++; - prop= prop->next; + prop = prop->next; } - str= MEM_callocN(50 + 33*tot, "copymenu prop"); + str = MEM_callocN(50 + 33 * tot, "copymenu prop"); if (tot) strcpy(str, "Copy Property %t|Replace All|Merge All|%l"); else strcpy(str, "Copy Property %t|Clear All (no properties on active)"); - tot= 0; - prop= ob->prop.first; + tot = 0; + prop = ob->prop.first; while (prop) { tot++; strcat(str, "|"); strcat(str, prop->name); - prop= prop->next; + prop = prop->next; } - nr= pupmenu(str); + nr = pupmenu(str); - if ( nr==1 || nr==2 ) { - for (base= FIRSTBASE; base; base= base->next) { - if ((base != BASACT) &&(TESTBASELIB(v3d, base))) { - if (nr==1) { /* replace */ - copy_properties( &base->object->prop, &ob->prop ); + if (nr == 1 || nr == 2) { + for (base = FIRSTBASE; base; base = base->next) { + if ((base != BASACT) && (TESTBASELIB(v3d, base))) { + if (nr == 1) { /* replace */ + copy_properties(&base->object->prop, &ob->prop); } else { - for (prop = ob->prop.first; prop; prop= prop->next ) { + for (prop = ob->prop.first; prop; prop = prop->next) { set_ob_property(base->object, prop); } } } } } - else if (nr>0) { - prop = BLI_findlink(&ob->prop, nr-4); /* account for first 3 menu items & menu index starting at 1*/ + else if (nr > 0) { + prop = BLI_findlink(&ob->prop, nr - 4); /* account for first 3 menu items & menu index starting at 1*/ if (prop) { - for (base= FIRSTBASE; base; base= base->next) { - if ((base != BASACT) &&(TESTBASELIB(v3d, base))) { + for (base = FIRSTBASE; base; base = base->next) { + if ((base != BASACT) && (TESTBASELIB(v3d, base))) { set_ob_property(base->object, prop); } } @@ -673,7 +674,7 @@ static void copymenu_logicbricks(Scene *scene, View3D *v3d, Object *ob) //XXX no longer used - to be removed - replaced by logicbricks_copy_exec Base *base; - for (base= FIRSTBASE; base; base= base->next) { + for (base = FIRSTBASE; base; base = base->next) { if (base->object != ob) { if (TESTBASELIB(v3d, base)) { @@ -692,12 +693,12 @@ static void copymenu_logicbricks(Scene *scene, View3D *v3d, Object *ob) set_sca_new_poins_ob(base->object); /* some menu settings */ - base->object->scavisflag= ob->scavisflag; - base->object->scaflag= ob->scaflag; + base->object->scavisflag = ob->scavisflag; + base->object->scaflag = ob->scaflag; /* set the initial state */ - base->object->state= ob->state; - base->object->init_state= ob->init_state; + base->object->state = ob->state; + base->object->init_state = ob->init_state; } } } @@ -706,42 +707,42 @@ static void copymenu_logicbricks(Scene *scene, View3D *v3d, Object *ob) /* both pointers should exist */ static void copy_texture_space(Object *to, Object *ob) { - float *poin1= NULL, *poin2= NULL; - short texflag= 0; + float *poin1 = NULL, *poin2 = NULL; + short texflag = 0; - if (ob->type==OB_MESH) { - texflag= ((Mesh *)ob->data)->texflag; - poin2= ((Mesh *)ob->data)->loc; + if (ob->type == OB_MESH) { + texflag = ((Mesh *)ob->data)->texflag; + poin2 = ((Mesh *)ob->data)->loc; } else if (ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) { - texflag= ((Curve *)ob->data)->texflag; - poin2= ((Curve *)ob->data)->loc; + texflag = ((Curve *)ob->data)->texflag; + poin2 = ((Curve *)ob->data)->loc; } - else if (ob->type==OB_MBALL) { - texflag= ((MetaBall *)ob->data)->texflag; - poin2= ((MetaBall *)ob->data)->loc; + else if (ob->type == OB_MBALL) { + texflag = ((MetaBall *)ob->data)->texflag; + poin2 = ((MetaBall *)ob->data)->loc; } else return; - if (to->type==OB_MESH) { - ((Mesh *)to->data)->texflag= texflag; - poin1= ((Mesh *)to->data)->loc; + if (to->type == OB_MESH) { + ((Mesh *)to->data)->texflag = texflag; + poin1 = ((Mesh *)to->data)->loc; } else if (ELEM3(to->type, OB_CURVE, OB_SURF, OB_FONT)) { - ((Curve *)to->data)->texflag= texflag; - poin1= ((Curve *)to->data)->loc; + ((Curve *)to->data)->texflag = texflag; + poin1 = ((Curve *)to->data)->loc; } - else if (to->type==OB_MBALL) { - ((MetaBall *)to->data)->texflag= texflag; - poin1= ((MetaBall *)to->data)->loc; + else if (to->type == OB_MBALL) { + ((MetaBall *)to->data)->texflag = texflag; + poin1 = ((MetaBall *)to->data)->loc; } else return; - memcpy(poin1, poin2, 9*sizeof(float)); /* this was noted in DNA_mesh, curve, mball */ + memcpy(poin1, poin2, 9 * sizeof(float)); /* this was noted in DNA_mesh, curve, mball */ - if (to->type==OB_MESH) { + if (to->type == OB_MESH) { /* pass */ } else if (to->type == OB_MBALL) { @@ -760,125 +761,125 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event) Base *base; Curve *cu, *cu1; Nurb *nu; - int do_scene_sort= 0; + int do_scene_sort = 0; if (scene->id.lib) return; - if (!(ob=OBACT)) return; + if (!(ob = OBACT)) return; if (scene->obedit) { // XXX get from context /* obedit_copymenu(); */ return; } - if (event==9) { + if (event == 9) { copymenu_properties(scene, v3d, ob); return; } - else if (event==10) { + else if (event == 10) { copymenu_logicbricks(scene, v3d, ob); return; } - else if (event==24) { + else if (event == 24) { /* moved to object_link_modifiers */ /* copymenu_modifiers(bmain, scene, v3d, ob); */ return; } - for (base= FIRSTBASE; base; base= base->next) { + for (base = FIRSTBASE; base; base = base->next) { if (base != BASACT) { if (TESTBASELIB(v3d, base)) { base->object->recalc |= OB_RECALC_OB; - if (event==1) { /* loc */ + if (event == 1) { /* loc */ copy_v3_v3(base->object->loc, ob->loc); copy_v3_v3(base->object->dloc, ob->dloc); } - else if (event==2) { /* rot */ + else if (event == 2) { /* rot */ copy_v3_v3(base->object->rot, ob->rot); copy_v3_v3(base->object->drot, ob->drot); copy_qt_qt(base->object->quat, ob->quat); copy_qt_qt(base->object->dquat, ob->dquat); } - else if (event==3) { /* size */ + else if (event == 3) { /* size */ copy_v3_v3(base->object->size, ob->size); copy_v3_v3(base->object->dscale, ob->dscale); } - else if (event==4) { /* drawtype */ - base->object->dt= ob->dt; - base->object->dtx= ob->dtx; - base->object->empty_drawtype= ob->empty_drawtype; - base->object->empty_drawsize= ob->empty_drawsize; + else if (event == 4) { /* drawtype */ + base->object->dt = ob->dt; + base->object->dtx = ob->dtx; + base->object->empty_drawtype = ob->empty_drawtype; + base->object->empty_drawsize = ob->empty_drawsize; } - else if (event==5) { /* time offs */ - base->object->sf= ob->sf; + else if (event == 5) { /* time offs */ + base->object->sf = ob->sf; } - else if (event==6) { /* dupli */ - base->object->dupon= ob->dupon; - base->object->dupoff= ob->dupoff; - base->object->dupsta= ob->dupsta; - base->object->dupend= ob->dupend; + else if (event == 6) { /* dupli */ + base->object->dupon = ob->dupon; + base->object->dupoff = ob->dupoff; + base->object->dupsta = ob->dupsta; + base->object->dupend = ob->dupend; base->object->transflag &= ~OB_DUPLI; base->object->transflag |= (ob->transflag & OB_DUPLI); - base->object->dup_group= ob->dup_group; + base->object->dup_group = ob->dup_group; if (ob->dup_group) id_lib_extern(&ob->dup_group->id); } - else if (event==7) { /* mass */ - base->object->mass= ob->mass; + else if (event == 7) { /* mass */ + base->object->mass = ob->mass; } - else if (event==8) { /* damping */ - base->object->damping= ob->damping; - base->object->rdamping= ob->rdamping; + else if (event == 8) { /* damping */ + base->object->damping = ob->damping; + base->object->rdamping = ob->rdamping; } - else if (event==11) { /* all physical attributes */ + else if (event == 11) { /* all physical attributes */ base->object->gameflag = ob->gameflag; base->object->inertia = ob->inertia; base->object->formfactor = ob->formfactor; - base->object->damping= ob->damping; - base->object->rdamping= ob->rdamping; - base->object->min_vel= ob->min_vel; - base->object->max_vel= ob->max_vel; + base->object->damping = ob->damping; + base->object->rdamping = ob->rdamping; + base->object->min_vel = ob->min_vel; + base->object->max_vel = ob->max_vel; if (ob->gameflag & OB_BOUNDS) { base->object->collision_boundtype = ob->collision_boundtype; } - base->object->margin= ob->margin; - base->object->bsoft= copy_bulletsoftbody(ob->bsoft); + base->object->margin = ob->margin; + base->object->bsoft = copy_bulletsoftbody(ob->bsoft); } - else if (event==17) { /* tex space */ + else if (event == 17) { /* tex space */ copy_texture_space(base->object, ob); } - else if (event==18) { /* font settings */ + else if (event == 18) { /* font settings */ - if (base->object->type==ob->type) { - cu= ob->data; - cu1= base->object->data; - - cu1->spacemode= cu->spacemode; - cu1->spacing= cu->spacing; - cu1->linedist= cu->linedist; - cu1->shear= cu->shear; - cu1->fsize= cu->fsize; - cu1->xof= cu->xof; - cu1->yof= cu->yof; - cu1->textoncurve= cu->textoncurve; - cu1->wordspace= cu->wordspace; - cu1->ulpos= cu->ulpos; - cu1->ulheight= cu->ulheight; + if (base->object->type == ob->type) { + cu = ob->data; + cu1 = base->object->data; + + cu1->spacemode = cu->spacemode; + cu1->spacing = cu->spacing; + cu1->linedist = cu->linedist; + cu1->shear = cu->shear; + cu1->fsize = cu->fsize; + cu1->xof = cu->xof; + cu1->yof = cu->yof; + cu1->textoncurve = cu->textoncurve; + cu1->wordspace = cu->wordspace; + cu1->ulpos = cu->ulpos; + cu1->ulheight = cu->ulheight; if (cu1->vfont) cu1->vfont->id.us--; - cu1->vfont= cu->vfont; + cu1->vfont = cu->vfont; id_us_plus((ID *)cu1->vfont); if (cu1->vfontb) cu1->vfontb->id.us--; - cu1->vfontb= cu->vfontb; + cu1->vfontb = cu->vfontb; id_us_plus((ID *)cu1->vfontb); if (cu1->vfonti) cu1->vfonti->id.us--; - cu1->vfonti= cu->vfonti; + cu1->vfonti = cu->vfonti; id_us_plus((ID *)cu1->vfonti); if (cu1->vfontbi) cu1->vfontbi->id.us--; - cu1->vfontbi= cu->vfontbi; + cu1->vfontbi = cu->vfontbi; id_us_plus((ID *)cu1->vfontbi); BKE_text_to_curve(bmain, scene, base->object, 0); /* needed? */ @@ -889,43 +890,43 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event) base->object->recalc |= OB_RECALC_DATA; } } - else if (event==19) { /* bevel settings */ + else if (event == 19) { /* bevel settings */ if (ELEM(base->object->type, OB_CURVE, OB_FONT)) { - cu= ob->data; - cu1= base->object->data; + cu = ob->data; + cu1 = base->object->data; - cu1->bevobj= cu->bevobj; - cu1->taperobj= cu->taperobj; - cu1->width= cu->width; - cu1->bevresol= cu->bevresol; - cu1->ext1= cu->ext1; - cu1->ext2= cu->ext2; + cu1->bevobj = cu->bevobj; + cu1->taperobj = cu->taperobj; + cu1->width = cu->width; + cu1->bevresol = cu->bevresol; + cu1->ext1 = cu->ext1; + cu1->ext2 = cu->ext2; base->object->recalc |= OB_RECALC_DATA; } } - else if (event==25) { /* curve resolution */ + else if (event == 25) { /* curve resolution */ if (ELEM(base->object->type, OB_CURVE, OB_FONT)) { - cu= ob->data; - cu1= base->object->data; + cu = ob->data; + cu1 = base->object->data; - cu1->resolu= cu->resolu; - cu1->resolu_ren= cu->resolu_ren; + cu1->resolu = cu->resolu; + cu1->resolu_ren = cu->resolu_ren; - nu= cu1->nurb.first; + nu = cu1->nurb.first; while (nu) { - nu->resolu= cu1->resolu; - nu= nu->next; + nu->resolu = cu1->resolu; + nu = nu->next; } base->object->recalc |= OB_RECALC_DATA; } } - else if (event==21) { - if (base->object->type==OB_MESH) { + else if (event == 21) { + if (base->object->type == OB_MESH) { ModifierData *md = modifiers_findByType(ob, eModifierType_Subsurf); if (md) { @@ -941,42 +942,42 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event) } } } - else if (event==22) { + else if (event == 22) { /* Copy the constraint channels over */ copy_constraints(&base->object->constraints, &ob->constraints, TRUE); - do_scene_sort= 1; + do_scene_sort = 1; } - else if (event==23) { - base->object->softflag= ob->softflag; + else if (event == 23) { + base->object->softflag = ob->softflag; if (base->object->soft) sbFree(base->object->soft); - base->object->soft= copy_softbody(ob->soft); + base->object->soft = copy_softbody(ob->soft); if (!modifiers_findByType(base->object, eModifierType_Softbody)) { BLI_addhead(&base->object->modifiers, modifier_new(eModifierType_Softbody)); } } - else if (event==26) { + else if (event == 26) { #if 0 // XXX old animation system copy_nlastrips(&base->object->nlastrips, &ob->nlastrips); #endif // XXX old animation system } - else if (event==27) { /* autosmooth */ - if (base->object->type==OB_MESH) { - Mesh *me= ob->data; - Mesh *cme= base->object->data; - cme->smoothresh= me->smoothresh; + else if (event == 27) { /* autosmooth */ + if (base->object->type == OB_MESH) { + Mesh *me = ob->data; + Mesh *cme = base->object->data; + cme->smoothresh = me->smoothresh; if (me->flag & ME_AUTOSMOOTH) cme->flag |= ME_AUTOSMOOTH; else cme->flag &= ~ME_AUTOSMOOTH; } } - else if (event==28) { /* UV orco */ + else if (event == 28) { /* UV orco */ if (ELEM(base->object->type, OB_CURVE, OB_SURF)) { - cu= ob->data; - cu1= base->object->data; + cu = ob->data; + cu1 = base->object->data; if (cu->flag & CU_UV_ORCO) cu1->flag |= CU_UV_ORCO; @@ -984,13 +985,13 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event) cu1->flag &= ~CU_UV_ORCO; } } - else if (event==29) { /* protected bits */ - base->object->protectflag= ob->protectflag; + else if (event == 29) { /* protected bits */ + base->object->protectflag = ob->protectflag; } - else if (event==30) { /* index object */ - base->object->index= ob->index; + else if (event == 30) { /* index object */ + base->object->index = ob->index; } - else if (event==31) { /* object color */ + else if (event == 31) { /* object color */ copy_v4_v4(base->object->col, ob->col); } } @@ -1003,13 +1004,13 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event) DAG_ids_flush_update(bmain, 0); } -static void UNUSED_FUNCTION(copy_attr_menu)(Main *bmain, Scene *scene, View3D *v3d) +static void UNUSED_FUNCTION(copy_attr_menu) (Main * bmain, Scene * scene, View3D * v3d) { Object *ob; short event; char str[512]; - if (!(ob=OBACT)) return; + if (!(ob = OBACT)) return; if (scene->obedit) { // XXX get from context // if (ob->type == OB_MESH) @@ -1028,8 +1029,8 @@ static void UNUSED_FUNCTION(copy_attr_menu)(Main *bmain, Scene *scene, View3D *v "Time Offset%x5|Dupli%x6|Object Color%x31|%l|Mass%x7|Damping%x8|All Physical Attributes%x11|Properties%x9|" "Logic Bricks%x10|Protected Transform%x29|%l"); - strcat (str, "|Object Constraints%x22"); - strcat (str, "|NLA Strips%x26"); + strcat(str, "|Object Constraints%x22"); + strcat(str, "|NLA Strips%x26"); // XXX if (OB_TYPE_SUPPORT_MATERIAL(ob->type)) { // strcat(str, "|Texture Space%x17"); @@ -1039,10 +1040,10 @@ static void UNUSED_FUNCTION(copy_attr_menu)(Main *bmain, Scene *scene, View3D *v if (ob->type == OB_CURVE) strcat(str, "|Bevel Settings%x19|UV Orco%x28"); if ((ob->type == OB_FONT) || (ob->type == OB_CURVE)) { - strcat(str, "|Curve Resolution%x25"); + strcat(str, "|Curve Resolution%x25"); } - if (ob->type==OB_MESH) { + if (ob->type == OB_MESH) { strcat(str, "|Subsurf Settings%x21|AutoSmooth%x27"); } @@ -1050,12 +1051,12 @@ static void UNUSED_FUNCTION(copy_attr_menu)(Main *bmain, Scene *scene, View3D *v strcat(str, "|Pass Index%x30"); - if (ob->type==OB_MESH || ob->type==OB_CURVE || ob->type==OB_LATTICE || ob->type==OB_SURF) { + if (ob->type == OB_MESH || ob->type == OB_CURVE || ob->type == OB_LATTICE || ob->type == OB_SURF) { strcat(str, "|Modifiers ...%x24"); } - event= pupmenu(str); - if (event<= 0) return; + event = pupmenu(str); + if (event <= 0) return; copy_attr(bmain, scene, v3d, event); } @@ -1074,7 +1075,7 @@ static int forcefield_toggle_exec(bContext *C, wmOperator *UNUSED(op)) else ob->pd->forcefield = 0; - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL); return OPERATOR_FINISHED; } @@ -1092,7 +1093,7 @@ void OBJECT_OT_forcefield_toggle(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /* ********************************************** */ @@ -1108,7 +1109,7 @@ void ED_objects_recalculate_paths(bContext *C, Scene *scene) ListBase targets = {NULL, NULL}; /* loop over objects in scene */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { /* set flag to force recalc, then grab the relevant bones to target */ ob->avs.recalc |= ANIMVIZ_RECALC_PATHS; animviz_get_object_motionpaths(ob, &targets); @@ -1123,12 +1124,12 @@ void ED_objects_recalculate_paths(bContext *C, Scene *scene) /* For the object with pose/action: create path curves for selected bones * This recalculates the WHOLE path within the pchan->pathsf and pchan->pathef range */ -static int object_calculate_paths_exec (bContext *C, wmOperator *op) +static int object_calculate_paths_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); /* set up path data for bones being calculated */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { /* verify makes sure that the selected bone has a bone with the appropriate settings */ animviz_verify_motionpaths(op->reports, scene, ob, NULL); @@ -1140,12 +1141,12 @@ static int object_calculate_paths_exec (bContext *C, wmOperator *op) ED_objects_recalculate_paths(C, scene); /* notifiers for updates */ - WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL); return OPERATOR_FINISHED; } -void OBJECT_OT_paths_calculate (wmOperatorType *ot) +void OBJECT_OT_paths_calculate(wmOperatorType *ot) { /* identifiers */ ot->name = "Calculate Object Paths"; @@ -1157,7 +1158,7 @@ void OBJECT_OT_paths_calculate (wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /* --------- */ @@ -1166,11 +1167,11 @@ void OBJECT_OT_paths_calculate (wmOperatorType *ot) void ED_objects_clear_paths(bContext *C) { /* loop over objects in scene */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (ob->mpath) { animviz_free_motionpath(ob->mpath); - ob->mpath= NULL; + ob->mpath = NULL; ob->avs.path_bakeflag &= ~MOTIONPATH_BAKE_HAS_PATHS; } } @@ -1178,18 +1179,18 @@ void ED_objects_clear_paths(bContext *C) } /* operator callback for this */ -static int object_clear_paths_exec (bContext *C, wmOperator *UNUSED(op)) +static int object_clear_paths_exec(bContext *C, wmOperator *UNUSED(op)) { /* use the backend function for this */ ED_objects_clear_paths(C); /* notifiers for updates */ - WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL); return OPERATOR_FINISHED; } -void OBJECT_OT_paths_clear (wmOperatorType *ot) +void OBJECT_OT_paths_clear(wmOperatorType *ot) { /* identifiers */ ot->name = "Clear Object Paths"; @@ -1201,7 +1202,7 @@ void OBJECT_OT_paths_clear (wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } @@ -1211,36 +1212,36 @@ static int shade_smooth_exec(bContext *C, wmOperator *op) { Curve *cu; Nurb *nu; - int clear= (strcmp(op->idname, "OBJECT_OT_shade_flat") == 0); - int done= 0; + int clear = (strcmp(op->idname, "OBJECT_OT_shade_flat") == 0); + int done = 0; - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { - if (ob->type==OB_MESH) { + if (ob->type == OB_MESH) { mesh_set_smooth_flag(ob, !clear); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); - done= 1; + done = 1; } else if (ELEM(ob->type, OB_SURF, OB_CURVE)) { - cu= ob->data; + cu = ob->data; - for (nu=cu->nurb.first; nu; nu=nu->next) { + for (nu = cu->nurb.first; nu; nu = nu->next) { if (!clear) nu->flag |= ME_SMOOTH; else nu->flag &= ~ME_SMOOTH; } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); - done= 1; + done = 1; } } CTX_DATA_END; - return (done)? OPERATOR_FINISHED: OPERATOR_CANCELLED; + return (done) ? OPERATOR_FINISHED : OPERATOR_CANCELLED; } static int shade_poll(bContext *C) @@ -1260,7 +1261,7 @@ void OBJECT_OT_shade_flat(wmOperatorType *ot) ot->exec = shade_smooth_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } void OBJECT_OT_shade_smooth(wmOperatorType *ot) @@ -1275,12 +1276,12 @@ void OBJECT_OT_shade_smooth(wmOperatorType *ot) ot->exec = shade_smooth_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /* ********************** */ -static void UNUSED_FUNCTION(image_aspect)(Scene *scene, View3D *v3d) +static void UNUSED_FUNCTION(image_aspect) (Scene * scene, View3D * v3d) { /* all selected objects with an image map: scale in image aspect */ Base *base; @@ -1290,42 +1291,42 @@ static void UNUSED_FUNCTION(image_aspect)(Scene *scene, View3D *v3d) float x, y, space; int a, b, done; - if (scene->obedit) return; // XXX get from context + if (scene->obedit) return; // XXX get from context if (scene->id.lib) return; - for (base= FIRSTBASE; base; base= base->next) { + for (base = FIRSTBASE; base; base = base->next) { if (TESTBASELIB(v3d, base)) { - ob= base->object; - done= 0; + ob = base->object; + done = 0; - for (a=1; a<=ob->totcol; a++) { - ma= give_current_material(ob, a); + for (a = 1; a <= ob->totcol; a++) { + ma = give_current_material(ob, a); if (ma) { - for (b=0; bmtex[b] && ma->mtex[b]->tex) { - tex= ma->mtex[b]->tex; - if (tex->type==TEX_IMAGE && tex->ima) { - ImBuf *ibuf= BKE_image_get_ibuf(tex->ima, NULL); + tex = ma->mtex[b]->tex; + if (tex->type == TEX_IMAGE && tex->ima) { + ImBuf *ibuf = BKE_image_get_ibuf(tex->ima, NULL); /* texturespace */ - space= 1.0; - if (ob->type==OB_MESH) { + space = 1.0; + if (ob->type == OB_MESH) { float size[3]; mesh_get_texspace(ob->data, NULL, NULL, size); - space= size[0]/size[1]; + space = size[0] / size[1]; } else if (ELEM3(ob->type, OB_CURVE, OB_FONT, OB_SURF)) { - Curve *cu= ob->data; - space= cu->size[0]/cu->size[1]; + Curve *cu = ob->data; + space = cu->size[0] / cu->size[1]; } - x= ibuf->x/space; - y= ibuf->y; + x = ibuf->x / space; + y = ibuf->y; - if (x>y) ob->size[0]= ob->size[1]*x/y; - else ob->size[1]= ob->size[0]*y/x; + if (x > y) ob->size[0] = ob->size[1] * x / y; + else ob->size[1] = ob->size[0] * y / x; - done= 1; + done = 1; DAG_id_tag_update(&ob->id, OB_RECALC_OB); } } @@ -1343,9 +1344,9 @@ static void UNUSED_FUNCTION(image_aspect)(Scene *scene, View3D *v3d) static EnumPropertyItem *object_mode_set_itemsf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), int *free) { EnumPropertyItem *input = object_mode_items; - EnumPropertyItem *item= NULL; + EnumPropertyItem *item = NULL; Object *ob; - int totitem= 0; + int totitem = 0; if (!C) /* needed for docs */ return object_mode_items; @@ -1368,7 +1369,7 @@ static EnumPropertyItem *object_mode_set_itemsf(bContext *C, PointerRNA *UNUSED( RNA_enum_item_end(&item, &totitem); - *free= 1; + *free = 1; return item; } @@ -1403,23 +1404,23 @@ static int object_mode_set_compat(bContext *UNUSED(C), wmOperator *op, Object *o return 1; switch (ob->type) { - case OB_MESH: - if (mode & (OB_MODE_EDIT|OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_PARTICLE_EDIT)) - return 1; - return 0; - case OB_CURVE: - case OB_SURF: - case OB_FONT: - case OB_MBALL: - if (mode & (OB_MODE_EDIT)) - return 1; - return 0; - case OB_LATTICE: - if (mode & (OB_MODE_EDIT|OB_MODE_WEIGHT_PAINT)) - return 1; - case OB_ARMATURE: - if (mode & (OB_MODE_EDIT|OB_MODE_POSE)) - return 1; + case OB_MESH: + if (mode & (OB_MODE_EDIT | OB_MODE_SCULPT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT | OB_MODE_PARTICLE_EDIT)) + return 1; + return 0; + case OB_CURVE: + case OB_SURF: + case OB_FONT: + case OB_MBALL: + if (mode & (OB_MODE_EDIT)) + return 1; + return 0; + case OB_LATTICE: + if (mode & (OB_MODE_EDIT | OB_MODE_WEIGHT_PAINT)) + return 1; + case OB_ARMATURE: + if (mode & (OB_MODE_EDIT | OB_MODE_POSE)) + return 1; } } @@ -1428,7 +1429,7 @@ static int object_mode_set_compat(bContext *UNUSED(C), wmOperator *op, Object *o static int object_mode_set_exec(bContext *C, wmOperator *op) { - Object *ob= CTX_data_active_object(C); + Object *ob = CTX_data_active_object(C); ObjectMode mode = RNA_enum_get(op->ptr, "mode"); ObjectMode restore_mode = (ob) ? ob->mode : OB_MODE_OBJECT; int toggle = RNA_boolean_get(op->ptr, "toggle"); @@ -1475,7 +1476,7 @@ void OBJECT_OT_mode_set(wmOperatorType *ot) /* flags */ ot->flag = 0; /* no register/undo here, leave it to operators being called */ - prop= RNA_def_enum(ot->srna, "mode", object_mode_items, OB_MODE_OBJECT, "Mode", ""); + prop = RNA_def_enum(ot->srna, "mode", object_mode_items, OB_MODE_OBJECT, "Mode", ""); RNA_def_enum_funcs(prop, object_mode_set_itemsf); RNA_def_boolean(ot->srna, "toggle", 0, "Toggle", ""); @@ -1505,12 +1506,12 @@ void ED_object_toggle_modes(bContext *C, int mode) static int game_property_new(bContext *C, wmOperator *op) { - Object *ob= CTX_data_active_object(C); + Object *ob = CTX_data_active_object(C); bProperty *prop; char name[MAX_NAME]; - int type= RNA_enum_get(op->ptr, "type"); + int type = RNA_enum_get(op->ptr, "type"); - prop= new_property(type); + prop = new_property(type); BLI_addtail(&ob->prop, prop); RNA_string_get(op->ptr, "name", name); @@ -1537,7 +1538,7 @@ void OBJECT_OT_game_property_new(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_enum(ot->srna, "type", gameproperty_type_items, GPROP_FLOAT, "Type", "Type of game property to add"); RNA_def_string(ot->srna, "name", "", MAX_NAME, "Name", "Name of the game property to add"); @@ -1545,14 +1546,14 @@ void OBJECT_OT_game_property_new(wmOperatorType *ot) static int game_property_remove(bContext *C, wmOperator *op) { - Object *ob= CTX_data_active_object(C); + Object *ob = CTX_data_active_object(C); bProperty *prop; - int index= RNA_int_get(op->ptr, "index"); + int index = RNA_int_get(op->ptr, "index"); if (!ob) return OPERATOR_CANCELLED; - prop= BLI_findlink(&ob->prop, index); + prop = BLI_findlink(&ob->prop, index); if (prop) { BLI_remlink(&ob->prop, prop); @@ -1578,16 +1579,16 @@ void OBJECT_OT_game_property_remove(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "Property index to remove ", 0, INT_MAX); } -#define COPY_PROPERTIES_REPLACE 1 -#define COPY_PROPERTIES_MERGE 2 -#define COPY_PROPERTIES_COPY 3 +#define COPY_PROPERTIES_REPLACE 1 +#define COPY_PROPERTIES_MERGE 2 +#define COPY_PROPERTIES_COPY 3 -static EnumPropertyItem game_properties_copy_operations[] ={ +static EnumPropertyItem game_properties_copy_operations[] = { {COPY_PROPERTIES_REPLACE, "REPLACE", 0, "Replace Properties", ""}, {COPY_PROPERTIES_MERGE, "MERGE", 0, "Merge Properties", ""}, {COPY_PROPERTIES_COPY, "COPY", 0, "Copy a Property", ""}, @@ -1598,40 +1599,40 @@ static EnumPropertyItem gameprops_items[]= { static EnumPropertyItem *gameprops_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), int *free) { - Object *ob= ED_object_active_context(C); + Object *ob = ED_object_active_context(C); EnumPropertyItem tmp = {0, "", 0, "", ""}; - EnumPropertyItem *item= NULL; + EnumPropertyItem *item = NULL; bProperty *prop; - int a, totitem= 0; + int a, totitem = 0; if (!ob) return gameprops_items; - for (a=1, prop= ob->prop.first; prop; prop=prop->next, a++) { - tmp.value= a; - tmp.identifier= prop->name; - tmp.name= prop->name; + for (a = 1, prop = ob->prop.first; prop; prop = prop->next, a++) { + tmp.value = a; + tmp.identifier = prop->name; + tmp.name = prop->name; RNA_enum_item_add(&item, &totitem, &tmp); } RNA_enum_item_end(&item, &totitem); - *free= 1; + *free = 1; return item; } static int game_property_copy_exec(bContext *C, wmOperator *op) { - Object *ob=ED_object_active_context(C); + Object *ob = ED_object_active_context(C); bProperty *prop; int type = RNA_enum_get(op->ptr, "operation"); - int propid= RNA_enum_get(op->ptr, "property"); + int propid = RNA_enum_get(op->ptr, "property"); if (propid > 0) { /* copy */ - prop = BLI_findlink(&ob->prop, propid-1); + prop = BLI_findlink(&ob->prop, propid - 1); if (prop) { - CTX_DATA_BEGIN (C, Object*, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { if (ob != ob_iter) set_ob_property(ob_iter, prop); } CTX_DATA_END; @@ -1639,14 +1640,14 @@ static int game_property_copy_exec(bContext *C, wmOperator *op) } else { - CTX_DATA_BEGIN (C, Object*, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { if (ob != ob_iter) { if (type == COPY_PROPERTIES_REPLACE) copy_properties(&ob_iter->prop, &ob->prop); /* merge - the default when calling with no argument */ else - for (prop = ob->prop.first; prop; prop= prop->next) + for (prop = ob->prop.first; prop; prop = prop->next) set_ob_property(ob_iter, prop); } } @@ -1668,17 +1669,17 @@ void OBJECT_OT_game_property_copy(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_enum(ot->srna, "operation", game_properties_copy_operations, 3, "Operation", ""); - prop=RNA_def_enum(ot->srna, "property", gameprops_items, 0, "Property", "Properties to copy"); + prop = RNA_def_enum(ot->srna, "property", gameprops_items, 0, "Property", "Properties to copy"); RNA_def_enum_funcs(prop, gameprops_itemf); ot->prop = prop; } static int game_property_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - CTX_DATA_BEGIN (C, Object*, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { free_properties(&ob_iter->prop); } CTX_DATA_END; @@ -1697,16 +1698,16 @@ void OBJECT_OT_game_property_clear(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /************************ Copy Logic Bricks ***********************/ static int logicbricks_copy_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob=ED_object_active_context(C); + Object *ob = ED_object_active_context(C); - CTX_DATA_BEGIN (C, Object*, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { if (ob != ob_iter) { /* first: free all logic */ free_sensors(&ob_iter->sensors); @@ -1723,16 +1724,16 @@ static int logicbricks_copy_exec(bContext *C, wmOperator *UNUSED(op)) set_sca_new_poins_ob(ob_iter); /* some menu settings */ - ob_iter->scavisflag= ob->scavisflag; - ob_iter->scaflag= ob->scaflag; + ob_iter->scavisflag = ob->scavisflag; + ob_iter->scaflag = ob->scaflag; /* set the initial state */ - ob_iter->state= ob->state; - ob_iter->init_state= ob->init_state; + ob_iter->state = ob->state; + ob_iter->init_state = ob->init_state; - if (ob_iter->totcol==ob->totcol) { - ob_iter->actcol= ob->actcol; - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob_iter); + if (ob_iter->totcol == ob->totcol) { + ob_iter->actcol = ob->actcol; + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob_iter); } } } @@ -1755,14 +1756,14 @@ void OBJECT_OT_logic_bricks_copy(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int game_physics_copy_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob=ED_object_active_context(C); + Object *ob = ED_object_active_context(C); - CTX_DATA_BEGIN (C, Object*, ob_iter, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { if (ob != ob_iter) { ob_iter->gameflag = ob->gameflag; ob_iter->gameflag2 = ob->gameflag2; @@ -1782,7 +1783,7 @@ static int game_physics_copy_exec(bContext *C, wmOperator *UNUSED(op)) ob_iter->bsoft = copy_bulletsoftbody(ob->bsoft); if (ob->restrictflag & OB_RESTRICT_RENDER) ob_iter->restrictflag |= OB_RESTRICT_RENDER; - else + else ob_iter->restrictflag &= ~OB_RESTRICT_RENDER; } } @@ -1803,5 +1804,5 @@ void OBJECT_OT_game_physics_copy(struct wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } diff --git a/source/blender/editors/object/object_group.c b/source/blender/editors/object/object_group.c index 97367b2e340..702671d8d9b 100644 --- a/source/blender/editors/object/object_group.c +++ b/source/blender/editors/object/object_group.c @@ -61,9 +61,9 @@ static int objects_add_active_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Object *ob= OBACT; + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Object *ob = OBACT; Group *group; int ok = 0, cycle = 0; @@ -72,10 +72,10 @@ static int objects_add_active_exec(bContext *C, wmOperator *op) /* linking to same group requires its own loop so we can avoid * looking up the active objects groups each time */ - for (group= bmain->group.first; group; group=group->id.next) { + for (group = bmain->group.first; group; group = group->id.next) { if (object_in_group(ob, group)) { /* Assign groups to selected objects */ - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { if (base->object->dup_group != group) add_to_group(group, base->object, scene, base); else @@ -91,7 +91,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op) BKE_report(op->reports, RPT_WARNING, "Skipped some groups because of cycle detected"); DAG_scene_sort(bmain, scene); - WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL); + WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL); return OPERATOR_FINISHED; } @@ -108,14 +108,14 @@ void GROUP_OT_objects_add_active(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int objects_remove_active_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Object *ob= OBACT; + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Object *ob = OBACT; Group *group; int ok = 0; @@ -124,10 +124,10 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op) /* linking to same group requires its own loop so we can avoid * looking up the active objects groups each time */ - for (group= bmain->group.first; group; group=group->id.next) { + for (group = bmain->group.first; group; group = group->id.next) { if (object_in_group(ob, group)) { /* Assign groups to selected objects */ - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { rem_from_group(group, base->object, scene, base); ok = 1; } @@ -138,7 +138,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op) if (!ok) BKE_report(op->reports, RPT_ERROR, "Active Object contains no groups"); DAG_scene_sort(bmain, scene); - WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL); + WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL); return OPERATOR_FINISHED; } @@ -155,16 +155,16 @@ void GROUP_OT_objects_remove_active(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int group_objects_remove_exec(bContext *C, wmOperator *UNUSED(op)) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Group *group= NULL; + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Group *group = NULL; - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { group = NULL; while ((group = find_group(base->object, group))) rem_from_group(group, base->object, scene, base); @@ -172,7 +172,7 @@ static int group_objects_remove_exec(bContext *C, wmOperator *UNUSED(op)) CTX_DATA_END; DAG_scene_sort(bmain, scene); - WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL); + WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL); return OPERATOR_FINISHED; } @@ -189,27 +189,27 @@ void GROUP_OT_objects_remove(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int group_create_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Group *group= NULL; - char name[MAX_ID_NAME-2]; /* id name */ + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Group *group = NULL; + char name[MAX_ID_NAME - 2]; /* id name */ RNA_string_get(op->ptr, "name", name); - group= add_group(name); + group = add_group(name); - CTX_DATA_BEGIN (C, Base*, base, selected_editable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { add_to_group(group, base->object, scene, base); } CTX_DATA_END; DAG_scene_sort(bmain, scene); - WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL); + WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL); return OPERATOR_FINISHED; } @@ -226,26 +226,26 @@ void GROUP_OT_create(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - RNA_def_string(ot->srna, "name", "Group", MAX_ID_NAME-2, "Name", "Name of the new group"); + RNA_def_string(ot->srna, "name", "Group", MAX_ID_NAME - 2, "Name", "Name of the new group"); } /****************** properties window operators *********************/ static int group_add_exec(bContext *C, wmOperator *UNUSED(op)) { - Scene *scene= CTX_data_scene(C); - Object *ob= ED_object_context(C); + Scene *scene = CTX_data_scene(C); + Object *ob = ED_object_context(C); Group *group; if (ob == NULL) return OPERATOR_CANCELLED; - group= add_group("Group"); + group = add_group("Group"); add_to_group(group, ob, scene, NULL); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); return OPERATOR_FINISHED; } @@ -261,21 +261,21 @@ void OBJECT_OT_group_add(wmOperatorType *ot) ot->exec = group_add_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int group_link_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); - Object *ob= ED_object_context(C); - Group *group= BLI_findlink(&CTX_data_main(C)->group, RNA_enum_get(op->ptr, "group")); + Scene *scene = CTX_data_scene(C); + Object *ob = ED_object_context(C); + Group *group = BLI_findlink(&CTX_data_main(C)->group, RNA_enum_get(op->ptr, "group")); if (ELEM(NULL, ob, group)) return OPERATOR_CANCELLED; add_to_group(group, ob, scene, NULL); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); return OPERATOR_FINISHED; } @@ -294,26 +294,26 @@ void OBJECT_OT_group_link(wmOperatorType *ot) ot->invoke = WM_enum_search_invoke; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "group", DummyRNA_NULL_items, 0, "Group", ""); + prop = RNA_def_enum(ot->srna, "group", DummyRNA_NULL_items, 0, "Group", ""); RNA_def_enum_funcs(prop, RNA_group_local_itemf); ot->prop = prop; } static int group_remove_exec(bContext *C, wmOperator *UNUSED(op)) { - Scene *scene= CTX_data_scene(C); - Object *ob= ED_object_context(C); - Group *group= CTX_data_pointer_get_type(C, "group", &RNA_Group).data; + Scene *scene = CTX_data_scene(C); + Object *ob = ED_object_context(C); + Group *group = CTX_data_pointer_get_type(C, "group", &RNA_Group).data; if (!ob || !group) return OPERATOR_CANCELLED; rem_from_group(group, ob, scene, NULL); /* base will be used if found */ - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); return OPERATOR_FINISHED; } @@ -328,6 +328,6 @@ void OBJECT_OT_group_remove(wmOperatorType *ot) ot->exec = group_remove_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index 495f0b40802..4ffc3e8c19f 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -76,27 +76,27 @@ static int return_editmesh_indexar(BMEditMesh *em, int *tot, int **indexar, floa { BMVert *eve; BMIter iter; - int *index, nr, totvert=0; + int *index, nr, totvert = 0; BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) totvert++; } - if (totvert==0) return 0; + if (totvert == 0) return 0; - *indexar= index= MEM_mallocN(4*totvert, "hook indexar"); - *tot= totvert; - nr= 0; + *indexar = index = MEM_mallocN(4 * totvert, "hook indexar"); + *tot = totvert; + nr = 0; zero_v3(cent); BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { - *index= nr; index++; + *index = nr; index++; add_v3_v3(cent, eve->co); } nr++; } - mul_v3_fl(cent, 1.0f/(float)totvert); + mul_v3_fl(cent, 1.0f / (float)totvert); return totvert; } @@ -106,8 +106,8 @@ static int return_editmesh_vgroup(Object *obedit, BMEditMesh *em, char *name, fl zero_v3(cent); if (obedit->actdef) { - const int defgrp_index= obedit->actdef-1; - int totvert=0; + const int defgrp_index = obedit->actdef - 1; + int totvert = 0; MDeformVert *dvert; BMVert *eve; @@ -115,7 +115,7 @@ static int return_editmesh_vgroup(Object *obedit, BMEditMesh *em, char *name, fl /* find the vertices */ BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { - dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); + dvert = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert) { if (defvert_find_weight(dvert, defgrp_index) > 0.0f) { @@ -127,7 +127,7 @@ static int return_editmesh_vgroup(Object *obedit, BMEditMesh *em, char *name, fl if (totvert) { bDeformGroup *dg = BLI_findlink(&obedit->defbase, defgrp_index); BLI_strncpy(name, dg->name, sizeof(dg->name)); - mul_v3_fl(cent, 1.0f/(float)totvert); + mul_v3_fl(cent, 1.0f / (float)totvert); return 1; } } @@ -137,19 +137,19 @@ static int return_editmesh_vgroup(Object *obedit, BMEditMesh *em, char *name, fl static void select_editbmesh_hook(Object *ob, HookModifierData *hmd) { - Mesh *me= ob->data; - BMEditMesh *em= me->edit_btmesh; + Mesh *me = ob->data; + BMEditMesh *em = me->edit_btmesh; BMVert *eve; BMIter iter; - int index=0, nr=0; + int index = 0, nr = 0; if (hmd->indexar == NULL) return; BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { - if (nr==hmd->indexar[index]) { + if (nr == hmd->indexar[index]) { BM_vert_select_set(em->bm, eve, TRUE); - if (index < hmd->totindex-1) index++; + if (index < hmd->totindex - 1) index++; } nr++; @@ -161,31 +161,31 @@ static void select_editbmesh_hook(Object *ob, HookModifierData *hmd) static int return_editlattice_indexar(Lattice *editlatt, int *tot, int **indexar, float *cent) { BPoint *bp; - int *index, nr, totvert=0, a; + int *index, nr, totvert = 0, a; /* count */ - a= editlatt->pntsu*editlatt->pntsv*editlatt->pntsw; - bp= editlatt->def; + a = editlatt->pntsu * editlatt->pntsv * editlatt->pntsw; + bp = editlatt->def; while (a--) { if (bp->f1 & SELECT) { - if (bp->hide==0) totvert++; + if (bp->hide == 0) totvert++; } bp++; } - if (totvert==0) return 0; + if (totvert == 0) return 0; - *indexar= index= MEM_mallocN(4*totvert, "hook indexar"); - *tot= totvert; - nr= 0; + *indexar = index = MEM_mallocN(4 * totvert, "hook indexar"); + *tot = totvert; + nr = 0; zero_v3(cent); - a= editlatt->pntsu*editlatt->pntsv*editlatt->pntsw; - bp= editlatt->def; + a = editlatt->pntsu * editlatt->pntsv * editlatt->pntsw; + bp = editlatt->def; while (a--) { if (bp->f1 & SELECT) { - if (bp->hide==0) { - *index= nr; index++; + if (bp->hide == 0) { + *index = nr; index++; add_v3_v3(cent, bp->vec); } } @@ -193,25 +193,25 @@ static int return_editlattice_indexar(Lattice *editlatt, int *tot, int **indexar nr++; } - mul_v3_fl(cent, 1.0f/(float)totvert); + mul_v3_fl(cent, 1.0f / (float)totvert); return totvert; } static void select_editlattice_hook(Object *obedit, HookModifierData *hmd) { - Lattice *lt= obedit->data, *editlt; + Lattice *lt = obedit->data, *editlt; BPoint *bp; - int index=0, nr=0, a; + int index = 0, nr = 0, a; - editlt= lt->editlatt->latt; + editlt = lt->editlatt->latt; /* count */ - a= editlt->pntsu*editlt->pntsv*editlt->pntsw; - bp= editlt->def; + a = editlt->pntsu * editlt->pntsv * editlt->pntsw; + bp = editlt->def; while (a--) { - if (hmd->indexar[index]==nr) { + if (hmd->indexar[index] == nr) { bp->f1 |= SELECT; - if (index < hmd->totindex-1) index++; + if (index < hmd->totindex - 1) index++; } nr++; bp++; @@ -220,16 +220,16 @@ static void select_editlattice_hook(Object *obedit, HookModifierData *hmd) static int return_editcurve_indexar(Object *obedit, int *tot, int **indexar, float *cent) { - ListBase *editnurb= object_editcurve_get(obedit); + ListBase *editnurb = object_editcurve_get(obedit); Nurb *nu; BPoint *bp; BezTriple *bezt; - int *index, a, nr, totvert=0; + int *index, a, nr, totvert = 0; - for (nu= editnurb->first; nu; nu= nu->next) { + for (nu = editnurb->first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) { - bezt= nu->bezt; - a= nu->pntsu; + bezt = nu->bezt; + a = nu->pntsu; while (a--) { if (bezt->f1 & SELECT) totvert++; if (bezt->f2 & SELECT) totvert++; @@ -238,38 +238,38 @@ static int return_editcurve_indexar(Object *obedit, int *tot, int **indexar, flo } } else { - bp= nu->bp; - a= nu->pntsu*nu->pntsv; + bp = nu->bp; + a = nu->pntsu * nu->pntsv; while (a--) { if (bp->f1 & SELECT) totvert++; bp++; } } } - if (totvert==0) return 0; + if (totvert == 0) return 0; - *indexar= index= MEM_mallocN(4*totvert, "hook indexar"); - *tot= totvert; - nr= 0; + *indexar = index = MEM_mallocN(4 * totvert, "hook indexar"); + *tot = totvert; + nr = 0; zero_v3(cent); - for (nu= editnurb->first; nu; nu= nu->next) { + for (nu = editnurb->first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) { - bezt= nu->bezt; - a= nu->pntsu; + bezt = nu->bezt; + a = nu->pntsu; while (a--) { if (bezt->f1 & SELECT) { - *index= nr; index++; + *index = nr; index++; add_v3_v3(cent, bezt->vec[0]); } nr++; if (bezt->f2 & SELECT) { - *index= nr; index++; + *index = nr; index++; add_v3_v3(cent, bezt->vec[1]); } nr++; if (bezt->f3 & SELECT) { - *index= nr; index++; + *index = nr; index++; add_v3_v3(cent, bezt->vec[2]); } nr++; @@ -277,11 +277,11 @@ static int return_editcurve_indexar(Object *obedit, int *tot, int **indexar, flo } } else { - bp= nu->bp; - a= nu->pntsu*nu->pntsv; + bp = nu->bp; + a = nu->pntsu * nu->pntsv; while (a--) { if (bp->f1 & SELECT) { - *index= nr; index++; + *index = nr; index++; add_v3_v3(cent, bp->vec); } nr++; @@ -290,21 +290,21 @@ static int return_editcurve_indexar(Object *obedit, int *tot, int **indexar, flo } } - mul_v3_fl(cent, 1.0f/(float)totvert); + mul_v3_fl(cent, 1.0f / (float)totvert); return totvert; } static int object_hook_index_array(Scene *scene, Object *obedit, int *tot, int **indexar, char *name, float *cent_r) { - *indexar= NULL; - *tot= 0; - name[0]= 0; + *indexar = NULL; + *tot = 0; + name[0] = 0; switch (obedit->type) { case OB_MESH: { - Mesh *me= obedit->data; + Mesh *me = obedit->data; BMEditMesh *em; @@ -314,7 +314,7 @@ static int object_hook_index_array(Scene *scene, Object *obedit, int *tot, int * em = me->edit_btmesh; /* check selected vertices first */ - if ( return_editmesh_indexar(em, tot, indexar, cent_r)) { + if (return_editmesh_indexar(em, tot, indexar, cent_r)) { return 1; } else { @@ -327,7 +327,7 @@ static int object_hook_index_array(Scene *scene, Object *obedit, int *tot, int * return return_editcurve_indexar(obedit, tot, indexar, cent_r); case OB_LATTICE: { - Lattice *lt= obedit->data; + Lattice *lt = obedit->data; return return_editlattice_indexar(lt->editlatt->latt, tot, indexar, cent_r); } default: @@ -337,30 +337,30 @@ static int object_hook_index_array(Scene *scene, Object *obedit, int *tot, int * static void select_editcurve_hook(Object *obedit, HookModifierData *hmd) { - ListBase *editnurb= object_editcurve_get(obedit); + ListBase *editnurb = object_editcurve_get(obedit); Nurb *nu; BPoint *bp; BezTriple *bezt; - int index=0, a, nr=0; + int index = 0, a, nr = 0; - for (nu= editnurb->first; nu; nu= nu->next) { + for (nu = editnurb->first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) { - bezt= nu->bezt; - a= nu->pntsu; + bezt = nu->bezt; + a = nu->pntsu; while (a--) { if (nr == hmd->indexar[index]) { bezt->f1 |= SELECT; - if (indextotindex-1) index++; + if (index < hmd->totindex - 1) index++; } nr++; if (nr == hmd->indexar[index]) { bezt->f2 |= SELECT; - if (indextotindex-1) index++; + if (index < hmd->totindex - 1) index++; } nr++; if (nr == hmd->indexar[index]) { bezt->f3 |= SELECT; - if (indextotindex-1) index++; + if (index < hmd->totindex - 1) index++; } nr++; @@ -368,12 +368,12 @@ static void select_editcurve_hook(Object *obedit, HookModifierData *hmd) } } else { - bp= nu->bp; - a= nu->pntsu*nu->pntsv; + bp = nu->bp; + a = nu->pntsu * nu->pntsv; while (a--) { if (nr == hmd->indexar[index]) { bp->f1 |= SELECT; - if (indextotindex-1) index++; + if (index < hmd->totindex - 1) index++; } nr++; bp++; @@ -387,17 +387,17 @@ static void object_hook_select(Object *ob, HookModifierData *hmd) if (hmd->indexar == NULL) return; - if (ob->type==OB_MESH) select_editbmesh_hook(ob, hmd); - else if (ob->type==OB_LATTICE) select_editlattice_hook(ob, hmd); - else if (ob->type==OB_CURVE) select_editcurve_hook(ob, hmd); - else if (ob->type==OB_SURF) select_editcurve_hook(ob, hmd); + if (ob->type == OB_MESH) select_editbmesh_hook(ob, hmd); + else if (ob->type == OB_LATTICE) select_editlattice_hook(ob, hmd); + else if (ob->type == OB_CURVE) select_editcurve_hook(ob, hmd); + else if (ob->type == OB_SURF) select_editcurve_hook(ob, hmd); } /* special poll operators for hook operators */ // TODO: check for properties window modifier context too as alternative? static int hook_op_edit_poll(bContext *C) { - Object *obedit= CTX_data_edit_object(C); + Object *obedit = CTX_data_edit_object(C); if (obedit) { if (ED_operator_editmesh(C)) return 1; @@ -414,7 +414,7 @@ static Object *add_hook_object_new(Scene *scene, Object *obedit) Base *base, *basedit; Object *ob; - ob= add_object(scene, OB_EMPTY); + ob = add_object(scene, OB_EMPTY); basedit = object_in_scene(obedit, scene); base = object_in_scene(ob, scene); @@ -429,7 +429,7 @@ static Object *add_hook_object_new(Scene *scene, Object *obedit) static void add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob, int mode) { - ModifierData *md=NULL; + ModifierData *md = NULL; HookModifierData *hmd = NULL; float cent[3]; int tot, ok, *indexar; @@ -437,9 +437,9 @@ static void add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *o ok = object_hook_index_array(scene, obedit, &tot, &indexar, name, cent); - if (!ok) return; // XXX error("Requires selected vertices or active Vertex Group"); + if (!ok) return; // XXX error("Requires selected vertices or active Vertex Group"); - if (mode==OBJECT_ADDHOOK_NEWOB && !ob) { + if (mode == OBJECT_ADDHOOK_NEWOB && !ob) { ob = add_hook_object_new(scene, obedit); @@ -448,19 +448,19 @@ static void add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *o } md = obedit->modifiers.first; - while (md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform) { + while (md && modifierType_getInfo(md->type)->type == eModifierTypeType_OnlyDeform) { md = md->next; } - hmd = (HookModifierData*) modifier_new(eModifierType_Hook); + hmd = (HookModifierData *) modifier_new(eModifierType_Hook); BLI_insertlinkbefore(&obedit->modifiers, md, hmd); - BLI_snprintf(hmd->modifier.name, sizeof(hmd->modifier.name), "Hook-%s", ob->id.name+2); - modifier_unique_name(&obedit->modifiers, (ModifierData*)hmd); + BLI_snprintf(hmd->modifier.name, sizeof(hmd->modifier.name), "Hook-%s", ob->id.name + 2); + modifier_unique_name(&obedit->modifiers, (ModifierData *)hmd); - hmd->object= ob; - hmd->indexar= indexar; + hmd->object = ob; + hmd->indexar = indexar; copy_v3_v3(hmd->cent, cent); - hmd->totindex= tot; + hmd->totindex = tot; BLI_strncpy(hmd->name, name, sizeof(hmd->name)); /* matrix calculus */ @@ -478,12 +478,12 @@ static void add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *o static int object_add_hook_selob_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); Object *obedit = CTX_data_edit_object(C); - Object *obsel=NULL; + Object *obsel = NULL; - CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { if (ob != obedit) { obsel = ob; break; @@ -498,7 +498,7 @@ static int object_add_hook_selob_exec(bContext *C, wmOperator *op) add_hook_object(bmain, scene, obedit, obsel, OBJECT_ADDHOOK_SELOB); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, obedit); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, obedit); return OPERATOR_FINISHED; } @@ -514,19 +514,19 @@ void OBJECT_OT_hook_add_selobj(wmOperatorType *ot) ot->poll = hook_op_edit_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int object_add_hook_newob_exec(bContext *C, wmOperator *UNUSED(op)) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); Object *obedit = CTX_data_edit_object(C); add_hook_object(bmain, scene, obedit, NULL, OBJECT_ADDHOOK_NEWOB); - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, obedit); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, obedit); return OPERATOR_FINISHED; } @@ -542,14 +542,14 @@ void OBJECT_OT_hook_add_newobj(wmOperatorType *ot) ot->poll = hook_op_edit_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int object_hook_remove_exec(bContext *C, wmOperator *op) { - int num= RNA_enum_get(op->ptr, "modifier"); - Object *ob=NULL; - HookModifierData *hmd=NULL; + int num = RNA_enum_get(op->ptr, "modifier"); + Object *ob = NULL; + HookModifierData *hmd = NULL; ob = CTX_data_edit_object(C); hmd = (HookModifierData *)BLI_findlink(&ob->modifiers, num); @@ -565,7 +565,7 @@ static int object_hook_remove_exec(bContext *C, wmOperator *op) modifier_free((ModifierData *)hmd); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -574,25 +574,25 @@ static EnumPropertyItem *hook_mod_itemf(bContext *C, PointerRNA *UNUSED(ptr), Pr { Object *ob = CTX_data_edit_object(C); EnumPropertyItem tmp = {0, "", 0, "", ""}; - EnumPropertyItem *item= NULL; + EnumPropertyItem *item = NULL; ModifierData *md = NULL; - int a, totitem= 0; + int a, totitem = 0; if (!ob) return DummyRNA_NULL_items; - for (a=0, md=ob->modifiers.first; md; md= md->next, a++) { - if (md->type==eModifierType_Hook) { - tmp.value= a; + for (a = 0, md = ob->modifiers.first; md; md = md->next, a++) { + if (md->type == eModifierType_Hook) { + tmp.value = a; tmp.icon = ICON_HOOK; - tmp.identifier= md->name; - tmp.name= md->name; + tmp.identifier = md->name; + tmp.name = md->name; RNA_enum_item_add(&item, &totitem, &tmp); } } RNA_enum_item_end(&item, &totitem); - *free= 1; + *free = 1; return item; } @@ -614,26 +614,26 @@ void OBJECT_OT_hook_remove(wmOperatorType *ot) /* flags */ /* this operator removes modifier which isn't stored in local undo stack, * so redoing it from redo panel gives totally weird results */ - ot->flag = /*OPTYPE_REGISTER|*/OPTYPE_UNDO; + ot->flag = /*OPTYPE_REGISTER|*/ OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to remove"); + prop = RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to remove"); RNA_def_enum_funcs(prop, hook_mod_itemf); ot->prop = prop; } static int object_hook_reset_exec(bContext *C, wmOperator *op) { - PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_HookModifier); - int num= RNA_enum_get(op->ptr, "modifier"); - Object *ob=NULL; - HookModifierData *hmd=NULL; + PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_HookModifier); + int num = RNA_enum_get(op->ptr, "modifier"); + Object *ob = NULL; + HookModifierData *hmd = NULL; - if (ptr.data) { /* if modifier context is available, use that */ + if (ptr.data) { /* if modifier context is available, use that */ ob = ptr.id.data; - hmd= ptr.data; + hmd = ptr.data; } - else { /* use the provided property */ + else { /* use the provided property */ ob = CTX_data_edit_object(C); hmd = (HookModifierData *)BLI_findlink(&ob->modifiers, num); } @@ -644,7 +644,7 @@ static int object_hook_reset_exec(bContext *C, wmOperator *op) /* reset functionality */ if (hmd->object) { - bPoseChannel *pchan= get_pose_channel(hmd->object->pose, hmd->subtarget); + bPoseChannel *pchan = get_pose_channel(hmd->object->pose, hmd->subtarget); if (hmd->subtarget[0] && pchan) { float imat[4][4], mat[4][4]; @@ -662,7 +662,7 @@ static int object_hook_reset_exec(bContext *C, wmOperator *op) } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -681,27 +681,27 @@ void OBJECT_OT_hook_reset(wmOperatorType *ot) ot->poll = hook_op_edit_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to assign to"); + prop = RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to assign to"); RNA_def_enum_funcs(prop, hook_mod_itemf); } static int object_hook_recenter_exec(bContext *C, wmOperator *op) { - PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_HookModifier); - int num= RNA_enum_get(op->ptr, "modifier"); - Object *ob=NULL; - HookModifierData *hmd=NULL; + PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_HookModifier); + int num = RNA_enum_get(op->ptr, "modifier"); + Object *ob = NULL; + HookModifierData *hmd = NULL; Scene *scene = CTX_data_scene(C); float bmat[3][3], imat[3][3]; - if (ptr.data) { /* if modifier context is available, use that */ + if (ptr.data) { /* if modifier context is available, use that */ ob = ptr.id.data; - hmd= ptr.data; + hmd = ptr.data; } - else { /* use the provided property */ + else { /* use the provided property */ ob = CTX_data_edit_object(C); hmd = (HookModifierData *)BLI_findlink(&ob->modifiers, num); } @@ -718,7 +718,7 @@ static int object_hook_recenter_exec(bContext *C, wmOperator *op) mul_m3_v3(imat, hmd->cent); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -737,29 +737,29 @@ void OBJECT_OT_hook_recenter(wmOperatorType *ot) ot->poll = hook_op_edit_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to assign to"); + prop = RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to assign to"); RNA_def_enum_funcs(prop, hook_mod_itemf); } static int object_hook_assign_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); - PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_HookModifier); - int num= RNA_enum_get(op->ptr, "modifier"); - Object *ob=NULL; - HookModifierData *hmd=NULL; + Scene *scene = CTX_data_scene(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_HookModifier); + int num = RNA_enum_get(op->ptr, "modifier"); + Object *ob = NULL; + HookModifierData *hmd = NULL; float cent[3]; char name[MAX_NAME]; int *indexar, tot; - if (ptr.data) { /* if modifier context is available, use that */ + if (ptr.data) { /* if modifier context is available, use that */ ob = ptr.id.data; - hmd= ptr.data; + hmd = ptr.data; } - else { /* use the provided property */ + else { /* use the provided property */ ob = CTX_data_edit_object(C); hmd = (HookModifierData *)BLI_findlink(&ob->modifiers, num); } @@ -778,11 +778,11 @@ static int object_hook_assign_exec(bContext *C, wmOperator *op) MEM_freeN(hmd->indexar); copy_v3_v3(hmd->cent, cent); - hmd->indexar= indexar; - hmd->totindex= tot; + hmd->indexar = indexar; + hmd->totindex = tot; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -803,25 +803,25 @@ void OBJECT_OT_hook_assign(wmOperatorType *ot) /* flags */ /* this operator changes data stored in modifier which doesn't get pushed to undo stack, * so redoing it from redo panel gives totally weird results */ - ot->flag = /*OPTYPE_REGISTER|*/OPTYPE_UNDO; + ot->flag = /*OPTYPE_REGISTER|*/ OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to assign to"); + prop = RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to assign to"); RNA_def_enum_funcs(prop, hook_mod_itemf); } static int object_hook_select_exec(bContext *C, wmOperator *op) { - PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_HookModifier); - int num= RNA_enum_get(op->ptr, "modifier"); - Object *ob=NULL; - HookModifierData *hmd=NULL; + PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_HookModifier); + int num = RNA_enum_get(op->ptr, "modifier"); + Object *ob = NULL; + HookModifierData *hmd = NULL; - if (ptr.data) { /* if modifier context is available, use that */ + if (ptr.data) { /* if modifier context is available, use that */ ob = ptr.id.data; - hmd= ptr.data; + hmd = ptr.data; } - else { /* use the provided property */ + else { /* use the provided property */ ob = CTX_data_edit_object(C); hmd = (HookModifierData *)BLI_findlink(&ob->modifiers, num); } @@ -833,7 +833,7 @@ static int object_hook_select_exec(bContext *C, wmOperator *op) /* select functionality */ object_hook_select(ob, hmd); - WM_event_add_notifier(C, NC_GEOM|ND_SELECT, ob->data); + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, ob->data); return OPERATOR_FINISHED; } @@ -852,10 +852,10 @@ void OBJECT_OT_hook_select(wmOperatorType *ot) ot->poll = hook_op_edit_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to remove"); + prop = RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to remove"); RNA_def_enum_funcs(prop, hook_mod_itemf); } diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index b1738a960ce..ee9d776ea3b 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -185,7 +185,7 @@ void CONSTRAINT_OT_limitdistance_reset(struct wmOperatorType *ot); void CONSTRAINT_OT_childof_set_inverse(struct wmOperatorType *ot); void CONSTRAINT_OT_childof_clear_inverse(struct wmOperatorType *ot); void CONSTRAINT_OT_objectsolver_set_inverse(struct wmOperatorType *ot); -void CONSTRAINT_OT_objectsolver_clear_inverse (struct wmOperatorType *ot); +void CONSTRAINT_OT_objectsolver_clear_inverse(struct wmOperatorType *ot); /* object_vgroup.c */ void OBJECT_OT_vertex_group_add(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_lattice.c b/source/blender/editors/object/object_lattice.c index 4ba62541c60..648f530881a 100644 --- a/source/blender/editors/object/object_lattice.c +++ b/source/blender/editors/object/object_lattice.c @@ -68,45 +68,45 @@ void free_editLatt(Object *ob) { - Lattice *lt= ob->data; + Lattice *lt = ob->data; if (lt->editlatt) { - Lattice *editlt= lt->editlatt->latt; + Lattice *editlt = lt->editlatt->latt; if (editlt->def) MEM_freeN(editlt->def); if (editlt->dvert) - free_dverts(editlt->dvert, editlt->pntsu*editlt->pntsv*editlt->pntsw); + free_dverts(editlt->dvert, editlt->pntsu * editlt->pntsv * editlt->pntsw); MEM_freeN(editlt); MEM_freeN(lt->editlatt); - lt->editlatt= NULL; + lt->editlatt = NULL; } } void make_editLatt(Object *obedit) { - Lattice *lt= obedit->data; + Lattice *lt = obedit->data; KeyBlock *actkey; free_editLatt(obedit); - actkey= ob_get_keyblock(obedit); + actkey = ob_get_keyblock(obedit); if (actkey) key_to_latt(actkey, lt); - lt->editlatt= MEM_callocN(sizeof(EditLatt), "editlatt"); - lt->editlatt->latt= MEM_dupallocN(lt); - lt->editlatt->latt->def= MEM_dupallocN(lt->def); + lt->editlatt = MEM_callocN(sizeof(EditLatt), "editlatt"); + lt->editlatt->latt = MEM_dupallocN(lt); + lt->editlatt->latt->def = MEM_dupallocN(lt->def); if (lt->dvert) { - int tot= lt->pntsu*lt->pntsv*lt->pntsw; - lt->editlatt->latt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert"); + int tot = lt->pntsu * lt->pntsv * lt->pntsw; + lt->editlatt->latt->dvert = MEM_mallocN(sizeof (MDeformVert) * tot, "Lattice MDeformVert"); copy_dverts(lt->editlatt->latt->dvert, lt->dvert, tot); } - if (lt->key) lt->editlatt->shapenr= obedit->shapenr; + if (lt->key) lt->editlatt->shapenr = obedit->shapenr; } void load_editLatt(Object *obedit) @@ -117,52 +117,52 @@ void load_editLatt(Object *obedit) float *fp; int tot; - lt= obedit->data; - editlt= lt->editlatt->latt; + lt = obedit->data; + editlt = lt->editlatt->latt; if (lt->editlatt->shapenr) { - actkey= BLI_findlink(<->key->block, lt->editlatt->shapenr-1); + actkey = BLI_findlink(<->key->block, lt->editlatt->shapenr - 1); /* active key: vertices */ - tot= editlt->pntsu*editlt->pntsv*editlt->pntsw; + tot = editlt->pntsu * editlt->pntsv * editlt->pntsw; if (actkey->data) MEM_freeN(actkey->data); - fp=actkey->data= MEM_callocN(lt->key->elemsize*tot, "actkey->data"); - actkey->totelem= tot; + fp = actkey->data = MEM_callocN(lt->key->elemsize * tot, "actkey->data"); + actkey->totelem = tot; - bp= editlt->def; + bp = editlt->def; while (tot--) { copy_v3_v3(fp, bp->vec); - fp+= 3; + fp += 3; bp++; } } else { MEM_freeN(lt->def); - lt->def= MEM_dupallocN(editlt->def); + lt->def = MEM_dupallocN(editlt->def); - lt->flag= editlt->flag; + lt->flag = editlt->flag; - lt->pntsu= editlt->pntsu; - lt->pntsv= editlt->pntsv; - lt->pntsw= editlt->pntsw; + lt->pntsu = editlt->pntsu; + lt->pntsv = editlt->pntsv; + lt->pntsw = editlt->pntsw; - lt->typeu= editlt->typeu; - lt->typev= editlt->typev; - lt->typew= editlt->typew; + lt->typeu = editlt->typeu; + lt->typev = editlt->typev; + lt->typew = editlt->typew; } if (lt->dvert) { - free_dverts(lt->dvert, lt->pntsu*lt->pntsv*lt->pntsw); - lt->dvert= NULL; + free_dverts(lt->dvert, lt->pntsu * lt->pntsv * lt->pntsw); + lt->dvert = NULL; } if (editlt->dvert) { - tot= lt->pntsu*lt->pntsv*lt->pntsw; + tot = lt->pntsu * lt->pntsv * lt->pntsw; - lt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert"); + lt->dvert = MEM_mallocN(sizeof (MDeformVert) * tot, "Lattice MDeformVert"); copy_dverts(lt->dvert, editlt->dvert, tot); } } @@ -171,17 +171,17 @@ void load_editLatt(Object *obedit) void ED_setflagsLatt(Object *obedit, int flag) { - Lattice *lt= obedit->data; + Lattice *lt = obedit->data; BPoint *bp; int a; - bp= lt->editlatt->latt->def; + bp = lt->editlatt->latt->def; - a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw; + a = lt->editlatt->latt->pntsu * lt->editlatt->latt->pntsv * lt->editlatt->latt->pntsw; while (a--) { - if (bp->hide==0) { - bp->f1= flag; + if (bp->hide == 0) { + bp->f1 = flag; } bp++; } @@ -189,8 +189,8 @@ void ED_setflagsLatt(Object *obedit, int flag) static int lattice_select_all_exec(bContext *C, wmOperator *op) { - Object *obedit= CTX_data_edit_object(C); - Lattice *lt= obedit->data; + Object *obedit = CTX_data_edit_object(C); + Lattice *lt = obedit->data; BPoint *bp; int a; int action = RNA_enum_get(op->ptr, "action"); @@ -198,11 +198,11 @@ static int lattice_select_all_exec(bContext *C, wmOperator *op) if (action == SEL_TOGGLE) { action = SEL_SELECT; - bp= lt->editlatt->latt->def; - a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw; + bp = lt->editlatt->latt->def; + a = lt->editlatt->latt->pntsu * lt->editlatt->latt->pntsv * lt->editlatt->latt->pntsw; while (a--) { - if (bp->hide==0) { + if (bp->hide == 0) { if (bp->f1) { action = SEL_DESELECT; break; @@ -213,26 +213,26 @@ static int lattice_select_all_exec(bContext *C, wmOperator *op) } switch (action) { - case SEL_SELECT: - ED_setflagsLatt(obedit, 1); - break; - case SEL_DESELECT: - ED_setflagsLatt(obedit, 0); - break; - case SEL_INVERT: - bp= lt->editlatt->latt->def; - a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw; - - while (a--) { - if (bp->hide==0) { - bp->f1 ^= 1; + case SEL_SELECT: + ED_setflagsLatt(obedit, 1); + break; + case SEL_DESELECT: + ED_setflagsLatt(obedit, 0); + break; + case SEL_INVERT: + bp = lt->editlatt->latt->def; + a = lt->editlatt->latt->pntsu * lt->editlatt->latt->pntsv * lt->editlatt->latt->pntsw; + + while (a--) { + if (bp->hide == 0) { + bp->f1 ^= 1; + } + bp++; } - bp++; - } - break; + break; } - WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data); + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data); return OPERATOR_FINISHED; } @@ -249,7 +249,7 @@ void LATTICE_OT_select_all(wmOperatorType *ot) ot->poll = ED_operator_editlattice; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; WM_operator_properties_select_all(ot); } @@ -260,27 +260,27 @@ static int make_regular_poll(bContext *C) if (ED_operator_editlattice(C)) return 1; - ob= CTX_data_active_object(C); - return (ob && ob->type==OB_LATTICE); + ob = CTX_data_active_object(C); + return (ob && ob->type == OB_LATTICE); } static int make_regular_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob= CTX_data_edit_object(C); + Object *ob = CTX_data_edit_object(C); Lattice *lt; if (ob) { - lt= ob->data; + lt = ob->data; resizelattice(lt->editlatt->latt, lt->pntsu, lt->pntsv, lt->pntsw, NULL); } else { - ob= CTX_data_active_object(C); - lt= ob->data; + ob = CTX_data_active_object(C); + lt = ob->data; resizelattice(lt, lt->pntsu, lt->pntsv, lt->pntsw, NULL); } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -297,7 +297,7 @@ void LATTICE_OT_make_regular(wmOperatorType *ot) ot->poll = make_regular_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /****************************** Mouse Selection *************************/ @@ -305,12 +305,12 @@ void LATTICE_OT_make_regular(wmOperatorType *ot) static void findnearestLattvert__doClosest(void *userData, BPoint *bp, int x, int y) { struct { BPoint *bp; short dist, select; int mval[2]; } *data = userData; - float temp = abs(data->mval[0]-x) + abs(data->mval[1]-y); + float temp = abs(data->mval[0] - x) + abs(data->mval[1] - y); - if ((bp->f1 & SELECT)==data->select) + if ((bp->f1 & SELECT) == data->select) temp += 5; - if (tempdist) { + if (temp < data->dist) { data->dist = temp; data->bp = bp; @@ -319,15 +319,15 @@ static void findnearestLattvert__doClosest(void *userData, BPoint *bp, int x, in static BPoint *findnearestLattvert(ViewContext *vc, const int mval[2], int sel) { - /* sel==1: selected gets a disadvantage */ - /* in nurb and bezt or bp the nearest is written */ - /* return 0 1 2: handlepunt */ + /* sel==1: selected gets a disadvantage */ + /* in nurb and bezt or bp the nearest is written */ + /* return 0 1 2: handlepunt */ struct { BPoint *bp; short dist, select; int mval[2]; } data = {NULL}; data.dist = 100; data.select = sel; - data.mval[0]= mval[0]; - data.mval[1]= mval[1]; + data.mval[0] = mval[0]; + data.mval[1] = mval[1]; ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); lattice_foreachScreenVert(vc, findnearestLattvert__doClosest, &data); @@ -338,20 +338,20 @@ static BPoint *findnearestLattvert(ViewContext *vc, const int mval[2], int sel) int mouse_lattice(bContext *C, const int mval[2], int extend) { ViewContext vc; - BPoint *bp= NULL; + BPoint *bp = NULL; view3d_set_viewcontext(C, &vc); - bp= findnearestLattvert(&vc, mval, 1); + bp = findnearestLattvert(&vc, mval, 1); if (bp) { - if (extend==0) { + if (extend == 0) { ED_setflagsLatt(vc.obedit, 0); bp->f1 |= SELECT; } else - bp->f1 ^= SELECT; /* swap */ + bp->f1 ^= SELECT; /* swap */ - WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc.obedit->data); + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, vc.obedit->data); return 1; } @@ -368,29 +368,29 @@ typedef struct UndoLattice { static void undoLatt_to_editLatt(void *data, void *edata, void *UNUSED(obdata)) { - UndoLattice *ult= (UndoLattice*)data; - EditLatt *editlatt= (EditLatt *)edata; - int a= editlatt->latt->pntsu*editlatt->latt->pntsv*editlatt->latt->pntsw; + UndoLattice *ult = (UndoLattice *)data; + EditLatt *editlatt = (EditLatt *)edata; + int a = editlatt->latt->pntsu * editlatt->latt->pntsv * editlatt->latt->pntsw; - memcpy(editlatt->latt->def, ult->def, a*sizeof(BPoint)); + memcpy(editlatt->latt->def, ult->def, a * sizeof(BPoint)); } static void *editLatt_to_undoLatt(void *edata, void *UNUSED(obdata)) { - UndoLattice *ult= MEM_callocN(sizeof(UndoLattice), "UndoLattice"); - EditLatt *editlatt= (EditLatt *)edata; + UndoLattice *ult = MEM_callocN(sizeof(UndoLattice), "UndoLattice"); + EditLatt *editlatt = (EditLatt *)edata; - ult->def= MEM_dupallocN(editlatt->latt->def); - ult->pntsu= editlatt->latt->pntsu; - ult->pntsv= editlatt->latt->pntsv; - ult->pntsw= editlatt->latt->pntsw; + ult->def = MEM_dupallocN(editlatt->latt->def); + ult->pntsu = editlatt->latt->pntsu; + ult->pntsv = editlatt->latt->pntsv; + ult->pntsw = editlatt->latt->pntsw; return ult; } static void free_undoLatt(void *data) { - UndoLattice *ult= (UndoLattice*)data; + UndoLattice *ult = (UndoLattice *)data; if (ult->def) MEM_freeN(ult->def); MEM_freeN(ult); @@ -398,20 +398,20 @@ static void free_undoLatt(void *data) static int validate_undoLatt(void *data, void *edata) { - UndoLattice *ult= (UndoLattice*)data; - EditLatt *editlatt= (EditLatt *)edata; + UndoLattice *ult = (UndoLattice *)data; + EditLatt *editlatt = (EditLatt *)edata; return (ult->pntsu == editlatt->latt->pntsu && - ult->pntsv == editlatt->latt->pntsv && - ult->pntsw == editlatt->latt->pntsw); + ult->pntsv == editlatt->latt->pntsv && + ult->pntsw == editlatt->latt->pntsw); } static void *get_editlatt(bContext *C) { - Object *obedit= CTX_data_edit_object(C); + Object *obedit = CTX_data_edit_object(C); - if (obedit && obedit->type==OB_LATTICE) { - Lattice *lt= obedit->data; + if (obedit && obedit->type == OB_LATTICE) { + Lattice *lt = obedit->data; return lt->editlatt; } diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 6eb1ad3a13d..bd69b3adc5e 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -87,16 +87,16 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type) { - ModifierData *md=NULL, *new_md=NULL; + ModifierData *md = NULL, *new_md = NULL; ModifierTypeInfo *mti = modifierType_getInfo(type); /* only geometry objects should be able to get modifiers [#25291] */ if (!ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_LATTICE)) { - BKE_reportf(reports, RPT_WARNING, "Modifiers cannot be added to Object '%s'", ob->id.name+2); + BKE_reportf(reports, RPT_WARNING, "Modifiers cannot be added to Object '%s'", ob->id.name + 2); return NULL; } - if (mti->flags&eModifierTypeFlag_Single) { + if (mti->flags & eModifierTypeFlag_Single) { if (modifiers_findByType(ob, type)) { BKE_report(reports, RPT_WARNING, "Only one modifier of this type allowed"); return NULL; @@ -111,12 +111,12 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *sc } else { /* get new modifier data to add */ - new_md= modifier_new(type); + new_md = modifier_new(type); - if (mti->flags&eModifierTypeFlag_RequiresOriginalData) { + if (mti->flags & eModifierTypeFlag_RequiresOriginalData) { md = ob->modifiers.first; - while (md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform) + while (md && modifierType_getInfo(md->type)->type == eModifierTypeType_OnlyDeform) md = md->next; BLI_insertlinkbefore(&ob->modifiers, md, new_md); @@ -134,15 +134,15 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *sc /* special cases */ if (type == eModifierType_Softbody) { if (!ob->soft) { - ob->soft= sbNew(scene); - ob->softflag |= OB_SB_GOAL|OB_SB_EDGES; + ob->soft = sbNew(scene); + ob->softflag |= OB_SB_GOAL | OB_SB_EDGES; } } else if (type == eModifierType_Collision) { if (!ob->pd) - ob->pd= object_add_collision_fields(0); + ob->pd = object_add_collision_fields(0); - ob->pd->deflect= 1; + ob->pd->deflect = 1; DAG_scene_sort(bmain, scene); } else if (type == eModifierType_Surface) @@ -164,8 +164,8 @@ static int object_modifier_remove(Object *ob, ModifierData *md, int *sort_depsgr /* It seems on rapid delete it is possible to * get called twice on same modifier, so make * sure it is in list. */ - for (obmd=ob->modifiers.first; obmd; obmd=obmd->next) - if (obmd==md) + for (obmd = ob->modifiers.first; obmd; obmd = obmd->next) + if (obmd == md) break; if (!obmd) @@ -173,22 +173,22 @@ static int object_modifier_remove(Object *ob, ModifierData *md, int *sort_depsgr /* special cases */ if (md->type == eModifierType_ParticleSystem) { - ParticleSystemModifierData *psmd=(ParticleSystemModifierData*)md; + ParticleSystemModifierData *psmd = (ParticleSystemModifierData *)md; BLI_remlink(&ob->particlesystem, psmd->psys); psys_free(ob, psmd->psys); - psmd->psys= NULL; + psmd->psys = NULL; } else if (md->type == eModifierType_Softbody) { if (ob->soft) { sbFree(ob->soft); - ob->soft= NULL; - ob->softflag= 0; + ob->soft = NULL; + ob->softflag = 0; } } else if (md->type == eModifierType_Collision) { if (ob->pd) - ob->pd->deflect= 0; + ob->pd->deflect = 0; *sort_depsgraph = 1; } @@ -202,13 +202,13 @@ static int object_modifier_remove(Object *ob, ModifierData *md, int *sort_depsgr ob->dt = OB_TEXTURE; } else if (md->type == eModifierType_Multires) { - int ok= 1; + int ok = 1; ModifierData *tmpmd; /* ensure MDISPS CustomData layer isn't used by another multires modifiers */ - for (tmpmd= ob->modifiers.first; tmpmd; tmpmd= tmpmd->next) - if (tmpmd!=md && tmpmd->type == eModifierType_Multires) { - ok= 0; + for (tmpmd = ob->modifiers.first; tmpmd; tmpmd = tmpmd->next) + if (tmpmd != md && tmpmd->type == eModifierType_Multires) { + ok = 0; break; } @@ -218,7 +218,7 @@ static int object_modifier_remove(Object *ob, ModifierData *md, int *sort_depsgr } if (ELEM(md->type, eModifierType_Softbody, eModifierType_Cloth) && - ob->particlesystem.first == NULL) { + ob->particlesystem.first == NULL) { ob->mode &= ~OB_MODE_PARTICLE_EDIT; } @@ -233,7 +233,7 @@ int ED_object_modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Ob int sort_depsgraph = 0; int ok; - ok= object_modifier_remove(ob, md, &sort_depsgraph); + ok = object_modifier_remove(ob, md, &sort_depsgraph); if (!ok) { BKE_reportf(reports, RPT_ERROR, "Modifier '%s' not in object '%s'", ob->id.name, md->name); @@ -260,11 +260,11 @@ void ED_object_modifier_clear(Main *bmain, Scene *scene, Object *ob) while (md) { ModifierData *next_md; - next_md= md->next; + next_md = md->next; object_modifier_remove(ob, md, &sort_depsgraph); - md= next_md; + md = next_md; } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); @@ -279,10 +279,10 @@ int ED_object_modifier_move_up(ReportList *reports, Object *ob, ModifierData *md if (md->prev) { ModifierTypeInfo *mti = modifierType_getInfo(md->type); - if (mti->type!=eModifierTypeType_OnlyDeform) { + if (mti->type != eModifierTypeType_OnlyDeform) { ModifierTypeInfo *nmti = modifierType_getInfo(md->prev->type); - if (nmti->flags&eModifierTypeFlag_RequiresOriginalData) { + if (nmti->flags & eModifierTypeFlag_RequiresOriginalData) { BKE_report(reports, RPT_WARNING, "Cannot move above a modifier requiring original data"); return 0; } @@ -300,10 +300,10 @@ int ED_object_modifier_move_down(ReportList *reports, Object *ob, ModifierData * if (md->next) { ModifierTypeInfo *mti = modifierType_getInfo(md->type); - if (mti->flags&eModifierTypeFlag_RequiresOriginalData) { + if (mti->flags & eModifierTypeFlag_RequiresOriginalData) { ModifierTypeInfo *nmti = modifierType_getInfo(md->next->type); - if (nmti->type!=eModifierTypeType_OnlyDeform) { + if (nmti->type != eModifierTypeType_OnlyDeform) { BKE_report(reports, RPT_WARNING, "Cannot move beyond a non-deforming modifier"); return 0; } @@ -326,72 +326,72 @@ int ED_object_modifier_convert(ReportList *UNUSED(reports), Main *bmain, Scene * MVert *mvert; MEdge *medge; int a, k, kmax; - int totvert=0, totedge=0, cvert=0; - int totpart=0, totchild=0; + int totvert = 0, totedge = 0, cvert = 0; + int totpart = 0, totchild = 0; if (md->type != eModifierType_ParticleSystem) return 0; if (ob && ob->mode & OB_MODE_PARTICLE_EDIT) return 0; - psys=((ParticleSystemModifierData *)md)->psys; - part= psys->part; + psys = ((ParticleSystemModifierData *)md)->psys; + part = psys->part; if (part->ren_as != PART_DRAW_PATH || psys->pathcache == NULL) return 0; - totpart= psys->totcached; - totchild= psys->totchildcache; + totpart = psys->totcached; + totchild = psys->totchildcache; - if (totchild && (part->draw&PART_DRAW_PARENT)==0) - totpart= 0; + if (totchild && (part->draw & PART_DRAW_PARENT) == 0) + totpart = 0; /* count */ - cache= psys->pathcache; - for (a=0; apathcache; + for (a = 0; a < totpart; a++) { + key = cache[a]; if (key->steps > 0) { - totvert+= key->steps+1; - totedge+= key->steps; + totvert += key->steps + 1; + totedge += key->steps; } } - cache= psys->childcache; - for (a=0; achildcache; + for (a = 0; a < totchild; a++) { + key = cache[a]; if (key->steps > 0) { - totvert+= key->steps+1; - totedge+= key->steps; + totvert += key->steps + 1; + totedge += key->steps; } } - if (totvert==0) return 0; + if (totvert == 0) return 0; /* add new mesh */ - obn= add_object(scene, OB_MESH); - me= obn->data; + obn = add_object(scene, OB_MESH); + me = obn->data; - me->totvert= totvert; - me->totedge= totedge; + me->totvert = totvert; + me->totedge = totedge; - me->mvert= CustomData_add_layer(&me->vdata, CD_MVERT, CD_CALLOC, NULL, totvert); - me->medge= CustomData_add_layer(&me->edata, CD_MEDGE, CD_CALLOC, NULL, totedge); - me->mface= CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC, NULL, 0); + me->mvert = CustomData_add_layer(&me->vdata, CD_MVERT, CD_CALLOC, NULL, totvert); + me->medge = CustomData_add_layer(&me->edata, CD_MEDGE, CD_CALLOC, NULL, totedge); + me->mface = CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC, NULL, 0); - mvert= me->mvert; - medge= me->medge; + mvert = me->mvert; + medge = me->medge; /* copy coordinates */ - cache= psys->pathcache; - for (a=0; asteps; - for (k=0; k<=kmax; k++,key++,cvert++,mvert++) { - copy_v3_v3(mvert->co,key->co); + cache = psys->pathcache; + for (a = 0; a < totpart; a++) { + key = cache[a]; + kmax = key->steps; + for (k = 0; k <= kmax; k++, key++, cvert++, mvert++) { + copy_v3_v3(mvert->co, key->co); if (k) { - medge->v1= cvert-1; - medge->v2= cvert; - medge->flag= ME_EDGEDRAW|ME_EDGERENDER|ME_LOOSEEDGE; + medge->v1 = cvert - 1; + medge->v2 = cvert; + medge->flag = ME_EDGEDRAW | ME_EDGERENDER | ME_LOOSEEDGE; medge++; } else { @@ -401,16 +401,16 @@ int ED_object_modifier_convert(ReportList *UNUSED(reports), Main *bmain, Scene * } } - cache=psys->childcache; - for (a=0; asteps; - for (k=0; k<=kmax; k++,key++,cvert++,mvert++) { - copy_v3_v3(mvert->co,key->co); + cache = psys->childcache; + for (a = 0; a < totchild; a++) { + key = cache[a]; + kmax = key->steps; + for (k = 0; k <= kmax; k++, key++, cvert++, mvert++) { + copy_v3_v3(mvert->co, key->co); if (k) { - medge->v1=cvert-1; - medge->v2=cvert; - medge->flag= ME_EDGEDRAW|ME_EDGERENDER|ME_LOOSEEDGE; + medge->v1 = cvert - 1; + medge->v2 = cvert; + medge->flag = ME_EDGEDRAW | ME_EDGERENDER | ME_LOOSEEDGE; medge++; } else { @@ -427,9 +427,9 @@ int ED_object_modifier_convert(ReportList *UNUSED(reports), Main *bmain, Scene * static int modifier_apply_shape(ReportList *reports, Scene *scene, Object *ob, ModifierData *md) { - ModifierTypeInfo *mti= modifierType_getInfo(md->type); + ModifierTypeInfo *mti = modifierType_getInfo(md->type); - md->scene= scene; + md->scene = scene; if (mti->isDisabled && mti->isDisabled(md, 0)) { BKE_report(reports, RPT_ERROR, "Modifier is disabled, skipping apply"); @@ -447,10 +447,10 @@ static int modifier_apply_shape(ReportList *reports, Scene *scene, Object *ob, M * and then predominantly stated in comments in a half dozen headers. */ - if (ob->type==OB_MESH) { + if (ob->type == OB_MESH) { DerivedMesh *dm; - Mesh *me= ob->data; - Key *key=me->key; + Mesh *me = ob->data; + Key *key = me->key; KeyBlock *kb; if (!modifier_sameTopology(md) || mti->type == eModifierTypeType_NonGeometrical) { @@ -465,15 +465,15 @@ static int modifier_apply_shape(ReportList *reports, Scene *scene, Object *ob, M } if (key == NULL) { - key= me->key= add_key((ID *)me); - key->type= KEY_RELATIVE; + key = me->key = add_key((ID *)me); + key->type = KEY_RELATIVE; /* if that was the first key block added, then it was the basis. * Initialize it with the mesh, and add another for the modifier */ - kb= add_keyblock(key, NULL); + kb = add_keyblock(key, NULL); mesh_to_key(me, kb); } - kb= add_keyblock(key, md->name); + kb = add_keyblock(key, md->name); DM_to_meshkey(dm, me, kb); dm->release(dm); @@ -487,19 +487,19 @@ static int modifier_apply_shape(ReportList *reports, Scene *scene, Object *ob, M static int modifier_apply_obdata(ReportList *reports, Scene *scene, Object *ob, ModifierData *md) { - ModifierTypeInfo *mti= modifierType_getInfo(md->type); + ModifierTypeInfo *mti = modifierType_getInfo(md->type); - md->scene= scene; + md->scene = scene; if (mti->isDisabled && mti->isDisabled(md, 0)) { BKE_report(reports, RPT_ERROR, "Modifier is disabled, skipping apply"); return 0; } - if (ob->type==OB_MESH) { + if (ob->type == OB_MESH) { DerivedMesh *dm; Mesh *me = ob->data; - MultiresModifierData *mmd= find_multires_modifier_before(scene, md); + MultiresModifierData *mmd = find_multires_modifier_before(scene, md); if (me->key && mti->type != eModifierTypeType_NonGeometrical) { BKE_report(reports, RPT_ERROR, "Modifier cannot be applied to Mesh with Shape Keys"); @@ -510,8 +510,8 @@ static int modifier_apply_obdata(ReportList *reports, Scene *scene, Object *ob, if (md->type == eModifierType_Multires) multires_force_update(ob); - if (mmd && mmd->totlvl && mti->type==eModifierTypeType_OnlyDeform) { - if (!multiresModifier_reshapeFromDeformMod (scene, mmd, ob, md)) { + if (mmd && mmd->totlvl && mti->type == eModifierTypeType_OnlyDeform) { + if (!multiresModifier_reshapeFromDeformMod(scene, mmd, ob, md)) { BKE_report(reports, RPT_ERROR, "Multires modifier returned error, skipping apply"); return 0; } @@ -562,7 +562,7 @@ static int modifier_apply_obdata(ReportList *reports, Scene *scene, Object *ob, ParticleSystem *psys = ob->particlesystem.first; - for (; psys; psys=psys->next) { + for (; psys; psys = psys->next) { if (psys->part->type != PART_HAIR) continue; @@ -582,27 +582,27 @@ int ED_object_modifier_apply(ReportList *reports, Scene *scene, Object *ob, Modi BKE_report(reports, RPT_ERROR, "Modifiers cannot be applied in editmode"); return 0; } - else if (((ID*) ob->data)->us>1) { + else if (((ID *) ob->data)->us > 1) { BKE_report(reports, RPT_ERROR, "Modifiers cannot be applied to multi-user data"); return 0; } - if (md!=ob->modifiers.first) + if (md != ob->modifiers.first) BKE_report(reports, RPT_INFO, "Applied modifier was not first, result may not be as expected"); /* allow apply of a not-realtime modifier, by first re-enabling realtime. */ - prev_mode= md->mode; + prev_mode = md->mode; md->mode |= eModifierMode_Realtime; if (mode == MODIFIER_APPLY_SHAPE) { if (!modifier_apply_shape(reports, scene, ob, md)) { - md->mode= prev_mode; + md->mode = prev_mode; return 0; } } else { if (!modifier_apply_obdata(reports, scene, ob, md)) { - md->mode= prev_mode; + md->mode = prev_mode; return 0; } } @@ -629,34 +629,34 @@ int ED_object_modifier_copy(ReportList *UNUSED(reports), Object *ob, ModifierDat static int modifier_add_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); Object *ob = ED_object_active_context(C); - int type= RNA_enum_get(op->ptr, "type"); + int type = RNA_enum_get(op->ptr, "type"); if (!ED_object_modifier_add(op->reports, bmain, scene, ob, NULL, type)) return OPERATOR_CANCELLED; - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } static EnumPropertyItem *modifier_add_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), int *free) { - Object *ob= ED_object_active_context(C); - EnumPropertyItem *item= NULL, *md_item, *group_item= NULL; + Object *ob = ED_object_active_context(C); + EnumPropertyItem *item = NULL, *md_item, *group_item = NULL; ModifierTypeInfo *mti; - int totitem= 0, a; + int totitem = 0, a; if (!ob) return modifier_type_items; - for (a=0; modifier_type_items[a].identifier; a++) { - md_item= &modifier_type_items[a]; + for (a = 0; modifier_type_items[a].identifier; a++) { + md_item = &modifier_type_items[a]; if (md_item->identifier[0]) { - mti= modifierType_getInfo(md_item->value); + mti = modifierType_getInfo(md_item->value); if (mti->flags & eModifierTypeFlag_NoUserAdd) continue; @@ -665,22 +665,22 @@ static EnumPropertyItem *modifier_add_itemf(bContext *C, PointerRNA *UNUSED(ptr) continue; } else { - group_item= md_item; - md_item= NULL; + group_item = md_item; + md_item = NULL; continue; } if (group_item) { RNA_enum_item_add(&item, &totitem, group_item); - group_item= NULL; + group_item = NULL; } RNA_enum_item_add(&item, &totitem, md_item); } RNA_enum_item_end(&item, &totitem); - *free= 1; + *free = 1; return item; } @@ -700,10 +700,10 @@ void OBJECT_OT_modifier_add(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "type", modifier_type_items, eModifierType_Subsurf, "Type", ""); + prop = RNA_def_enum(ot->srna, "type", modifier_type_items, eModifierType_Subsurf, "Type", ""); RNA_def_enum_funcs(prop, modifier_add_itemf); ot->prop = prop; } @@ -712,12 +712,12 @@ void OBJECT_OT_modifier_add(wmOperatorType *ot) static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type, int obtype_flag) { - PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", rna_type); - Object *ob= (ptr.id.data)?ptr.id.data:ED_object_active_context(C); + PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", rna_type); + Object *ob = (ptr.id.data) ? ptr.id.data : ED_object_active_context(C); if (!ob || ob->id.lib) return 0; - if (obtype_flag && ((1<type) & obtype_flag)==0) return 0; - if (ptr.id.data && ((ID*)ptr.id.data)->lib) return 0; + if (obtype_flag && ((1 << ob->type) & obtype_flag) == 0) return 0; + if (ptr.id.data && ((ID *)ptr.id.data)->lib) return 0; return 1; } @@ -734,7 +734,7 @@ static void edit_modifier_properties(wmOperatorType *ot) static int edit_modifier_invoke_properties(bContext *C, wmOperator *op) { - PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier); + PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_Modifier); ModifierData *md; if (RNA_struct_property_is_set(op->ptr, "modifier")) @@ -767,8 +767,8 @@ static ModifierData *edit_modifier_property_get(wmOperator *op, Object *ob, int static int modifier_remove_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); Object *ob = ED_object_active_context(C); ModifierData *md = edit_modifier_property_get(op, ob, 0); int mode_orig = ob ? ob->mode : 0; @@ -776,13 +776,13 @@ static int modifier_remove_exec(bContext *C, wmOperator *op) if (!ob || !md || !ED_object_modifier_remove(op->reports, bmain, scene, ob, md)) return OPERATOR_CANCELLED; - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); /* if cloth/softbody was removed, particle mode could be cleared */ if (mode_orig & OB_MODE_PARTICLE_EDIT) - if ((ob->mode & OB_MODE_PARTICLE_EDIT)==0) - if (scene->basact && scene->basact->object==ob) - WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, NULL); + if ((ob->mode & OB_MODE_PARTICLE_EDIT) == 0) + if (scene->basact && scene->basact->object == ob) + WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, NULL); return OPERATOR_FINISHED; } @@ -806,7 +806,7 @@ void OBJECT_OT_modifier_remove(wmOperatorType *ot) ot->poll = edit_modifier_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -821,7 +821,7 @@ static int modifier_move_up_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -845,7 +845,7 @@ void OBJECT_OT_modifier_move_up(wmOperatorType *ot) ot->poll = edit_modifier_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -860,7 +860,7 @@ static int modifier_move_down_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -884,7 +884,7 @@ void OBJECT_OT_modifier_move_down(wmOperatorType *ot) ot->poll = edit_modifier_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -892,17 +892,17 @@ void OBJECT_OT_modifier_move_down(wmOperatorType *ot) static int modifier_apply_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); Object *ob = ED_object_active_context(C); ModifierData *md = edit_modifier_property_get(op, ob, 0); - int apply_as= RNA_enum_get(op->ptr, "apply_as"); + int apply_as = RNA_enum_get(op->ptr, "apply_as"); if (!ob || !md || !ED_object_modifier_apply(op->reports, scene, ob, md, apply_as)) { return OPERATOR_CANCELLED; } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -931,7 +931,7 @@ void OBJECT_OT_modifier_apply(wmOperatorType *ot) ot->poll = edit_modifier_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_enum(ot->srna, "apply_as", modifier_apply_as_items, MODIFIER_APPLY_DATA, "Apply as", "How to apply the modifier to the geometry"); edit_modifier_properties(ot); @@ -941,8 +941,8 @@ void OBJECT_OT_modifier_apply(wmOperatorType *ot) static int modifier_convert_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); Object *ob = ED_object_active_context(C); ModifierData *md = edit_modifier_property_get(op, ob, 0); @@ -950,7 +950,7 @@ static int modifier_convert_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -974,7 +974,7 @@ void OBJECT_OT_modifier_convert(wmOperatorType *ot) ot->poll = edit_modifier_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -989,7 +989,7 @@ static int modifier_copy_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -1013,7 +1013,7 @@ void OBJECT_OT_modifier_copy(wmOperatorType *ot) ot->poll = edit_modifier_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -1021,7 +1021,7 @@ void OBJECT_OT_modifier_copy(wmOperatorType *ot) static int multires_poll(bContext *C) { - return edit_modifier_poll_generic(C, &RNA_MultiresModifier, (1<exec = multires_higher_levels_delete_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -1075,7 +1075,7 @@ static int multires_subdivide_exec(bContext *C, wmOperator *op) multiresModifier_subdivide(mmd, ob, 0, mmd->simple); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -1099,7 +1099,7 @@ void OBJECT_OT_multires_subdivide(wmOperatorType *ot) ot->exec = multires_subdivide_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -1107,21 +1107,21 @@ void OBJECT_OT_multires_subdivide(wmOperatorType *ot) static int multires_reshape_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_active_context(C), *secondob= NULL; - Scene *scene= CTX_data_scene(C); + Object *ob = ED_object_active_context(C), *secondob = NULL; + Scene *scene = CTX_data_scene(C); MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(op, ob, eModifierType_Multires); if (!mmd) return OPERATOR_CANCELLED; - if (mmd->lvl==0) { + if (mmd->lvl == 0) { BKE_report(op->reports, RPT_ERROR, "Reshape can work only with higher levels of subdivisions"); return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN (C, Object*, selob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, selob, selected_editable_objects) { if (selob->type == OB_MESH && selob != ob) { - secondob= selob; + secondob = selob; break; } } @@ -1138,7 +1138,7 @@ static int multires_reshape_exec(bContext *C, wmOperator *op) } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -1162,7 +1162,7 @@ void OBJECT_OT_multires_reshape(wmOperatorType *ot) ot->exec = multires_reshape_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -1173,9 +1173,9 @@ void OBJECT_OT_multires_reshape(wmOperatorType *ot) static int multires_external_save_exec(bContext *C, wmOperator *op) { Object *ob = ED_object_active_context(C); - Mesh *me= (ob)? ob->data: op->customdata; + Mesh *me = (ob) ? ob->data : op->customdata; char path[FILE_MAX]; - int relative= RNA_boolean_get(op->ptr, "relative_path"); + int relative = RNA_boolean_get(op->ptr, "relative_path"); if (!me) return OPERATOR_CANCELLED; @@ -1198,7 +1198,7 @@ static int multires_external_save_invoke(bContext *C, wmOperator *op, wmEvent *U { Object *ob = ED_object_active_context(C); MultiresModifierData *mmd; - Mesh *me= ob->data; + Mesh *me = ob->data; char path[FILE_MAX]; if (!edit_modifier_invoke_properties(C, op)) @@ -1215,9 +1215,9 @@ static int multires_external_save_invoke(bContext *C, wmOperator *op, wmEvent *U if (RNA_struct_property_is_set(op->ptr, "filepath")) return multires_external_save_exec(C, op); - op->customdata= me; + op->customdata = me; - BLI_snprintf(path, sizeof(path), "//%s.btx", me->id.name+2); + BLI_snprintf(path, sizeof(path), "//%s.btx", me->id.name + 2); RNA_string_set(op->ptr, "filepath", path); WM_event_add_fileselect(C, op); @@ -1237,9 +1237,9 @@ void OBJECT_OT_multires_external_save(wmOperatorType *ot) ot->poll = multires_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - WM_operator_properties_filesel(ot, FOLDERFILE|BTXFILE, FILE_SPECIAL, FILE_SAVE, WM_FILESEL_FILEPATH|WM_FILESEL_RELPATH, FILE_DEFAULTDISPLAY); + WM_operator_properties_filesel(ot, FOLDERFILE | BTXFILE, FILE_SPECIAL, FILE_SAVE, WM_FILESEL_FILEPATH | WM_FILESEL_RELPATH, FILE_DEFAULTDISPLAY); edit_modifier_properties(ot); } @@ -1248,7 +1248,7 @@ void OBJECT_OT_multires_external_save(wmOperatorType *ot) static int multires_external_pack_exec(bContext *C, wmOperator *UNUSED(op)) { Object *ob = ED_object_active_context(C); - Mesh *me= ob->data; + Mesh *me = ob->data; if (!CustomData_external_test(&me->ldata, CD_MDISPS)) return OPERATOR_CANCELLED; @@ -1269,7 +1269,7 @@ void OBJECT_OT_multires_external_pack(wmOperatorType *ot) ot->exec = multires_external_pack_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /********************* multires apply base ***********************/ @@ -1284,7 +1284,7 @@ static int multires_base_apply_exec(bContext *C, wmOperator *op) multiresModifier_base_apply(mmd, ob); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -1309,7 +1309,7 @@ void OBJECT_OT_multires_base_apply(wmOperatorType *ot) ot->exec = multires_base_apply_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -1318,12 +1318,12 @@ void OBJECT_OT_multires_base_apply(wmOperatorType *ot) static int meshdeform_poll(bContext *C) { - return edit_modifier_poll_generic(C, &RNA_MeshDeformModifier, (1<bindinfluences) MEM_freeN(mmd->bindinfluences); if (mmd->bindoffsets) MEM_freeN(mmd->bindoffsets); if (mmd->dynverts) MEM_freeN(mmd->dynverts); - if (mmd->bindweights) MEM_freeN(mmd->bindweights); /* deprecated */ - if (mmd->bindcos) MEM_freeN(mmd->bindcos); /* deprecated */ - - mmd->bindcagecos= NULL; - mmd->dyngrid= NULL; - mmd->dyninfluences= NULL; - mmd->bindinfluences= NULL; - mmd->bindoffsets= NULL; - mmd->dynverts= NULL; - mmd->bindweights= NULL; /* deprecated */ - mmd->bindcos= NULL; /* deprecated */ - mmd->totvert= 0; - mmd->totcagevert= 0; - mmd->totinfluence= 0; + if (mmd->bindweights) MEM_freeN(mmd->bindweights); /* deprecated */ + if (mmd->bindcos) MEM_freeN(mmd->bindcos); /* deprecated */ + + mmd->bindcagecos = NULL; + mmd->dyngrid = NULL; + mmd->dyninfluences = NULL; + mmd->bindinfluences = NULL; + mmd->bindoffsets = NULL; + mmd->dynverts = NULL; + mmd->bindweights = NULL; /* deprecated */ + mmd->bindcos = NULL; /* deprecated */ + mmd->totvert = 0; + mmd->totcagevert = 0; + mmd->totinfluence = 0; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); } else { DerivedMesh *dm; - int mode= mmd->modifier.mode; + int mode = mmd->modifier.mode; /* force modifier to run, it will call binding routine */ - mmd->bindfunc= mesh_deform_bind; + mmd->bindfunc = mesh_deform_bind; mmd->modifier.mode |= eModifierMode_Realtime; if (ob->type == OB_MESH) { - dm= mesh_create_derived_view(scene, ob, 0); + dm = mesh_create_derived_view(scene, ob, 0); dm->release(dm); } else if (ob->type == OB_LATTICE) { lattice_calc_modifiers(scene, ob); } - else if (ob->type==OB_MBALL) { + else if (ob->type == OB_MBALL) { makeDispListMBall(scene, ob); } else if (ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) { makeDispListCurveTypes(scene, ob, 0); } - mmd->bindfunc= NULL; - mmd->modifier.mode= mode; + mmd->bindfunc = NULL; + mmd->modifier.mode = mode; } return OPERATOR_FINISHED; @@ -1405,7 +1405,7 @@ void OBJECT_OT_meshdeform_bind(wmOperatorType *ot) ot->exec = meshdeform_bind_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -1427,7 +1427,7 @@ static int explode_refresh_exec(bContext *C, wmOperator *op) emd->flag |= eExplodeFlag_CalcFaces; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -1452,7 +1452,7 @@ void OBJECT_OT_explode_refresh(wmOperatorType *ot) ot->exec = explode_refresh_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); } @@ -1476,11 +1476,11 @@ static void init_ocean_modifier_bake(struct Ocean *oc, struct OceanModifierData do_normals = (omd->flag & MOD_OCEAN_GENERATE_NORMALS); do_jacobian = (omd->flag & MOD_OCEAN_GENERATE_FOAM); - BKE_init_ocean(oc, omd->resolution*omd->resolution, omd->resolution*omd->resolution, omd->spatial_size, omd->spatial_size, - omd->wind_velocity, omd->smallest_wave, 1.0, omd->wave_direction, omd->damp, omd->wave_alignment, - omd->depth, omd->time, - do_heightfield, do_chop, do_normals, do_jacobian, - omd->seed); + BKE_init_ocean(oc, omd->resolution * omd->resolution, omd->resolution * omd->resolution, omd->spatial_size, omd->spatial_size, + omd->wind_velocity, omd->smallest_wave, 1.0, omd->wave_direction, omd->damp, omd->wave_alignment, + omd->depth, omd->time, + do_heightfield, do_chop, do_normals, do_jacobian, + omd->seed); } typedef struct OceanBakeJob { @@ -1496,7 +1496,7 @@ typedef struct OceanBakeJob { static void oceanbake_free(void *customdata) { - OceanBakeJob *oj= customdata; + OceanBakeJob *oj = customdata; MEM_freeN(oj); } @@ -1515,34 +1515,34 @@ static int oceanbake_breakjob(void *UNUSED(customdata)) /* called by oceanbake, wmJob sends notifier */ static void oceanbake_update(void *customdata, float progress, int *cancel) { - OceanBakeJob *oj= customdata; + OceanBakeJob *oj = customdata; if (oceanbake_breakjob(oj)) *cancel = 1; - *(oj->do_update)= 1; - *(oj->progress)= progress; + *(oj->do_update) = 1; + *(oj->progress) = progress; } static void oceanbake_startjob(void *customdata, short *stop, short *do_update, float *progress) { - OceanBakeJob *oj= customdata; + OceanBakeJob *oj = customdata; - oj->stop= stop; + oj->stop = stop; oj->do_update = do_update; oj->progress = progress; - G.afbreek= 0; /* XXX shared with render - replace with job 'stop' switch */ + G.afbreek = 0; /* XXX shared with render - replace with job 'stop' switch */ BKE_bake_ocean(oj->ocean, oj->och, oceanbake_update, (void *)oj); - *do_update= 1; + *do_update = 1; *stop = 0; } static void oceanbake_endjob(void *customdata) { - OceanBakeJob *oj= customdata; + OceanBakeJob *oj = customdata; if (oj->ocean) { BKE_free_ocean(oj->ocean); @@ -1560,8 +1560,8 @@ static int ocean_bake_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); OceanCache *och; struct Ocean *ocean; - int f, cfra, i=0; - int free= RNA_boolean_get(op->ptr, "free"); + int f, cfra, i = 0; + int free = RNA_boolean_get(op->ptr, "free"); wmJob *steve; OceanBakeJob *oj; @@ -1572,7 +1572,7 @@ static int ocean_bake_exec(bContext *C, wmOperator *op) if (free) { omd->refresh |= MOD_OCEAN_REFRESH_CLEAR_CACHE; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); return OPERATOR_FINISHED; } @@ -1580,12 +1580,12 @@ static int ocean_bake_exec(bContext *C, wmOperator *op) omd->bakestart, omd->bakeend, omd->wave_scale, omd->chop_amount, omd->foam_coverage, omd->foam_fade, omd->resolution); - och->time = MEM_mallocN(och->duration*sizeof(float), "foam bake time"); + och->time = MEM_mallocN(och->duration * sizeof(float), "foam bake time"); cfra = scene->r.cfra; /* precalculate time variable before baking */ - for (f=omd->bakestart; f<=omd->bakeend; f++) { + for (f = omd->bakestart; f <= omd->bakeend; f++) { /* from physics_fluid.c: * * XXX: This can't be used due to an anim sys optimization that ignores recalc object animation, @@ -1614,7 +1614,7 @@ static int ocean_bake_exec(bContext *C, wmOperator *op) init_ocean_modifier_bake(ocean, omd); #if 0 - BKE_bake_ocean(ocean, och); + BKE_bake_ocean(ocean, och); omd->oceancache = och; omd->cached = TRUE; @@ -1622,7 +1622,7 @@ static int ocean_bake_exec(bContext *C, wmOperator *op) scene->r.cfra = cfra; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob); #endif /* job stuff */ @@ -1630,14 +1630,14 @@ static int ocean_bake_exec(bContext *C, wmOperator *op) scene->r.cfra = cfra; /* setup job */ - steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Ocean Simulation", WM_JOB_PROGRESS); - oj= MEM_callocN(sizeof(OceanBakeJob), "ocean bake job"); + steve = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Ocean Simulation", WM_JOB_PROGRESS); + oj = MEM_callocN(sizeof(OceanBakeJob), "ocean bake job"); oj->ocean = ocean; oj->och = och; oj->omd = omd; WM_jobs_customdata(steve, oj, oceanbake_free); - WM_jobs_timer(steve, 0.1, NC_OBJECT|ND_MODIFIER, NC_OBJECT|ND_MODIFIER); + WM_jobs_timer(steve, 0.1, NC_OBJECT | ND_MODIFIER, NC_OBJECT | ND_MODIFIER); WM_jobs_callbacks(steve, oceanbake_startjob, NULL, NULL, oceanbake_endjob); WM_jobs_start(CTX_wm_manager(C), steve); @@ -1667,7 +1667,7 @@ void OBJECT_OT_ocean_bake(wmOperatorType *ot) ot->exec = ocean_bake_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; edit_modifier_properties(ot); RNA_def_boolean(ot->srna, "free", FALSE, "Free", "Free the bake, rather than generating it"); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 138cbad0a68..4cd18d91249 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -222,7 +222,7 @@ void ED_operatormacros_object(void) wmOperatorType *ot; wmOperatorTypeMacro *otmacro; - ot = WM_operatortype_append_macro("OBJECT_OT_duplicate_move", "Duplicate Objects", OPTYPE_UNDO|OPTYPE_REGISTER); + ot = WM_operatortype_append_macro("OBJECT_OT_duplicate_move", "Duplicate Objects", OPTYPE_UNDO | OPTYPE_REGISTER); if (ot) { ot->description = "Duplicate selected objects and move them"; WM_operatortype_macro_define(ot, "OBJECT_OT_duplicate"); @@ -231,7 +231,7 @@ void ED_operatormacros_object(void) } /* grr, should be able to pass options on... */ - ot = WM_operatortype_append_macro("OBJECT_OT_duplicate_move_linked", "Duplicate Linked", OPTYPE_UNDO|OPTYPE_REGISTER); + ot = WM_operatortype_append_macro("OBJECT_OT_duplicate_move_linked", "Duplicate Linked", OPTYPE_UNDO | OPTYPE_REGISTER); if (ot) { ot->description = "Duplicate selected objects and move them"; otmacro = WM_operatortype_macro_define(ot, "OBJECT_OT_duplicate"); @@ -241,10 +241,10 @@ void ED_operatormacros_object(void) } /* XXX */ - ot = WM_operatortype_append_macro("OBJECT_OT_add_named_cursor", "Add named object at cursor", OPTYPE_UNDO|OPTYPE_REGISTER); + ot = WM_operatortype_append_macro("OBJECT_OT_add_named_cursor", "Add named object at cursor", OPTYPE_UNDO | OPTYPE_REGISTER); if (ot) { ot->description = "Add named object at cursor"; - RNA_def_string(ot->srna, "name", "Cube", MAX_ID_NAME-2, "Name", "Object name to add"); + RNA_def_string(ot->srna, "name", "Cube", MAX_ID_NAME - 2, "Name", "Object name to add"); WM_operatortype_macro_define(ot, "VIEW3D_OT_cursor3d"); WM_operatortype_macro_define(ot, "OBJECT_OT_add_named"); @@ -253,7 +253,7 @@ void ED_operatormacros_object(void) static int object_mode_poll(bContext *C) { - Object *ob= CTX_data_active_object(C); + Object *ob = CTX_data_active_object(C); return (!ob || ob->mode == OB_MODE_OBJECT); } @@ -283,7 +283,7 @@ void ED_keymap_object(wmKeyConfig *keyconf) RNA_enum_set(kmi->ptr, "mode", OB_MODE_WEIGHT_PAINT); RNA_boolean_set(kmi->ptr, "toggle", TRUE); - WM_keymap_add_item(keymap, "OBJECT_OT_origin_set", CKEY, KM_PRESS, KM_ALT|KM_SHIFT|KM_CTRL, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_origin_set", CKEY, KM_PRESS, KM_ALT | KM_SHIFT | KM_CTRL, 0); /* Object Mode ---------------------------------------------------------------- */ /* Note: this keymap gets disabled in non-objectmode, */ @@ -302,7 +302,7 @@ void ED_keymap_object(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "OBJECT_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_item(keymap, "OBJECT_OT_select_grouped", GKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "OBJECT_OT_select_mirror", MKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_select_mirror", MKEY, KM_PRESS, KM_CTRL | KM_SHIFT, 0); kmi = WM_keymap_add_item(keymap, "OBJECT_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, 0, 0); RNA_enum_set_identifier(kmi->ptr, "direction", "PARENT"); @@ -321,13 +321,13 @@ void ED_keymap_object(wmKeyConfig *keyconf) RNA_boolean_set(kmi->ptr, "extend", TRUE); WM_keymap_verify_item(keymap, "OBJECT_OT_parent_set", PKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_verify_item(keymap, "OBJECT_OT_parent_no_inverse_set", PKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); + WM_keymap_verify_item(keymap, "OBJECT_OT_parent_no_inverse_set", PKEY, KM_PRESS, KM_CTRL | KM_SHIFT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_parent_clear", PKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_track_set", TKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_track_clear", TKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_verify_item(keymap, "OBJECT_OT_constraint_add_with_targets", CKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); - WM_keymap_verify_item(keymap, "OBJECT_OT_constraints_clear", CKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); + WM_keymap_verify_item(keymap, "OBJECT_OT_constraint_add_with_targets", CKEY, KM_PRESS, KM_CTRL | KM_SHIFT, 0); + WM_keymap_verify_item(keymap, "OBJECT_OT_constraints_clear", CKEY, KM_PRESS, KM_CTRL | KM_ALT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_location_clear", GKEY, KM_PRESS, KM_ALT, 0); WM_keymap_verify_item(keymap, "OBJECT_OT_rotation_clear", RKEY, KM_PRESS, KM_ALT, 0); @@ -342,13 +342,13 @@ void ED_keymap_object(wmKeyConfig *keyconf) RNA_boolean_set(kmi->ptr, "unselected", TRUE); /* same as above but for rendering */ - WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_clear", HKEY, KM_PRESS, KM_ALT|KM_CTRL, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_clear", HKEY, KM_PRESS, KM_ALT | KM_CTRL, 0); WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_set", HKEY, KM_PRESS, KM_CTRL, 0); /* conflicts, removing */ #if 0 - kmi = WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_set", HKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0) - RNA_boolean_set(kmi->ptr, "unselected", TRUE); + kmi = WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_set", HKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0) + RNA_boolean_set(kmi->ptr, "unselected", TRUE); #endif WM_keymap_add_item(keymap, "OBJECT_OT_move_to_layer", MKEY, KM_PRESS, 0, 0); @@ -366,7 +366,7 @@ void ED_keymap_object(wmKeyConfig *keyconf) WM_keymap_add_menu(keymap, "INFO_MT_add", AKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "OBJECT_OT_duplicates_make_real", AKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_duplicates_make_real", AKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0); WM_keymap_add_menu(keymap, "VIEW3D_MT_object_apply", AKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_menu(keymap, "VIEW3D_MT_make_single_user", UKEY, KM_PRESS, 0, 0); @@ -377,23 +377,23 @@ void ED_keymap_object(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "OBJECT_OT_join", JKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "OBJECT_OT_convert", CKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_add_item(keymap, "OBJECT_OT_proxy_make", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); + WM_keymap_add_item(keymap, "OBJECT_OT_proxy_make", PKEY, KM_PRESS, KM_CTRL | KM_ALT, 0); WM_keymap_add_item(keymap, "OBJECT_OT_make_local", LKEY, KM_PRESS, 0, 0); // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith WM_keymap_verify_item(keymap, "ANIM_OT_keyframe_insert_menu", IKEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "ANIM_OT_keyframe_delete_v3d", IKEY, KM_PRESS, KM_ALT, 0); - WM_keymap_verify_item(keymap, "ANIM_OT_keying_set_active_set", IKEY, KM_PRESS, KM_CTRL|KM_SHIFT|KM_ALT, 0); + WM_keymap_verify_item(keymap, "ANIM_OT_keying_set_active_set", IKEY, KM_PRESS, KM_CTRL | KM_SHIFT | KM_ALT, 0); WM_keymap_verify_item(keymap, "GROUP_OT_create", GKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove", GKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); - WM_keymap_verify_item(keymap, "GROUP_OT_objects_add_active", GKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0); - WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove_active", GKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0); + WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove", GKEY, KM_PRESS, KM_CTRL | KM_ALT, 0); + WM_keymap_verify_item(keymap, "GROUP_OT_objects_add_active", GKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0); + WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove_active", GKEY, KM_PRESS, KM_SHIFT | KM_ALT, 0); WM_keymap_add_menu(keymap, "VIEW3D_MT_object_specials", WKEY, KM_PRESS, 0, 0); - for (i=0; i<=5; i++) { - kmi = WM_keymap_add_item(keymap, "OBJECT_OT_subdivision_set", ZEROKEY+i, KM_PRESS, KM_CTRL, 0); + for (i = 0; i <= 5; i++) { + kmi = WM_keymap_add_item(keymap, "OBJECT_OT_subdivision_set", ZEROKEY + i, KM_PRESS, KM_CTRL, 0); RNA_int_set(kmi->ptr, "level", i); } diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 624d6e52926..3a00c69fc47 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -110,9 +110,9 @@ static int vertex_parent_set_poll(bContext *C) static int vertex_parent_set_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Object *obedit= CTX_data_edit_object(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Object *obedit = CTX_data_edit_object(C); BMVert *eve; BMIter iter; Curve *cu; @@ -120,18 +120,18 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) BezTriple *bezt; BPoint *bp; Object *par; - int a, v1=0, v2=0, v3=0, v4=0, nr=1; + int a, v1 = 0, v2 = 0, v3 = 0, v4 = 0, nr = 1; /* we need 1 to 3 selected vertices */ - if (obedit->type==OB_MESH) { - Mesh *me= obedit->data; + if (obedit->type == OB_MESH) { + Mesh *me = obedit->data; BMEditMesh *em; EDBM_mesh_load(obedit); EDBM_mesh_make(scene->toolsettings, scene, obedit); - em= me->edit_btmesh; + em = me->edit_btmesh; /* derivedMesh might be needed for solving parenting, * so re-create it here */ @@ -139,31 +139,31 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { - if (v1==0) v1= nr; - else if (v2==0) v2= nr; - else if (v3==0) v3= nr; - else if (v4==0) v4= nr; + if (v1 == 0) v1 = nr; + else if (v2 == 0) v2 = nr; + else if (v3 == 0) v3 = nr; + else if (v4 == 0) v4 = nr; else break; } nr++; } } else if (ELEM(obedit->type, OB_SURF, OB_CURVE)) { - ListBase *editnurb= object_editcurve_get(obedit); + ListBase *editnurb = object_editcurve_get(obedit); - cu= obedit->data; + cu = obedit->data; - nu= editnurb->first; + nu = editnurb->first; while (nu) { if (nu->type == CU_BEZIER) { - bezt= nu->bezt; - a= nu->pntsu; + bezt = nu->bezt; + a = nu->pntsu; while (a--) { if (BEZSELECTED_HIDDENHANDLES(cu, bezt)) { - if (v1==0) v1= nr; - else if (v2==0) v2= nr; - else if (v3==0) v3= nr; - else if (v4==0) v4= nr; + if (v1 == 0) v1 = nr; + else if (v2 == 0) v2 = nr; + else if (v3 == 0) v3 = nr; + else if (v4 == 0) v4 = nr; else break; } nr++; @@ -171,34 +171,34 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) } } else { - bp= nu->bp; - a= nu->pntsu*nu->pntsv; + bp = nu->bp; + a = nu->pntsu * nu->pntsv; while (a--) { if (bp->f1 & SELECT) { - if (v1==0) v1= nr; - else if (v2==0) v2= nr; - else if (v3==0) v3= nr; - else if (v4==0) v4= nr; + if (v1 == 0) v1 = nr; + else if (v2 == 0) v2 = nr; + else if (v3 == 0) v3 = nr; + else if (v4 == 0) v4 = nr; else break; } nr++; bp++; } } - nu= nu->next; + nu = nu->next; } } - else if (obedit->type==OB_LATTICE) { - Lattice *lt= obedit->data; + else if (obedit->type == OB_LATTICE) { + Lattice *lt = obedit->data; - a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw; - bp= lt->editlatt->latt->def; + a = lt->editlatt->latt->pntsu * lt->editlatt->latt->pntsv * lt->editlatt->latt->pntsw; + bp = lt->editlatt->latt->def; while (a--) { if (bp->f1 & SELECT) { - if (v1==0) v1= nr; - else if (v2==0) v2= nr; - else if (v3==0) v3= nr; - else if (v4==0) v4= nr; + if (v1 == 0) v1 = nr; + else if (v2 == 0) v2 = nr; + else if (v3 == 0) v3 = nr; + else if (v4 == 0) v4 = nr; else break; } nr++; @@ -206,19 +206,19 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) } } - if (v4 || !((v1 && v2==0 && v3==0) || (v1 && v2 && v3)) ) { + if (v4 || !((v1 && v2 == 0 && v3 == 0) || (v1 && v2 && v3)) ) { BKE_report(op->reports, RPT_ERROR, "Select either 1 or 3 vertices to parent to"); return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (ob != obedit) { - ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; - par= obedit->parent; + ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; + par = obedit->parent; while (par) { - if (par==ob) break; - par= par->parent; + if (par == ob) break; + par = par->parent; } if (par) { BKE_report(op->reports, RPT_ERROR, "Loop in parents"); @@ -226,20 +226,20 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op) else { Object workob; - ob->parent= BASACT->object; + ob->parent = BASACT->object; if (v3) { - ob->partype= PARVERT3; - ob->par1= v1-1; - ob->par2= v2-1; - ob->par3= v3-1; + ob->partype = PARVERT3; + ob->par1 = v1 - 1; + ob->par2 = v2 - 1; + ob->par3 = v3 - 1; /* inverse parent matrix */ what_does_parent(scene, ob, &workob); invert_m4_m4(ob->parentinv, workob.obmat); } else { - ob->partype= PARVERT1; - ob->par1= v1-1; + ob->partype = PARVERT1; + ob->par1 = v1 - 1; /* inverse parent matrix */ what_does_parent(scene, ob, &workob); @@ -270,16 +270,16 @@ void OBJECT_OT_vertex_parent_set(wmOperatorType *ot) ot->exec = vertex_parent_set_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /********************** Make Proxy Operator *************************/ /* set the object to proxify */ -static int make_proxy_invoke (bContext *C, wmOperator *op, wmEvent *evt) +static int make_proxy_invoke(bContext *C, wmOperator *op, wmEvent *evt) { - Scene *scene= CTX_data_scene(C); - Object *ob= ED_object_active_context(C); + Scene *scene = CTX_data_scene(C); + Object *ob = ED_object_active_context(C); /* sanity checks */ if (!scene || scene->id.lib || !ob) @@ -294,8 +294,8 @@ static int make_proxy_invoke (bContext *C, wmOperator *op, wmEvent *evt) } else if (ob->id.lib) { - uiPopupMenu *pup= uiPupMenuBegin(C, "OK?", ICON_QUESTION); - uiLayout *layout= uiPupMenuLayout(pup); + uiPopupMenu *pup = uiPupMenuBegin(C, "OK?", ICON_QUESTION); + uiLayout *layout = uiPupMenuLayout(pup); /* create operator menu item with relevant properties filled in */ uiItemFullO_ptr(layout, op->type, op->type->name, ICON_NONE, NULL, WM_OP_EXEC_REGION_WIN, UI_ITEM_O_RETURN_PROPS); @@ -312,41 +312,41 @@ static int make_proxy_invoke (bContext *C, wmOperator *op, wmEvent *evt) return OPERATOR_CANCELLED; } -static int make_proxy_exec (bContext *C, wmOperator *op) +static int make_proxy_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Object *ob, *gob= ED_object_active_context(C); + Main *bmain = CTX_data_main(C); + Object *ob, *gob = ED_object_active_context(C); GroupObject *go; - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); if (gob->dup_group != NULL) { - go= BLI_findlink(&gob->dup_group->gobject, RNA_enum_get(op->ptr, "object")); - ob= go->ob; + go = BLI_findlink(&gob->dup_group->gobject, RNA_enum_get(op->ptr, "object")); + ob = go->ob; } else { - ob= gob; + ob = gob; gob = NULL; } if (ob) { Object *newob; - Base *newbase, *oldbase= BASACT; - char name[MAX_ID_NAME+4]; + Base *newbase, *oldbase = BASACT; + char name[MAX_ID_NAME + 4]; /* Add new object for the proxy */ - newob= add_object(scene, OB_EMPTY); + newob = add_object(scene, OB_EMPTY); - BLI_snprintf(name, sizeof(name), "%s_proxy", ((ID *)(gob ? gob : ob))->name+2); + BLI_snprintf(name, sizeof(name), "%s_proxy", ((ID *)(gob ? gob : ob))->name + 2); rename_id(&newob->id, name); /* set layers OK */ - newbase= BASACT; /* add_object sets active... */ - newbase->lay= oldbase->lay; - newob->lay= newbase->lay; + newbase = BASACT; /* add_object sets active... */ + newbase->lay = oldbase->lay; + newob->lay = newbase->lay; /* remove base, leave user count of object, it gets linked in object_make_proxy */ - if (gob==NULL) { + if (gob == NULL) { BLI_remlink(&scene->base, oldbase); MEM_freeN(oldbase); } @@ -355,8 +355,8 @@ static int make_proxy_exec (bContext *C, wmOperator *op) /* depsgraph flushes are needed for the new data */ DAG_scene_sort(bmain, scene); - DAG_id_tag_update(&newob->id, OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, newob); + DAG_id_tag_update(&newob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, newob); } else { BKE_report(op->reports, RPT_ERROR, "No object to make proxy for"); @@ -369,29 +369,29 @@ static int make_proxy_exec (bContext *C, wmOperator *op) /* Generic itemf's for operators that take library args */ static EnumPropertyItem *proxy_group_object_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), int *free) { - EnumPropertyItem item_tmp= {0}, *item= NULL; - int totitem= 0; - int i= 0; - Object *ob= ED_object_active_context(C); + EnumPropertyItem item_tmp = {0}, *item = NULL; + int totitem = 0; + int i = 0; + Object *ob = ED_object_active_context(C); GroupObject *go; if (!ob || !ob->dup_group) return DummyRNA_DEFAULT_items; /* find the object to affect */ - for (go= ob->dup_group->gobject.first; go; go= go->next) { - item_tmp.identifier= item_tmp.name= go->ob->id.name+2; - item_tmp.value= i++; + for (go = ob->dup_group->gobject.first; go; go = go->next) { + item_tmp.identifier = item_tmp.name = go->ob->id.name + 2; + item_tmp.value = i++; RNA_enum_item_add(&item, &totitem, &item_tmp); } RNA_enum_item_end(&item, &totitem); - *free= 1; + *free = 1; return item; } -void OBJECT_OT_proxy_make (wmOperatorType *ot) +void OBJECT_OT_proxy_make(wmOperatorType *ot) { PropertyRNA *prop; @@ -406,10 +406,10 @@ void OBJECT_OT_proxy_make (wmOperatorType *ot) ot->poll = ED_operator_object_active; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "object", DummyRNA_DEFAULT_items, 0, "Proxy Object", "Name of lib-linked/grouped object to make a proxy for"); /* XXX, relies on hard coded ID at the moment */ + prop = RNA_def_enum(ot->srna, "object", DummyRNA_DEFAULT_items, 0, "Proxy Object", "Name of lib-linked/grouped object to make a proxy for"); /* XXX, relies on hard coded ID at the moment */ RNA_def_enum_funcs(prop, proxy_group_object_itemf); ot->prop = prop; } @@ -425,31 +425,31 @@ EnumPropertyItem prop_clear_parent_types[] = { void ED_object_parent_clear(bContext *C, int type) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (ob->parent == NULL) continue; if (type == 0) { - ob->parent= NULL; + ob->parent = NULL; } else if (type == 1) { - ob->parent= NULL; + ob->parent = NULL; object_apply_mat4(ob, ob->obmat, TRUE, FALSE); } else if (type == 2) unit_m4(ob->parentinv); - ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; } CTX_DATA_END; DAG_scene_sort(bmain, scene); DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); - WM_event_add_notifier(C, NC_OBJECT|ND_PARENT, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL); } /* note, poll should check for editable scene */ @@ -474,7 +474,7 @@ void OBJECT_OT_parent_clear(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ot->prop = RNA_def_enum(ot->srna, "type", prop_clear_parent_types, 0, "Type", ""); } @@ -484,15 +484,15 @@ void OBJECT_OT_parent_clear(wmOperatorType *ot) void ED_object_parent(Object *ob, Object *par, int type, const char *substr) { if (!par || BKE_object_parent_loop_check(par, ob)) { - ob->parent= NULL; - ob->partype= PAROBJECT; - ob->parsubstr[0]= 0; + ob->parent = NULL; + ob->partype = PAROBJECT; + ob->parsubstr[0] = 0; return; } /* this could use some more checks */ - ob->parent= par; + ob->parent = par; ob->partype &= ~PARTYPE; ob->partype |= type; BLI_strncpy(ob->parsubstr, substr, sizeof(ob->parsubstr)); @@ -517,20 +517,20 @@ EnumPropertyItem prop_make_parent_types[] = { int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object *ob, Object *par, int partype) { - bPoseChannel *pchan= NULL; - int pararm= ELEM4(partype, PAR_ARMATURE, PAR_ARMATURE_NAME, PAR_ARMATURE_ENVELOPE, PAR_ARMATURE_AUTO); + bPoseChannel *pchan = NULL; + int pararm = ELEM4(partype, PAR_ARMATURE, PAR_ARMATURE_NAME, PAR_ARMATURE_ENVELOPE, PAR_ARMATURE_AUTO); par->recalc |= OB_RECALC_OB; /* preconditions */ - if (partype==PAR_FOLLOW || partype==PAR_PATH_CONST) { - if (par->type!=OB_CURVE) + if (partype == PAR_FOLLOW || partype == PAR_PATH_CONST) { + if (par->type != OB_CURVE) return 0; else { - Curve *cu= par->data; + Curve *cu = par->data; - if ((cu->flag & CU_PATH)==0) { - cu->flag |= CU_PATH|CU_FOLLOW; + if ((cu->flag & CU_PATH) == 0) { + cu->flag |= CU_PATH | CU_FOLLOW; makeDispListCurveTypes(scene, par, 0); /* force creation of path data */ } else cu->flag |= CU_FOLLOW; @@ -548,19 +548,19 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object /* fall back on regular parenting now (for follow only) */ if (partype == PAR_FOLLOW) - partype= PAR_OBJECT; + partype = PAR_OBJECT; } } - else if (partype==PAR_BONE) { - pchan= get_active_posechannel(par); + else if (partype == PAR_BONE) { + pchan = get_active_posechannel(par); - if (pchan==NULL) { + if (pchan == NULL) { BKE_report(reports, RPT_ERROR, "No active Bone"); return 0; } } - if (ob!=par) { + if (ob != par) { if (BKE_object_parent_loop_check(par, ob)) { BKE_report(reports, RPT_ERROR, "Loop in parents"); return 0; @@ -573,14 +573,14 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object /* set the parent (except for follow-path constraint option) */ if (partype != PAR_PATH_CONST) { - ob->parent= par; + ob->parent = par; } /* handle types */ if (pchan) BLI_strncpy(ob->parsubstr, pchan->name, sizeof(ob->parsubstr)); else - ob->parsubstr[0]= 0; + ob->parsubstr[0] = 0; if (partype == PAR_PATH_CONST) { /* don't do anything here, since this is not technically "parenting" */ @@ -589,7 +589,7 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object /* partype is now set to PAROBJECT so that invisible 'virtual' modifiers don't need to be created * NOTE: the old (2.4x) method was to set ob->partype = PARSKEL, creating the virtual modifiers */ - ob->partype= PAROBJECT; /* note, dna define, not operator property */ + ob->partype = PAROBJECT; /* note, dna define, not operator property */ //ob->partype= PARSKEL; /* note, dna define, not operator property */ /* BUT, to keep the deforms, we need a modifier, and then we need to set the object that it uses */ @@ -598,25 +598,25 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object ModifierData *md; switch (partype) { - case PAR_CURVE: /* curve deform */ - md= ED_object_modifier_add(reports, bmain, scene, ob, NULL, eModifierType_Curve); - ((CurveModifierData *)md)->object= par; - break; - case PAR_LATTICE: /* lattice deform */ - md= ED_object_modifier_add(reports, bmain, scene, ob, NULL, eModifierType_Lattice); - ((LatticeModifierData *)md)->object= par; - break; - default: /* armature deform */ - md= ED_object_modifier_add(reports, bmain, scene, ob, NULL, eModifierType_Armature); - ((ArmatureModifierData *)md)->object= par; - break; + case PAR_CURVE: /* curve deform */ + md = ED_object_modifier_add(reports, bmain, scene, ob, NULL, eModifierType_Curve); + ((CurveModifierData *)md)->object = par; + break; + case PAR_LATTICE: /* lattice deform */ + md = ED_object_modifier_add(reports, bmain, scene, ob, NULL, eModifierType_Lattice); + ((LatticeModifierData *)md)->object = par; + break; + default: /* armature deform */ + md = ED_object_modifier_add(reports, bmain, scene, ob, NULL, eModifierType_Armature); + ((ArmatureModifierData *)md)->object = par; + break; } } } else if (partype == PAR_BONE) - ob->partype= PARBONE; /* note, dna define, not operator property */ + ob->partype = PARBONE; /* note, dna define, not operator property */ else - ob->partype= PAROBJECT; /* note, dna define, not operator property */ + ob->partype = PAROBJECT; /* note, dna define, not operator property */ /* constraint */ if (partype == PAR_PATH_CONST) { @@ -636,7 +636,7 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object ob->loc[1] = vec[1]; ob->loc[2] = vec[2]; } - else if (pararm && ob->type==OB_MESH && par->type == OB_ARMATURE) { + else if (pararm && ob->type == OB_MESH && par->type == OB_ARMATURE) { if (partype == PAR_ARMATURE_NAME) create_vgroups_from_armature(reports, scene, ob, par, ARM_GROUPS_NAME, 0); else if (partype == PAR_ARMATURE_ENVELOPE) @@ -647,7 +647,7 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object WM_cursor_wait(0); } /* get corrected inverse */ - ob->partype= PAROBJECT; + ob->partype = PAROBJECT; what_does_parent(scene, ob, &workob); invert_m4_m4(ob->parentinv, workob.obmat); @@ -658,7 +658,7 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object invert_m4_m4(ob->parentinv, workob.obmat); } - ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA; + ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA; } } @@ -667,13 +667,13 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object static int parent_set_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Object *par= ED_object_active_context(C); - int partype= RNA_enum_get(op->ptr, "type"); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Object *par = ED_object_active_context(C); + int partype = RNA_enum_get(op->ptr, "type"); int ok = 1; - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (!ED_object_parent_set(op->reports, bmain, scene, ob, par, partype)) { ok = 0; break; @@ -686,8 +686,8 @@ static int parent_set_exec(bContext *C, wmOperator *op) DAG_scene_sort(bmain, scene); DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); - WM_event_add_notifier(C, NC_OBJECT|ND_PARENT, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL); return OPERATOR_FINISHED; } @@ -695,22 +695,22 @@ static int parent_set_exec(bContext *C, wmOperator *op) static int parent_set_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *UNUSED(event)) { - Object *ob= ED_object_active_context(C); - uiPopupMenu *pup= uiPupMenuBegin(C, "Set Parent To", ICON_NONE); - uiLayout *layout= uiPupMenuLayout(pup); + Object *ob = ED_object_active_context(C); + uiPopupMenu *pup = uiPupMenuBegin(C, "Set Parent To", ICON_NONE); + uiLayout *layout = uiPupMenuLayout(pup); uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT); uiItemEnumO(layout, "OBJECT_OT_parent_set", NULL, 0, "type", PAR_OBJECT); /* ob becomes parent, make the associated menus */ - if (ob->type==OB_ARMATURE) { + if (ob->type == OB_ARMATURE) { uiItemEnumO(layout, "OBJECT_OT_parent_set", NULL, 0, "type", PAR_ARMATURE); uiItemEnumO(layout, "OBJECT_OT_parent_set", NULL, 0, "type", PAR_ARMATURE_NAME); uiItemEnumO(layout, "OBJECT_OT_parent_set", NULL, 0, "type", PAR_ARMATURE_ENVELOPE); uiItemEnumO(layout, "OBJECT_OT_parent_set", NULL, 0, "type", PAR_ARMATURE_AUTO); uiItemEnumO(layout, "OBJECT_OT_parent_set", NULL, 0, "type", PAR_BONE); } - else if (ob->type==OB_CURVE) { + else if (ob->type == OB_CURVE) { uiItemEnumO(layout, "OBJECT_OT_parent_set", NULL, 0, "type", PAR_CURVE); uiItemEnumO(layout, "OBJECT_OT_parent_set", NULL, 0, "type", PAR_FOLLOW); uiItemEnumO(layout, "OBJECT_OT_parent_set", NULL, 0, "type", PAR_PATH_CONST); @@ -739,7 +739,7 @@ void OBJECT_OT_parent_set(wmOperatorType *ot) ot->poll = ED_operator_object_active; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_enum(ot->srna, "type", prop_make_parent_types, 0, "Type", ""); } @@ -748,13 +748,13 @@ void OBJECT_OT_parent_set(wmOperatorType *ot) static int parent_noinv_set_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Object *par= ED_object_active_context(C); + Main *bmain = CTX_data_main(C); + Object *par = ED_object_active_context(C); par->recalc |= OB_RECALC_OB; /* context iterator */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (ob != par) { if (BKE_object_parent_loop_check(par, ob)) { BKE_report(op->reports, RPT_ERROR, "Loop in parents"); @@ -762,14 +762,14 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op) else { /* clear inverse matrix and also the object location */ unit_m4(ob->parentinv); - memset(ob->loc, 0, 3*sizeof(float)); + memset(ob->loc, 0, 3 * sizeof(float)); /* set recalc flags */ - ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA; + ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA; /* set parenting type for object - object only... */ - ob->parent= par; - ob->partype= PAROBJECT; /* note, dna define, not operator property */ + ob->parent = par; + ob->partype = PAROBJECT; /* note, dna define, not operator property */ } } } @@ -777,7 +777,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op) DAG_scene_sort(bmain, CTX_data_scene(C)); DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); return OPERATOR_FINISHED; } @@ -795,17 +795,17 @@ void OBJECT_OT_parent_no_inverse_set(wmOperatorType *ot) ot->poll = ED_operator_object_active_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /************************ Clear Slow Parent Operator *********************/ static int object_slow_parent_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (ob->parent) { if (ob->partype & PARSLOW) { ob->partype -= PARSLOW; @@ -837,17 +837,17 @@ void OBJECT_OT_slow_parent_clear(wmOperatorType *ot) ot->poll = ED_operator_view3d_active; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /********************** Make Slow Parent Operator *********************/ static int object_slow_parent_set_exec(bContext *C, wmOperator *UNUSED(op)) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (ob->parent) ob->partype |= PARSLOW; @@ -876,7 +876,7 @@ void OBJECT_OT_slow_parent_set(wmOperatorType *ot) ot->poll = ED_operator_view3d_active; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /* ******************** Clear Track Operator ******************* */ @@ -890,24 +890,24 @@ static EnumPropertyItem prop_clear_track_types[] = { /* note, poll should check for editable scene */ static int object_track_clear_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - int type= RNA_enum_get(op->ptr, "type"); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + int type = RNA_enum_get(op->ptr, "type"); if (CTX_data_edit_object(C)) { BKE_report(op->reports, RPT_ERROR, "Operation cannot be performed in EditMode"); return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { bConstraint *con, *pcon; /* remove track-object for old track */ - ob->track= NULL; - ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + ob->track = NULL; + ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; /* also remove all tracking constraints */ - for (con= ob->constraints.last; con; con= pcon) { - pcon= con->prev; + for (con = ob->constraints.last; con; con = pcon) { + pcon = con->prev; if (ELEM3(con->type, CONSTRAINT_TYPE_TRACKTO, CONSTRAINT_TYPE_LOCKTRACK, CONSTRAINT_TYPE_DAMPTRACK)) remove_constraint(&ob->constraints, con); } @@ -919,7 +919,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op) DAG_ids_flush_update(bmain, 0); DAG_scene_sort(bmain, scene); - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); return OPERATOR_FINISHED; } @@ -938,7 +938,7 @@ void OBJECT_OT_track_clear(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ot->prop = RNA_def_enum(ot->srna, "type", prop_clear_track_types, 0, "Type", ""); } @@ -954,23 +954,23 @@ static EnumPropertyItem prop_make_track_types[] = { static int track_set_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Object *obact= ED_object_active_context(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Object *obact = ED_object_active_context(C); - int type= RNA_enum_get(op->ptr, "type"); + int type = RNA_enum_get(op->ptr, "type"); if (type == 1) { bConstraint *con; bDampTrackConstraint *data; - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { - if (ob!=obact) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + if (ob != obact) { con = add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_DAMPTRACK); data = con->data; data->tar = obact; - ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; /* Lamp, Camera and Speaker track differently by default */ if (ob->type == OB_LAMP || ob->type == OB_CAMERA || ob->type == OB_SPEAKER) @@ -983,13 +983,13 @@ static int track_set_exec(bContext *C, wmOperator *op) bConstraint *con; bTrackToConstraint *data; - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { - if (ob!=obact) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + if (ob != obact) { con = add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_TRACKTO); data = con->data; data->tar = obact; - ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; /* Lamp, Camera and Speaker track differently by default */ if (ob->type == OB_LAMP || ob->type == OB_CAMERA || ob->type == OB_SPEAKER) { @@ -1004,13 +1004,13 @@ static int track_set_exec(bContext *C, wmOperator *op) bConstraint *con; bLockTrackConstraint *data; - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { - if (ob!=obact) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + if (ob != obact) { con = add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_LOCKTRACK); data = con->data; data->tar = obact; - ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; + ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; /* Lamp, Camera and Speaker track differently by default */ if (ob->type == OB_LAMP || ob->type == OB_CAMERA || ob->type == OB_SPEAKER) { @@ -1024,7 +1024,7 @@ static int track_set_exec(bContext *C, wmOperator *op) DAG_scene_sort(bmain, scene); DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); return OPERATOR_FINISHED; } @@ -1043,7 +1043,7 @@ void OBJECT_OT_track_set(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ ot->prop = RNA_def_enum(ot->srna, "type", prop_make_track_types, 0, "Type", ""); @@ -1054,24 +1054,24 @@ void OBJECT_OT_track_set(wmOperatorType *ot) static unsigned int move_to_layer_init(bContext *C, wmOperator *op) { int values[20], a; - unsigned int lay= 0; + unsigned int lay = 0; if (!RNA_struct_property_is_set(op->ptr, "layers")) { /* note: layers are set in bases, library objects work for this */ - CTX_DATA_BEGIN (C, Base*, base, selected_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_bases) { lay |= base->lay; } CTX_DATA_END; - for (a=0; a<20; a++) - values[a]= (lay & (1<ptr, "layers", values); } else { RNA_boolean_get_array(op->ptr, "layers", values); - for (a=0; a<20; a++) + for (a = 0; a < 20; a++) if (values[a]) lay |= (1 << a); } @@ -1081,7 +1081,7 @@ static unsigned int move_to_layer_init(bContext *C, wmOperator *op) static int move_to_layer_invoke(bContext *C, wmOperator *op, wmEvent *event) { - View3D *v3d= CTX_wm_view3d(C); + View3D *v3d = CTX_wm_view3d(C); if (v3d && v3d->localvd) { return WM_operator_confirm_message(C, op, "Move from localview"); } @@ -1093,24 +1093,24 @@ static int move_to_layer_invoke(bContext *C, wmOperator *op, wmEvent *event) static int move_to_layer_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - View3D *v3d= CTX_wm_view3d(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + View3D *v3d = CTX_wm_view3d(C); unsigned int lay, local; /* int islamp= 0; */ /* UNUSED */ - lay= move_to_layer_init(C, op); + lay = move_to_layer_init(C, op); lay &= 0xFFFFFF; - if (lay==0) return OPERATOR_CANCELLED; + if (lay == 0) return OPERATOR_CANCELLED; if (v3d && v3d->localvd) { /* now we can move out of localview. */ /* note: layers are set in bases, library objects work for this */ - CTX_DATA_BEGIN (C, Base*, base, selected_bases) { - lay= base->lay & ~v3d->lay; - base->lay= lay; - base->object->lay= lay; + CTX_DATA_BEGIN (C, Base *, base, selected_bases) { + lay = base->lay & ~v3d->lay; + base->lay = lay; + base->object->lay = lay; base->object->flag &= ~SELECT; base->flag &= ~SELECT; /* if (base->object->type==OB_LAMP) islamp= 1; */ @@ -1120,11 +1120,11 @@ static int move_to_layer_exec(bContext *C, wmOperator *op) else { /* normal non localview operation */ /* note: layers are set in bases, library objects work for this */ - CTX_DATA_BEGIN (C, Base*, base, selected_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_bases) { /* upper byte is used for local view */ - local= base->lay & 0xFF000000; - base->lay= lay + local; - base->object->lay= lay; + local = base->lay & 0xFF000000; + base->lay = lay + local; + base->object->lay = lay; /* if (base->object->type==OB_LAMP) islamp= 1; */ } CTX_DATA_END; @@ -1132,8 +1132,8 @@ static int move_to_layer_exec(bContext *C, wmOperator *op) /* warning, active object may be hidden now */ - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, scene); - WM_event_add_notifier(C, NC_SCENE|ND_LAYER_CONTENT, scene); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, scene); + WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene); DAG_scene_sort(bmain, scene); @@ -1153,7 +1153,7 @@ void OBJECT_OT_move_to_layer(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ RNA_def_boolean_layer_member(ot->srna, "layers", 20, NULL, "Layer", ""); @@ -1164,18 +1164,18 @@ void OBJECT_OT_move_to_layer(wmOperatorType *ot) #if 0 static void link_to_scene(Main *UNUSED(bmain), unsigned short UNUSED(nr)) { - Scene *sce= (Scene*) BLI_findlink(&bmain->scene, G.curscreen->scenenr-1); + Scene *sce = (Scene *) BLI_findlink(&bmain->scene, G.curscreen->scenenr - 1); Base *base, *nbase; - if (sce==0) return; + if (sce == 0) return; if (sce->id.lib) return; - for (base= FIRSTBASE; base; base= base->next) { + for (base = FIRSTBASE; base; base = base->next) { if (TESTBASE(v3d, base)) { - nbase= MEM_mallocN( sizeof(Base), "newbase"); - *nbase= *base; - BLI_addhead( &(sce->base), nbase); + nbase = MEM_mallocN(sizeof(Base), "newbase"); + *nbase = *base; + BLI_addhead(&(sce->base), nbase); id_us_plus((ID *)base->object); } } @@ -1184,10 +1184,10 @@ static void link_to_scene(Main *UNUSED(bmain), unsigned short UNUSED(nr)) static int make_links_scene_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene_to= BLI_findlink(&CTX_data_main(C)->scene, RNA_enum_get(op->ptr, "scene")); + Main *bmain = CTX_data_main(C); + Scene *scene_to = BLI_findlink(&CTX_data_main(C)->scene, RNA_enum_get(op->ptr, "scene")); - if (scene_to==NULL) { + if (scene_to == NULL) { BKE_report(op->reports, RPT_ERROR, "Scene not found"); return OPERATOR_CANCELLED; } @@ -1202,11 +1202,11 @@ static int make_links_scene_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - CTX_DATA_BEGIN (C, Base*, base, selected_bases) { + CTX_DATA_BEGIN (C, Base *, base, selected_bases) { if (!object_in_scene(base->object, scene_to)) { - Base *nbase= MEM_mallocN( sizeof(Base), "newbase"); - *nbase= *base; - BLI_addhead( &(scene_to->base), nbase); + Base *nbase = MEM_mallocN(sizeof(Base), "newbase"); + *nbase = *base; + BLI_addhead(&(scene_to->base), nbase); id_us_plus((ID *)base->object); } } @@ -1236,7 +1236,7 @@ static int allow_make_links_data(int ev, Object *ob, Object *obt) break; case MAKE_LINKS_MATERIALS: if (OB_TYPE_SUPPORT_MATERIAL(ob->type) && - OB_TYPE_SUPPORT_MATERIAL(obt->type)) + OB_TYPE_SUPPORT_MATERIAL(obt->type)) { return 1; } @@ -1254,53 +1254,53 @@ static int allow_make_links_data(int ev, Object *ob, Object *obt) static int make_links_data_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); + Main *bmain = CTX_data_main(C); int event = RNA_enum_get(op->ptr, "type"); Object *ob; ID *id; int a; - ob= ED_object_active_context(C); + ob = ED_object_active_context(C); - CTX_DATA_BEGIN (C, Object*, obt, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, obt, selected_editable_objects) { if (ob != obt) { if (allow_make_links_data(event, ob, obt)) { switch (event) { - case MAKE_LINKS_OBDATA: /* obdata */ - id= obt->data; - id->us--; - - id= ob->data; - id_us_plus(id); - obt->data= id; - - /* if amount of material indices changed: */ - test_object_materials(obt->data); - - obt->recalc |= OB_RECALC_DATA; - break; - case MAKE_LINKS_MATERIALS: - /* new approach, using functions from kernel */ - for (a=0; atotcol; a++) { - Material *ma= give_current_material(ob, a+1); - assign_material(obt, ma, a+1); /* also works with ma==NULL */ - } - break; - case MAKE_LINKS_ANIMDATA: - BKE_copy_animdata_id((ID *)obt, (ID *)ob, FALSE); - BKE_copy_animdata_id((ID *)obt->data, (ID *)ob->data, FALSE); - break; - case MAKE_LINKS_DUPLIGROUP: - obt->dup_group= ob->dup_group; - if (obt->dup_group) { - id_lib_extern(&obt->dup_group->id); - obt->transflag |= OB_DUPLIGROUP; - } - break; - case MAKE_LINKS_MODIFIERS: - object_link_modifiers(obt, ob); - obt->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; - break; + case MAKE_LINKS_OBDATA: /* obdata */ + id = obt->data; + id->us--; + + id = ob->data; + id_us_plus(id); + obt->data = id; + + /* if amount of material indices changed: */ + test_object_materials(obt->data); + + obt->recalc |= OB_RECALC_DATA; + break; + case MAKE_LINKS_MATERIALS: + /* new approach, using functions from kernel */ + for (a = 0; a < ob->totcol; a++) { + Material *ma = give_current_material(ob, a + 1); + assign_material(obt, ma, a + 1); /* also works with ma==NULL */ + } + break; + case MAKE_LINKS_ANIMDATA: + BKE_copy_animdata_id((ID *)obt, (ID *)ob, FALSE); + BKE_copy_animdata_id((ID *)obt->data, (ID *)ob->data, FALSE); + break; + case MAKE_LINKS_DUPLIGROUP: + obt->dup_group = ob->dup_group; + if (obt->dup_group) { + id_lib_extern(&obt->dup_group->id); + obt->transflag |= OB_DUPLIGROUP; + } + break; + case MAKE_LINKS_MODIFIERS: + object_link_modifiers(obt, ob); + obt->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; + break; } } } @@ -1310,7 +1310,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op) DAG_scene_sort(bmain, CTX_data_scene(C)); DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, CTX_wm_view3d(C)); + WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C)); return OPERATOR_FINISHED; } @@ -1330,22 +1330,22 @@ void OBJECT_OT_make_links_scene(wmOperatorType *ot) /* better not run the poll check */ /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "scene", DummyRNA_NULL_items, 0, "Scene", ""); + prop = RNA_def_enum(ot->srna, "scene", DummyRNA_NULL_items, 0, "Scene", ""); RNA_def_enum_funcs(prop, RNA_scene_local_itemf); ot->prop = prop; } void OBJECT_OT_make_links_data(wmOperatorType *ot) { - static EnumPropertyItem make_links_items[]= { - {MAKE_LINKS_OBDATA, "OBDATA", 0, "Object Data", ""}, - {MAKE_LINKS_MATERIALS, "MATERIAL", 0, "Materials", ""}, - {MAKE_LINKS_ANIMDATA, "ANIMATION", 0, "Animation Data", ""}, - {MAKE_LINKS_DUPLIGROUP, "DUPLIGROUP", 0, "DupliGroup", ""}, - {MAKE_LINKS_MODIFIERS, "MODIFIERS", 0, "Modifiers", ""}, + static EnumPropertyItem make_links_items[] = { + {MAKE_LINKS_OBDATA, "OBDATA", 0, "Object Data", ""}, + {MAKE_LINKS_MATERIALS, "MATERIAL", 0, "Materials", ""}, + {MAKE_LINKS_ANIMDATA, "ANIMATION", 0, "Animation Data", ""}, + {MAKE_LINKS_DUPLIGROUP, "DUPLIGROUP", 0, "DupliGroup", ""}, + {MAKE_LINKS_MODIFIERS, "MODIFIERS", 0, "Modifiers", ""}, {0, NULL, 0, NULL, NULL}}; /* identifiers */ @@ -1358,7 +1358,7 @@ void OBJECT_OT_make_links_data(wmOperatorType *ot) ot->poll = ED_operator_object_active; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ ot->prop = RNA_def_enum(ot->srna, "type", make_links_items, 0, "Type", ""); @@ -1372,22 +1372,22 @@ static void single_object_users(Scene *scene, View3D *v3d, int flag) Base *base; Object *ob, *obn; - clear_sca_new_poins(); /* sensor/contr/act */ + clear_sca_new_poins(); /* sensor/contr/act */ /* duplicate (must set newid) */ - for (base= FIRSTBASE; base; base= base->next) { - ob= base->object; + for (base = FIRSTBASE; base; base = base->next) { + ob = base->object; /* newid may still have some trash from Outliner tree building, * so clear that first to avoid errors [#26002] */ ob->id.newid = NULL; - if ( (base->flag & flag)==flag ) { - if (ob->id.lib==NULL && ob->id.us>1) { + if ( (base->flag & flag) == flag) { + if (ob->id.lib == NULL && ob->id.us > 1) { /* base gets copy of object */ - obn= copy_object(ob); - base->object= obn; + obn = copy_object(ob); + base->object = obn; ob->id.us--; } } @@ -1397,7 +1397,7 @@ static void single_object_users(Scene *scene, View3D *v3d, int flag) if (v3d) ID_NEW(v3d->camera); /* object pointers */ - for (base= FIRSTBASE; base; base= base->next) { + for (base = FIRSTBASE; base; base = base->next) { object_relink(base->object); } @@ -1410,9 +1410,9 @@ void ED_object_single_user(Scene *scene, Object *ob) { Base *base; - for (base= FIRSTBASE; base; base= base->next) { - if (base->object == ob) base->flag |= OB_DONE; - else base->flag &= ~OB_DONE; + for (base = FIRSTBASE; base; base = base->next) { + if (base->object == ob) base->flag |= OB_DONE; + else base->flag &= ~OB_DONE; } single_object_users(scene, NULL, OB_DONE); @@ -1423,18 +1423,18 @@ static void new_id_matar(Material **matar, int totcol) ID *id; int a; - for (a=0; alib == NULL) { if (id->newid) { - matar[a]= (Material *)id->newid; + matar[a] = (Material *)id->newid; id_us_plus(id->newid); id->us--; } - else if (id->us>1) { - matar[a]= copy_material(matar[a]); + else if (id->us > 1) { + matar[a] = copy_material(matar[a]); id->us--; - id->newid= (ID *)matar[a]; + id->newid = (ID *)matar[a]; } } } @@ -1451,73 +1451,73 @@ static void single_obdata_users(Main *bmain, Scene *scene, int flag) ID *id; int a; - for (base= FIRSTBASE; base; base= base->next) { - ob= base->object; - if (ob->id.lib==NULL && (base->flag & flag)==flag ) { - id= ob->data; + for (base = FIRSTBASE; base; base = base->next) { + ob = base->object; + if (ob->id.lib == NULL && (base->flag & flag) == flag) { + id = ob->data; - if (id && id->us>1 && id->lib==NULL) { - ob->recalc= OB_RECALC_DATA; + if (id && id->us > 1 && id->lib == NULL) { + ob->recalc = OB_RECALC_DATA; BKE_copy_animdata_id_action(id); switch (ob->type) { - case OB_LAMP: - ob->data= la= copy_lamp(ob->data); - for (a=0; amtex[a]) { - ID_NEW(la->mtex[a]->object); + case OB_LAMP: + ob->data = la = copy_lamp(ob->data); + for (a = 0; a < MAX_MTEX; a++) { + if (la->mtex[a]) { + ID_NEW(la->mtex[a]->object); + } } - } - break; - case OB_CAMERA: - ob->data= copy_camera(ob->data); - break; - case OB_MESH: - ob->data= copy_mesh(ob->data); - //me= ob->data; - //if (me && me->key) - // ipo_idnew(me->key->ipo); /* drivers */ - break; - case OB_MBALL: - ob->data= copy_mball(ob->data); - break; - case OB_CURVE: - case OB_SURF: - case OB_FONT: - ob->data= cu= copy_curve(ob->data); - ID_NEW(cu->bevobj); - ID_NEW(cu->taperobj); - break; - case OB_LATTICE: - ob->data= copy_lattice(ob->data); - break; - case OB_ARMATURE: - ob->recalc |= OB_RECALC_DATA; - ob->data= copy_armature(ob->data); - armature_rebuild_pose(ob, ob->data); - break; - case OB_SPEAKER: - ob->data= copy_speaker(ob->data); - break; - default: - if (G.debug & G_DEBUG) - printf("ERROR %s: can't copy %s\n", __func__, id->name); - return; + break; + case OB_CAMERA: + ob->data = copy_camera(ob->data); + break; + case OB_MESH: + ob->data = copy_mesh(ob->data); + //me= ob->data; + //if (me && me->key) + // ipo_idnew(me->key->ipo); /* drivers */ + break; + case OB_MBALL: + ob->data = copy_mball(ob->data); + break; + case OB_CURVE: + case OB_SURF: + case OB_FONT: + ob->data = cu = copy_curve(ob->data); + ID_NEW(cu->bevobj); + ID_NEW(cu->taperobj); + break; + case OB_LATTICE: + ob->data = copy_lattice(ob->data); + break; + case OB_ARMATURE: + ob->recalc |= OB_RECALC_DATA; + ob->data = copy_armature(ob->data); + armature_rebuild_pose(ob, ob->data); + break; + case OB_SPEAKER: + ob->data = copy_speaker(ob->data); + break; + default: + if (G.debug & G_DEBUG) + printf("ERROR %s: can't copy %s\n", __func__, id->name); + return; } id->us--; - id->newid= ob->data; + id->newid = ob->data; } } } - me= bmain->mesh.first; + me = bmain->mesh.first; while (me) { ID_NEW(me->texcomesh); - me= me->id.next; + me = me->id.next; } } @@ -1526,10 +1526,10 @@ static void single_object_action_users(Scene *scene, int flag) Object *ob; Base *base; - for (base= FIRSTBASE; base; base= base->next) { - ob= base->object; - if (ob->id.lib==NULL && (flag==0 || (base->flag & SELECT)) ) { - ob->recalc= OB_RECALC_DATA; + for (base = FIRSTBASE; base; base = base->next) { + ob = base->object; + if (ob->id.lib == NULL && (flag == 0 || (base->flag & SELECT)) ) { + ob->recalc = OB_RECALC_DATA; BKE_copy_animdata_id_action(&ob->id); } } @@ -1543,30 +1543,30 @@ static void single_mat_users(Scene *scene, int flag, int do_textures) Tex *tex; int a, b; - for (base= FIRSTBASE; base; base= base->next) { - ob= base->object; - if (ob->id.lib==NULL && (flag==0 || (base->flag & SELECT)) ) { + for (base = FIRSTBASE; base; base = base->next) { + ob = base->object; + if (ob->id.lib == NULL && (flag == 0 || (base->flag & SELECT)) ) { - for (a=1; a<=ob->totcol; a++) { - ma= give_current_material(ob, a); + for (a = 1; a <= ob->totcol; a++) { + ma = give_current_material(ob, a); if (ma) { /* do not test for LIB_NEW: this functions guaranteed delivers single_users! */ - if (ma->id.us>1) { - man= copy_material(ma); + if (ma->id.us > 1) { + man = copy_material(ma); BKE_copy_animdata_id_action(&man->id); - man->id.us= 0; + man->id.us = 0; assign_material(ob, man, a); if (do_textures) { - for (b=0; bmtex[b] && (tex= ma->mtex[b]->tex)) { - if (tex->id.us>1) { + for (b = 0; b < MAX_MTEX; b++) { + if (ma->mtex[b] && (tex = ma->mtex[b]->tex)) { + if (tex->id.us > 1) { tex->id.us--; - tex= copy_texture(tex); + tex = copy_texture(tex); BKE_copy_animdata_id_action(&tex->id); - man->mtex[b]->tex= tex; + man->mtex[b]->tex = tex; } } } @@ -1582,20 +1582,20 @@ static void do_single_tex_user(Tex **from) { Tex *tex, *texn; - tex= *from; - if (tex==NULL) return; + tex = *from; + if (tex == NULL) return; if (tex->id.newid) { - *from= (Tex *)tex->id.newid; + *from = (Tex *)tex->id.newid; id_us_plus(tex->id.newid); tex->id.us--; } - else if (tex->id.us>1) { - texn= copy_texture(tex); + else if (tex->id.us > 1) { + texn = copy_texture(tex); BKE_copy_animdata_id_action(&texn->id); - tex->id.newid= (ID *)texn; + tex->id.newid = (ID *)texn; tex->id.us--; - *from= texn; + *from = texn; } } @@ -1607,31 +1607,31 @@ static void single_tex_users_expand(Main *bmain) World *wo; int b; - for (ma= bmain->mat.first; ma; ma=ma->id.next) { + for (ma = bmain->mat.first; ma; ma = ma->id.next) { if (ma->id.flag & LIB_NEW) { - for (b=0; bmtex[b] && ma->mtex[b]->tex) { - do_single_tex_user( &(ma->mtex[b]->tex) ); + do_single_tex_user(&(ma->mtex[b]->tex) ); } } } } - for (la= bmain->lamp.first; la; la=la->id.next) { + for (la = bmain->lamp.first; la; la = la->id.next) { if (la->id.flag & LIB_NEW) { - for (b=0; bmtex[b] && la->mtex[b]->tex) { - do_single_tex_user( &(la->mtex[b]->tex) ); + do_single_tex_user(&(la->mtex[b]->tex) ); } } } } - for (wo= bmain->world.first; wo; wo=wo->id.next) { + for (wo = bmain->world.first; wo; wo = wo->id.next) { if (wo->id.flag & LIB_NEW) { - for (b=0; bmtex[b] && wo->mtex[b]->tex) { - do_single_tex_user( &(wo->mtex[b]->tex) ); + do_single_tex_user(&(wo->mtex[b]->tex) ); } } } @@ -1648,26 +1648,26 @@ static void single_mat_users_expand(Main *bmain) Material *ma; int a; - for (ob=bmain->object.first; ob; ob=ob->id.next) + for (ob = bmain->object.first; ob; ob = ob->id.next) if (ob->id.flag & LIB_NEW) new_id_matar(ob->mat, ob->totcol); - for (me=bmain->mesh.first; me; me=me->id.next) + for (me = bmain->mesh.first; me; me = me->id.next) if (me->id.flag & LIB_NEW) new_id_matar(me->mat, me->totcol); - for (cu=bmain->curve.first; cu; cu=cu->id.next) + for (cu = bmain->curve.first; cu; cu = cu->id.next) if (cu->id.flag & LIB_NEW) new_id_matar(cu->mat, cu->totcol); - for (mb=bmain->mball.first; mb; mb=mb->id.next) + for (mb = bmain->mball.first; mb; mb = mb->id.next) if (mb->id.flag & LIB_NEW) new_id_matar(mb->mat, mb->totcol); /* material imats */ - for (ma=bmain->mat.first; ma; ma=ma->id.next) + for (ma = bmain->mat.first; ma; ma = ma->id.next) if (ma->id.flag & LIB_NEW) - for (a=0; amtex[a]) ID_NEW(ma->mtex[a]->object); } @@ -1697,11 +1697,11 @@ static void make_local_makelocalmaterial(Material *ma) id_make_local(&ma->id, 0); - for (b=0; bmtex[b] && ma->mtex[b]->tex) id_make_local(&ma->mtex[b]->tex->id, 0); - adt= BKE_animdata_from_id(&ma->id); + adt = BKE_animdata_from_id(&ma->id); if (adt) BKE_animdata_make_local(adt); /* nodetree? XXX */ @@ -1709,83 +1709,83 @@ static void make_local_makelocalmaterial(Material *ma) static int make_local_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); + Main *bmain = CTX_data_main(C); AnimData *adt; ParticleSystem *psys; Material *ma, ***matarar; Lamp *la; ID *id; - int a, b, mode= RNA_enum_get(op->ptr, "type"); + int a, b, mode = RNA_enum_get(op->ptr, "type"); - if (mode==3) { - BKE_library_make_local(bmain, NULL, 0); /* NULL is all libs */ + if (mode == 3) { + BKE_library_make_local(bmain, NULL, 0); /* NULL is all libs */ WM_event_add_notifier(C, NC_WINDOW, NULL); return OPERATOR_FINISHED; } clear_id_newpoins(); - CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { if (ob->id.lib) id_make_local(&ob->id, 0); } CTX_DATA_END; /* maybe object pointers */ - CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { - if (ob->id.lib==NULL) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + if (ob->id.lib == NULL) { ID_NEW(ob->parent); } } CTX_DATA_END; - CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { - id= ob->data; + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + id = ob->data; - if (id && mode>1) { + if (id && mode > 1) { id_make_local(id, 0); - adt= BKE_animdata_from_id(id); + adt = BKE_animdata_from_id(id); if (adt) BKE_animdata_make_local(adt); /* tag indirect data direct */ - matarar= (Material ***)give_matarar(ob); + matarar = (Material ***)give_matarar(ob); if (matarar) { - for (a=0; atotcol; a++) { - ma= (*matarar)[a]; + for (a = 0; a < ob->totcol; a++) { + ma = (*matarar)[a]; if (ma) id_lib_extern(&ma->id); } } } - for (psys=ob->particlesystem.first; psys; psys=psys->next) + for (psys = ob->particlesystem.first; psys; psys = psys->next) id_make_local(&psys->part->id, 0); - adt= BKE_animdata_from_id(&ob->id); + adt = BKE_animdata_from_id(&ob->id); if (adt) BKE_animdata_make_local(adt); } CTX_DATA_END; - if (mode>1) { - CTX_DATA_BEGIN (C, Object*, ob, selected_objects) { - if (ob->type==OB_LAMP) { - la= ob->data; + if (mode > 1) { + CTX_DATA_BEGIN (C, Object *, ob, selected_objects) { + if (ob->type == OB_LAMP) { + la = ob->data; - for (b=0; bmtex[b] && la->mtex[b]->tex) id_make_local(&la->mtex[b]->tex->id, 0); } else { - for (a=0; atotcol; a++) { - ma= ob->mat[a]; + for (a = 0; a < ob->totcol; a++) { + ma = ob->mat[a]; if (ma) make_local_makelocalmaterial(ma); } - matarar= (Material ***)give_matarar(ob); + matarar = (Material ***)give_matarar(ob); if (matarar) { - for (a=0; atotcol; a++) { - ma= (*matarar)[a]; + for (a = 0; a < ob->totcol; a++) { + ma = (*matarar)[a]; if (ma) make_local_makelocalmaterial(ma); } @@ -1802,7 +1802,7 @@ static int make_local_exec(bContext *C, wmOperator *op) void OBJECT_OT_make_local(wmOperatorType *ot) { - static EnumPropertyItem type_items[]= { + static EnumPropertyItem type_items[] = { {1, "SELECTED_OBJECTS", 0, "Selected Objects", ""}, {2, "SELECTED_OBJECTS_DATA", 0, "Selected Objects and Data", ""}, {3, "ALL", 0, "All", ""}, @@ -1819,7 +1819,7 @@ void OBJECT_OT_make_local(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ ot->prop = RNA_def_enum(ot->srna, "type", type_items, 0, "Type", ""); @@ -1827,10 +1827,10 @@ void OBJECT_OT_make_local(wmOperatorType *ot) static int make_single_user_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - View3D *v3d= CTX_wm_view3d(C); /* ok if this is NULL */ - int flag= RNA_enum_get(op->ptr, "type"); /* 0==ALL, SELECTED==selected objecs */ + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + View3D *v3d = CTX_wm_view3d(C); /* ok if this is NULL */ + int flag = RNA_enum_get(op->ptr, "type"); /* 0==ALL, SELECTED==selected objecs */ if (RNA_boolean_get(op->ptr, "object")) single_object_users(scene, v3d, flag); @@ -1856,7 +1856,7 @@ static int make_single_user_exec(bContext *C, wmOperator *op) void OBJECT_OT_make_single_user(wmOperatorType *ot) { - static EnumPropertyItem type_items[]= { + static EnumPropertyItem type_items[] = { {SELECT, "SELECTED_OBJECTS", 0, "Selected Objects", ""}, {0, "ALL", 0, "All", ""}, {0, NULL, 0, NULL, NULL}}; @@ -1872,7 +1872,7 @@ void OBJECT_OT_make_single_user(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ ot->prop = RNA_def_enum(ot->srna, "type", type_items, SELECT, "Type", ""); @@ -1886,20 +1886,20 @@ void OBJECT_OT_make_single_user(wmOperatorType *ot) static int drop_named_material_invoke(bContext *C, wmOperator *op, wmEvent *event) { - Main *bmain= CTX_data_main(C); - Base *base= ED_view3d_give_base_under_cursor(C, event->mval); + Main *bmain = CTX_data_main(C); + Base *base = ED_view3d_give_base_under_cursor(C, event->mval); Material *ma; - char name[MAX_ID_NAME-2]; + char name[MAX_ID_NAME - 2]; RNA_string_get(op->ptr, "name", name); - ma= (Material *)find_id("MA", name); - if (base==NULL || ma==NULL) + ma = (Material *)find_id("MA", name); + if (base == NULL || ma == NULL) return OPERATOR_CANCELLED; assign_material(base->object, ma, 1); DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, CTX_wm_view3d(C)); + WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C)); return OPERATOR_FINISHED; } @@ -1922,5 +1922,5 @@ void OBJECT_OT_drop_named_material(wmOperatorType *ot) ot->flag = OPTYPE_UNDO; /* properties */ - RNA_def_string(ot->srna, "name", "Material", MAX_ID_NAME-2, "Name", "Material name to assign"); + RNA_def_string(ot->srna, "name", "Material", MAX_ID_NAME - 2, "Name", "Material name to assign"); } diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index 386541c5262..7a4db175ee4 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -79,8 +79,8 @@ /************************ Exported **************************/ /* simple API for object selection, rather than just using the flag - * this takes into account the 'restrict selection in 3d view' flag. - * deselect works always, the restriction just prevents selection */ +* this takes into account the 'restrict selection in 3d view' flag. +* deselect works always, the restriction just prevents selection */ /* Note: send a NC_SCENE|ND_OB_SELECT notifier yourself! (or * or a NC_SCENE|ND_OB_VISIBLE in case of visibility toggling */ @@ -88,34 +88,34 @@ void ED_base_object_select(Base *base, short mode) { if (base) { - if (mode==BA_SELECT) { + if (mode == BA_SELECT) { if (!(base->object->restrictflag & OB_RESTRICT_SELECT)) base->flag |= SELECT; } - else if (mode==BA_DESELECT) { + else if (mode == BA_DESELECT) { base->flag &= ~SELECT; } - base->object->flag= base->flag; + base->object->flag = base->flag; } } /* also to set active NULL */ void ED_base_object_activate(bContext *C, Base *base) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); /* sets scene->basact */ - BASACT= base; + BASACT = base; if (base) { /* XXX old signals, remember to handle notifiers now! */ // select_actionchannel_by_name(base->object->action, "Object", 1); - WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene); + WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene); } else - WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, NULL); + WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, NULL); } /********************** Selection Operators **********************/ @@ -124,7 +124,7 @@ static int objects_selectable_poll(bContext *C) { /* we don't check for linked scenes here, selection is * still allowed then for inspection of scene */ - Object *obact= CTX_data_active_object(C); + Object *obact = CTX_data_active_object(C); if (CTX_data_edit_object(C)) return 0; @@ -141,23 +141,23 @@ static int object_select_by_type_exec(bContext *C, wmOperator *op) short obtype, extend; obtype = RNA_enum_get(op->ptr, "type"); - extend= RNA_boolean_get(op->ptr, "extend"); + extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; } - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { - if (base->object->type==obtype) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + if (base->object->type == obtype) { ED_base_object_select(base, BA_SELECT); } } CTX_DATA_END; - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -175,7 +175,7 @@ void OBJECT_OT_select_by_type(wmOperatorType *ot) ot->poll = objects_selectable_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first"); @@ -198,11 +198,11 @@ static EnumPropertyItem prop_select_linked_types[] = { static int object_select_linked_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); Object *ob; void *obdata = NULL; Material *mat = NULL, *mat1; - Tex *tex= NULL; + Tex *tex = NULL; int a, b; int nr = RNA_enum_get(op->ptr, "type"); short changed = 0, extend; @@ -215,77 +215,77 @@ static int object_select_linked_exec(bContext *C, wmOperator *op) * PSys: 6 */ - extend= RNA_boolean_get(op->ptr, "extend"); + extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; } - ob= OBACT; - if (ob==NULL) { + ob = OBACT; + if (ob == NULL) { BKE_report(op->reports, RPT_ERROR, "No Active Object"); return OPERATOR_CANCELLED; } - if (nr==1) { - // XXX old animation system + if (nr == 1) { + // XXX old animation system //ipo= ob->ipo; //if (ipo==0) return OPERATOR_CANCELLED; return OPERATOR_CANCELLED; } - else if (nr==2) { - if (ob->data==NULL) return OPERATOR_CANCELLED; - obdata= ob->data; + else if (nr == 2) { + if (ob->data == NULL) return OPERATOR_CANCELLED; + obdata = ob->data; } - else if (nr==3 || nr==4) { - mat= give_current_material(ob, ob->actcol); - if (mat==NULL) return OPERATOR_CANCELLED; - if (nr==4) { - if (mat->mtex[ (int)mat->texact ]) tex= mat->mtex[ (int)mat->texact ]->tex; - if (tex==NULL) return OPERATOR_CANCELLED; + else if (nr == 3 || nr == 4) { + mat = give_current_material(ob, ob->actcol); + if (mat == NULL) return OPERATOR_CANCELLED; + if (nr == 4) { + if (mat->mtex[(int)mat->texact]) tex = mat->mtex[(int)mat->texact]->tex; + if (tex == NULL) return OPERATOR_CANCELLED; } } - else if (nr==5) { - if (ob->dup_group==NULL) return OPERATOR_CANCELLED; + else if (nr == 5) { + if (ob->dup_group == NULL) return OPERATOR_CANCELLED; } - else if (nr==6) { - if (ob->particlesystem.first==NULL) return OPERATOR_CANCELLED; + else if (nr == 6) { + if (ob->particlesystem.first == NULL) return OPERATOR_CANCELLED; } - else if (nr==7) { + else if (nr == 7) { /* do nothing */ } - else if (nr==8) { - if (ob->data==NULL) return OPERATOR_CANCELLED; + else if (nr == 8) { + if (ob->data == NULL) return OPERATOR_CANCELLED; } else return OPERATOR_CANCELLED; - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { - if (nr==1) { - // XXX old animation system + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + if (nr == 1) { + // XXX old animation system //if (base->object->ipo==ipo) base->flag |= SELECT; //changed = 1; } - else if (nr==2) { - if (base->object->data==obdata) base->flag |= SELECT; + else if (nr == 2) { + if (base->object->data == obdata) base->flag |= SELECT; changed = 1; } - else if (nr==3 || nr==4) { - ob= base->object; + else if (nr == 3 || nr == 4) { + ob = base->object; - for (a=1; a<=ob->totcol; a++) { - mat1= give_current_material(ob, a); - if (nr==3) { - if (mat1==mat) base->flag |= SELECT; + for (a = 1; a <= ob->totcol; a++) { + mat1 = give_current_material(ob, a); + if (nr == 3) { + if (mat1 == mat) base->flag |= SELECT; changed = 1; } - else if (mat1 && nr==4) { - for (b=0; bmtex[b]) { - if (tex==mat1->mtex[b]->tex) { + if (tex == mat1->mtex[b]->tex) { base->flag |= SELECT; changed = 1; break; @@ -295,19 +295,19 @@ static int object_select_linked_exec(bContext *C, wmOperator *op) } } } - else if (nr==5) { - if (base->object->dup_group==ob->dup_group) { + else if (nr == 5) { + if (base->object->dup_group == ob->dup_group) { base->flag |= SELECT; changed = 1; } } - else if (nr==6) { + else if (nr == 6) { /* loop through other, then actives particles*/ ParticleSystem *psys; ParticleSystem *psys_act; - for (psys=base->object->particlesystem.first; psys; psys=psys->next) { - for (psys_act=ob->particlesystem.first; psys_act; psys_act=psys_act->next) { + for (psys = base->object->particlesystem.first; psys; psys = psys->next) { + for (psys_act = ob->particlesystem.first; psys_act; psys_act = psys_act->next) { if (psys->part == psys_act->part) { base->flag |= SELECT; changed = 1; @@ -320,24 +320,24 @@ static int object_select_linked_exec(bContext *C, wmOperator *op) } } } - else if (nr==7) { + else if (nr == 7) { if (ob->id.lib == base->object->id.lib) { base->flag |= SELECT; - changed= 1; + changed = 1; } } - else if (nr==8) { + else if (nr == 8) { if (base->object->data && ((ID *)ob->data)->lib == ((ID *)base->object->data)->lib) { base->flag |= SELECT; - changed= 1; + changed = 1; } } - base->object->flag= base->flag; + base->object->flag = base->flag; } CTX_DATA_END; if (changed) { - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -357,7 +357,7 @@ void OBJECT_OT_select_linked(wmOperatorType *ot) ot->poll = objects_selectable_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first"); @@ -386,7 +386,7 @@ static short select_grouped_children(bContext *C, Object *ob, int recursive) { short changed = 0; - CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { if (ob == base->object->parent) { if (!(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); @@ -401,17 +401,17 @@ static short select_grouped_children(bContext *C, Object *ob, int recursive) return changed; } -static short select_grouped_parent(bContext *C) /* Makes parent active and de-selected OBACT */ +static short select_grouped_parent(bContext *C) /* Makes parent active and de-selected OBACT */ { - Scene *scene= CTX_data_scene(C); - View3D *v3d= CTX_wm_view3d(C); + Scene *scene = CTX_data_scene(C); + View3D *v3d = CTX_wm_view3d(C); short changed = 0; - Base *baspar, *basact= CTX_data_active_base(C); + Base *baspar, *basact = CTX_data_active_base(C); - if (!basact || !(basact->object->parent)) return 0; /* we know OBACT is valid */ + if (!basact || !(basact->object->parent)) return 0; /* we know OBACT is valid */ - baspar= object_in_scene(basact->object->parent, scene); + baspar = object_in_scene(basact->object->parent, scene); /* can be NULL if parent in other scene */ if (baspar && BASE_SELECTABLE(v3d, baspar)) { @@ -424,17 +424,17 @@ static short select_grouped_parent(bContext *C) /* Makes parent active and de-se } -#define GROUP_MENU_MAX 24 -static short select_grouped_group(bContext *C, Object *ob) /* Select objects in the same group as the active */ +#define GROUP_MENU_MAX 24 +static short select_grouped_group(bContext *C, Object *ob) /* Select objects in the same group as the active */ { short changed = 0; Group *group, *ob_groups[GROUP_MENU_MAX]; - int group_count=0, i; + int group_count = 0, i; uiPopupMenu *pup; uiLayout *layout; - for (group=CTX_data_main(C)->group.first; group && group_count < GROUP_MENU_MAX; group=group->id.next) { - if (object_in_group (ob, group)) { + for (group = CTX_data_main(C)->group.first; group && group_count < GROUP_MENU_MAX; group = group->id.next) { + if (object_in_group(ob, group)) { ob_groups[group_count] = group; group_count++; } @@ -444,7 +444,7 @@ static short select_grouped_group(bContext *C, Object *ob) /* Select objects in return 0; else if (group_count == 1) { group = ob_groups[0]; - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { if (!(base->flag & SELECT) && object_in_group(base->object, group)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -455,12 +455,12 @@ static short select_grouped_group(bContext *C, Object *ob) /* Select objects in } /* build the menu. */ - pup= uiPupMenuBegin(C, "Select Group", ICON_NONE); - layout= uiPupMenuLayout(pup); + pup = uiPupMenuBegin(C, "Select Group", ICON_NONE); + layout = uiPupMenuLayout(pup); - for (i=0; iid.name+2, 0, "OBJECT_OT_select_same_group", "group", group->id.name); + uiItemStringO(layout, group->id.name + 2, 0, "OBJECT_OT_select_same_group", "group", group->id.name); } uiPupMenuEnd(C, pup); @@ -469,19 +469,19 @@ static short select_grouped_group(bContext *C, Object *ob) /* Select objects in static short select_grouped_object_hooks(bContext *C, Object *ob) { - Scene *scene= CTX_data_scene(C); - View3D *v3d= CTX_wm_view3d(C); + Scene *scene = CTX_data_scene(C); + View3D *v3d = CTX_wm_view3d(C); short changed = 0; Base *base; ModifierData *md; HookModifierData *hmd; - for (md = ob->modifiers.first; md; md=md->next) { - if (md->type==eModifierType_Hook) { - hmd= (HookModifierData*) md; + for (md = ob->modifiers.first; md; md = md->next) { + if (md->type == eModifierType_Hook) { + hmd = (HookModifierData *) md; if (hmd->object && !(hmd->object->flag & SELECT)) { - base= object_in_scene(hmd->object, scene); + base = object_in_scene(hmd->object, scene); if (base && (BASE_SELECTABLE(v3d, base))) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -498,8 +498,8 @@ static short select_grouped_siblings(bContext *C, Object *ob) { short changed = 0; - CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { - if ((base->object->parent==ob->parent) && !(base->flag & SELECT)) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { + if ((base->object->parent == ob->parent) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; } @@ -512,7 +512,7 @@ static short select_grouped_type(bContext *C, Object *ob) { short changed = 0; - CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { if ((base->object->type == ob->type) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -526,7 +526,7 @@ static short select_grouped_layer(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { if ((base->lay & ob->lay) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -540,7 +540,7 @@ static short select_grouped_index_object(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { if ((base->object->index == ob->index) && !(base->flag & SELECT)) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -554,7 +554,7 @@ static short select_grouped_color(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { if (!(base->flag & SELECT) && (compare_v3v3(base->object->col, ob->col, 0.005f))) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -569,8 +569,8 @@ static short objects_share_gameprop(Object *a, Object *b) bProperty *prop; /*make a copy of all its properties*/ - for ( prop= a->prop.first; prop; prop = prop->next ) { - if ( get_ob_property(b, prop->name) ) + for (prop = a->prop.first; prop; prop = prop->next) { + if (get_ob_property(b, prop->name) ) return 1; } return 0; @@ -580,7 +580,7 @@ static short select_grouped_gameprops(bContext *C, Object *ob) { char changed = 0; - CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { if (!(base->flag & SELECT) && (objects_share_gameprop(base->object, ob))) { ED_base_object_select(base, BA_SELECT); changed = 1; @@ -602,7 +602,7 @@ static short select_grouped_keyingset(bContext *C, Object *UNUSED(ob)) /* select each object that Keying Set refers to */ // TODO: perhaps to be more in line with the rest of these, we should only take objects // if the passed in object is included in this too - CTX_DATA_BEGIN (C, Base*, base, selectable_bases) { + CTX_DATA_BEGIN (C, Base *, base, selectable_bases) { /* only check for this object if it isn't selected already, to limit time wasted */ if ((base->flag & SELECT) == 0) { KS_Path *ksp; @@ -627,42 +627,42 @@ static short select_grouped_keyingset(bContext *C, Object *UNUSED(ob)) static int object_select_grouped_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); Object *ob; int nr = RNA_enum_get(op->ptr, "type"); short changed = 0, extend; - extend= RNA_boolean_get(op->ptr, "extend"); + extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); changed = 1; } CTX_DATA_END; } - ob= OBACT; - if (ob==NULL) { + ob = OBACT; + if (ob == NULL) { BKE_report(op->reports, RPT_ERROR, "No Active Object"); return OPERATOR_CANCELLED; } - if (nr==1) changed |= select_grouped_children(C, ob, 1); - else if (nr==2) changed |= select_grouped_children(C, ob, 0); - else if (nr==3) changed |= select_grouped_parent(C); - else if (nr==4) changed |= select_grouped_siblings(C, ob); - else if (nr==5) changed |= select_grouped_type(C, ob); - else if (nr==6) changed |= select_grouped_layer(C, ob); - else if (nr==7) changed |= select_grouped_group(C, ob); - else if (nr==8) changed |= select_grouped_object_hooks(C, ob); - else if (nr==9) changed |= select_grouped_index_object(C, ob); - else if (nr==10) changed |= select_grouped_color(C, ob); - else if (nr==11) changed |= select_grouped_gameprops(C, ob); - else if (nr==12) changed |= select_grouped_keyingset(C, ob); + if (nr == 1) changed |= select_grouped_children(C, ob, 1); + else if (nr == 2) changed |= select_grouped_children(C, ob, 0); + else if (nr == 3) changed |= select_grouped_parent(C); + else if (nr == 4) changed |= select_grouped_siblings(C, ob); + else if (nr == 5) changed |= select_grouped_type(C, ob); + else if (nr == 6) changed |= select_grouped_layer(C, ob); + else if (nr == 7) changed |= select_grouped_group(C, ob); + else if (nr == 8) changed |= select_grouped_object_hooks(C, ob); + else if (nr == 9) changed |= select_grouped_index_object(C, ob); + else if (nr == 10) changed |= select_grouped_color(C, ob); + else if (nr == 11) changed |= select_grouped_gameprops(C, ob); + else if (nr == 12) changed |= select_grouped_keyingset(C, ob); if (changed) { - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -682,7 +682,7 @@ void OBJECT_OT_select_grouped(wmOperatorType *ot) ot->poll = objects_selectable_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first"); @@ -696,24 +696,24 @@ static int object_select_by_layer_exec(bContext *C, wmOperator *op) unsigned int layernum; short extend; - extend= RNA_boolean_get(op->ptr, "extend"); + extend = RNA_boolean_get(op->ptr, "extend"); layernum = RNA_int_get(op->ptr, "layers"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; } - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { - if (base->lay == (1<< (layernum -1))) + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { + if (base->lay == (1 << (layernum - 1))) ED_base_object_select(base, BA_SELECT); } CTX_DATA_END; /* undo? */ - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -731,7 +731,7 @@ void OBJECT_OT_select_by_layer(wmOperatorType *ot) ot->poll = objects_selectable_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first"); @@ -749,7 +749,7 @@ static int object_select_all_exec(bContext *C, wmOperator *op) if (action == SEL_TOGGLE) { action = SEL_SELECT; - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { if (base->flag & SELECT) { action = SEL_DESELECT; break; @@ -758,27 +758,27 @@ static int object_select_all_exec(bContext *C, wmOperator *op) CTX_DATA_END; } - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { switch (action) { - case SEL_SELECT: - ED_base_object_select(base, BA_SELECT); - break; - case SEL_DESELECT: - ED_base_object_select(base, BA_DESELECT); - break; - case SEL_INVERT: - if (base->flag & SELECT) { - ED_base_object_select(base, BA_DESELECT); - } - else { + case SEL_SELECT: ED_base_object_select(base, BA_SELECT); - } - break; + break; + case SEL_DESELECT: + ED_base_object_select(base, BA_DESELECT); + break; + case SEL_INVERT: + if (base->flag & SELECT) { + ED_base_object_select(base, BA_DESELECT); + } + else { + ED_base_object_select(base, BA_SELECT); + } + break; } } CTX_DATA_END; - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -796,7 +796,7 @@ void OBJECT_OT_select_all(wmOperatorType *ot) ot->poll = objects_selectable_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; WM_operator_properties_select_all(ot); } @@ -813,7 +813,7 @@ static int object_select_same_group_exec(bContext *C, wmOperator *op) RNA_string_get(op->ptr, "group", group_name); - for (group=CTX_data_main(C)->group.first; group; group=group->id.next) { + for (group = CTX_data_main(C)->group.first; group; group = group->id.next) { if (!strcmp(group->id.name, group_name)) break; } @@ -821,13 +821,13 @@ static int object_select_same_group_exec(bContext *C, wmOperator *op) if (!group) return OPERATOR_PASS_THROUGH; - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { if (!(base->flag & SELECT) && object_in_group(base->object, group)) ED_base_object_select(base, BA_SELECT); } CTX_DATA_END; - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -845,7 +845,7 @@ void OBJECT_OT_select_same_group(wmOperatorType *ot) ot->poll = objects_selectable_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_string(ot->srna, "group", "", MAX_ID_NAME, "Group", "Name of the group to select"); } @@ -853,20 +853,20 @@ void OBJECT_OT_select_same_group(wmOperatorType *ot) /**************************** Select Mirror ****************************/ static int object_select_mirror_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); short extend; - extend= RNA_boolean_get(op->ptr, "extend"); + extend = RNA_boolean_get(op->ptr, "extend"); - CTX_DATA_BEGIN (C, Base*, primbase, selected_bases) { + CTX_DATA_BEGIN (C, Base *, primbase, selected_bases) { char tmpname[MAXBONENAME]; - flip_side_name(tmpname, primbase->object->id.name+2, TRUE); + flip_side_name(tmpname, primbase->object->id.name + 2, TRUE); - if (strcmp(tmpname, primbase->object->id.name+2)!=0) { /* names differ */ - Object *ob= (Object *)find_id("OB", tmpname); + if (strcmp(tmpname, primbase->object->id.name + 2) != 0) { /* names differ */ + Object *ob = (Object *)find_id("OB", tmpname); if (ob) { - Base *secbase= object_in_scene(ob, scene); + Base *secbase = object_in_scene(ob, scene); if (secbase) { ED_base_object_select(secbase, BA_SELECT); @@ -880,7 +880,7 @@ static int object_select_mirror_exec(bContext *C, wmOperator *op) CTX_DATA_END; /* undo? */ - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -898,7 +898,7 @@ void OBJECT_OT_select_mirror(wmOperatorType *ot) ot->poll = objects_selectable_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_boolean(ot->srna, "extend", 0, "Extend", "Extend selection instead of deselecting everything first"); } @@ -911,24 +911,24 @@ static int object_select_random_exec(bContext *C, wmOperator *op) float percent; short extend; - extend= RNA_boolean_get(op->ptr, "extend"); + extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { ED_base_object_select(base, BA_DESELECT); } CTX_DATA_END; } - percent = RNA_float_get(op->ptr, "percent")/100.0f; + percent = RNA_float_get(op->ptr, "percent") / 100.0f; - CTX_DATA_BEGIN (C, Base*, base, visible_bases) { + CTX_DATA_BEGIN (C, Base *, base, visible_bases) { if (BLI_frand() < percent) { ED_base_object_select(base, BA_SELECT); } } CTX_DATA_END; - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C)); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C)); return OPERATOR_FINISHED; } @@ -946,7 +946,7 @@ void OBJECT_OT_select_random(wmOperatorType *ot) ot->poll = objects_selectable_poll; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ RNA_def_float_percentage(ot->srna, "percent", 50.f, 0.0f, 100.0f, "Percent", "Percentage of objects to select randomly", 0.f, 100.0f); diff --git a/source/blender/editors/object/object_shapekey.c b/source/blender/editors/object/object_shapekey.c index 9e31fc2d765..bd88bbda32c 100644 --- a/source/blender/editors/object/object_shapekey.c +++ b/source/blender/editors/object/object_shapekey.c @@ -78,11 +78,11 @@ static void ED_object_shape_key_add(bContext *C, Scene *scene, Object *ob, int f { KeyBlock *kb; if ((kb = object_insert_shape_key(scene, ob, NULL, from_mix))) { - Key *key= ob_get_key(ob); + Key *key = ob_get_key(ob); /* for absolute shape keys, new keys may not be added last */ ob->shapenr = BLI_findindex(&key->block, kb) + 1; - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); } } @@ -90,26 +90,26 @@ static void ED_object_shape_key_add(bContext *C, Scene *scene, Object *ob, int f static int ED_object_shape_key_remove(bContext *C, Object *ob) { - Main *bmain= CTX_data_main(C); + Main *bmain = CTX_data_main(C); KeyBlock *kb, *rkb; Key *key; //IpoCurve *icu; - key= ob_get_key(ob); - if (key==NULL) + key = ob_get_key(ob); + if (key == NULL) return 0; - kb= BLI_findlink(&key->block, ob->shapenr-1); + kb = BLI_findlink(&key->block, ob->shapenr - 1); if (kb) { - for (rkb= key->block.first; rkb; rkb= rkb->next) - if (rkb->relative == ob->shapenr-1) - rkb->relative= 0; + for (rkb = key->block.first; rkb; rkb = rkb->next) + if (rkb->relative == ob->shapenr - 1) + rkb->relative = 0; BLI_remlink(&key->block, kb); key->totkey--; - if (key->refkey== kb) { - key->refkey= key->block.first; + if (key->refkey == kb) { + key->refkey = key->block.first; if (key->refkey) { /* apply new basis key on original data */ @@ -136,16 +136,16 @@ static int ED_object_shape_key_remove(bContext *C, Object *ob) } } - if (key->totkey==0) { - if (GS(key->from->name)==ID_ME) ((Mesh *)key->from)->key= NULL; - else if (GS(key->from->name)==ID_CU) ((Curve *)key->from)->key= NULL; - else if (GS(key->from->name)==ID_LT) ((Lattice *)key->from)->key= NULL; + if (key->totkey == 0) { + if (GS(key->from->name) == ID_ME) ((Mesh *)key->from)->key = NULL; + else if (GS(key->from->name) == ID_CU) ((Curve *)key->from)->key = NULL; + else if (GS(key->from->name) == ID_LT) ((Lattice *)key->from)->key = NULL; free_libblock_us(&(bmain->key), key); } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); return 1; } @@ -155,53 +155,53 @@ static int object_shape_key_mirror(bContext *C, Object *ob) KeyBlock *kb; Key *key; - key= ob_get_key(ob); - if (key==NULL) + key = ob_get_key(ob); + if (key == NULL) return 0; - kb= BLI_findlink(&key->block, ob->shapenr-1); + kb = BLI_findlink(&key->block, ob->shapenr - 1); if (kb) { int i1, i2; float *fp1, *fp2; float tvec[3]; - char *tag_elem= MEM_callocN(sizeof(char) * kb->totelem, "shape_key_mirror"); + char *tag_elem = MEM_callocN(sizeof(char) * kb->totelem, "shape_key_mirror"); - if (ob->type==OB_MESH) { - Mesh *me= ob->data; + if (ob->type == OB_MESH) { + Mesh *me = ob->data; MVert *mv; mesh_octree_table(ob, NULL, NULL, 's'); - for (i1=0, mv=me->mvert; i1totvert; i1++, mv++) { - i2= mesh_get_x_mirror_vert(ob, i1); - if (i2==i1) { - fp1= ((float *)kb->data) + i1*3; + for (i1 = 0, mv = me->mvert; i1 < me->totvert; i1++, mv++) { + i2 = mesh_get_x_mirror_vert(ob, i1); + if (i2 == i1) { + fp1 = ((float *)kb->data) + i1 * 3; fp1[0] = -fp1[0]; - tag_elem[i1]= 1; + tag_elem[i1] = 1; } else if (i2 != -1) { - if (tag_elem[i1]==0 && tag_elem[i2]==0) { - fp1= ((float *)kb->data) + i1*3; - fp2= ((float *)kb->data) + i2*3; + if (tag_elem[i1] == 0 && tag_elem[i2] == 0) { + fp1 = ((float *)kb->data) + i1 * 3; + fp2 = ((float *)kb->data) + i2 * 3; - copy_v3_v3(tvec, fp1); - copy_v3_v3(fp1, fp2); - copy_v3_v3(fp2, tvec); + copy_v3_v3(tvec, fp1); + copy_v3_v3(fp1, fp2); + copy_v3_v3(fp2, tvec); /* flip x axis */ fp1[0] = -fp1[0]; fp2[0] = -fp2[0]; } - tag_elem[i1]= tag_elem[i2]= 1; + tag_elem[i1] = tag_elem[i2] = 1; } } mesh_octree_table(ob, NULL, NULL, 'e'); } else if (ob->type == OB_LATTICE) { - Lattice *lt= ob->data; + Lattice *lt = ob->data; int i1, i2; float *fp1, *fp2; int u, v, w; @@ -213,28 +213,28 @@ static int object_shape_key_mirror(bContext *C, Object *ob) /* if (lt->editlatt) lt= lt->editlatt->latt; */ - for (w=0; wpntsw; w++) { - for (v=0; vpntsv; v++) { - for (u=0; upntsu - 1) - u; + for (w = 0; w < lt->pntsw; w++) { + for (v = 0; v < lt->pntsv; v++) { + for (u = 0; u < pntsu_half; u++) { + int u_inv = (lt->pntsu - 1) - u; float tvec[3]; if (u == u_inv) { - i1= LT_INDEX(lt, u, v, w); - fp1= ((float *)kb->data) + i1*3; - fp1[0]= -fp1[0]; + i1 = LT_INDEX(lt, u, v, w); + fp1 = ((float *)kb->data) + i1 * 3; + fp1[0] = -fp1[0]; } else { - i1= LT_INDEX(lt, u, v, w); - i2= LT_INDEX(lt, u_inv, v, w); + i1 = LT_INDEX(lt, u, v, w); + i2 = LT_INDEX(lt, u_inv, v, w); - fp1= ((float *)kb->data) + i1*3; - fp2= ((float *)kb->data) + i2*3; + fp1 = ((float *)kb->data) + i1 * 3; + fp2 = ((float *)kb->data) + i2 * 3; copy_v3_v3(tvec, fp1); copy_v3_v3(fp1, fp2); copy_v3_v3(fp2, tvec); - fp1[0]= -fp1[0]; - fp2[0]= -fp2[0]; + fp1[0] = -fp1[0]; + fp2[0] = -fp2[0]; } } } @@ -245,7 +245,7 @@ static int object_shape_key_mirror(bContext *C, Object *ob) } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); return 1; } @@ -254,22 +254,22 @@ static int object_shape_key_mirror(bContext *C, Object *ob) static int shape_key_mode_poll(bContext *C) { - Object *ob= ED_object_context(C); - ID *data= (ob)? ob->data: NULL; + Object *ob = ED_object_context(C); + ID *data = (ob) ? ob->data : NULL; return (ob && !ob->id.lib && data && !data->lib && ob->mode != OB_MODE_EDIT); } static int shape_key_poll(bContext *C) { - Object *ob= ED_object_context(C); - ID *data= (ob)? ob->data: NULL; + Object *ob = ED_object_context(C); + ID *data = (ob) ? ob->data : NULL; return (ob && !ob->id.lib && data && !data->lib); } static int shape_key_add_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); - Object *ob= ED_object_context(C); + Scene *scene = CTX_data_scene(C); + Object *ob = ED_object_context(C); int from_mix = RNA_boolean_get(op->ptr, "from_mix"); ED_object_shape_key_add(C, scene, ob, from_mix); @@ -289,7 +289,7 @@ void OBJECT_OT_shape_key_add(wmOperatorType *ot) ot->exec = shape_key_add_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "from_mix", 1, "From Mix", "Create the new shape key from the existing mix of keys"); @@ -297,7 +297,7 @@ void OBJECT_OT_shape_key_add(wmOperatorType *ot) static int shape_key_remove_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); if (!ED_object_shape_key_remove(C, ob)) return OPERATOR_CANCELLED; @@ -317,23 +317,23 @@ void OBJECT_OT_shape_key_remove(wmOperatorType *ot) ot->exec = shape_key_remove_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int shape_key_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob= ED_object_context(C); - Key *key= ob_get_key(ob); - KeyBlock *kb= ob_get_keyblock(ob); + Object *ob = ED_object_context(C); + Key *key = ob_get_key(ob); + KeyBlock *kb = ob_get_keyblock(ob); if (!key || !kb) return OPERATOR_CANCELLED; - for (kb=key->block.first; kb; kb=kb->next) - kb->curval= 0.0f; + for (kb = key->block.first; kb; kb = kb->next) + kb->curval = 0.0f; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); return OPERATOR_FINISHED; } @@ -350,7 +350,7 @@ void OBJECT_OT_shape_key_clear(wmOperatorType *ot) ot->exec = shape_key_clear_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /* starting point and step size could be optional */ @@ -364,11 +364,11 @@ static int shape_key_retime_exec(bContext *C, wmOperator *UNUSED(op)) if (!key || !kb) return OPERATOR_CANCELLED; - for (kb=key->block.first; kb; kb=kb->next) + for (kb = key->block.first; kb; kb = kb->next) kb->pos = (cfra += 0.1f); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); return OPERATOR_FINISHED; } @@ -385,12 +385,12 @@ void OBJECT_OT_shape_key_retime(wmOperatorType *ot) ot->exec = shape_key_retime_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int shape_key_mirror_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); if (!object_shape_key_mirror(C, ob)) return OPERATOR_CANCELLED; @@ -409,28 +409,28 @@ void OBJECT_OT_shape_key_mirror(wmOperatorType *ot) ot->exec = shape_key_mirror_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int shape_key_move_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); - int type= RNA_enum_get(op->ptr, "type"); - Key *key= ob_get_key(ob); + int type = RNA_enum_get(op->ptr, "type"); + Key *key = ob_get_key(ob); if (key) { KeyBlock *kb, *kb_other; - int shapenr_act= ob->shapenr-1; - int shapenr_swap= shapenr_act + type; - kb= BLI_findlink(&key->block, shapenr_act); + int shapenr_act = ob->shapenr - 1; + int shapenr_swap = shapenr_act + type; + kb = BLI_findlink(&key->block, shapenr_act); - if ((type==-1 && kb->prev==NULL) || (type==1 && kb->next==NULL)) { + if ((type == -1 && kb->prev == NULL) || (type == 1 && kb->next == NULL)) { return OPERATOR_CANCELLED; } - for (kb_other= key->block.first; kb_other; kb_other= kb_other->next) { + for (kb_other = key->block.first; kb_other; kb_other = kb_other->next) { if (kb_other->relative == shapenr_act) { kb_other->relative += type; } @@ -439,16 +439,16 @@ static int shape_key_move_exec(bContext *C, wmOperator *op) } } - if (type==-1) { + if (type == -1) { /* move back */ - kb_other= kb->prev; + kb_other = kb->prev; BLI_remlink(&key->block, kb); BLI_insertlinkbefore(&key->block, kb_other, kb); ob->shapenr--; } else { /* move next */ - kb_other= kb->next; + kb_other = kb->next; BLI_remlink(&key->block, kb); BLI_insertlinkafter(&key->block, kb_other, kb); ob->shapenr++; @@ -458,7 +458,7 @@ static int shape_key_move_exec(bContext *C, wmOperator *op) } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); return OPERATOR_FINISHED; } @@ -480,7 +480,7 @@ void OBJECT_OT_shape_key_move(wmOperatorType *ot) ot->exec = shape_key_move_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_enum(ot->srna, "type", slot_move, 0, "Type", ""); } diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index d0fc4f79817..1c0899ab551 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -78,57 +78,57 @@ static void object_clear_loc(Object *ob) { /* clear location if not locked */ - if ((ob->protectflag & OB_LOCK_LOCX)==0) - ob->loc[0]= ob->dloc[0]= 0.0f; - if ((ob->protectflag & OB_LOCK_LOCY)==0) - ob->loc[1]= ob->dloc[1]= 0.0f; - if ((ob->protectflag & OB_LOCK_LOCZ)==0) - ob->loc[2]= ob->dloc[2]= 0.0f; + if ((ob->protectflag & OB_LOCK_LOCX) == 0) + ob->loc[0] = ob->dloc[0] = 0.0f; + if ((ob->protectflag & OB_LOCK_LOCY) == 0) + ob->loc[1] = ob->dloc[1] = 0.0f; + if ((ob->protectflag & OB_LOCK_LOCZ) == 0) + ob->loc[2] = ob->dloc[2] = 0.0f; } /* clear rotation of object */ static void object_clear_rot(Object *ob) { /* clear rotations that aren't locked */ - if (ob->protectflag & (OB_LOCK_ROTX|OB_LOCK_ROTY|OB_LOCK_ROTZ|OB_LOCK_ROTW)) { + if (ob->protectflag & (OB_LOCK_ROTX | OB_LOCK_ROTY | OB_LOCK_ROTZ | OB_LOCK_ROTW)) { if (ob->protectflag & OB_LOCK_ROT4D) { /* perform clamping on a component by component basis */ if (ob->rotmode == ROT_MODE_AXISANGLE) { if ((ob->protectflag & OB_LOCK_ROTW) == 0) - ob->rotAngle= ob->drotAngle= 0.0f; + ob->rotAngle = ob->drotAngle = 0.0f; if ((ob->protectflag & OB_LOCK_ROTX) == 0) - ob->rotAxis[0]= ob->drotAxis[0]= 0.0f; + ob->rotAxis[0] = ob->drotAxis[0] = 0.0f; if ((ob->protectflag & OB_LOCK_ROTY) == 0) - ob->rotAxis[1]= ob->drotAxis[1]= 0.0f; + ob->rotAxis[1] = ob->drotAxis[1] = 0.0f; if ((ob->protectflag & OB_LOCK_ROTZ) == 0) - ob->rotAxis[2]= ob->drotAxis[2]= 0.0f; + ob->rotAxis[2] = ob->drotAxis[2] = 0.0f; /* check validity of axis - axis should never be 0,0,0 (if so, then we make it rotate about y) */ if (IS_EQF(ob->rotAxis[0], ob->rotAxis[1]) && IS_EQF(ob->rotAxis[1], ob->rotAxis[2])) ob->rotAxis[1] = 1.0f; if (IS_EQF(ob->drotAxis[0], ob->drotAxis[1]) && IS_EQF(ob->drotAxis[1], ob->drotAxis[2])) - ob->drotAxis[1]= 1.0f; + ob->drotAxis[1] = 1.0f; } else if (ob->rotmode == ROT_MODE_QUAT) { if ((ob->protectflag & OB_LOCK_ROTW) == 0) - ob->quat[0]= ob->dquat[0]= 1.0f; + ob->quat[0] = ob->dquat[0] = 1.0f; if ((ob->protectflag & OB_LOCK_ROTX) == 0) - ob->quat[1]= ob->dquat[1]= 0.0f; + ob->quat[1] = ob->dquat[1] = 0.0f; if ((ob->protectflag & OB_LOCK_ROTY) == 0) - ob->quat[2]= ob->dquat[2]= 0.0f; + ob->quat[2] = ob->dquat[2] = 0.0f; if ((ob->protectflag & OB_LOCK_ROTZ) == 0) - ob->quat[3]= ob->dquat[3]= 0.0f; + ob->quat[3] = ob->dquat[3] = 0.0f; // TODO: does this quat need normalizing now? } else { /* the flag may have been set for the other modes, so just ignore the extra flag... */ if ((ob->protectflag & OB_LOCK_ROTX) == 0) - ob->rot[0]= ob->drot[0]= 0.0f; + ob->rot[0] = ob->drot[0] = 0.0f; if ((ob->protectflag & OB_LOCK_ROTY) == 0) - ob->rot[1]= ob->drot[1]= 0.0f; + ob->rot[1] = ob->drot[1] = 0.0f; if ((ob->protectflag & OB_LOCK_ROTZ) == 0) - ob->rot[2]= ob->drot[2]= 0.0f; + ob->rot[2] = ob->drot[2] = 0.0f; } } else { @@ -147,30 +147,30 @@ static void object_clear_rot(Object *ob) copy_v3_v3(oldeul, ob->rot); } - eul[0]= eul[1]= eul[2]= 0.0f; + eul[0] = eul[1] = eul[2] = 0.0f; if (ob->protectflag & OB_LOCK_ROTX) - eul[0]= oldeul[0]; + eul[0] = oldeul[0]; if (ob->protectflag & OB_LOCK_ROTY) - eul[1]= oldeul[1]; + eul[1] = oldeul[1]; if (ob->protectflag & OB_LOCK_ROTZ) - eul[2]= oldeul[2]; + eul[2] = oldeul[2]; if (ob->rotmode == ROT_MODE_QUAT) { eul_to_quat(ob->quat, eul); /* quaternions flip w sign to accumulate rotations correctly */ - if ((quat1[0]<0.0f && ob->quat[0]>0.0f) || (quat1[0]>0.0f && ob->quat[0]<0.0f)) { + if ((quat1[0] < 0.0f && ob->quat[0] > 0.0f) || (quat1[0] > 0.0f && ob->quat[0] < 0.0f)) { mul_qt_fl(ob->quat, -1.0f); } } else if (ob->rotmode == ROT_MODE_AXISANGLE) { - eulO_to_axis_angle(ob->rotAxis, &ob->rotAngle,eul, EULER_ORDER_DEFAULT); + eulO_to_axis_angle(ob->rotAxis, &ob->rotAngle, eul, EULER_ORDER_DEFAULT); } else { copy_v3_v3(ob->rot, eul); } } - } // Duplicated in source/blender/editors/armature/editarmature.c + } // Duplicated in source/blender/editors/armature/editarmature.c else { if (ob->rotmode == ROT_MODE_QUAT) { unit_qt(ob->quat); @@ -191,17 +191,17 @@ static void object_clear_rot(Object *ob) static void object_clear_scale(Object *ob) { /* clear scale factors which are not locked */ - if ((ob->protectflag & OB_LOCK_SCALEX)==0) { - ob->dscale[0]= 1.0f; - ob->size[0]= 1.0f; + if ((ob->protectflag & OB_LOCK_SCALEX) == 0) { + ob->dscale[0] = 1.0f; + ob->size[0] = 1.0f; } - if ((ob->protectflag & OB_LOCK_SCALEY)==0) { - ob->dscale[1]= 1.0f; - ob->size[1]= 1.0f; + if ((ob->protectflag & OB_LOCK_SCALEY) == 0) { + ob->dscale[1] = 1.0f; + ob->size[1] = 1.0f; } - if ((ob->protectflag & OB_LOCK_SCALEZ)==0) { - ob->dscale[2]= 1.0f; - ob->size[2]= 1.0f; + if ((ob->protectflag & OB_LOCK_SCALEZ) == 0) { + ob->dscale[2] = 1.0f; + ob->size[2] = 1.0f; } } @@ -209,10 +209,10 @@ static void object_clear_scale(Object *ob) /* generic exec for clear-transform operators */ static int object_clear_transform_generic_exec(bContext *C, wmOperator *op, - void (*clear_func)(Object*), const char default_ksName[]) + void (*clear_func)(Object *), const char default_ksName[]) { Main *bmain = CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); KeyingSet *ks; /* sanity checks */ @@ -227,7 +227,7 @@ static int object_clear_transform_generic_exec(bContext *C, wmOperator *op, /* operate on selected objects only if they aren't in weight-paint mode * (so that object-transform clearing won't be applied at same time as bone-clearing) */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (!(ob->mode & OB_MODE_WEIGHT_PAINT)) { /* run provided clearing function */ clear_func(ob); @@ -243,7 +243,7 @@ static int object_clear_transform_generic_exec(bContext *C, wmOperator *op, /* this is needed so children are also updated */ DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); return OPERATOR_FINISHED; } @@ -268,7 +268,7 @@ void OBJECT_OT_location_clear(wmOperatorType *ot) ot->poll = ED_operator_scene_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int object_rotation_clear_exec(bContext *C, wmOperator *op) @@ -288,7 +288,7 @@ void OBJECT_OT_rotation_clear(wmOperatorType *ot) ot->poll = ED_operator_scene_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int object_scale_clear_exec(bContext *C, wmOperator *op) @@ -308,22 +308,22 @@ void OBJECT_OT_scale_clear(wmOperatorType *ot) ot->poll = ED_operator_scene_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /* --------------- */ static int object_origin_clear_exec(bContext *C, wmOperator *UNUSED(op)) { - Main *bmain= CTX_data_main(C); + Main *bmain = CTX_data_main(C); float *v1, *v3; float mat[3][3]; - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (ob->parent) { /* vectors pointed to by v1 and v3 will get modified */ - v1= ob->loc; - v3= ob->parentinv[3]; + v1 = ob->loc; + v3 = ob->parentinv[3]; copy_m3_m4(mat, ob->parentinv); negate_v3_v3(v3, v1); @@ -336,7 +336,7 @@ static int object_origin_clear_exec(bContext *C, wmOperator *UNUSED(op)) DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); return OPERATOR_FINISHED; } @@ -353,20 +353,20 @@ void OBJECT_OT_origin_clear(wmOperatorType *ot) ot->poll = ED_operator_scene_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } /*************************** Apply Transformation ****************************/ /* use this when the loc/size/rot of the parent has changed but the children - * should stay in the same place, e.g. for apply-size-rot or object center */ -static void ignore_parent_tx(Main *bmain, Scene *scene, Object *ob ) +* should stay in the same place, e.g. for apply-size-rot or object center */ +static void ignore_parent_tx(Main *bmain, Scene *scene, Object *ob) { Object workob; Object *ob_child; /* a change was made, adjust the children to compensate */ - for (ob_child=bmain->object.first; ob_child; ob_child=ob_child->id.next) { + for (ob_child = bmain->object.first; ob_child; ob_child = ob_child->id.next) { if (ob_child->parent == ob) { object_apply_mat4(ob_child, ob_child->obmat, TRUE, FALSE); what_does_parent(scene, ob_child, &workob); @@ -377,21 +377,21 @@ static void ignore_parent_tx(Main *bmain, Scene *scene, Object *ob ) static int apply_objects_internal(bContext *C, ReportList *reports, int apply_loc, int apply_rot, int apply_scale) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); float rsmat[3][3], tmat[3][3], obmat[3][3], iobmat[3][3], mat[4][4], scale; int a, change = 0; /* first check if we can execute */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { - if (ob->type==OB_MESH) { + if (ob->type == OB_MESH) { if (ID_REAL_USERS(ob->data) > 1) { BKE_report(reports, RPT_ERROR, "Can't apply to a multi user mesh, doing nothing"); return OPERATOR_CANCELLED; } } - else if (ob->type==OB_ARMATURE) { + else if (ob->type == OB_ARMATURE) { if (ID_REAL_USERS(ob->data) > 1) { BKE_report(reports, RPT_ERROR, "Can't apply to a multi user armature, doing nothing"); return OPERATOR_CANCELLED; @@ -411,7 +411,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo return OPERATOR_CANCELLED; } - cu= ob->data; + cu = ob->data; if (!(cu->flag & CU_3D) && (apply_rot || apply_loc)) { BKE_report(reports, RPT_ERROR, "Neither rotation nor location could be applied to a 2d curve, doing nothing"); @@ -426,7 +426,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo CTX_DATA_END; /* now execute */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { /* calculate rotation/scale matrix */ if (apply_scale && apply_rot) @@ -464,24 +464,24 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo } /* apply to object data */ - if (ob->type==OB_MESH) { - Mesh *me= ob->data; + if (ob->type == OB_MESH) { + Mesh *me = ob->data; MVert *mvert; multiresModifier_scale_disp(scene, ob); /* adjust data */ - mvert= me->mvert; - for (a=0; atotvert; a++, mvert++) + mvert = me->mvert; + for (a = 0; a < me->totvert; a++, mvert++) mul_m4_v3(mat, mvert->co); if (me->key) { KeyBlock *kb; - for (kb=me->key->block.first; kb; kb=kb->next) { - float *fp= kb->data; + for (kb = me->key->block.first; kb; kb = kb->next) { + float *fp = kb->data; - for (a=0; atotelem; a++, fp+=3) + for (a = 0; a < kb->totelem; a++, fp += 3) mul_m4_v3(mat, fp); } } @@ -489,7 +489,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo /* update normals */ mesh_calc_normals_mapping(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL); } - else if (ob->type==OB_ARMATURE) { + else if (ob->type == OB_ARMATURE) { ED_armature_apply_transform(ob, mat); } else if (ob->type == OB_LATTICE) { @@ -503,7 +503,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo } } else if (ELEM(ob->type, OB_CURVE, OB_SURF)) { - Curve *cu= ob->data; + Curve *cu = ob->data; Nurb *nu; BPoint *bp; @@ -511,10 +511,10 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo scale = mat3_to_scale(rsmat); - for (nu=cu->nurb.first; nu; nu=nu->next) { + for (nu = cu->nurb.first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) { - a= nu->pntsu; - for (bezt= nu->bezt; a--; bezt++) { + a = nu->pntsu; + for (bezt = nu->bezt; a--; bezt++) { mul_m4_v3(mat, bezt->vec[0]); mul_m4_v3(mat, bezt->vec[1]); mul_m4_v3(mat, bezt->vec[2]); @@ -523,8 +523,8 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo calchandlesNurb(nu); } else { - a= nu->pntsu*nu->pntsv; - for (bp= nu->bp; a--; bp++) + a = nu->pntsu * nu->pntsv; + for (bp = nu->bp; a--; bp++) mul_m4_v3(mat, bp->vec); } } @@ -535,7 +535,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo if (apply_loc) zero_v3(ob->loc); if (apply_scale) - ob->size[0]= ob->size[1]= ob->size[2]= 1.0f; + ob->size[0] = ob->size[1] = ob->size[2] = 1.0f; if (apply_rot) { zero_v3(ob->rot); unit_qt(ob->quat); @@ -543,13 +543,13 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo } where_is_object(scene, ob); - if (ob->type==OB_ARMATURE) { + if (ob->type == OB_ARMATURE) { where_is_pose(scene, ob); /* needed for bone parents */ } ignore_parent_tx(bmain, scene, ob); - DAG_id_tag_update(&ob->id, OB_RECALC_OB|OB_RECALC_DATA); + DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA); change = 1; } @@ -558,16 +558,16 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo if (!change) return OPERATOR_CANCELLED; - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); return OPERATOR_FINISHED; } static int visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op)) { - Scene *scene= CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); int change = 0; - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { where_is_object(scene, ob); object_apply_mat4(ob, ob->obmat, TRUE, TRUE); where_is_object(scene, ob); @@ -582,7 +582,7 @@ static int visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op)) if (!change) return OPERATOR_CANCELLED; - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); return OPERATOR_FINISHED; } @@ -598,14 +598,14 @@ void OBJECT_OT_visual_transform_apply(wmOperatorType *ot) ot->poll = ED_operator_scene_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int object_transform_apply_exec(bContext *C, wmOperator *op) { - const int loc= RNA_boolean_get(op->ptr, "location"); - const int rot= RNA_boolean_get(op->ptr, "rotation"); - const int sca= RNA_boolean_get(op->ptr, "scale"); + const int loc = RNA_boolean_get(op->ptr, "location"); + const int rot = RNA_boolean_get(op->ptr, "rotation"); + const int sca = RNA_boolean_get(op->ptr, "scale"); if (loc || rot || sca) { return apply_objects_internal(C, op->reports, loc, rot, sca); @@ -627,7 +627,7 @@ void OBJECT_OT_transform_apply(wmOperatorType *ot) ot->poll = ED_operator_objectmode; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_boolean(ot->srna, "location", 0, "Location", ""); RNA_def_boolean(ot->srna, "rotation", 0, "Rotation", ""); @@ -637,23 +637,23 @@ void OBJECT_OT_transform_apply(wmOperatorType *ot) /********************* Set Object Center ************************/ enum { - GEOMETRY_TO_ORIGIN=0, + GEOMETRY_TO_ORIGIN = 0, ORIGIN_TO_GEOMETRY, ORIGIN_TO_CURSOR }; static int object_origin_set_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - Object *obedit= CTX_data_edit_object(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + Object *obedit = CTX_data_edit_object(C); Object *tob; float cursor[3], cent[3], cent_neg[3], centn[3], min[3], max[3]; int centermode = RNA_enum_get(op->ptr, "type"); int around = RNA_enum_get(op->ptr, "center"); /* initialized from v3d->around */ /* keep track of what is changed */ - int tot_change=0, tot_lib_error=0, tot_multiuser_arm_error=0; + int tot_change = 0, tot_lib_error = 0, tot_multiuser_arm_error = 0; if (obedit && centermode != GEOMETRY_TO_ORIGIN) { BKE_report(op->reports, RPT_ERROR, "Operation cannot be performed in EditMode"); @@ -661,10 +661,10 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) } else { /* get the view settings if 'around' isn't set and the view is available */ - View3D *v3d= CTX_wm_view3d(C); + View3D *v3d = CTX_wm_view3d(C); copy_v3_v3(cursor, give_cursor(scene, v3d)); if (v3d && !RNA_struct_property_is_set(op->ptr, "center")) - around= v3d->around; + around = v3d->around; } zero_v3(cent); @@ -672,8 +672,8 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) if (obedit) { INIT_MINMAX(min, max); - if (obedit->type==OB_MESH) { - Mesh *me= obedit->data; + if (obedit->type == OB_MESH) { + Mesh *me = obedit->data; BMEditMesh *em = me->edit_btmesh; BMVert *eve; BMIter iter; @@ -686,10 +686,10 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) } else { BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { - if (around==V3D_CENTROID) { + if (around == V3D_CENTROID) { total++; add_v3_v3(cent, eve->co); - mul_v3_fl(cent, 1.0f/(float)total); + mul_v3_fl(cent, 1.0f / (float)total); } else { DO_MINMAX(eve->co, min, max); @@ -705,24 +705,24 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) EDBM_mesh_normals_update(em); tot_change++; DAG_id_tag_update(&obedit->id, OB_RECALC_DATA); - } + } } /* reset flags */ - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { - ob->flag &= ~OB_DONE; + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + ob->flag &= ~OB_DONE; } CTX_DATA_END; - for (tob= bmain->object.first; tob; tob= tob->id.next) { + for (tob = bmain->object.first; tob; tob = tob->id.next) { if (tob->data) ((ID *)tob->data)->flag &= ~LIB_DOIT; if (tob->dup_group) ((ID *)tob->dup_group)->flag &= ~LIB_DOIT; } - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { - if ((ob->flag & OB_DONE)==0) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { + if ((ob->flag & OB_DONE) == 0) { int do_inverse_offset = FALSE; ob->flag |= OB_DONE; @@ -734,7 +734,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) if (ob->data == NULL) { /* special support for dupligroups */ - if ((ob->transflag & OB_DUPLIGROUP) && ob->dup_group && (ob->dup_group->id.flag & LIB_DOIT)==0) { + if ((ob->transflag & OB_DUPLIGROUP) && ob->dup_group && (ob->dup_group->id.flag & LIB_DOIT) == 0) { if (ob->dup_group->id.lib) { tot_lib_error++; } @@ -753,7 +753,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) tot_change++; ob->dup_group->id.flag |= LIB_DOIT; - do_inverse_offset= TRUE; + do_inverse_offset = TRUE; } } } @@ -761,11 +761,11 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) tot_lib_error++; } - if (obedit==NULL && ob->type==OB_MESH) { - Mesh *me= ob->data; + if (obedit == NULL && ob->type == OB_MESH) { + Mesh *me = ob->data; if (centermode == ORIGIN_TO_CURSOR) { /* done */ } - else if (around==V3D_CENTROID) { mesh_center_median(me, cent); } + else if (around == V3D_CENTROID) { mesh_center_median(me, cent); } else { mesh_center_bounds(me, cent); } negate_v3_v3(cent_neg, cent); @@ -773,14 +773,14 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) tot_change++; me->id.flag |= LIB_DOIT; - do_inverse_offset= TRUE; + do_inverse_offset = TRUE; } else if (ELEM(ob->type, OB_CURVE, OB_SURF)) { - Curve *cu= ob->data; + Curve *cu = ob->data; if (centermode == ORIGIN_TO_CURSOR) { /* done */ } - else if (around==V3D_CENTROID) { curve_center_median(cu, cent); } - else { curve_center_bounds(cu, cent); } + else if (around == V3D_CENTROID) { curve_center_median(cu, cent); } + else { curve_center_bounds(cu, cent); } /* don't allow Z change if curve is 2D */ if ((ob->type == OB_CURVE) && !(cu->flag & CU_3D)) @@ -791,7 +791,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) tot_change++; cu->id.flag |= LIB_DOIT; - do_inverse_offset= TRUE; + do_inverse_offset = TRUE; if (obedit) { if (centermode == GEOMETRY_TO_ORIGIN) { @@ -800,12 +800,12 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) break; } } - else if (ob->type==OB_FONT) { + else if (ob->type == OB_FONT) { /* get from bb */ - Curve *cu= ob->data; + Curve *cu = ob->data; - if (cu->bb==NULL && (centermode != ORIGIN_TO_CURSOR)) { + if (cu->bb == NULL && (centermode != ORIGIN_TO_CURSOR)) { /* do nothing*/ } else { @@ -813,21 +813,21 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) /* done */ } else { - cent[0]= 0.5f * ( cu->bb->vec[4][0] + cu->bb->vec[0][0]); - cent[1]= 0.5f * ( cu->bb->vec[0][1] + cu->bb->vec[2][1]) - 0.5f; /* extra 0.5 is the height o above line */ + cent[0] = 0.5f * (cu->bb->vec[4][0] + cu->bb->vec[0][0]); + cent[1] = 0.5f * (cu->bb->vec[0][1] + cu->bb->vec[2][1]) - 0.5f; /* extra 0.5 is the height o above line */ } - cent[2]= 0.0f; + cent[2] = 0.0f; - cu->xof= cu->xof - (cent[0] / cu->fsize); - cu->yof= cu->yof - (cent[1] / cu->fsize); + cu->xof = cu->xof - (cent[0] / cu->fsize); + cu->yof = cu->yof - (cent[1] / cu->fsize); tot_change++; cu->id.flag |= LIB_DOIT; - do_inverse_offset= TRUE; + do_inverse_offset = TRUE; } } - else if (ob->type==OB_ARMATURE) { + else if (ob->type == OB_ARMATURE) { bArmature *arm = ob->data; if (ID_REAL_USERS(arm) > 1) { @@ -860,15 +860,15 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) MetaBall *mb = ob->data; if (centermode == ORIGIN_TO_CURSOR) { /* done */ } - else if (around==V3D_CENTROID) { BKE_metaball_center_median(mb, cent); } - else { BKE_metaball_center_bounds(mb, cent); } + else if (around == V3D_CENTROID) { BKE_metaball_center_median(mb, cent); } + else { BKE_metaball_center_bounds(mb, cent); } negate_v3_v3(cent_neg, cent); BKE_metaball_translate(mb, cent_neg); tot_change++; mb->id.flag |= LIB_DOIT; - do_inverse_offset= TRUE; + do_inverse_offset = TRUE; if (obedit) { if (centermode == GEOMETRY_TO_ORIGIN) { @@ -887,28 +887,28 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) add_v3_v3(ob->loc, centn); where_is_object(scene, ob); - if (ob->type==OB_ARMATURE) { + if (ob->type == OB_ARMATURE) { where_is_pose(scene, ob); /* needed for bone parents */ } ignore_parent_tx(bmain, scene, ob); /* other users? */ - CTX_DATA_BEGIN (C, Object*, ob_other, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob_other, selected_editable_objects) { if ((ob_other->flag & OB_DONE) == 0 && ((ob->data && (ob->data == ob_other->data)) || (ob->dup_group == ob_other->dup_group && (ob->transflag | ob_other->transflag) & OB_DUPLIGROUP))) { ob_other->flag |= OB_DONE; - DAG_id_tag_update(&ob_other->id, OB_RECALC_OB|OB_RECALC_DATA); + DAG_id_tag_update(&ob_other->id, OB_RECALC_OB | OB_RECALC_DATA); copy_v3_v3(centn, cent); mul_mat3_m4_v3(ob_other->obmat, centn); /* ommit translation part */ add_v3_v3(ob_other->loc, centn); where_is_object(scene, ob_other); - if (ob_other->type==OB_ARMATURE) { + if (ob_other->type == OB_ARMATURE) { where_is_pose(scene, ob_other); /* needed for bone parents */ } ignore_parent_tx(bmain, scene, ob_other); @@ -920,22 +920,22 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) } CTX_DATA_END; - for (tob= bmain->object.first; tob; tob= tob->id.next) + for (tob = bmain->object.first; tob; tob = tob->id.next) if (tob->data && (((ID *)tob->data)->flag & LIB_DOIT)) - DAG_id_tag_update(&tob->id, OB_RECALC_OB|OB_RECALC_DATA); + DAG_id_tag_update(&tob->id, OB_RECALC_OB | OB_RECALC_DATA); if (tot_change) { DAG_ids_flush_update(bmain, 0); - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL); + WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL); } /* Warn if any errors occurred */ - if (tot_lib_error+tot_multiuser_arm_error) { - BKE_reportf(op->reports, RPT_WARNING, "%i Object(s) Not Centered, %i Changed:",tot_lib_error+tot_multiuser_arm_error, tot_change); + if (tot_lib_error + tot_multiuser_arm_error) { + BKE_reportf(op->reports, RPT_WARNING, "%i Object(s) Not Centered, %i Changed:", tot_lib_error + tot_multiuser_arm_error, tot_change); if (tot_lib_error) - BKE_reportf(op->reports, RPT_WARNING, "|%i linked library objects",tot_lib_error); + BKE_reportf(op->reports, RPT_WARNING, "|%i linked library objects", tot_lib_error); if (tot_multiuser_arm_error) - BKE_reportf(op->reports, RPT_WARNING, "|%i multiuser armature object(s)",tot_multiuser_arm_error); + BKE_reportf(op->reports, RPT_WARNING, "|%i multiuser armature object(s)", tot_multiuser_arm_error); } return OPERATOR_FINISHED; @@ -968,7 +968,7 @@ void OBJECT_OT_origin_set(wmOperatorType *ot) ot->poll = ED_operator_scene_editable; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ot->prop = RNA_def_enum(ot->srna, "type", prop_set_center_types, 0, "Type", ""); RNA_def_enum(ot->srna, "center", prop_set_bounds_types, V3D_CENTROID, "Center", ""); diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index 1ddbc86a73f..6d5e098770a 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -84,9 +84,9 @@ static void vgroup_delete_all(Object *ob); static Lattice *vgroup_edit_lattice(Object *ob) { - Lattice *lt= ob->data; - BLI_assert(ob->type==OB_LATTICE); - return (lt->editlatt)? lt->editlatt->latt: lt; + Lattice *lt = ob->data; + BLI_assert(ob->type == OB_LATTICE); + return (lt->editlatt) ? lt->editlatt->latt : lt; } int ED_vgroup_object_is_edit_mode(Object *ob) @@ -94,7 +94,7 @@ int ED_vgroup_object_is_edit_mode(Object *ob) if (ob->type == OB_MESH) return (BMEdit_FromObject(ob) != NULL); else if (ob->type == OB_LATTICE) - return (((Lattice*)ob->data)->editlatt != NULL); + return (((Lattice *)ob->data)->editlatt != NULL); return 0; } @@ -144,18 +144,18 @@ void ED_vgroup_delete(Object *ob, bDeformGroup *defgroup) void ED_vgroup_clear(Object *ob) { - bDeformGroup *dg= (bDeformGroup *)ob->defbase.first; - int edit_mode= ED_vgroup_object_is_edit_mode(ob); + bDeformGroup *dg = (bDeformGroup *)ob->defbase.first; + int edit_mode = ED_vgroup_object_is_edit_mode(ob); while (dg) { - bDeformGroup *next_dg= dg->next; + bDeformGroup *next_dg = dg->next; if (edit_mode) vgroup_delete_edit_mode(ob, dg); else vgroup_delete_object_mode(ob, dg); - dg= next_dg; + dg = next_dg; } } @@ -163,14 +163,14 @@ int ED_vgroup_data_create(ID *id) { /* create deform verts */ - if (GS(id->name)==ID_ME) { - Mesh *me= (Mesh *)id; - me->dvert= CustomData_add_layer(&me->vdata, CD_MDEFORMVERT, CD_CALLOC, NULL, me->totvert); + if (GS(id->name) == ID_ME) { + Mesh *me = (Mesh *)id; + me->dvert = CustomData_add_layer(&me->vdata, CD_MDEFORMVERT, CD_CALLOC, NULL, me->totvert); return TRUE; } - else if (GS(id->name)==ID_LT) { - Lattice *lt= (Lattice *)id; - lt->dvert= MEM_callocN(sizeof(MDeformVert)*lt->pntsu*lt->pntsv*lt->pntsw, "lattice deformVert"); + else if (GS(id->name) == ID_LT) { + Lattice *lt = (Lattice *)id; + lt->dvert = MEM_callocN(sizeof(MDeformVert) * lt->pntsu * lt->pntsv * lt->pntsw, "lattice deformVert"); return TRUE; } else { @@ -201,7 +201,7 @@ static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_to i = em->bm->totvert; - *dvert_arr= MEM_mallocN(sizeof(void*)*i, "vgroup parray from me"); + *dvert_arr = MEM_mallocN(sizeof(void *) * i, "vgroup parray from me"); *dvert_tot = i; i = 0; @@ -222,21 +222,21 @@ static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_to return 1; } else if (me->dvert) { - MVert *mvert= me->mvert; - MDeformVert *dvert= me->dvert; + MVert *mvert = me->mvert; + MDeformVert *dvert = me->dvert; int i; - *dvert_tot= me->totvert; - *dvert_arr= MEM_mallocN(sizeof(void*)*me->totvert, "vgroup parray from me"); + *dvert_tot = me->totvert; + *dvert_arr = MEM_mallocN(sizeof(void *) * me->totvert, "vgroup parray from me"); if (use_vert_sel) { - for (i=0; itotvert; i++) { + for (i = 0; i < me->totvert; i++) { (*dvert_arr)[i] = (mvert[i].flag & SELECT) ? - &dvert[i] : NULL; + &dvert[i] : NULL; } } else { - for (i=0; itotvert; i++) { + for (i = 0; i < me->totvert; i++) { (*dvert_arr)[i] = me->dvert + i; } } @@ -249,24 +249,24 @@ static int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_to } case ID_LT: { - int i=0; + int i = 0; - Lattice *lt= (Lattice *)id; - lt= (lt->editlatt)? lt->editlatt->latt: lt; + Lattice *lt = (Lattice *)id; + lt = (lt->editlatt) ? lt->editlatt->latt : lt; if (lt->dvert) { - BPoint *def= lt->def; - *dvert_tot= lt->pntsu*lt->pntsv*lt->pntsw; - *dvert_arr= MEM_mallocN(sizeof(void*)*(*dvert_tot), "vgroup parray from me"); + BPoint *def = lt->def; + *dvert_tot = lt->pntsu * lt->pntsv * lt->pntsw; + *dvert_arr = MEM_mallocN(sizeof(void *) * (*dvert_tot), "vgroup parray from me"); if (use_vert_sel) { - for (i=0; i<*dvert_tot; i++) { + for (i = 0; i < *dvert_tot; i++) { (*dvert_arr)[i] = (def->f1 & SELECT) ? <->dvert[i] : NULL; } } else { - for (i=0; i<*dvert_tot; i++) { + for (i = 0; i < *dvert_tot; i++) { (*dvert_arr)[i] = lt->dvert + i; } } @@ -291,23 +291,23 @@ int ED_vgroup_give_array(ID *id, MDeformVert **dvert_arr, int *dvert_tot) case ID_ME: { Mesh *me = (Mesh *)id; - *dvert_arr= me->dvert; - *dvert_tot= me->totvert; + *dvert_arr = me->dvert; + *dvert_tot = me->totvert; return TRUE; } case ID_LT: { - Lattice *lt= (Lattice *)id; - lt= (lt->editlatt)? lt->editlatt->latt: lt; - *dvert_arr= lt->dvert; - *dvert_tot= lt->pntsu*lt->pntsv*lt->pntsw; + Lattice *lt = (Lattice *)id; + lt = (lt->editlatt) ? lt->editlatt->latt : lt; + *dvert_arr = lt->dvert; + *dvert_tot = lt->pntsu * lt->pntsv * lt->pntsw; return TRUE; } } } - *dvert_arr= NULL; - *dvert_tot= 0; + *dvert_arr = NULL; + *dvert_tot = 0; return FALSE; } @@ -319,19 +319,19 @@ int ED_vgroup_copy_array(Object *ob, Object *ob_from) int dvert_tot_from; int dvert_tot; int i; - int defbase_tot_from= BLI_countlist(&ob_from->defbase); - int defbase_tot= BLI_countlist(&ob->defbase); - short new_vgroup= FALSE; + int defbase_tot_from = BLI_countlist(&ob_from->defbase); + int defbase_tot = BLI_countlist(&ob->defbase); + short new_vgroup = FALSE; ED_vgroup_give_parray(ob_from->data, &dvert_array_from, &dvert_tot_from, FALSE); ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot, FALSE); if ((dvert_array == NULL) && (dvert_array_from != NULL) && ED_vgroup_data_create(ob->data)) { ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot, FALSE); - new_vgroup= TRUE; + new_vgroup = TRUE; } - if (ob==ob_from || dvert_tot==0 || (dvert_tot != dvert_tot_from) || dvert_array_from==NULL || dvert_array==NULL) { + if (ob == ob_from || dvert_tot == 0 || (dvert_tot != dvert_tot_from) || dvert_array_from == NULL || dvert_array == NULL) { if (dvert_array) MEM_freeN(dvert_array); if (dvert_array_from) MEM_freeN(dvert_array_from); @@ -345,29 +345,29 @@ int ED_vgroup_copy_array(Object *ob, Object *ob_from) /* do the copy */ BLI_freelistN(&ob->defbase); BLI_duplicatelist(&ob->defbase, &ob_from->defbase); - ob->actdef= ob_from->actdef; + ob->actdef = ob_from->actdef; if (defbase_tot_from < defbase_tot) { /* correct vgroup indices because the number of vgroups is being reduced. */ - int *remap= MEM_mallocN(sizeof(int) * (defbase_tot + 1), __func__); - for (i=0; i<=defbase_tot_from; i++) remap[i]= i; - for (; i<=defbase_tot; i++) remap[i]= 0; /* can't use these, so disable */ + int *remap = MEM_mallocN(sizeof(int) * (defbase_tot + 1), __func__); + for (i = 0; i <= defbase_tot_from; i++) remap[i] = i; + for (; i <= defbase_tot; i++) remap[i] = 0; /* can't use these, so disable */ vgroup_remap_update_users(ob, remap); MEM_freeN(remap); } - dvf= dvert_array_from; - dv= dvert_array; + dvf = dvert_array_from; + dv = dvert_array; - for (i=0; idw) MEM_freeN((*dv)->dw); - *(*dv)= *(*dvf); + *(*dv) = *(*dvf); if ((*dv)->dw) - (*dv)->dw= MEM_dupallocN((*dv)->dw); + (*dv)->dw = MEM_dupallocN((*dv)->dw); } MEM_freeN(dvert_array); @@ -386,13 +386,13 @@ static void ED_vgroup_nr_vert_add(Object *ob, /* add the vert to the deform group with the * specified number */ - MDeformVert *dvert= NULL; - int tot; + MDeformVert *dvert = NULL; + int tot; /* get the vert */ ED_vgroup_give_array(ob->data, &dvert, &tot); - if (dvert==NULL) + if (dvert == NULL) return; /* check that vertnum is valid before trying to get the relevant dvert */ @@ -401,7 +401,7 @@ static void ED_vgroup_nr_vert_add(Object *ob, if (dvert) { - MDeformVert *dv= &dvert[vertnum]; + MDeformVert *dv = &dvert[vertnum]; MDeformWeight *dw; /* Lets first check to see if this vert is @@ -409,27 +409,27 @@ static void ED_vgroup_nr_vert_add(Object *ob, * lets update it */ - dw= defvert_find_index(dv, def_nr); + dw = defvert_find_index(dv, def_nr); if (dw) { switch (assignmode) { - case WEIGHT_REPLACE: - dw->weight = weight; - break; - case WEIGHT_ADD: - dw->weight += weight; - if (dw->weight >= 1.0f) - dw->weight = 1.0f; - break; - case WEIGHT_SUBTRACT: - dw->weight -= weight; - /* if the weight is zero or less then - * remove the vert from the deform group - */ - if (dw->weight <= 0.0f) { - defvert_remove_group(dv, dw); - } - break; + case WEIGHT_REPLACE: + dw->weight = weight; + break; + case WEIGHT_ADD: + dw->weight += weight; + if (dw->weight >= 1.0f) + dw->weight = 1.0f; + break; + case WEIGHT_SUBTRACT: + dw->weight -= weight; + /* if the weight is zero or less then + * remove the vert from the deform group + */ + if (dw->weight <= 0.0f) { + defvert_remove_group(dv, dw); + } + break; } } else { @@ -438,20 +438,20 @@ static void ED_vgroup_nr_vert_add(Object *ob, */ switch (assignmode) { - case WEIGHT_SUBTRACT: - /* if we are subtracting then we don't - * need to do anything - */ - return; + case WEIGHT_SUBTRACT: + /* if we are subtracting then we don't + * need to do anything + */ + return; - case WEIGHT_REPLACE: - case WEIGHT_ADD: - /* if we are doing an additive assignment, then - * we need to create the deform weight - */ + case WEIGHT_REPLACE: + case WEIGHT_ADD: + /* if we are doing an additive assignment, then + * we need to create the deform weight + */ - /* we checked if the vertex was added before so no need to test again, simply add */ - defvert_add_index_notest(dv, def_nr, weight); + /* we checked if the vertex was added before so no need to test again, simply add */ + defvert_add_index_notest(dv, def_nr, weight); } } } @@ -463,9 +463,9 @@ void ED_vgroup_vert_add(Object *ob, bDeformGroup *dg, int vertnum, float weight, /* add the vert to the deform group with the * specified assign mode */ - const int def_nr= BLI_findindex(&ob->defbase, dg); + const int def_nr = BLI_findindex(&ob->defbase, dg); - MDeformVert *dv= NULL; + MDeformVert *dv = NULL; int tot; /* get the deform group number, exit if @@ -475,7 +475,7 @@ void ED_vgroup_vert_add(Object *ob, bDeformGroup *dg, int vertnum, float weight, /* if there's no deform verts then create some, */ - if (ED_vgroup_give_array(ob->data, &dv, &tot) && dv==NULL) + if (ED_vgroup_give_array(ob->data, &dv, &tot) && dv == NULL) ED_vgroup_data_create(ob->data); /* call another function to do the work @@ -484,17 +484,17 @@ void ED_vgroup_vert_add(Object *ob, bDeformGroup *dg, int vertnum, float weight, } /* mesh object mode, lattice can be in editmode */ -void ED_vgroup_vert_remove(Object *ob, bDeformGroup *dg, int vertnum) +void ED_vgroup_vert_remove(Object *ob, bDeformGroup *dg, int vertnum) { /* This routine removes the vertex from the specified * deform group. */ /* TODO, this is slow in a loop, better pass def_nr directly, but leave for later... - campbell */ - const int def_nr= BLI_findindex(&ob->defbase, dg); + const int def_nr = BLI_findindex(&ob->defbase, dg); if (def_nr != -1) { - MDeformVert *dvert= NULL; + MDeformVert *dvert = NULL; int tot; /* get the deform vertices corresponding to the @@ -503,10 +503,10 @@ void ED_vgroup_vert_remove(Object *ob, bDeformGroup *dg, int vertnum) ED_vgroup_give_array(ob->data, &dvert, &tot); if (dvert) { - MDeformVert *dv= &dvert[vertnum]; + MDeformVert *dv = &dvert[vertnum]; MDeformWeight *dw; - dw= defvert_find_index(dv, def_nr); + dw = defvert_find_index(dv, def_nr); defvert_remove_group(dv, dw); /* dw can be NULL */ } } @@ -514,20 +514,20 @@ void ED_vgroup_vert_remove(Object *ob, bDeformGroup *dg, int vertnum) static float get_vert_def_nr(Object *ob, const int def_nr, const int vertnum) { - MDeformVert *dv= NULL; + MDeformVert *dv = NULL; BMVert *eve; Mesh *me; /* get the deform vertices corresponding to the vertnum */ - if (ob->type==OB_MESH) { - me= ob->data; + if (ob->type == OB_MESH) { + me = ob->data; if (me->edit_btmesh) { - eve= BM_vert_at_index(me->edit_btmesh->bm, vertnum); + eve = BM_vert_at_index(me->edit_btmesh->bm, vertnum); if (!eve) { return 0.0f; } - dv= CustomData_bmesh_get(&me->edit_btmesh->bm->vdata, eve->head.data, CD_MDEFORMVERT); + dv = CustomData_bmesh_get(&me->edit_btmesh->bm->vdata, eve->head.data, CD_MDEFORMVERT); } else { if (vertnum >= me->totvert) { @@ -536,11 +536,11 @@ static float get_vert_def_nr(Object *ob, const int def_nr, const int vertnum) dv = &me->dvert[vertnum]; } } - else if (ob->type==OB_LATTICE) { - Lattice *lt= vgroup_edit_lattice(ob); + else if (ob->type == OB_LATTICE) { + Lattice *lt = vgroup_edit_lattice(ob); if (lt->dvert) { - if (vertnum >= lt->pntsu*lt->pntsv*lt->pntsw) { + if (vertnum >= lt->pntsu * lt->pntsv * lt->pntsw) { return 0.0f; } dv = <->dvert[vertnum]; @@ -548,7 +548,7 @@ static float get_vert_def_nr(Object *ob, const int def_nr, const int vertnum) } if (dv) { - MDeformWeight *dw= defvert_find_index(dv, def_nr); + MDeformWeight *dw = defvert_find_index(dv, def_nr); if (dw) { return dw->weight; } @@ -559,7 +559,7 @@ static float get_vert_def_nr(Object *ob, const int def_nr, const int vertnum) float ED_vgroup_vert_weight(Object *ob, bDeformGroup *dg, int vertnum) { - const int def_nr= BLI_findindex(&ob->defbase, dg); + const int def_nr = BLI_findindex(&ob->defbase, dg); if (def_nr == -1) { return -1; @@ -569,8 +569,8 @@ float ED_vgroup_vert_weight(Object *ob, bDeformGroup *dg, int vertnum) } void ED_vgroup_select_by_name(Object *ob, const char *name) -{ /* note: ob->actdef==0 signals on painting to create a new one, if a bone in posemode is selected */ - ob->actdef= defgroup_name_index(ob, name) + 1; +{ /* note: ob->actdef==0 signals on painting to create a new one, if a bone in posemode is selected */ + ob->actdef = defgroup_name_index(ob, name) + 1; } /********************** Operator Implementations *********************/ @@ -578,7 +578,7 @@ void ED_vgroup_select_by_name(Object *ob, const char *name) /* only in editmode */ static void vgroup_select_verts(Object *ob, int select) { - const int def_nr= ob->actdef-1; + const int def_nr = ob->actdef - 1; MDeformVert *dv; if (!BLI_findlink(&ob->defbase, def_nr)) { @@ -586,7 +586,7 @@ static void vgroup_select_verts(Object *ob, int select) } if (ob->type == OB_MESH) { - Mesh *me= ob->data; + Mesh *me = ob->data; if (me->edit_btmesh) { BMEditMesh *em = me->edit_btmesh; @@ -595,7 +595,7 @@ static void vgroup_select_verts(Object *ob, int select) BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) { - dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); + dv = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (defvert_find_index(dv, def_nr)) { BM_vert_select_set(em->bm, eve, select); } @@ -603,7 +603,7 @@ static void vgroup_select_verts(Object *ob, int select) } /* this has to be called, because this function operates on vertices only */ - if (select) EDBM_select_flush(em); // vertices to edges/faces + if (select) EDBM_select_flush(em); // vertices to edges/faces else EDBM_deselect_flush(em); } else { @@ -615,11 +615,11 @@ static void vgroup_select_verts(Object *ob, int select) mv = me->mvert; dv = me->dvert; - for (i=0; itotvert; i++, mv++, dv++) { + for (i = 0; i < me->totvert; i++, mv++, dv++) { if (!(mv->flag & ME_HIDE)) { if (defvert_find_index(dv, def_nr)) { - if (select) mv->flag |= SELECT; - else mv->flag &= ~SELECT; + if (select) mv->flag |= SELECT; + else mv->flag &= ~SELECT; } } } @@ -629,19 +629,19 @@ static void vgroup_select_verts(Object *ob, int select) } } else if (ob->type == OB_LATTICE) { - Lattice *lt= vgroup_edit_lattice(ob); + Lattice *lt = vgroup_edit_lattice(ob); if (lt->dvert) { BPoint *bp; int a, tot; - dv= lt->dvert; + dv = lt->dvert; - tot= lt->pntsu*lt->pntsv*lt->pntsw; - for (a=0, bp= lt->def; apntsu * lt->pntsv * lt->pntsw; + for (a = 0, bp = lt->def; a < tot; a++, bp++, dv++) { if (defvert_find_index(dv, def_nr)) { - if (select) bp->f1 |= SELECT; - else bp->f1 &= ~SELECT; + if (select) bp->f1 |= SELECT; + else bp->f1 &= ~SELECT; } } } @@ -653,10 +653,10 @@ static void vgroup_duplicate(Object *ob) bDeformGroup *dg, *cdg; char name[sizeof(dg->name)]; MDeformWeight *dw_org, *dw_cpy; - MDeformVert **dvert_array=NULL; - int i, idg, icdg, dvert_tot=0; + MDeformVert **dvert_array = NULL; + int i, idg, icdg, dvert_tot = 0; - dg = BLI_findlink(&ob->defbase, (ob->actdef-1)); + dg = BLI_findlink(&ob->defbase, (ob->actdef - 1)); if (!dg) return; @@ -673,16 +673,16 @@ static void vgroup_duplicate(Object *ob) BLI_addtail(&ob->defbase, cdg); - idg = (ob->actdef-1); + idg = (ob->actdef - 1); ob->actdef = BLI_countlist(&ob->defbase); - icdg = (ob->actdef-1); + icdg = (ob->actdef - 1); /* TODO, we might want to allow only copy selected verts here? - campbell */ ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot, FALSE); if (dvert_array) { for (i = 0; i < dvert_tot; i++) { - MDeformVert *dv= dvert_array[i]; + MDeformVert *dv = dvert_array[i]; dw_org = defvert_find_index(dv, idg); if (dw_org) { /* defvert_verify_index re-allocs org so need to store the weight first */ @@ -698,9 +698,9 @@ static void vgroup_duplicate(Object *ob) static void vgroup_normalize(Object *ob) { MDeformWeight *dw; - MDeformVert *dv, **dvert_array=NULL; - int i, dvert_tot=0; - const int def_nr= ob->actdef-1; + MDeformVert *dv, **dvert_array = NULL; + int i, dvert_tot = 0; + const int def_nr = ob->actdef - 1; const int use_vert_sel = (ob->type == OB_MESH && ((Mesh *)ob->data)->editflag & ME_EDIT_VERT_SEL) != 0; @@ -751,7 +751,7 @@ static void vgroup_normalize(Object *ob) /* This finds all of the vertices face-connected to vert by an edge and returns a * MEM_allocated array of indices of size count. * count is an int passed by reference so it can be assigned the value of the length here. */ -static int* getSurroundingVerts(Mesh *me, int vert, int *count) +static int *getSurroundingVerts(Mesh *me, int vert, int *count) { MPoly *mp = me->mpoly; int i = me->totpoly; @@ -778,12 +778,12 @@ static int* getSurroundingVerts(Mesh *me, int vert, int *count) } else if (!j) { /* We are on the last corner. */ - a = (ml-1)->v; + a = (ml - 1)->v; b = me->mloop[mp->loopstart].v; } else { - a = (ml-1)->v; - b = (ml+1)->v; + a = (ml - 1)->v; + b = (ml + 1)->v; } /* Append a and b verts to array, if not yet present. */ @@ -823,7 +823,7 @@ static void getSingleCoordinate(MVert *points, int count, float coord[3]) for (i = 0; i < count; i++) { add_v3_v3(coord, points[i].co); } - mul_v3_fl(coord, 1.0f/count); + mul_v3_fl(coord, 1.0f / count); } /* given a plane and a start and end position, @@ -853,7 +853,7 @@ static void getVerticalAndHorizontalChange(const float norm[3], float d, const f // I need the derived mesh to be forgotten so the positions are recalculated with weight changes (see dm_deform_recalc) static void dm_deform_clear(DerivedMesh *dm, Object *ob) { - if (ob->derivedDeform && (ob->derivedDeform)==dm) { + if (ob->derivedDeform && (ob->derivedDeform) == dm) { ob->derivedDeform->needsFree = 1; ob->derivedDeform->release(ob->derivedDeform); ob->derivedDeform = NULL; @@ -865,7 +865,7 @@ static void dm_deform_clear(DerivedMesh *dm, Object *ob) } /* recalculate the deformation */ -static DerivedMesh* dm_deform_recalc(Scene *scene, Object *ob) +static DerivedMesh *dm_deform_recalc(Scene *scene, Object *ob) { return mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH); } @@ -885,19 +885,19 @@ static void moveCloserToDistanceFromPlane(Scene *scene, Object *ob, Mesh *me, in DerivedMesh *dm; MDeformWeight *dw; MVert m; - MDeformVert *dvert = me->dvert+index; + MDeformVert *dvert = me->dvert + index; int totweight = dvert->totweight; float oldw = 0; float oldPos[3] = {0}; float vc, hc, dist = 0.0f; int i, k; - float (*changes)[2] = MEM_mallocN(sizeof(float *)*totweight*2, "vertHorzChange"); - float *dists = MEM_mallocN(sizeof(float)*totweight, "distance"); + float (*changes)[2] = MEM_mallocN(sizeof(float *) * totweight * 2, "vertHorzChange"); + float *dists = MEM_mallocN(sizeof(float) * totweight, "distance"); /* track if up or down moved it closer for each bone */ - int *upDown = MEM_callocN(sizeof(int)*totweight, "upDownTracker"); + int *upDown = MEM_callocN(sizeof(int) * totweight, "upDownTracker"); - int *dwIndices = MEM_callocN(sizeof(int)*totweight, "dwIndexTracker"); + int *dwIndices = MEM_callocN(sizeof(int) * totweight, "dwIndexTracker"); float distToStart; int bestIndex = 0; char wasChange; @@ -912,11 +912,11 @@ static void moveCloserToDistanceFromPlane(Scene *scene, Object *ob, Mesh *me, in distToStart = dot_v3v3(norm, oldPos) + d; if (distToBe == originalDistToBe) { - distToBe += distToStart - distToStart*strength; + distToBe += distToStart - distToStart * strength; } for (i = 0; i < totweight; i++) { dwIndices[i] = i; - dw = (dvert->dw+i); + dw = (dvert->dw + i); vc = hc = 0; if (!dw->weight) { changes[i][0] = 0; @@ -930,10 +930,10 @@ static void moveCloserToDistanceFromPlane(Scene *scene, Object *ob, Mesh *me, in } oldw = dw->weight; if (k) { - dw->weight *= 1+cp; + dw->weight *= 1 + cp; } else { - dw->weight /= 1+cp; + dw->weight /= 1 + cp; } if (dw->weight == oldw) { changes[i][0] = 0; @@ -976,7 +976,7 @@ static void moveCloserToDistanceFromPlane(Scene *scene, Object *ob, Mesh *me, in float tf; int ti; bestIndex = k; - for (i = k+1; i < totweight; i++) { + for (i = k + 1; i < totweight; i++) { dist = dists[i]; if (fabs(dist) > fabs(dists[i])) { @@ -1009,7 +1009,7 @@ static void moveCloserToDistanceFromPlane(Scene *scene, Object *ob, Mesh *me, in bestIndex = -1; // find the best change with an acceptable horizontal change for (i = 0; i < totweight; i++) { - if (fabs(changes[i][0]) > fabs(changes[i][1]*2.0f)) { + if (fabs(changes[i][0]) > fabs(changes[i][1] * 2.0f)) { bestIndex = i; break; } @@ -1025,13 +1025,13 @@ static void moveCloserToDistanceFromPlane(Scene *scene, Object *ob, Mesh *me, in } lastIndex = bestIndex; wasUp = upDown[bestIndex]; - dw = (dvert->dw+dwIndices[bestIndex]); + dw = (dvert->dw + dwIndices[bestIndex]); oldw = dw->weight; if (upDown[bestIndex]) { - dw->weight *= 1+cp; + dw->weight *= 1 + cp; } else { - dw->weight /= 1+cp; + dw->weight /= 1 + cp; } if (dw->weight > 1) { dw->weight = 1; @@ -1065,10 +1065,10 @@ static void vgroup_fix(Scene *scene, Object *ob, float distToBe, float strength, return; for (i = 0; i < me->totvert && mvert; i++, mvert++) { if (mvert->flag & SELECT) { - int count=0; + int count = 0; if ((verts = getSurroundingVerts(me, i, &count))) { MVert m; - MVert *p = MEM_callocN(sizeof(MVert)*(count), "deformedPoints"); + MVert *p = MEM_callocN(sizeof(MVert) * (count), "deformedPoints"); int k; DerivedMesh *dm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH); @@ -1085,7 +1085,7 @@ static void vgroup_fix(Scene *scene, Object *ob, float distToBe, float strength, getSingleCoordinate(p, count, coord); dm->getVert(dm, i, &m); sub_v3_v3v3(norm, m.co, coord); - mag= normalize_v3(norm); + mag = normalize_v3(norm); if (mag) { /* zeros fix */ d = -dot_v3v3(norm, coord); /* dist = (dot_v3v3(norm, m.co) + d); */ /* UNUSED */ @@ -1103,9 +1103,9 @@ static void vgroup_fix(Scene *scene, Object *ob, float distToBe, float strength, static void vgroup_levels(Object *ob, float offset, float gain) { MDeformWeight *dw; - MDeformVert *dv, **dvert_array=NULL; - int i, dvert_tot=0; - const int def_nr= ob->actdef-1; + MDeformVert *dv, **dvert_array = NULL; + int i, dvert_tot = 0; + const int def_nr = ob->actdef - 1; const int use_vert_sel = (ob->type == OB_MESH && ((Mesh *)ob->data)->editflag & ME_EDIT_VERT_SEL) != 0; @@ -1138,9 +1138,9 @@ static void vgroup_levels(Object *ob, float offset, float gain) /* TODO - select between groups */ static void vgroup_normalize_all(Object *ob, int lock_active) { - MDeformVert *dv, **dvert_array=NULL; - int i, dvert_tot=0; - const int def_nr= ob->actdef-1; + MDeformVert *dv, **dvert_array = NULL; + int i, dvert_tot = 0; + const int def_nr = ob->actdef - 1; const int use_vert_sel = (ob->type == OB_MESH && ((Mesh *)ob->data)->editflag & ME_EDIT_VERT_SEL) != 0; @@ -1184,16 +1184,16 @@ static void vgroup_lock_all(Object *ob, int action) bDeformGroup *dg; if (action == SEL_TOGGLE) { - action= SEL_SELECT; - for (dg= ob->defbase.first; dg; dg= dg->next) { + action = SEL_SELECT; + for (dg = ob->defbase.first; dg; dg = dg->next) { if (dg->flag & DG_LOCK_WEIGHT) { - action= SEL_DESELECT; + action = SEL_DESELECT; break; } } } - for (dg= ob->defbase.first; dg; dg= dg->next) { + for (dg = ob->defbase.first; dg; dg = dg->next) { switch (action) { case SEL_SELECT: dg->flag |= DG_LOCK_WEIGHT; @@ -1211,9 +1211,9 @@ static void vgroup_lock_all(Object *ob, int action) static void vgroup_invert(Object *ob, const short auto_assign, const short auto_remove) { MDeformWeight *dw; - MDeformVert *dv, **dvert_array=NULL; - int i, dvert_tot=0; - const int def_nr= ob->actdef-1; + MDeformVert *dv, **dvert_array = NULL; + int i, dvert_tot = 0; + const int def_nr = ob->actdef - 1; const int use_vert_sel = (ob->type == OB_MESH && ((Mesh *)ob->data)->editflag & ME_EDIT_VERT_SEL) != 0; if (!BLI_findlink(&ob->defbase, def_nr)) { @@ -1231,10 +1231,10 @@ static void vgroup_invert(Object *ob, const short auto_assign, const short auto_ } if (auto_assign) { - dw= defvert_verify_index(dv, def_nr); + dw = defvert_verify_index(dv, def_nr); } else { - dw= defvert_find_index(dv, def_nr); + dw = defvert_find_index(dv, def_nr); } if (dw) { @@ -1254,8 +1254,8 @@ static void vgroup_blend(Object *ob, const float fac) { MDeformVert *dv; MDeformWeight *dw; - int i, dvert_tot=0; - const int def_nr= ob->actdef - 1; + int i, dvert_tot = 0; + const int def_nr = ob->actdef - 1; BLI_assert(fac >= 0.0 && fac <= 1.0f); @@ -1304,14 +1304,14 @@ static void vgroup_blend(Object *ob, const float fac) int i1 /* , i2 */; /* i1 is always the selected one */ if (sel1) { - i1= BM_elem_index_get(eed->v1); + i1 = BM_elem_index_get(eed->v1); /* i2= BM_elem_index_get(eed->v2); */ /* UNUSED */ - eve= eed->v2; + eve = eed->v2; } else { /* i2= BM_elem_index_get(eed->v1); */ /* UNUSED */ - i1= BM_elem_index_get(eed->v2); - eve= eed->v1; + i1 = BM_elem_index_get(eed->v2); + eve = eed->v1; } dv = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MDEFORMVERT); @@ -1385,9 +1385,9 @@ static void vgroup_blend(Object *ob, const float fac) static void vgroup_clean(Object *ob, const float epsilon, int keep_single) { MDeformWeight *dw; - MDeformVert *dv, **dvert_array=NULL; - int i, dvert_tot=0; - const int def_nr= ob->actdef-1; + MDeformVert *dv, **dvert_array = NULL; + int i, dvert_tot = 0; + const int def_nr = ob->actdef - 1; const int use_vert_sel = (ob->type == OB_MESH && ((Mesh *)ob->data)->editflag & ME_EDIT_VERT_SEL) != 0; if (!BLI_findlink(&ob->defbase, def_nr)) { @@ -1405,11 +1405,11 @@ static void vgroup_clean(Object *ob, const float epsilon, int keep_single) continue; } - dw= defvert_find_index(dv, def_nr); + dw = defvert_find_index(dv, def_nr); if (dw) { if (dw->weight <= epsilon) { - if (keep_single==FALSE || dv->totweight > 1) { + if (keep_single == FALSE || dv->totweight > 1) { defvert_remove_group(dv, dw); /* dw can be NULL */ } } @@ -1422,7 +1422,7 @@ static void vgroup_clean(Object *ob, const float epsilon, int keep_single) static void vgroup_clean_all(Object *ob, const float epsilon, const int keep_single) { - MDeformVert **dvert_array=NULL; + MDeformVert **dvert_array = NULL; int i, dvert_tot = 0; const int use_vert_sel = (ob->type == OB_MESH && ((Mesh *)ob->data)->editflag & ME_EDIT_VERT_SEL) != 0; @@ -1440,14 +1440,14 @@ static void vgroup_clean_all(Object *ob, const float epsilon, const int keep_sin continue; } - j= dv->totweight; + j = dv->totweight; while (j--) { if (keep_single && dv->totweight == 1) break; - dw= dv->dw + j; + dw = dv->dw + j; if (dw->weight <= epsilon) { defvert_remove_group(dv, dw); @@ -1475,14 +1475,14 @@ static void dvert_mirror_op(MDeformVert *dvert, MDeformVert *dvert_mirr, SWAP(MDeformVert, *dvert, *dvert_mirr); } else { - MDeformWeight *dw= defvert_find_index(dvert, act_vgroup); - MDeformWeight *dw_mirr= defvert_find_index(dvert_mirr, act_vgroup); + MDeformWeight *dw = defvert_find_index(dvert, act_vgroup); + MDeformWeight *dw_mirr = defvert_find_index(dvert_mirr, act_vgroup); if (dw || dw_mirr) { if (dw_mirr == NULL) - dw_mirr= defvert_verify_index(dvert_mirr, act_vgroup); + dw_mirr = defvert_verify_index(dvert_mirr, act_vgroup); if (dw == NULL) - dw= defvert_verify_index(dvert, act_vgroup); + dw = defvert_verify_index(dvert, act_vgroup); SWAP(float, dw->weight, dw_mirr->weight); } @@ -1532,19 +1532,19 @@ void ED_vgroup_mirror(Object *ob, const short mirror_weights, const short flip_v BMVert *eve, *eve_mirr; MDeformVert *dvert, *dvert_mirr; short sel, sel_mirr; - int *flip_map, flip_map_len; - const int def_nr= ob->actdef-1; + int *flip_map, flip_map_len; + const int def_nr = ob->actdef - 1; - if ( (mirror_weights==0 && flip_vgroups==0) || + if ( (mirror_weights == 0 && flip_vgroups == 0) || (BLI_findlink(&ob->defbase, def_nr) == NULL) ) { return; } if (flip_vgroups) { - flip_map= all_vgroups ? - defgroup_flip_map(ob, &flip_map_len, FALSE) : - defgroup_flip_map_single(ob, &flip_map_len, FALSE, def_nr); + flip_map = all_vgroups ? + defgroup_flip_map(ob, &flip_map_len, FALSE) : + defgroup_flip_map_single(ob, &flip_map_len, FALSE, def_nr); BLI_assert(flip_map != NULL); @@ -1554,13 +1554,13 @@ void ED_vgroup_mirror(Object *ob, const short mirror_weights, const short flip_v } } else { - flip_map= NULL; - flip_map_len= 0; + flip_map = NULL; + flip_map_len = 0; } /* only the active group */ if (ob->type == OB_MESH) { - Mesh *me= ob->data; + Mesh *me = ob->data; BMEditMesh *em = me->edit_btmesh; if (em) { @@ -1574,13 +1574,13 @@ void ED_vgroup_mirror(Object *ob, const short mirror_weights, const short flip_v /* Go through the list of editverts and assign them */ BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { - if ((eve_mirr= EDBM_verts_mirror_get(em, eve))) { - sel= BM_elem_flag_test(eve, BM_ELEM_SELECT); - sel_mirr= BM_elem_flag_test(eve_mirr, BM_ELEM_SELECT); + if ((eve_mirr = EDBM_verts_mirror_get(em, eve))) { + sel = BM_elem_flag_test(eve, BM_ELEM_SELECT); + sel_mirr = BM_elem_flag_test(eve_mirr, BM_ELEM_SELECT); if ((sel || sel_mirr) && (eve != eve_mirr)) { - dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); - dvert_mirr= CustomData_bmesh_get(&em->bm->vdata, eve_mirr->head.data, CD_MDEFORMVERT); + dvert = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); + dvert_mirr = CustomData_bmesh_get(&em->bm->vdata, eve_mirr->head.data, CD_MDEFORMVERT); if (dvert && dvert_mirr) { VGROUP_MIRR_OP; } @@ -1604,29 +1604,29 @@ void ED_vgroup_mirror(Object *ob, const short mirror_weights, const short flip_v } if (!use_vert_sel) { - sel= sel_mirr= TRUE; + sel = sel_mirr = TRUE; } /* tag verts we have used */ - for (vidx= 0, mv= me->mvert; vidx < me->totvert; vidx++, mv++) { + for (vidx = 0, mv = me->mvert; vidx < me->totvert; vidx++, mv++) { mv->flag &= ~ME_VERT_TMP_TAG; } - for (vidx= 0, mv= me->mvert; vidx < me->totvert; vidx++, mv++) { + for (vidx = 0, mv = me->mvert; vidx < me->totvert; vidx++, mv++) { if ( ((mv->flag & ME_VERT_TMP_TAG) == 0) && - ((vidx_mirr= mesh_get_x_mirror_vert(ob, vidx)) != -1) && + ((vidx_mirr = mesh_get_x_mirror_vert(ob, vidx)) != -1) && (vidx != vidx_mirr) && - ((((mv_mirr= me->mvert + vidx_mirr)->flag) & ME_VERT_TMP_TAG) == 0)) + ((((mv_mirr = me->mvert + vidx_mirr)->flag) & ME_VERT_TMP_TAG) == 0)) { if (use_vert_sel) { - sel= mv->flag & SELECT; - sel_mirr= mv_mirr->flag & SELECT; + sel = mv->flag & SELECT; + sel_mirr = mv_mirr->flag & SELECT; } if (sel || sel_mirr) { - dvert= &me->dvert[vidx]; - dvert_mirr= &me->dvert[vidx_mirr]; + dvert = &me->dvert[vidx]; + dvert_mirr = &me->dvert[vidx_mirr]; VGROUP_MIRR_OP; } @@ -1638,7 +1638,7 @@ void ED_vgroup_mirror(Object *ob, const short mirror_weights, const short flip_v } } else if (ob->type == OB_LATTICE) { - Lattice *lt= vgroup_edit_lattice(ob); + Lattice *lt = vgroup_edit_lattice(ob); int i1, i2; int u, v, w; int pntsu_half; @@ -1651,27 +1651,27 @@ void ED_vgroup_mirror(Object *ob, const short mirror_weights, const short flip_v /* unlike editmesh we know that by only looping over the first half of * the 'u' indices it will cover all points except the middle which is * ok in this case */ - pntsu_half= lt->pntsu / 2; + pntsu_half = lt->pntsu / 2; - for (w=0; wpntsw; w++) { - for (v=0; vpntsv; v++) { - for (u=0; upntsu - 1) - u; + for (w = 0; w < lt->pntsw; w++) { + for (v = 0; v < lt->pntsv; v++) { + for (u = 0; u < pntsu_half; u++) { + int u_inv = (lt->pntsu - 1) - u; if (u != u_inv) { BPoint *bp, *bp_mirr; - i1= LT_INDEX(lt, u, v, w); - i2= LT_INDEX(lt, u_inv, v, w); + i1 = LT_INDEX(lt, u, v, w); + i2 = LT_INDEX(lt, u_inv, v, w); - bp= <->def[i1]; - bp_mirr= <->def[i2]; + bp = <->def[i1]; + bp_mirr = <->def[i2]; - sel= bp->f1 & SELECT; - sel_mirr= bp_mirr->f1 & SELECT; + sel = bp->f1 & SELECT; + sel_mirr = bp_mirr->f1 & SELECT; if (sel || sel_mirr) { - dvert= <->dvert[i1]; - dvert_mirr= <->dvert[i2]; + dvert = <->dvert[i1]; + dvert_mirr = <->dvert[i2]; VGROUP_MIRR_OP; } @@ -1701,40 +1701,40 @@ static void vgroup_remap_update_users(Object *ob, int *map) * they get deleted the numbers get out of sync, this corrects that */ if (ob->soft) - ob->soft->vertgroup= map[ob->soft->vertgroup]; + ob->soft->vertgroup = map[ob->soft->vertgroup]; - for (md=ob->modifiers.first; md; md=md->next) { + for (md = ob->modifiers.first; md; md = md->next) { if (md->type == eModifierType_Explode) { - emd= (ExplodeModifierData*)md; - emd->vgroup= map[emd->vgroup]; + emd = (ExplodeModifierData *)md; + emd->vgroup = map[emd->vgroup]; } else if (md->type == eModifierType_Cloth) { - clmd= (ClothModifierData*)md; - clsim= clmd->sim_parms; + clmd = (ClothModifierData *)md; + clsim = clmd->sim_parms; if (clsim) { - clsim->vgroup_mass= map[clsim->vgroup_mass]; - clsim->vgroup_bend= map[clsim->vgroup_bend]; - clsim->vgroup_struct= map[clsim->vgroup_struct]; + clsim->vgroup_mass = map[clsim->vgroup_mass]; + clsim->vgroup_bend = map[clsim->vgroup_bend]; + clsim->vgroup_struct = map[clsim->vgroup_struct]; } } } - for (psys=ob->particlesystem.first; psys; psys=psys->next) { - for (a=0; avgroup[a]= map[psys->vgroup[a]]; + for (psys = ob->particlesystem.first; psys; psys = psys->next) { + for (a = 0; a < PSYS_TOT_VG; a++) + psys->vgroup[a] = map[psys->vgroup[a]]; } } static void vgroup_delete_update_users(Object *ob, int id) { - int i, defbase_tot= BLI_countlist(&ob->defbase) + 1; - int *map= MEM_mallocN(sizeof(int) * defbase_tot, "vgroup del"); + int i, defbase_tot = BLI_countlist(&ob->defbase) + 1; + int *map = MEM_mallocN(sizeof(int) * defbase_tot, "vgroup del"); - map[id]= map[0]= 0; - for (i=1; idefbase, dg); + MDeformVert *dvert_array = NULL; + int dvert_tot = 0; + const int def_nr = BLI_findindex(&ob->defbase, dg); assert(def_nr > -1); @@ -1754,10 +1754,10 @@ static void vgroup_delete_object_mode(Object *ob, bDeformGroup *dg) if (dvert_array) { int i, j; MDeformVert *dv; - for (i= 0, dv= dvert_array; i < dvert_tot; i++, dv++) { + for (i = 0, dv = dvert_array; i < dvert_tot; i++, dv++) { MDeformWeight *dw; - dw= defvert_find_index(dv, def_nr); + dw = defvert_find_index(dv, def_nr); defvert_remove_group(dv, dw); /* dw can be NULL */ /* inline, make into a function if anything else needs to do this */ @@ -1779,7 +1779,7 @@ static void vgroup_delete_object_mode(Object *ob, bDeformGroup *dg) if (ob->actdef > def_nr) ob->actdef--; if (ob->actdef < 1 && ob->defbase.first) - ob->actdef= 1; + ob->actdef = 1; } @@ -1788,10 +1788,10 @@ static void vgroup_delete_object_mode(Object *ob, bDeformGroup *dg) static void vgroup_active_remove_verts(Object *ob, const int allverts, bDeformGroup *dg) { MDeformVert *dv; - const int def_nr= BLI_findindex(&ob->defbase, dg); + const int def_nr = BLI_findindex(&ob->defbase, dg); if (ob->type == OB_MESH) { - Mesh *me= ob->data; + Mesh *me = ob->data; if (me->edit_btmesh) { BMEditMesh *em = me->edit_btmesh; @@ -1799,7 +1799,7 @@ static void vgroup_active_remove_verts(Object *ob, const int allverts, bDeformGr BMIter iter; BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { - dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); + dv = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dv && dv->dw && (allverts || BM_elem_flag_test(eve, BM_ELEM_SELECT))) { MDeformWeight *dw = defvert_find_index(dv, def_nr); @@ -1819,7 +1819,7 @@ static void vgroup_active_remove_verts(Object *ob, const int allverts, bDeformGr mv = me->mvert; dv = me->dvert; - for (i=0; itotvert; i++, mv++, dv++) { + for (i = 0; i < me->totvert; i++, mv++, dv++) { if (mv->flag & SELECT) { if (dv->dw && (allverts || (mv->flag & SELECT))) { MDeformWeight *dw = defvert_find_index(dv, def_nr); @@ -1830,17 +1830,17 @@ static void vgroup_active_remove_verts(Object *ob, const int allverts, bDeformGr } } else if (ob->type == OB_LATTICE) { - Lattice *lt= vgroup_edit_lattice(ob); + Lattice *lt = vgroup_edit_lattice(ob); if (lt->dvert) { BPoint *bp; - int i, tot= lt->pntsu*lt->pntsv*lt->pntsw; + int i, tot = lt->pntsu * lt->pntsv * lt->pntsw; - for (i=0, bp= lt->def; idef; i < tot; i++, bp++) { if (allverts || (bp->f1 & SELECT)) { MDeformWeight *dw; - dv= <->dvert[i]; + dv = <->dvert[i]; dw = defvert_find_index(dv, def_nr); defvert_remove_group(dv, dw); /* dw can be NULL */ @@ -1853,7 +1853,7 @@ static void vgroup_active_remove_verts(Object *ob, const int allverts, bDeformGr static void vgroup_delete_edit_mode(Object *ob, bDeformGroup *dg) { int i; - const int dg_index= BLI_findindex(&ob->defbase, dg); + const int dg_index = BLI_findindex(&ob->defbase, dg); assert(dg_index > -1); @@ -1861,32 +1861,32 @@ static void vgroup_delete_edit_mode(Object *ob, bDeformGroup *dg) vgroup_active_remove_verts(ob, TRUE, dg); /* Make sure that any verts with higher indices are adjusted accordingly */ - if (ob->type==OB_MESH) { - Mesh *me= ob->data; + if (ob->type == OB_MESH) { + Mesh *me = ob->data; BMEditMesh *em = me->edit_btmesh; BMIter iter; BMVert *eve; MDeformVert *dvert; BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { - dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); + dvert = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert) - for (i=0; itotweight; i++) + for (i = 0; i < dvert->totweight; i++) if (dvert->dw[i].def_nr > dg_index) dvert->dw[i].def_nr--; } } - else if (ob->type==OB_LATTICE) { - Lattice *lt= vgroup_edit_lattice(ob); + else if (ob->type == OB_LATTICE) { + Lattice *lt = vgroup_edit_lattice(ob); BPoint *bp; - MDeformVert *dvert= lt->dvert; + MDeformVert *dvert = lt->dvert; int a, tot; if (dvert) { - tot= lt->pntsu*lt->pntsv*lt->pntsw; - for (a=0, bp= lt->def; atotweight; i++) { + tot = lt->pntsu * lt->pntsv * lt->pntsw; + for (a = 0, bp = lt->def; a < tot; a++, bp++, dvert++) { + for (i = 0; i < dvert->totweight; i++) { if (dvert->dw[i].def_nr > dg_index) dvert->dw[i].def_nr--; } @@ -1897,26 +1897,26 @@ static void vgroup_delete_edit_mode(Object *ob, bDeformGroup *dg) vgroup_delete_update_users(ob, dg_index + 1); /* Remove the group */ - BLI_freelinkN (&ob->defbase, dg); + BLI_freelinkN(&ob->defbase, dg); /* Update the active deform index if necessary */ if (ob->actdef > dg_index) ob->actdef--; if (ob->actdef < 1 && ob->defbase.first) - ob->actdef= 1; + ob->actdef = 1; /* remove all dverts */ if (ob->defbase.first == NULL) { - if (ob->type==OB_MESH) { - Mesh *me= ob->data; + if (ob->type == OB_MESH) { + Mesh *me = ob->data; CustomData_free_layer_active(&me->vdata, CD_MDEFORMVERT, me->totvert); - me->dvert= NULL; + me->dvert = NULL; } - else if (ob->type==OB_LATTICE) { - Lattice *lt= vgroup_edit_lattice(ob); + else if (ob->type == OB_LATTICE) { + Lattice *lt = vgroup_edit_lattice(ob); if (lt->dvert) { MEM_freeN(lt->dvert); - lt->dvert= NULL; + lt->dvert = NULL; } } } @@ -1927,7 +1927,7 @@ static int vgroup_object_in_edit_mode(Object *ob) if (ob->type == OB_MESH) return (BMEdit_FromObject(ob) != NULL); else if (ob->type == OB_LATTICE) - return (((Lattice*)ob->data)->editlatt != NULL); + return (((Lattice *)ob->data)->editlatt != NULL); return 0; } @@ -1946,7 +1946,7 @@ static int vgroup_object_in_wpaint_vert_select(Object *ob) static void vgroup_delete(Object *ob) { - bDeformGroup *dg = BLI_findlink(&ob->defbase, ob->actdef-1); + bDeformGroup *dg = BLI_findlink(&ob->defbase, ob->actdef - 1); if (!dg) return; @@ -1959,16 +1959,16 @@ static void vgroup_delete(Object *ob) static void vgroup_delete_all(Object *ob) { /* Remove all DVerts */ - if (ob->type==OB_MESH) { - Mesh *me= ob->data; + if (ob->type == OB_MESH) { + Mesh *me = ob->data; CustomData_free_layer_active(&me->vdata, CD_MDEFORMVERT, me->totvert); - me->dvert= NULL; + me->dvert = NULL; } - else if (ob->type==OB_LATTICE) { - Lattice *lt= vgroup_edit_lattice(ob); + else if (ob->type == OB_LATTICE) { + Lattice *lt = vgroup_edit_lattice(ob); if (lt->dvert) { MEM_freeN(lt->dvert); - lt->dvert= NULL; + lt->dvert = NULL; } } @@ -1976,20 +1976,20 @@ static void vgroup_delete_all(Object *ob) BLI_freelistN(&ob->defbase); /* Fix counters/indices */ - ob->actdef= 0; + ob->actdef = 0; } /* only in editmode */ static void vgroup_assign_verts(Object *ob, const float weight) { MDeformVert *dv; - const int def_nr= ob->actdef-1; + const int def_nr = ob->actdef - 1; if (!BLI_findlink(&ob->defbase, def_nr)) return; if (ob->type == OB_MESH) { - Mesh *me= ob->data; + Mesh *me = ob->data; if (me->edit_btmesh) { BMEditMesh *em = me->edit_btmesh; @@ -2003,10 +2003,10 @@ static void vgroup_assign_verts(Object *ob, const float weight) BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { MDeformWeight *dw; - dv= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); /* can be NULL */ - dw= defvert_verify_index(dv, def_nr); + dv = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); /* can be NULL */ + dw = defvert_verify_index(dv, def_nr); if (dw) { - dw->weight= weight; + dw->weight = weight; } } } @@ -2023,35 +2023,35 @@ static void vgroup_assign_verts(Object *ob, const float weight) mv = me->mvert; dv = me->dvert; - for (i=0; itotvert; i++, mv++, dv++) { + for (i = 0; i < me->totvert; i++, mv++, dv++) { if (mv->flag & SELECT) { MDeformWeight *dw; - dw= defvert_verify_index(dv, def_nr); + dw = defvert_verify_index(dv, def_nr); if (dw) { - dw->weight= weight; + dw->weight = weight; } } } } } else if (ob->type == OB_LATTICE) { - Lattice *lt= vgroup_edit_lattice(ob); + Lattice *lt = vgroup_edit_lattice(ob); BPoint *bp; int a, tot; - if (lt->dvert==NULL) + if (lt->dvert == NULL) ED_vgroup_data_create(<->id); - dv= lt->dvert; + dv = lt->dvert; - tot= lt->pntsu*lt->pntsv*lt->pntsw; - for (a=0, bp= lt->def; apntsu * lt->pntsv * lt->pntsw; + for (a = 0, bp = lt->def; a < tot; a++, bp++, dv++) { if (bp->f1 & SELECT) { MDeformWeight *dw; - dw= defvert_verify_index(dv, def_nr); + dw = defvert_verify_index(dv, def_nr); if (dw) { - dw->weight= weight; + dw->weight = weight; } } } @@ -2067,7 +2067,7 @@ static void vgroup_remove_verts(Object *ob, int allverts) * active group index */ bDeformGroup *dg; - for (dg= ob->defbase.first; dg; dg= dg->next) { + for (dg = ob->defbase.first; dg; dg = dg->next) { vgroup_active_remove_verts(ob, allverts, dg); } } @@ -2076,15 +2076,15 @@ static void vgroup_remove_verts(Object *ob, int allverts) static int vertex_group_poll(bContext *C) { - Object *ob= ED_object_context(C); - ID *data= (ob)? ob->data: NULL; + Object *ob = ED_object_context(C); + ID *data = (ob) ? ob->data : NULL; return (ob && !ob->id.lib && OB_TYPE_SUPPORT_VGROUP(ob->type) && data && !data->lib); } -static int UNUSED_FUNCTION(vertex_group_poll_edit)(bContext *C) +static int UNUSED_FUNCTION(vertex_group_poll_edit) (bContext * C) { - Object *ob= ED_object_context(C); - ID *data= (ob)? ob->data: NULL; + Object *ob = ED_object_context(C); + ID *data = (ob) ? ob->data : NULL; if (!(ob && !ob->id.lib && data && !data->lib)) return 0; @@ -2095,24 +2095,24 @@ static int UNUSED_FUNCTION(vertex_group_poll_edit)(bContext *C) /* editmode _or_ weight paint vertex sel */ static int vertex_group_poll_edit_or_wpaint_vert_select(bContext *C) { - Object *ob= ED_object_context(C); - ID *data= (ob)? ob->data: NULL; + Object *ob = ED_object_context(C); + ID *data = (ob) ? ob->data : NULL; if (!(ob && !ob->id.lib && data && !data->lib)) return 0; - return ( vgroup_object_in_edit_mode(ob) || - vgroup_object_in_wpaint_vert_select(ob) ); + return (vgroup_object_in_edit_mode(ob) || + vgroup_object_in_wpaint_vert_select(ob) ); } static int vertex_group_add_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); ED_vgroup_add(ob); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); return OPERATOR_FINISHED; } @@ -2128,12 +2128,12 @@ void OBJECT_OT_vertex_group_add(wmOperatorType *ot) ot->exec = vertex_group_add_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int vertex_group_remove_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); if (RNA_boolean_get(op->ptr, "all")) vgroup_delete_all(ob); @@ -2141,8 +2141,8 @@ static int vertex_group_remove_exec(bContext *C, wmOperator *op) vgroup_delete(ob); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); return OPERATOR_FINISHED; } @@ -2161,7 +2161,7 @@ void OBJECT_OT_vertex_group_remove(wmOperatorType *ot) /* redo operator will fail in this case because vertex groups aren't stored * in local edit mode stack and toggling "all" property will lead to * all groups deleted without way to restore them (see [#29527], sergey) */ - ot->flag = /*OPTYPE_REGISTER|*/OPTYPE_UNDO; + ot->flag = /*OPTYPE_REGISTER|*/ OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "all", 0, "All", "Remove from all vertex groups"); @@ -2169,15 +2169,15 @@ void OBJECT_OT_vertex_group_remove(wmOperatorType *ot) static int vertex_group_assign_exec(bContext *C, wmOperator *op) { - ToolSettings *ts= CTX_data_tool_settings(C); - Object *ob= ED_object_context(C); + ToolSettings *ts = CTX_data_tool_settings(C); + Object *ob = ED_object_context(C); if (RNA_boolean_get(op->ptr, "new")) ED_vgroup_add(ob); vgroup_assign_verts(ob, ts->vgroup_weight); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2196,7 +2196,7 @@ void OBJECT_OT_vertex_group_assign(wmOperatorType *ot) /* redo operator will fail in this case because vertex group assignment * isn't stored in local edit mode stack and toggling "new" property will * lead to creating plenty of new vertex groups (see [#29527], sergey) */ - ot->flag = /*OPTYPE_REGISTER|*/OPTYPE_UNDO; + ot->flag = /*OPTYPE_REGISTER|*/ OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "new", 0, "New", "Assign vertex to new vertex group"); @@ -2204,12 +2204,12 @@ void OBJECT_OT_vertex_group_assign(wmOperatorType *ot) static int vertex_group_remove_from_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); if (RNA_boolean_get(op->ptr, "all")) vgroup_remove_verts(ob, 0); else { - bDeformGroup *dg= BLI_findlink(&ob->defbase, ob->actdef - 1); + bDeformGroup *dg = BLI_findlink(&ob->defbase, ob->actdef - 1); if (dg == NULL) { return OPERATOR_CANCELLED; @@ -2219,7 +2219,7 @@ static int vertex_group_remove_from_exec(bContext *C, wmOperator *op) } DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2238,7 +2238,7 @@ void OBJECT_OT_vertex_group_remove_from(wmOperatorType *ot) /* redo operator will fail in this case because vertex groups assignment * isn't stored in local edit mode stack and toggling "all" property will lead to * removing vertices from all groups (see [#29527], sergey) */ - ot->flag = /*OPTYPE_REGISTER|*/OPTYPE_UNDO; + ot->flag = /*OPTYPE_REGISTER|*/ OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "all", 0, "All", "Remove from all vertex groups"); @@ -2246,13 +2246,13 @@ void OBJECT_OT_vertex_group_remove_from(wmOperatorType *ot) static int vertex_group_select_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); if (!ob || ob->id.lib) return OPERATOR_CANCELLED; vgroup_select_verts(ob, 1); - WM_event_add_notifier(C, NC_GEOM|ND_SELECT, ob->data); + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, ob->data); return OPERATOR_FINISHED; } @@ -2268,15 +2268,15 @@ void OBJECT_OT_vertex_group_select(wmOperatorType *ot) ot->exec = vertex_group_select_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int vertex_group_deselect_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); vgroup_select_verts(ob, 0); - WM_event_add_notifier(C, NC_GEOM|ND_SELECT, ob->data); + WM_event_add_notifier(C, NC_GEOM | ND_SELECT, ob->data); return OPERATOR_FINISHED; } @@ -2292,17 +2292,17 @@ void OBJECT_OT_vertex_group_deselect(wmOperatorType *ot) ot->exec = vertex_group_deselect_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int vertex_group_copy_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); vgroup_duplicate(ob); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2318,21 +2318,21 @@ void OBJECT_OT_vertex_group_copy(wmOperatorType *ot) ot->exec = vertex_group_copy_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int vertex_group_levels_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); - float offset= RNA_float_get(op->ptr,"offset"); - float gain= RNA_float_get(op->ptr,"gain"); + float offset = RNA_float_get(op->ptr, "offset"); + float gain = RNA_float_get(op->ptr, "gain"); vgroup_levels(ob, offset, gain); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2348,7 +2348,7 @@ void OBJECT_OT_vertex_group_levels(wmOperatorType *ot) ot->exec = vertex_group_levels_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_float(ot->srna, "offset", 0.f, -1.0, 1.0, "Offset", "Value to add to weights", -1.0f, 1.f); RNA_def_float(ot->srna, "gain", 1.f, 0.f, FLT_MAX, "Gain", "Value to multiply weights by", 0.0f, 10.f); @@ -2356,13 +2356,13 @@ void OBJECT_OT_vertex_group_levels(wmOperatorType *ot) static int vertex_group_normalize_exec(bContext *C, wmOperator *UNUSED(op)) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); vgroup_normalize(ob); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2378,19 +2378,19 @@ void OBJECT_OT_vertex_group_normalize(wmOperatorType *ot) ot->exec = vertex_group_normalize_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int vertex_group_normalize_all_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); - int lock_active= RNA_boolean_get(op->ptr,"lock_active"); + Object *ob = ED_object_context(C); + int lock_active = RNA_boolean_get(op->ptr, "lock_active"); vgroup_normalize_all(ob, lock_active); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2406,7 +2406,7 @@ void OBJECT_OT_vertex_group_normalize_all(wmOperatorType *ot) ot->exec = vertex_group_normalize_all_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_boolean(ot->srna, "lock_active", TRUE, "Lock Active", "Keep the values of the active group while normalizing others"); @@ -2414,16 +2414,16 @@ void OBJECT_OT_vertex_group_normalize_all(wmOperatorType *ot) static int vertex_group_fix_exec(bContext *C, wmOperator *op) { - Object *ob= CTX_data_active_object(C); - Scene *scene= CTX_data_scene(C); + Object *ob = CTX_data_active_object(C); + Scene *scene = CTX_data_scene(C); - float distToBe= RNA_float_get(op->ptr, "dist"); - float strength= RNA_float_get(op->ptr, "strength"); - float cp= RNA_float_get(op->ptr, "accuracy"); - ModifierData *md= ob->modifiers.first; + float distToBe = RNA_float_get(op->ptr, "dist"); + float strength = RNA_float_get(op->ptr, "strength"); + float cp = RNA_float_get(op->ptr, "accuracy"); + ModifierData *md = ob->modifiers.first; while (md) { - if (md->type == eModifierType_Mirror && (md->mode&eModifierMode_Realtime)) { + if (md->type == eModifierType_Mirror && (md->mode & eModifierMode_Realtime)) { break; } md = md->next; @@ -2436,8 +2436,8 @@ static int vertex_group_fix_exec(bContext *C, wmOperator *op) vgroup_fix(scene, ob, distToBe, strength, cp); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2448,14 +2448,14 @@ void OBJECT_OT_vertex_group_fix(wmOperatorType *ot) ot->name = "Fix Vertex Group Deform"; ot->idname = "OBJECT_OT_vertex_group_fix"; ot->description = "Modify the position of selected vertices by changing only their respective " - "groups' weights (this tool may be slow for many vertices)"; + "groups' weights (this tool may be slow for many vertices)"; /* api callbacks */ ot->poll = vertex_group_poll; ot->exec = vertex_group_fix_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_float(ot->srna, "dist", 0.0f, -FLT_MAX, FLT_MAX, "Distance", "The distance to move to", -10.0f, 10.0f); RNA_def_float(ot->srna, "strength", 1.f, -2.0f, FLT_MAX, "Strength", "The distance moved can be changed by this multiplier", -2.0f, 2.0f); @@ -2466,7 +2466,7 @@ void OBJECT_OT_vertex_group_fix(wmOperatorType *ot) static int vertex_group_lock_exec(bContext *C, wmOperator *op) { - Object *ob= CTX_data_active_object(C); + Object *ob = CTX_data_active_object(C); int action = RNA_enum_get(op->ptr, "action"); @@ -2486,21 +2486,21 @@ void OBJECT_OT_vertex_group_lock(wmOperatorType *ot) ot->exec = vertex_group_lock_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; WM_operator_properties_select_all(ot); } static int vertex_group_invert_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); - int auto_assign= RNA_boolean_get(op->ptr,"auto_assign"); - int auto_remove= RNA_boolean_get(op->ptr,"auto_remove"); + Object *ob = ED_object_context(C); + int auto_assign = RNA_boolean_get(op->ptr, "auto_assign"); + int auto_remove = RNA_boolean_get(op->ptr, "auto_remove"); vgroup_invert(ob, auto_assign, auto_remove); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2516,7 +2516,7 @@ void OBJECT_OT_vertex_group_invert(wmOperatorType *ot) ot->exec = vertex_group_invert_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_boolean(ot->srna, "auto_assign", TRUE, "Add Weights", "Add verts from groups that have zero weight before inverting"); @@ -2533,8 +2533,8 @@ static int vertex_group_blend_exec(bContext *C, wmOperator *op) vgroup_blend(ob, fac); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2543,7 +2543,7 @@ static int vertex_group_blend_exec(bContext *C, wmOperator *op) static int vertex_group_blend_poll(bContext *C) { Object *ob = ED_object_context(C); - ID *data = (ob) ? ob->data: NULL; + ID *data = (ob) ? ob->data : NULL; if (!(ob && !ob->id.lib && data && !data->lib)) return FALSE; @@ -2580,7 +2580,7 @@ void OBJECT_OT_vertex_group_blend(wmOperatorType *ot) ot->exec = vertex_group_blend_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; prop = RNA_def_property(ot->srna, "factor", PROP_FLOAT, PROP_FACTOR); RNA_def_property_ui_text(prop, "Factor", ""); @@ -2591,18 +2591,18 @@ void OBJECT_OT_vertex_group_blend(wmOperatorType *ot) static int vertex_group_clean_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); - float limit= RNA_float_get(op->ptr,"limit"); - int all_groups= RNA_boolean_get(op->ptr,"all_groups"); - int keep_single= RNA_boolean_get(op->ptr,"keep_single"); + float limit = RNA_float_get(op->ptr, "limit"); + int all_groups = RNA_boolean_get(op->ptr, "all_groups"); + int keep_single = RNA_boolean_get(op->ptr, "keep_single"); - if (all_groups) vgroup_clean_all(ob, limit, keep_single); - else vgroup_clean(ob, limit, keep_single); + if (all_groups) vgroup_clean_all(ob, limit, keep_single); + else vgroup_clean(ob, limit, keep_single); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2619,7 +2619,7 @@ void OBJECT_OT_vertex_group_clean(wmOperatorType *ot) ot->exec = vertex_group_clean_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_float(ot->srna, "limit", 0.01f, 0.0f, 1.0, "Limit", "Remove weights under this limit", 0.001f, 0.99f); RNA_def_boolean(ot->srna, "all_groups", FALSE, "All Groups", "Clean all vertex groups"); @@ -2630,16 +2630,16 @@ void OBJECT_OT_vertex_group_clean(wmOperatorType *ot) static int vertex_group_mirror_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); ED_vgroup_mirror(ob, - RNA_boolean_get(op->ptr,"mirror_weights"), - RNA_boolean_get(op->ptr,"flip_group_names"), - RNA_boolean_get(op->ptr,"all_groups")); + RNA_boolean_get(op->ptr, "mirror_weights"), + RNA_boolean_get(op->ptr, "flip_group_names"), + RNA_boolean_get(op->ptr, "all_groups")); DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data); return OPERATOR_FINISHED; } @@ -2650,14 +2650,14 @@ void OBJECT_OT_vertex_group_mirror(wmOperatorType *ot) ot->name = "Mirror Vertex Group"; ot->idname = "OBJECT_OT_vertex_group_mirror"; ot->description = "Mirror all vertex groups, flip weights and/or names, editing only selected vertices, " - "flipping when both sides are selected otherwise copy from unselected"; + "flipping when both sides are selected otherwise copy from unselected"; /* api callbacks */ ot->poll = vertex_group_poll; ot->exec = vertex_group_mirror_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "mirror_weights", TRUE, "Mirror Weights", "Mirror weights"); @@ -2668,21 +2668,21 @@ void OBJECT_OT_vertex_group_mirror(wmOperatorType *ot) static int vertex_group_copy_to_linked_exec(bContext *C, wmOperator *UNUSED(op)) { - Scene *scene= CTX_data_scene(C); - Object *ob= ED_object_context(C); + Scene *scene = CTX_data_scene(C); + Object *ob = ED_object_context(C); Base *base; - int retval= OPERATOR_CANCELLED; + int retval = OPERATOR_CANCELLED; - for (base=scene->base.first; base; base= base->next) { - if (base->object->type==ob->type) { - if (base->object!=ob && base->object->data==ob->data) { + for (base = scene->base.first; base; base = base->next) { + if (base->object->type == ob->type) { + if (base->object != ob && base->object->data == ob->data) { BLI_freelistN(&base->object->defbase); BLI_duplicatelist(&base->object->defbase, &ob->defbase); - base->object->actdef= ob->actdef; + base->object->actdef = ob->actdef; DAG_id_tag_update(&base->object->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, base->object); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, base->object->data); + WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, base->object); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, base->object->data); retval = OPERATOR_FINISHED; } @@ -2704,19 +2704,19 @@ void OBJECT_OT_vertex_group_copy_to_linked(wmOperatorType *ot) ot->exec = vertex_group_copy_to_linked_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int vertex_group_copy_to_selected_exec(bContext *C, wmOperator *op) { - Object *obact= ED_object_context(C); - int change= 0; - int fail= 0; + Object *obact = ED_object_context(C); + int change = 0; + int fail = 0; - CTX_DATA_BEGIN (C, Object*, ob, selected_editable_objects) { + CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { if (obact != ob) { if (ED_vgroup_copy_array(ob, obact)) change++; - else fail++; + else fail++; } } CTX_DATA_END; @@ -2743,47 +2743,48 @@ void OBJECT_OT_vertex_group_copy_to_selected(wmOperatorType *ot) ot->exec = vertex_group_copy_to_selected_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } -static EnumPropertyItem vgroup_items[]= { - {0, NULL, 0, NULL, NULL}}; +static EnumPropertyItem vgroup_items[] = { + {0, NULL, 0, NULL, NULL} +}; static int set_active_group_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); - int nr= RNA_enum_get(op->ptr, "group"); + Object *ob = ED_object_context(C); + int nr = RNA_enum_get(op->ptr, "group"); - BLI_assert(nr+1 >= 0); - ob->actdef= nr+1; + BLI_assert(nr + 1 >= 0); + ob->actdef = nr + 1; DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob); return OPERATOR_FINISHED; } static EnumPropertyItem *vgroup_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), int *free) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); EnumPropertyItem tmp = {0, "", 0, "", ""}; - EnumPropertyItem *item= NULL; + EnumPropertyItem *item = NULL; bDeformGroup *def; - int a, totitem= 0; + int a, totitem = 0; if (!ob) return vgroup_items; - for (a=0, def=ob->defbase.first; def; def=def->next, a++) { - tmp.value= a; - tmp.icon= ICON_GROUP_VERTEX; - tmp.identifier= def->name; - tmp.name= def->name; + for (a = 0, def = ob->defbase.first; def; def = def->next, a++) { + tmp.value = a; + tmp.icon = ICON_GROUP_VERTEX; + tmp.identifier = def->name; + tmp.name = def->name; RNA_enum_item_add(&item, &totitem, &tmp); } RNA_enum_item_end(&item, &totitem); - *free= 1; + *free = 1; return item; } @@ -2803,10 +2804,10 @@ void OBJECT_OT_vertex_group_set_active(wmOperatorType *ot) ot->invoke = WM_menu_invoke; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - prop= RNA_def_enum(ot->srna, "group", vgroup_items, 0, "Group", "Vertex group to set as active"); + prop = RNA_def_enum(ot->srna, "group", vgroup_items, 0, "Group", "Vertex group to set as active"); RNA_def_enum_funcs(prop, vgroup_itemf); ot->prop = prop; } @@ -2817,11 +2818,11 @@ static char *vgroup_init_remap(Object *ob) { bDeformGroup *def; int defbase_tot = BLI_countlist(&ob->defbase); - char *name_array= MEM_mallocN(MAX_VGROUP_NAME * sizeof(char) * defbase_tot, "sort vgroups"); + char *name_array = MEM_mallocN(MAX_VGROUP_NAME * sizeof(char) * defbase_tot, "sort vgroups"); char *name; - name= name_array; - for (def = ob->defbase.first; def; def=def->next) { + name = name_array; + for (def = ob->defbase.first; def; def = def->next) { BLI_strncpy(name, def->name, MAX_VGROUP_NAME); name += MAX_VGROUP_NAME; } @@ -2831,33 +2832,33 @@ static char *vgroup_init_remap(Object *ob) static int vgroup_do_remap(Object *ob, char *name_array, wmOperator *op) { - MDeformVert *dvert= NULL; + MDeformVert *dvert = NULL; bDeformGroup *def; int defbase_tot = BLI_countlist(&ob->defbase); /* needs a dummy index at the start*/ - int *sort_map_update= MEM_mallocN(sizeof(int) * (defbase_tot + 1), "sort vgroups"); - int *sort_map= sort_map_update + 1; + int *sort_map_update = MEM_mallocN(sizeof(int) * (defbase_tot + 1), "sort vgroups"); + int *sort_map = sort_map_update + 1; char *name; int i; - name= name_array; - for (def= ob->defbase.first, i=0; def; def=def->next, i++) { - sort_map[i]= BLI_findstringindex(&ob->defbase, name, offsetof(bDeformGroup, name)); + name = name_array; + for (def = ob->defbase.first, i = 0; def; def = def->next, i++) { + sort_map[i] = BLI_findstringindex(&ob->defbase, name, offsetof(bDeformGroup, name)); name += MAX_VGROUP_NAME; BLI_assert(sort_map[i] != -1); } if (ob->mode == OB_MODE_EDIT) { - if (ob->type==OB_MESH) { + if (ob->type == OB_MESH) { BMEditMesh *em = BMEdit_FromObject(ob); BMIter iter; BMVert *eve; BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { - dvert= CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); + dvert = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MDEFORMVERT); if (dvert && dvert->totweight) { defvert_remap(dvert, sort_map, defbase_tot); } @@ -2870,7 +2871,7 @@ static int vgroup_do_remap(Object *ob, char *name_array, wmOperator *op) } } else { - int dvert_tot=0; + int dvert_tot = 0; ED_vgroup_give_array(ob->data, &dvert, &dvert_tot); @@ -2883,14 +2884,14 @@ static int vgroup_do_remap(Object *ob, char *name_array, wmOperator *op) } /* update users */ - for (i=0; iactdef] >= 0); - ob->actdef= sort_map_update[ob->actdef]; + ob->actdef = sort_map_update[ob->actdef]; MEM_freeN(sort_map_update); @@ -2899,15 +2900,15 @@ static int vgroup_do_remap(Object *ob, char *name_array, wmOperator *op) static int vgroup_sort(void *def_a_ptr, void *def_b_ptr) { - bDeformGroup *def_a= (bDeformGroup *)def_a_ptr; - bDeformGroup *def_b= (bDeformGroup *)def_b_ptr; + bDeformGroup *def_a = (bDeformGroup *)def_a_ptr; + bDeformGroup *def_b = (bDeformGroup *)def_b_ptr; return BLI_natstrcmp(def_a->name, def_b->name); } static int vertex_group_sort_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); char *name_array; int ret; @@ -2922,7 +2923,7 @@ static int vertex_group_sort_exec(bContext *C, wmOperator *op) if (ret != OPERATOR_CANCELLED) { DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob); } if (name_array) MEM_freeN(name_array); @@ -2941,15 +2942,15 @@ void OBJECT_OT_vertex_group_sort(wmOperatorType *ot) ot->exec = vertex_group_sort_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } static int vgroup_move_exec(bContext *C, wmOperator *op) { - Object *ob= ED_object_context(C); + Object *ob = ED_object_context(C); bDeformGroup *def; char *name_array; - int dir= RNA_enum_get(op->ptr, "direction"), ret; + int dir = RNA_enum_get(op->ptr, "direction"), ret; def = BLI_findlink(&ob->defbase, ob->actdef - 1); if (!def) { @@ -2977,7 +2978,7 @@ static int vgroup_move_exec(bContext *C, wmOperator *op) if (ret != OPERATOR_CANCELLED) { DAG_id_tag_update(&ob->id, OB_RECALC_DATA); - WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob); } return ret; @@ -3000,7 +3001,7 @@ void OBJECT_OT_vertex_group_move(wmOperatorType *ot) ot->exec = vgroup_move_exec; /* flags */ - ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; RNA_def_enum(ot->srna, "direction", vgroup_slot_move, 0, "Direction", "Direction to move, UP or DOWN"); } -- cgit v1.2.3 From f88cfd9168c2977fc4acc414d8709da6484e23e7 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 28 Apr 2012 16:49:00 +0000 Subject: Code and style cleanup in own modules in BKE and also mball module - Make sure functions are named in way BKE__ (same way as RNA callbacks) - Make functions which are used by mball.c only static and remove their prototypes from public header file. Further cleanup is coming. --- source/blender/blenkernel/BKE_curve.h | 135 +++++++------ source/blender/blenkernel/BKE_mball.h | 147 ++------------- source/blender/blenkernel/BKE_movieclip.h | 6 +- source/blender/blenkernel/intern/anim.c | 2 +- source/blender/blenkernel/intern/armature.c | 8 +- source/blender/blenkernel/intern/colortools.c | 4 +- source/blender/blenkernel/intern/curve.c | 180 +++++++++--------- source/blender/blenkernel/intern/depsgraph.c | 2 +- source/blender/blenkernel/intern/displist.c | 51 ++--- source/blender/blenkernel/intern/fcurve.c | 2 +- source/blender/blenkernel/intern/font.c | 2 +- source/blender/blenkernel/intern/key.c | 8 +- source/blender/blenkernel/intern/library.c | 14 +- source/blender/blenkernel/intern/material.c | 2 +- source/blender/blenkernel/intern/mball.c | 190 ++++++++++++++----- source/blender/blenkernel/intern/mesh.c | 2 +- source/blender/blenkernel/intern/movieclip.c | 6 +- source/blender/blenkernel/intern/object.c | 22 +-- source/blender/blenkernel/intern/softbody.c | 2 +- .../editors/animation/anim_channels_defines.c | 2 +- source/blender/editors/curve/editcurve.c | 210 ++++++++++----------- source/blender/editors/curve/editfont.c | 2 +- source/blender/editors/gpencil/gpencil_edit.c | 2 +- source/blender/editors/include/ED_curve.h | 2 +- .../blender/editors/interface/interface_widgets.c | 4 +- source/blender/editors/metaball/mball_edit.c | 2 +- source/blender/editors/object/object_add.c | 14 +- source/blender/editors/object/object_edit.c | 4 +- source/blender/editors/object/object_modifier.c | 4 +- source/blender/editors/object/object_relations.c | 4 +- source/blender/editors/object/object_shapekey.c | 2 +- source/blender/editors/object/object_transform.c | 8 +- source/blender/editors/render/render_shading.c | 4 +- source/blender/editors/space_clip/clip_ops.c | 2 +- source/blender/editors/space_graph/graph_draw.c | 4 +- source/blender/editors/space_info/info_stats.c | 2 +- source/blender/editors/space_node/drawnode.c | 4 +- source/blender/editors/space_view3d/drawobject.c | 12 +- .../blender/editors/space_view3d/view3d_buttons.c | 8 +- source/blender/editors/space_view3d/view3d_snap.c | 8 +- .../editors/transform/transform_conversions.c | 4 +- .../blender/editors/transform/transform_generics.c | 8 +- .../editors/transform/transform_manipulator.c | 2 +- .../editors/transform/transform_orientations.c | 2 +- source/blender/makesrna/intern/rna_curve.c | 60 +++--- source/blender/makesrna/intern/rna_main_api.c | 10 +- source/blender/makesrna/intern/rna_meta.c | 4 +- source/blender/makesrna/intern/rna_object.c | 2 +- source/blender/makesrna/intern/rna_object_api.c | 4 +- .../blender/python/mathutils/mathutils_geometry.c | 2 +- .../blender/render/intern/source/convertblender.c | 10 +- source/blender/windowmanager/intern/wm_init_exit.c | 2 +- 52 files changed, 597 insertions(+), 602 deletions(-) diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h index fa3a1a6897a..3b9328ae1aa 100644 --- a/source/blender/blenkernel/BKE_curve.h +++ b/source/blender/blenkernel/BKE_curve.h @@ -53,72 +53,83 @@ struct Scene; #define CU_DO_TILT(cu, nu) (((nu->flag & CU_2D) && (cu->flag & CU_3D)==0) ? 0 : 1) #define CU_DO_RADIUS(cu, nu) ((CU_DO_TILT(cu, nu) || ((cu)->flag & CU_PATH_RADIUS) || (cu)->bevobj || (cu)->ext1!=0.0f || (cu)->ext2!=0.0f) ? 1:0) +/* ** Curve ** */ +void BKE_curve_unlink(struct Curve *cu); +void BKE_curve_free(struct Curve *cu); +void BKE_curve_editfont_free(struct Curve *cu); +struct Curve *BKE_curve_add(const char *name, int type); +struct Curve *BKE_curve_copy(struct Curve *cu); +void BKE_curve_make_local(struct Curve *cu); +short BKE_curve_type_get(struct Curve *cu); +void BKE_curve_type_test(struct Object *ob); +void BKE_curve_curve_dimension_update(struct Curve *cu); +void BKE_curve_tex_space_calc(struct Curve *cu); -void unlink_curve(struct Curve *cu); -void free_curve_editNurb_keyIndex(struct EditNurb *editnurb); -void free_curve_editNurb(struct Curve *cu); -void free_curve(struct Curve *cu); -void BKE_free_editfont(struct Curve *cu); -struct Curve *add_curve(const char *name, int type); -struct Curve *copy_curve(struct Curve *cu); -void make_local_curve(struct Curve *cu); -struct ListBase *curve_editnurbs(struct Curve *cu); -short curve_type(struct Curve *cu); -void test_curve_type(struct Object *ob); -void update_curve_dimension(struct Curve *cu ); -void tex_space_curve(struct Curve *cu); -int count_curveverts(struct ListBase *nurb); -int count_curveverts_without_handles(struct ListBase *nurb); -void freeNurb(struct Nurb *nu); -void freeNurblist(struct ListBase *lb); -struct Nurb *duplicateNurb(struct Nurb *nu); -void duplicateNurblist(struct ListBase *lb1, struct ListBase *lb2); -void test2DNurb(struct Nurb *nu); -void minmaxNurb(struct Nurb *nu, float *min, float *max); - -void nurbs_knot_calc_u(struct Nurb *nu); -void nurbs_knot_calc_v(struct Nurb *nu); - -void makeNurbfaces(struct Nurb *nu, float *coord_array, int rowstride, int resolu, int resolv); -void makeNurbcurve(struct Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, float *weight_array, int resolu, int stride); -void forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride); -float *make_orco_curve(struct Scene *scene, struct Object *ob); -float *make_orco_surf(struct Object *ob); -void makebevelcurve(struct Scene *scene, struct Object *ob, struct ListBase *disp, int forRender); - -void makeBevelList(struct Object *ob); - -void calchandleNurb(struct BezTriple *bezt, struct BezTriple *prev, struct BezTriple *next, int mode); -void calchandlesNurb(struct Nurb *nu); -void testhandlesNurb(struct Nurb *nu); -void autocalchandlesNurb(struct Nurb *nu, int flag); -void autocalchandlesNurb_all(ListBase *editnurb, int flag); -void sethandlesNurb(ListBase *editnurb, short code); - -void switchdirectionNurb(struct Nurb *nu); - -void addNurbPoints(struct Nurb *nu, int number); -void addNurbPointsBezier(struct Nurb *nu, int number); - -float (*curve_getVertexCos(struct Curve *cu, struct ListBase *lb, int *numVerts_r))[3]; -void curve_applyVertexCos(struct Curve *cu, struct ListBase *lb, float (*vertexCos)[3]); - -float (*curve_getKeyVertexCos(struct Curve *cu, struct ListBase *lb, float *key))[3]; -void curve_applyKeyVertexTilts(struct Curve *cu, struct ListBase *lb, float *key); +int BKE_curve_minmax(struct Curve *cu, float min[3], float max[3]); +int BKE_curve_center_median(struct Curve *cu, float cent[3]); +int BKE_curve_center_bounds(struct Curve *cu, float cent[3]); +void BKE_curve_translate(struct Curve *cu, float offset[3], int do_keys); +void BKE_curve_delete_material_index(struct Curve *cu, int index); + +ListBase *BKE_curve_nurbs_get(struct Curve *cu); + +float (*BKE_curve_vertexCos_get(struct Curve *cu, struct ListBase *lb, int *numVerts_r))[3]; +void BK_curve_vertexCos_apply(struct Curve *cu, struct ListBase *lb, float (*vertexCos)[3]); + +float (*BKE_curve_keyVertexCos_get(struct Curve *cu, struct ListBase *lb, float *key))[3]; +void BKE_curve_keyVertexTilts_apply(struct Curve *cu, struct ListBase *lb, float *key); + +void BKE_curve_editNurb_keyIndex_free(struct EditNurb *editnurb); +void BKE_curve_editNurb_free(struct Curve *cu); +struct ListBase *BKE_curve_editNurbs_get(struct Curve *cu); + +float *BKE_curve_make_orco(struct Scene *scene, struct Object *ob); +float *BKE_curve_surf_make_orco(struct Object *ob); + +void BKE_curve_bevelList_make(struct Object *ob); +void BKE_curve_bevel_make(struct Scene *scene, struct Object *ob, struct ListBase *disp, int forRender); + +void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride); + +/* ** Nurbs ** */ + +int BKE_nurbList_verts_count(struct ListBase *nurb); +int BKE_nurbList_verts_count_without_handles(struct ListBase *nurb); + +void BKE_nurbList_free(struct ListBase *lb); +void BKE_nurbList_duplicate(struct ListBase *lb1, struct ListBase *lb2); +void BKE_nurbList_handles_set(struct ListBase *editnurb, short code); + +void BKE_nurbList_handles_autocalc(ListBase *editnurb, int flag); + +void BKE_nurb_free(struct Nurb *nu); +struct Nurb *BKE_nurb_duplicate(struct Nurb *nu); + +void BKE_nurb_test2D(struct Nurb *nu); +void BKE_nurb_minmax(struct Nurb *nu, float *min, float *max); + +void BKE_nurb_makeFaces(struct Nurb *nu, float *coord_array, int rowstride, int resolu, int resolv); +void BKE_nurb_makeCurve(struct Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, float *weight_array, int resolu, int stride); + +void BKE_nurb_knot_calc_u(struct Nurb *nu); +void BKE_nurb_knot_calc_v(struct Nurb *nu); /* nurb checks if they can be drawn, also clamp order func */ -int check_valid_nurb_u(struct Nurb *nu); -int check_valid_nurb_v(struct Nurb *nu); +int BKE_nurb_check_valid_u(struct Nurb *nu); +int BKE_nurb_check_valid_v(struct Nurb *nu); -int clamp_nurb_order_u(struct Nurb *nu); -int clamp_nurb_order_v(struct Nurb *nu); +int BKE_nurb_order_clamp_u(struct Nurb *nu); +int BKE_nurb_order_clamp_v(struct Nurb *nu); -ListBase *BKE_curve_nurbs(struct Curve *cu); +void BKE_nurb_direction_switch(struct Nurb *nu); -int minmax_curve(struct Curve *cu, float min[3], float max[3]); -int curve_center_median(struct Curve *cu, float cent[3]); -int curve_center_bounds(struct Curve *cu, float cent[3]); -void curve_translate(struct Curve *cu, float offset[3], int do_keys); -void curve_delete_material_index(struct Curve *cu, int index); -#endif +void BKE_nurb_points_add(struct Nurb *nu, int number); +void BKE_nurb_bezierPoints_add(struct Nurb *nu, int number); + +void BKE_nurb_handle_calc(struct BezTriple *bezt, struct BezTriple *prev, struct BezTriple *next, int mode); +void BKE_nurb_handles_calc(struct Nurb *nu); +void BKE_nurb_handles_autocalc(struct Nurb *nu, int flag); +void BKE_nurb_handles_test(struct Nurb *nu); + +#endif diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h index fafd2a3d30e..018ee7f6c94 100644 --- a/source/blender/blenkernel/BKE_mball.h +++ b/source/blender/blenkernel/BKE_mball.h @@ -37,147 +37,30 @@ struct Object; struct Scene; struct MetaElem; -typedef struct point { /* a three-dimensional point */ - float x, y, z; /* its coordinates */ -} MB_POINT; +void BKE_metaball_unlink(struct MetaBall *mb); +void BKE_metaball_free(struct MetaBall *mb); +struct MetaBall *BKE_metaball_add(const char *name); +struct MetaBall *BKE_metaball_copy(struct MetaBall *mb); -typedef struct vertex { /* surface vertex */ - MB_POINT position, normal; /* position and surface normal */ -} VERTEX; +void BKE_metaball_make_local(struct MetaBall *mb); -typedef struct vertices { /* list of vertices in polygonization */ - int count, max; /* # vertices, max # allowed */ - VERTEX *ptr; /* dynamically allocated */ -} VERTICES; +void BKE_metaball_cubeTable_free(void); -typedef struct corner { /* corner of a cube */ - int i, j, k; /* (i, j, k) is index within lattice */ - float x, y, z, value; /* location and function value */ - struct corner *next; -} CORNER; +void BKE_metaball_polygonize(struct Scene *scene, struct Object *ob, struct ListBase *dispbase); +int BKE_metaball_is_basis_for(struct Object *ob1, struct Object *ob2); +int BKE_metaball_is_basis(struct Object *ob); +struct Object *BKE_metaball_basis_find(struct Scene *scene, struct Object *ob); -typedef struct cube { /* partitioning cell (cube) */ - int i, j, k; /* lattice location of cube */ - CORNER *corners[8]; /* eight corners */ -} CUBE; +void BKE_metaball_tex_space_calc(struct Object *ob); +float *BKE_metaball_make_orco(struct Object *ob, struct ListBase *dispbase); -typedef struct cubes { /* linked list of cubes acting as stack */ - CUBE cube; /* a single cube */ - struct cubes *next; /* remaining elements */ -} CUBES; - -typedef struct centerlist { /* list of cube locations */ - int i, j, k; /* cube location */ - struct centerlist *next; /* remaining elements */ -} CENTERLIST; - -typedef struct edgelist { /* list of edges */ - int i1, j1, k1, i2, j2, k2; /* edge corner ids */ - int vid; /* vertex id */ - struct edgelist *next; /* remaining elements */ -} EDGELIST; - -typedef struct intlist { /* list of integers */ - int i; /* an integer */ - struct intlist *next; /* remaining elements */ -} INTLIST; - -typedef struct intlists { /* list of list of integers */ - INTLIST *list; /* a list of integers */ - struct intlists *next; /* remaining elements */ -} INTLISTS; - -typedef struct process { /* parameters, function, storage */ - /* what happens here? floats, I think. */ - /* float (*function)(void); */ /* implicit surface function */ - float (*function)(float, float, float); - float size, delta; /* cube size, normal delta */ - int bounds; /* cube range within lattice */ - CUBES *cubes; /* active cubes */ - VERTICES vertices; /* surface vertices */ - CENTERLIST **centers; /* cube center hash table */ - CORNER **corners; /* corner value hash table */ - EDGELIST **edges; /* edge and vertex id hash table */ -} PROCESS; - -/* dividing scene using octal tree makes polygonisation faster */ -typedef struct ml_pointer { - struct ml_pointer *next, *prev; - struct MetaElem *ml; -} ml_pointer; - -typedef struct octal_node { - struct octal_node *nodes[8]; /* children of current node */ - struct octal_node *parent; /* parent of current node */ - struct ListBase elems; /* ListBase of MetaElem pointers (ml_pointer) */ - float x_min, y_min, z_min; /* 1st border point */ - float x_max, y_max, z_max; /* 7th border point */ - float x,y,z; /* center of node */ - int pos, neg; /* number of positive and negative MetaElements in the node */ - int count; /* number of MetaElems, which belongs to the node */ -} octal_node; - -typedef struct octal_tree { - struct octal_node *first; /* first node */ - int pos, neg; /* number of positive and negative MetaElements in the scene */ - short depth; /* number of scene subdivision */ -} octal_tree; - -struct pgn_elements { - struct pgn_elements *next, *prev; - char *data; -}; - -octal_node* find_metaball_octal_node(octal_node *node, float x, float y, float z, short depth); - -void freepolygonize(PROCESS *p); -void docube(CUBE *cube, PROCESS *p, struct MetaBall *mb); -void testface(int i, int j, int k, CUBE* old, int bit, int c1, int c2, int c3, int c4, PROCESS *p); -CORNER *setcorner (PROCESS* p, int i, int j, int k); -int vertid (CORNER *c1, CORNER *c2, PROCESS *p, struct MetaBall *mb); -int setcenter(CENTERLIST *table[], int i, int j, int k); -int otherface (int edge, int face); -void makecubetable (void); -void setedge (EDGELIST *table[], int i1, int j1, int k1, int i2, int j2, int k2, int vid); -int getedge (EDGELIST *table[], int i1, int j1, int k1, int i2, int j2, int k2); -void addtovertices (VERTICES *vertices, VERTEX v); -void vnormal (MB_POINT *point, PROCESS *p, MB_POINT *v); -void converge (MB_POINT *p1, MB_POINT *p2, float v1, float v2, float (*function)(float, float, float), MB_POINT *p, struct MetaBall *mb, int f); -void add_cube(PROCESS *mbproc, int i, int j, int k, int count); -void find_first_points(PROCESS *mbproc, struct MetaBall *mb, int a); - -void fill_metaball_octal_node(octal_node *node, struct MetaElem *ml, short i); -void subdivide_metaball_octal_node(octal_node *node, float size_x, float size_y, float size_z, short depth); -void free_metaball_octal_node(octal_node *node); -void init_metaball_octal_tree(int depth); -void polygonize(PROCESS *mbproc, struct MetaBall *mb); -float init_meta(struct Scene *scene, struct Object *ob); - -void unlink_mball(struct MetaBall *mb); -void free_mball(struct MetaBall *mb); -struct MetaBall *add_mball(const char *name); -struct MetaBall *copy_mball(struct MetaBall *mb); -void make_local_mball(struct MetaBall *mb); -struct MetaElem *add_metaball_element(struct MetaBall *mb, const int type); -void tex_space_mball(struct Object *ob); -float *make_orco_mball(struct Object *ob, struct ListBase *dispbase); -void copy_mball_properties(struct Scene *scene, struct Object *active_object); -struct Object *find_basis_mball(struct Scene *scene, struct Object *ob); -int is_basis_mball(struct Object *ob); -int is_mball_basis_for(struct Object *ob1, struct Object *ob2); -void metaball_polygonize(struct Scene *scene, struct Object *ob, struct ListBase *dispbase); -void calc_mballco(struct MetaElem *ml, float vec[3]); -float densfunc(struct MetaElem *ball, float x, float y, float z); -float metaball(float x, float y, float z); -void accum_mballfaces(int i1, int i2, int i3, int i4); -void *new_pgn_element(int size); -int nextcwedge (int edge, int face); -void BKE_freecubetable(void); +void BKE_metaball_properties_copy(struct Scene *scene, struct Object *active_object); int BKE_metaball_minmax(struct MetaBall *mb, float min[3], float max[3]); int BKE_metaball_center_median(struct MetaBall *mb, float cent[3]); int BKE_metaball_center_bounds(struct MetaBall *mb, float cent[3]); void BKE_metaball_translate(struct MetaBall *mb, float offset[3]); -#endif +struct MetaElem *BKE_metaball_element_add(struct MetaBall *mb, const int type); +#endif diff --git a/source/blender/blenkernel/BKE_movieclip.h b/source/blender/blenkernel/BKE_movieclip.h index d7b2f271a83..29924542494 100644 --- a/source/blender/blenkernel/BKE_movieclip.h +++ b/source/blender/blenkernel/BKE_movieclip.h @@ -40,10 +40,10 @@ struct MovieClipUser; struct MovieTrackingTrack; struct MovieDistortion; -void free_movieclip(struct MovieClip *clip); -void unlink_movieclip(struct Main *bmain, struct MovieClip *clip); +void BKE_movieclip_free(struct MovieClip *clip); +void BKE_movieclip_unlink(struct Main *bmain, struct MovieClip *clip); -struct MovieClip *BKE_add_movieclip_file(const char *name); +struct MovieClip *BKE_movieclip_file_add(const char *name); void BKE_movieclip_reload(struct MovieClip *clip); struct ImBuf *BKE_movieclip_get_ibuf(struct MovieClip *clip, struct MovieClipUser *user); diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c index 05171a5d9f5..38c73ba72b9 100644 --- a/source/blender/blenkernel/intern/anim.c +++ b/source/blender/blenkernel/intern/anim.c @@ -482,7 +482,7 @@ void calc_curvepath(Object *ob) if (ob==NULL || ob->type != OB_CURVE) return; cu= ob->data; - nurbs= BKE_curve_nurbs(cu); + nurbs= BKE_curve_nurbs_get(cu); nu= nurbs->first; if (cu->path) free_path(cu->path); diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 931aa2d6242..d1d6833e903 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -566,13 +566,13 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest) if (bone->segments > MAX_BBONE_SUBDIV) bone->segments = MAX_BBONE_SUBDIV; - forward_diff_bezier(0.0, h1[0], h2[0], 0.0, data[0], + BKE_curve_forward_diff_bezier(0.0, h1[0], h2[0], 0.0, data[0], MAX_BBONE_SUBDIV, 4*sizeof(float)); - forward_diff_bezier(0.0, h1[1], length + h2[1], length, data[0]+1, + BKE_curve_forward_diff_bezier(0.0, h1[1], length + h2[1], length, data[0]+1, MAX_BBONE_SUBDIV, 4*sizeof(float)); - forward_diff_bezier(0.0, h1[2], h2[2], 0.0, data[0]+2, + BKE_curve_forward_diff_bezier(0.0, h1[2], h2[2], 0.0, data[0]+2, MAX_BBONE_SUBDIV, 4*sizeof(float)); - forward_diff_bezier(roll1, roll1 + 0.390464f*(roll2-roll1), roll2 - 0.390464f*(roll2-roll1), roll2, data[0]+3, + BKE_curve_forward_diff_bezier(roll1, roll1 + 0.390464f*(roll2-roll1), roll2 - 0.390464f*(roll2-roll1), roll2, data[0]+3, MAX_BBONE_SUBDIV, 4*sizeof(float)); equalize_bezier(data[0], bone->segments); /* note: does stride 4! */ diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c index 2d5631509b4..6dc1b2a4b00 100644 --- a/source/blender/blenkernel/intern/colortools.c +++ b/source/blender/blenkernel/intern/colortools.c @@ -499,8 +499,8 @@ static void curvemap_make_table(CurveMap *cuma, rctf *clipr) for (a=0; atotpoint-1; a++, fp += 2*CM_RESOL) { correct_bezpart(bezt[a].vec[1], bezt[a].vec[2], bezt[a+1].vec[0], bezt[a+1].vec[1]); - forward_diff_bezier(bezt[a].vec[1][0], bezt[a].vec[2][0], bezt[a+1].vec[0][0], bezt[a+1].vec[1][0], fp, CM_RESOL-1, 2*sizeof(float)); - forward_diff_bezier(bezt[a].vec[1][1], bezt[a].vec[2][1], bezt[a+1].vec[0][1], bezt[a+1].vec[1][1], fp+1, CM_RESOL-1, 2*sizeof(float)); + BKE_curve_forward_diff_bezier(bezt[a].vec[1][0], bezt[a].vec[2][0], bezt[a+1].vec[0][0], bezt[a+1].vec[1][0], fp, CM_RESOL-1, 2*sizeof(float)); + BKE_curve_forward_diff_bezier(bezt[a].vec[1][1], bezt[a].vec[2][1], bezt[a+1].vec[0][1], bezt[a+1].vec[1][1], fp+1, CM_RESOL-1, 2*sizeof(float)); } /* store first and last handle for extrapolation, unit length */ diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index e5b2e5f69c7..e0cadac586b 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -70,7 +70,7 @@ static int cu_isectLL(const float v1[3], const float v2[3], const float v3[3], c short cox, short coy, float *labda, float *mu, float vec[3]); -void unlink_curve(Curve *cu) +void BKE_curve_unlink(Curve *cu) { int a; @@ -95,7 +95,7 @@ void unlink_curve(Curve *cu) } /* frees editcurve entirely */ -void BKE_free_editfont(Curve *cu) +void BKE_curve_editfont_free(Curve *cu) { if (cu->editfont) { EditFont *ef= cu->editfont; @@ -112,7 +112,7 @@ void BKE_free_editfont(Curve *cu) } } -void free_curve_editNurb_keyIndex(EditNurb *editnurb) +void BKE_curve_editNurb_keyIndex_free(EditNurb *editnurb) { if (!editnurb->keyindex) { return; @@ -121,26 +121,26 @@ void free_curve_editNurb_keyIndex(EditNurb *editnurb) editnurb->keyindex= NULL; } -void free_curve_editNurb (Curve *cu) +void BKE_curve_editNurb_free (Curve *cu) { if (cu->editnurb) { - freeNurblist(&cu->editnurb->nurbs); - free_curve_editNurb_keyIndex(cu->editnurb); + BKE_nurbList_free(&cu->editnurb->nurbs); + BKE_curve_editNurb_keyIndex_free(cu->editnurb); MEM_freeN(cu->editnurb); cu->editnurb= NULL; } } /* don't free curve itself */ -void free_curve(Curve *cu) +void BKE_curve_free(Curve *cu) { - freeNurblist(&cu->nurb); + BKE_nurbList_free(&cu->nurb); BLI_freelistN(&cu->bev); freedisplist(&cu->disp); - BKE_free_editfont(cu); + BKE_curve_editfont_free(cu); - free_curve_editNurb(cu); - unlink_curve(cu); + BKE_curve_editNurb_free(cu); + BKE_curve_unlink(cu); BKE_free_animdata((ID *)cu); if (cu->mat) MEM_freeN(cu->mat); @@ -151,7 +151,7 @@ void free_curve(Curve *cu) if (cu->tb) MEM_freeN(cu->tb); } -Curve *add_curve(const char *name, int type) +Curve *BKE_curve_add(const char *name, int type) { Curve *cu; @@ -187,14 +187,14 @@ Curve *add_curve(const char *name, int type) return cu; } -Curve *copy_curve(Curve *cu) +Curve *BKE_curve_copy(Curve *cu) { Curve *cun; int a; cun= copy_libblock(&cu->id); cun->nurb.first= cun->nurb.last= NULL; - duplicateNurblist( &(cun->nurb), &(cu->nurb)); + BKE_nurbList_duplicate( &(cun->nurb), &(cu->nurb)); cun->mat= MEM_dupallocN(cu->mat); for (a=0; atotcol; a++) { @@ -242,7 +242,7 @@ static void extern_local_curve(Curve *cu) } } -void make_local_curve(Curve *cu) +void BKE_curve_make_local(Curve *cu) { Main *bmain= G.main; Object *ob; @@ -273,7 +273,7 @@ void make_local_curve(Curve *cu) extern_local_curve(cu); } else if (is_local && is_lib) { - Curve *cu_new= copy_curve(cu); + Curve *cu_new= BKE_curve_copy(cu); cu_new->id.us= 0; BKE_id_lib_local_paths(bmain, cu->id.lib, &cu_new->id); @@ -291,7 +291,7 @@ void make_local_curve(Curve *cu) } /* Get list of nurbs from editnurbs structure */ -ListBase *curve_editnurbs(Curve *cu) +ListBase *BKE_curve_editNurbs_get(Curve *cu) { if (cu->editnurb) { return &cu->editnurb->nurbs; @@ -300,7 +300,7 @@ ListBase *curve_editnurbs(Curve *cu) return NULL; } -short curve_type(Curve *cu) +short BKE_curve_type_get(Curve *cu) { Nurb *nu; int type= cu->type; @@ -322,9 +322,9 @@ short curve_type(Curve *cu) return type; } -void update_curve_dimension(Curve *cu) +void BKE_curve_curve_dimension_update(Curve *cu) { - ListBase *nurbs= BKE_curve_nurbs(cu); + ListBase *nurbs= BKE_curve_nurbs_get(cu); Nurb *nu= nurbs->first; if (cu->flag&CU_3D) { @@ -335,24 +335,24 @@ void update_curve_dimension(Curve *cu) else { for ( ; nu; nu= nu->next) { nu->flag |= CU_2D; - test2DNurb(nu); + BKE_nurb_test2D(nu); /* since the handles are moved they need to be auto-located again */ if (nu->type == CU_BEZIER) - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } } } -void test_curve_type(Object *ob) +void BKE_curve_type_test(Object *ob) { - ob->type= curve_type(ob->data); + ob->type= BKE_curve_type_get(ob->data); if (ob->type==OB_CURVE) - update_curve_dimension((Curve *)ob->data); + BKE_curve_curve_dimension_update((Curve *)ob->data); } -void tex_space_curve(Curve *cu) +void BKE_curve_tex_space_calc(Curve *cu) { DispList *dl; BoundBox *bb; @@ -408,7 +408,7 @@ void tex_space_curve(Curve *cu) } } -int count_curveverts(ListBase *nurb) +int BKE_nurbList_verts_count(ListBase *nurb) { Nurb *nu; int tot=0; @@ -423,7 +423,7 @@ int count_curveverts(ListBase *nurb) return tot; } -int count_curveverts_without_handles(ListBase *nurb) +int BKE_nurbList_verts_count_without_handles(ListBase *nurb) { Nurb *nu; int tot=0; @@ -440,7 +440,7 @@ int count_curveverts_without_handles(ListBase *nurb) /* **************** NURBS ROUTINES ******************** */ -void freeNurb(Nurb *nu) +void BKE_nurb_free(Nurb *nu) { if (nu==NULL) return; @@ -460,7 +460,7 @@ void freeNurb(Nurb *nu) } -void freeNurblist(ListBase *lb) +void BKE_nurbList_free(ListBase *lb) { Nurb *nu, *next; @@ -469,13 +469,13 @@ void freeNurblist(ListBase *lb) nu= lb->first; while (nu) { next= nu->next; - freeNurb(nu); + BKE_nurb_free(nu); nu= next; } lb->first= lb->last= NULL; } -Nurb *duplicateNurb(Nurb *nu) +Nurb *BKE_nurb_duplicate(Nurb *nu) { Nurb *newnu; int len; @@ -515,22 +515,22 @@ Nurb *duplicateNurb(Nurb *nu) return newnu; } -void duplicateNurblist(ListBase *lb1, ListBase *lb2) +void BKE_nurbList_duplicate(ListBase *lb1, ListBase *lb2) { Nurb *nu, *nun; - freeNurblist(lb1); + BKE_nurbList_free(lb1); nu= lb2->first; while (nu) { - nun= duplicateNurb(nu); + nun= BKE_nurb_duplicate(nu); BLI_addtail(lb1, nun); nu= nu->next; } } -void test2DNurb(Nurb *nu) +void BKE_nurb_test2D(Nurb *nu) { BezTriple *bezt; BPoint *bp; @@ -559,7 +559,7 @@ void test2DNurb(Nurb *nu) } } -void minmaxNurb(Nurb *nu, float *min, float *max) +void BKE_nurb_minmax(Nurb *nu, float *min, float *max) { BezTriple *bezt; BPoint *bp; @@ -586,7 +586,7 @@ void minmaxNurb(Nurb *nu, float *min, float *max) } /* be sure to call makeknots after this */ -void addNurbPoints(Nurb *nu, int number) +void BKE_nurb_points_add(Nurb *nu, int number) { BPoint *tmp= nu->bp; int i; @@ -606,7 +606,7 @@ void addNurbPoints(Nurb *nu, int number) nu->pntsu += number; } -void addNurbPointsBezier(Nurb *nu, int number) +void BKE_nurb_bezierPoints_add(Nurb *nu, int number) { BezTriple *tmp= nu->bezt; int i; @@ -706,7 +706,7 @@ static void makeknots(Nurb *nu, short uv) if (nu->type == CU_NURBS) { if (uv == 1) { if (nu->knotsu) MEM_freeN(nu->knotsu); - if (check_valid_nurb_u(nu)) { + if (BKE_nurb_check_valid_u(nu)) { nu->knotsu= MEM_callocN(4+sizeof(float)*KNOTSU(nu), "makeknots"); if (nu->flagu & CU_NURB_CYCLIC) { calcknots(nu->knotsu, nu->pntsu, nu->orderu, 0); /* cyclic should be uniform */ @@ -721,7 +721,7 @@ static void makeknots(Nurb *nu, short uv) } else if (uv == 2) { if (nu->knotsv) MEM_freeN(nu->knotsv); - if (check_valid_nurb_v(nu)) { + if (BKE_nurb_check_valid_v(nu)) { nu->knotsv= MEM_callocN(4+sizeof(float)*KNOTSV(nu), "makeknots"); if (nu->flagv & CU_NURB_CYCLIC) { calcknots(nu->knotsv, nu->pntsv, nu->orderv, 0); /* cyclic should be uniform */ @@ -736,12 +736,12 @@ static void makeknots(Nurb *nu, short uv) } } -void nurbs_knot_calc_u(Nurb *nu) +void BKE_nurb_knot_calc_u(Nurb *nu) { makeknots(nu, 1); } -void nurbs_knot_calc_v(Nurb *nu) +void BKE_nurb_knot_calc_v(Nurb *nu) { makeknots(nu, 2); } @@ -809,7 +809,7 @@ static void basisNurb(float t, short order, short pnts, float *knots, float *bas } -void makeNurbfaces(Nurb *nu, float *coord_array, int rowstride, int resolu, int resolv) +void BKE_nurb_makeFaces(Nurb *nu, float *coord_array, int rowstride, int resolu, int resolv) /* coord_array has to be 3*4*resolu*resolv in size, and zero-ed */ { BPoint *bp; @@ -972,7 +972,7 @@ void makeNurbfaces(Nurb *nu, float *coord_array, int rowstride, int resolu, int MEM_freeN(jend); } -void makeNurbcurve(Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, float *weight_array, int resolu, int stride) +void BKE_nurb_makeCurve(Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, float *weight_array, int resolu, int stride) /* coord_array has to be 3*4*pntsu*resolu in size and zero-ed * tilt_array and radius_array will be written to if valid */ { @@ -1074,7 +1074,7 @@ void makeNurbcurve(Nurb *nu, float *coord_array, float *tilt_array, float *radiu } /* forward differencing method for bezier curve */ -void forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride) +void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride) { float rt0,rt1,rt2,rt3,f; int a; @@ -1122,7 +1122,7 @@ static void forward_diff_bezier_cotangent(float *p0, float *p1, float *p2, float /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -float *make_orco_surf(Object *ob) +float *BKE_curve_surf_make_orco(Object *ob) { /* Note: this function is used in convertblender only atm, so * suppose nonzero curve's render resolution should always be used */ @@ -1190,7 +1190,7 @@ float *make_orco_surf(Object *ob) float *_tdata= MEM_callocN((nu->pntsu*resolu) * (nu->pntsv*resolv) *3*sizeof(float), "temp data"); float *tdata= _tdata; - makeNurbfaces(nu, tdata, 0, resolu, resolv); + BKE_nurb_makeFaces(nu, tdata, 0, resolu, resolv); for (b=0; bdata; DispList *dl; @@ -1312,7 +1312,7 @@ float *make_orco_curve(Scene *scene, Object *ob) /* ***************** BEVEL ****************** */ -void makebevelcurve(Scene *scene, Object *ob, ListBase *disp, int forRender) +void BKE_curve_bevel_make(Scene *scene, Object *ob, ListBase *disp, int forRender) { DispList *dl, *dlnew; Curve *bevcu, *cu; @@ -2083,7 +2083,7 @@ static void make_bevel_list_segment_3D(BevList *bl) -void makeBevelList(Object *ob) +void BKE_curve_bevelList_make(Object *ob) { /* * - convert all curves to polys, with indication of resol and flags for double-vertices @@ -2112,7 +2112,7 @@ void makeBevelList(Object *ob) BLI_freelistN(&(cu->bev)); if (cu->editnurb && ob->type!=OB_FONT) { - ListBase *nurbs= curve_editnurbs(cu); + ListBase *nurbs= BKE_curve_editNurbs_get(cu); nu = nurbs->first; } else { @@ -2128,7 +2128,7 @@ void makeBevelList(Object *ob) /* check we are a single point? also check we are not a surface and that the orderu is sane, * enforced in the UI but can go wrong possibly */ - if (!check_valid_nurb_u(nu)) { + if (!BKE_nurb_check_valid_u(nu)) { bl= MEM_callocN(sizeof(BevList)+1*sizeof(BevPoint), "makeBevelList1"); BLI_addtail(&(cu->bev), bl); bl->nr= 0; @@ -2201,7 +2201,7 @@ void makeBevelList(Object *ob) /* BevPoint must stay aligned to 4 so sizeof(BevPoint)/sizeof(float) works */ for (j=0; j<3; j++) { - forward_diff_bezier( prevbezt->vec[1][j], prevbezt->vec[2][j], + BKE_curve_forward_diff_bezier( prevbezt->vec[1][j], prevbezt->vec[2][j], bezt->vec[0][j], bezt->vec[1][j], &(bevp->vec[j]), resolu, sizeof(BevPoint)); } @@ -2256,7 +2256,7 @@ void makeBevelList(Object *ob) else bl->poly= -1; bevp= (BevPoint *)(bl+1); - makeNurbcurve( nu, &bevp->vec[0], + BKE_nurb_makeCurve( nu, &bevp->vec[0], do_tilt ? &bevp->alfa : NULL, do_radius ? &bevp->radius : NULL, do_weight ? &bevp->weight : NULL, @@ -2719,18 +2719,18 @@ static void calchandlesNurb_intern(Nurb *nu, int skip_align) } } -void calchandleNurb(BezTriple *bezt, BezTriple *prev, BezTriple *next, int mode) +void BKE_nurb_handle_calc(BezTriple *bezt, BezTriple *prev, BezTriple *next, int mode) { calchandleNurb_intern(bezt, prev, next, mode, FALSE); } -void calchandlesNurb(Nurb *nu) /* first, if needed, set handle flags */ +void BKE_nurb_handles_calc(Nurb *nu) /* first, if needed, set handle flags */ { calchandlesNurb_intern(nu, FALSE); } -void testhandlesNurb(Nurb *nu) +void BKE_nurb_handles_test(Nurb *nu) { /* use when something has changed with handles. * it treats all BezTriples with the following rules: @@ -2770,10 +2770,10 @@ void testhandlesNurb(Nurb *nu) bezt++; } - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } -void autocalchandlesNurb(Nurb *nu, int flag) +void BKE_nurb_handles_autocalc(Nurb *nu, int flag) { /* checks handle coordinates and calculates type */ @@ -2841,21 +2841,21 @@ void autocalchandlesNurb(Nurb *nu, int flag) bezt2++; } - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } -void autocalchandlesNurb_all(ListBase *editnurb, int flag) +void BKE_nurbList_handles_autocalc(ListBase *editnurb, int flag) { Nurb *nu; nu= editnurb->first; while (nu) { - autocalchandlesNurb(nu, flag); + BKE_nurb_handles_autocalc(nu, flag); nu= nu->next; } } -void sethandlesNurb(ListBase *editnurb, short code) +void BKE_nurbList_handles_set(ListBase *editnurb, short code) { /* code==1: set autohandle */ /* code==2: set vectorhandle */ @@ -2884,7 +2884,7 @@ void sethandlesNurb(ListBase *editnurb, short code) } bezt++; } - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } nu= nu->next; } @@ -2928,7 +2928,7 @@ void sethandlesNurb(ListBase *editnurb, short code) bezt++; } - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } nu= nu->next; } @@ -2958,7 +2958,7 @@ static void swapdata(void *adr1, void *adr2, int len) } } -void switchdirectionNurb(Nurb *nu) +void BKE_nurb_direction_switch(Nurb *nu) { BezTriple *bezt1, *bezt2; BPoint *bp1, *bp2; @@ -3064,9 +3064,9 @@ void switchdirectionNurb(Nurb *nu) } -float (*curve_getVertexCos(Curve *UNUSED(cu), ListBase *lb, int *numVerts_r))[3] +float (*BKE_curve_vertexCos_get(Curve *UNUSED(cu), ListBase *lb, int *numVerts_r))[3] { - int i, numVerts = *numVerts_r = count_curveverts(lb); + int i, numVerts = *numVerts_r = BKE_nurbList_verts_count(lb); float *co, (*cos)[3] = MEM_mallocN(sizeof(*cos)*numVerts, "cu_vcos"); Nurb *nu; @@ -3093,7 +3093,7 @@ float (*curve_getVertexCos(Curve *UNUSED(cu), ListBase *lb, int *numVerts_r))[3] return cos; } -void curve_applyVertexCos(Curve *UNUSED(cu), ListBase *lb, float (*vertexCos)[3]) +void BK_curve_vertexCos_apply(Curve *UNUSED(cu), ListBase *lb, float (*vertexCos)[3]) { float *co = vertexCos[0]; Nurb *nu; @@ -3121,9 +3121,9 @@ void curve_applyVertexCos(Curve *UNUSED(cu), ListBase *lb, float (*vertexCos)[3] } } -float (*curve_getKeyVertexCos(Curve *UNUSED(cu), ListBase *lb, float *key))[3] +float (*BKE_curve_keyVertexCos_get(Curve *UNUSED(cu), ListBase *lb, float *key))[3] { - int i, numVerts = count_curveverts(lb); + int i, numVerts = BKE_nurbList_verts_count(lb); float *co, (*cos)[3] = MEM_mallocN(sizeof(*cos)*numVerts, "cu_vcos"); Nurb *nu; @@ -3152,7 +3152,7 @@ float (*curve_getKeyVertexCos(Curve *UNUSED(cu), ListBase *lb, float *key))[3] return cos; } -void curve_applyKeyVertexTilts(Curve *UNUSED(cu), ListBase *lb, float *key) +void BKE_curve_keyVertexTilts_apply(Curve *UNUSED(cu), ListBase *lb, float *key) { Nurb *nu; int i; @@ -3179,7 +3179,7 @@ void curve_applyKeyVertexTilts(Curve *UNUSED(cu), ListBase *lb, float *key) } } -int check_valid_nurb_u( struct Nurb *nu ) +int BKE_nurb_check_valid_u( struct Nurb *nu ) { if (nu==NULL) return 0; if (nu->pntsu <= 1) return 0; @@ -3194,7 +3194,7 @@ int check_valid_nurb_u( struct Nurb *nu ) } return 1; } -int check_valid_nurb_v( struct Nurb *nu) +int BKE_nurb_check_valid_v( struct Nurb *nu) { if (nu==NULL) return 0; if (nu->pntsv <= 1) return 0; @@ -3210,7 +3210,7 @@ int check_valid_nurb_v( struct Nurb *nu) return 1; } -int clamp_nurb_order_u( struct Nurb *nu ) +int BKE_nurb_order_clamp_u( struct Nurb *nu ) { int change = 0; if (nu->pntsuorderu) { @@ -3224,7 +3224,7 @@ int clamp_nurb_order_u( struct Nurb *nu ) return change; } -int clamp_nurb_order_v( struct Nurb *nu) +int BKE_nurb_order_clamp_v( struct Nurb *nu) { int change = 0; if (nu->pntsvorderv) { @@ -3239,10 +3239,10 @@ int clamp_nurb_order_v( struct Nurb *nu) } /* Get edit nurbs or normal nurbs list */ -ListBase *BKE_curve_nurbs(Curve *cu) +ListBase *BKE_curve_nurbs_get(Curve *cu) { if (cu->editnurb) { - return curve_editnurbs(cu); + return BKE_curve_editNurbs_get(cu); } return &cu->nurb; @@ -3250,20 +3250,20 @@ ListBase *BKE_curve_nurbs(Curve *cu) /* basic vertex data functions */ -int minmax_curve(Curve *cu, float min[3], float max[3]) +int BKE_curve_minmax(Curve *cu, float min[3], float max[3]) { - ListBase *nurb_lb= BKE_curve_nurbs(cu); + ListBase *nurb_lb= BKE_curve_nurbs_get(cu); Nurb *nu; for (nu= nurb_lb->first; nu; nu= nu->next) - minmaxNurb(nu, min, max); + BKE_nurb_minmax(nu, min, max); return (nurb_lb->first != NULL); } -int curve_center_median(Curve *cu, float cent[3]) +int BKE_curve_center_median(Curve *cu, float cent[3]) { - ListBase *nurb_lb= BKE_curve_nurbs(cu); + ListBase *nurb_lb= BKE_curve_nurbs_get(cu); Nurb *nu; int total= 0; @@ -3297,11 +3297,11 @@ int curve_center_median(Curve *cu, float cent[3]) return (total != 0); } -int curve_center_bounds(Curve *cu, float cent[3]) +int BKE_curve_center_bounds(Curve *cu, float cent[3]) { float min[3], max[3]; INIT_MINMAX(min, max); - if (minmax_curve(cu, min, max)) { + if (BKE_curve_minmax(cu, min, max)) { mid_v3_v3v3(cent, min, max); return 1; } @@ -3309,9 +3309,9 @@ int curve_center_bounds(Curve *cu, float cent[3]) return 0; } -void curve_translate(Curve *cu, float offset[3], int do_keys) +void BKE_curve_translate(Curve *cu, float offset[3], int do_keys) { - ListBase *nurb_lb= BKE_curve_nurbs(cu); + ListBase *nurb_lb= BKE_curve_nurbs_get(cu); Nurb *nu; int i; @@ -3346,9 +3346,9 @@ void curve_translate(Curve *cu, float offset[3], int do_keys) } } -void curve_delete_material_index(Curve *cu, int index) +void BKE_curve_delete_material_index(Curve *cu, int index) { - const int curvetype= curve_type(cu); + const int curvetype= BKE_curve_type_get(cu); if (curvetype == OB_FONT) { struct CharInfo *info= cu->strinfo; diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 246c973169e..045d85242f1 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -539,7 +539,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O break; case OB_MBALL: { - Object *mom= find_basis_mball(scene, ob); + Object *mom= BKE_metaball_basis_find(scene, ob); if (mom!=ob) { node2 = dag_get_node(dag, mom); diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index fcd80698d5c..3d79386e19a 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -1,4 +1,5 @@ /* + * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -296,7 +297,7 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase, i else resolu= nu->resolu; - if (!check_valid_nurb_u(nu)); + if (!BKE_nurb_check_valid_u(nu)); else if (nu->type == CU_BEZIER) { /* count */ @@ -351,7 +352,7 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase, i else { int j; for (j=0; j<3; j++) { - forward_diff_bezier( prevbezt->vec[1][j], + BKE_curve_forward_diff_bezier( prevbezt->vec[1][j], prevbezt->vec[2][j], bezt->vec[0][j], bezt->vec[1][j], @@ -384,7 +385,7 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase, i data= dl->verts; if (nu->flagu & CU_NURB_CYCLIC) dl->type= DL_POLY; else dl->type= DL_SEGM; - makeNurbcurve(nu, data, NULL, NULL, NULL, resolu, 3*sizeof(float)); + BKE_nurb_makeCurve(nu, data, NULL, NULL, NULL, resolu, 3*sizeof(float)); } else if (nu->type == CU_POLY) { len= nu->pntsu; @@ -672,9 +673,9 @@ void makeDispListMBall(Scene *scene, Object *ob) freedisplist(&(ob->disp)); if (ob->type==OB_MBALL) { - if (ob==find_basis_mball(scene, ob)) { - metaball_polygonize(scene, ob, &ob->disp); - tex_space_mball(ob); + if (ob==BKE_metaball_basis_find(scene, ob)) { + BKE_metaball_polygonize(scene, ob, &ob->disp); + BKE_metaball_tex_space_calc(ob); object_deform_mball(ob, &ob->disp); } @@ -685,8 +686,8 @@ void makeDispListMBall(Scene *scene, Object *ob) void makeDispListMBall_forRender(Scene *scene, Object *ob, ListBase *dispbase) { - metaball_polygonize(scene, ob, dispbase); - tex_space_mball(ob); + BKE_metaball_polygonize(scene, ob, dispbase); + BKE_metaball_tex_space_calc(ob); object_deform_mball(ob, dispbase); } @@ -730,7 +731,7 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, fl ModifierData *md = modifiers_getVirtualModifierList(ob); ModifierData *pretessellatePoint; Curve *cu= ob->data; - ListBase *nurb= BKE_curve_nurbs(cu); + ListBase *nurb= BKE_curve_nurbs_get(cu); int numVerts = 0; int editmode = (!forRender && cu->editnurb); float (*originalVerts)[3] = NULL; @@ -753,9 +754,9 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, fl * tilts, which is passed through in the modifier stack. * this is also the reason curves do not use a virtual * shape key modifier yet. */ - deformedVerts= curve_getKeyVertexCos(cu, nurb, keyVerts); + deformedVerts= BKE_curve_keyVertexCos_get(cu, nurb, keyVerts); originalVerts= MEM_dupallocN(deformedVerts); - numVerts = count_curveverts_without_handles(nurb); + numVerts = BKE_nurbList_verts_count_without_handles(nurb); } } @@ -770,7 +771,7 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, fl if (mti->type!=eModifierTypeType_OnlyDeform) continue; if (!deformedVerts) { - deformedVerts = curve_getVertexCos(cu, nurb, &numVerts); + deformedVerts = BKE_curve_vertexCos_get(cu, nurb, &numVerts); originalVerts = MEM_dupallocN(deformedVerts); } @@ -782,9 +783,9 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, fl } if (deformedVerts) - curve_applyVertexCos(cu, nurb, deformedVerts); + BK_curve_vertexCos_apply(cu, nurb, deformedVerts); if (keyVerts) /* these are not passed through modifier stack */ - curve_applyKeyVertexTilts(cu, nurb, keyVerts); + BKE_curve_keyVertexTilts_apply(cu, nurb, keyVerts); if (keyVerts) MEM_freeN(keyVerts); @@ -834,7 +835,7 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba ModifierData *md = modifiers_getVirtualModifierList(ob); ModifierData *pretessellatePoint; Curve *cu= ob->data; - ListBase *nurb= BKE_curve_nurbs(cu); + ListBase *nurb= BKE_curve_nurbs_get(cu); int required_mode = 0, totvert = 0; int editmode = (!forRender && cu->editnurb); DerivedMesh *dm= NULL, *ndm; @@ -956,7 +957,7 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba } if (deformedVerts) { - curve_applyVertexCos(ob->data, nurb, originalVerts); + BK_curve_vertexCos_apply(ob->data, nurb, originalVerts); MEM_freeN(originalVerts); MEM_freeN(deformedVerts); } @@ -1023,7 +1024,7 @@ static void add_orco_dm(Scene *scene, Object *ob, DerivedMesh *dm, DerivedMesh * dm->getVertCos(dm, orco); } else { - orco= (float(*)[3])make_orco_curve(scene, ob); + orco= (float(*)[3])BKE_curve_make_orco(scene, ob); } for (a=0; aeditnurb) - nubase= curve_editnurbs(cu); + nubase= BKE_curve_editNurbs_get(cu); else nubase= &cu->nurb; @@ -1144,7 +1145,7 @@ void makeDispListSurf(Scene *scene, Object *ob, ListBase *dispbase, if (nu->flagu & CU_NURB_CYCLIC) dl->type= DL_POLY; else dl->type= DL_SEGM; - makeNurbcurve(nu, data, NULL, NULL, NULL, resolu, 3*sizeof(float)); + BKE_nurb_makeCurve(nu, data, NULL, NULL, NULL, resolu, 3*sizeof(float)); } else { len= (nu->pntsu*resolu) * (nu->pntsv*resolv); @@ -1168,7 +1169,7 @@ void makeDispListSurf(Scene *scene, Object *ob, ListBase *dispbase, if (nu->flagv & CU_NURB_CYCLIC) dl->flag|= DL_CYCL_U; /* reverse too! */ if (nu->flagu & CU_NURB_CYCLIC) dl->flag|= DL_CYCL_V; - makeNurbfaces(nu, data, 0, resolu, resolv); + BKE_nurb_makeFaces(nu, data, 0, resolu, resolv); /* gl array drawing: using indices */ displist_surf_indices(dl); @@ -1182,7 +1183,7 @@ void makeDispListSurf(Scene *scene, Object *ob, ListBase *dispbase, copy_displist(&cu->disp, dispbase); if (!forRender) { - tex_space_curve(cu); + BKE_curve_tex_space_calc(cu); } if (!forOrco) @@ -1262,7 +1263,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba float (*deformedVerts)[3]; int numVerts; - nubase= BKE_curve_nurbs(cu); + nubase= BKE_curve_nurbs_get(cu); BLI_freelistN(&(cu->bev)); @@ -1273,10 +1274,10 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba if (!forOrco) curve_calc_modifiers_pre(scene, ob, forRender, &originalVerts, &deformedVerts, &numVerts); - makeBevelList(ob); + BKE_curve_bevelList_make(ob); /* If curve has no bevel will return nothing */ - makebevelcurve(scene, ob, &dlbev, forRender); + BKE_curve_bevel_make(scene, ob, &dlbev, forRender); /* no bevel or extrude, and no width correction? */ if (!dlbev.first && cu->width==1.0f) { @@ -1410,7 +1411,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba copy_displist(&cu->disp, dispbase); if (!forRender) { - tex_space_curve(cu); + BKE_curve_tex_space_calc(cu); } if (!forOrco) curve_calc_modifiers_post(scene, ob, dispbase, derivedFinal, forRender, originalVerts, deformedVerts); diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 806d795cc9d..e85432581d5 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -800,7 +800,7 @@ void calchandles_fcurve (FCurve *fcu) if (bezt->vec[2][0] < bezt->vec[1][0]) bezt->vec[2][0]= bezt->vec[1][0]; /* calculate auto-handles */ - calchandleNurb(bezt, prev, next, 1); /* 1==special autohandle */ + BKE_nurb_handle_calc(bezt, prev, next, 1); /* 1==special autohandle */ /* for automatic ease in and out */ if (ELEM(bezt->h1,HD_AUTO,HD_AUTO_ANIM) && ELEM(bezt->h2,HD_AUTO,HD_AUTO_ANIM)) { diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index cdc923600d7..5d7960a9823 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -1011,7 +1011,7 @@ struct chartrans *BKE_text_to_curve(Main *bmain, Scene *scene, Object *ob, int m if (mode == FO_EDIT) { /* make nurbdata */ - freeNurblist(&cu->nurb); + BKE_nurbList_free(&cu->nurb); ct= chartransdata; if (cu->sepchar==0) { diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c index 0a1c0467244..54a2613991a 100644 --- a/source/blender/blenkernel/intern/key.c +++ b/source/blender/blenkernel/intern/key.c @@ -1594,7 +1594,7 @@ void curve_to_key(Curve *cu, KeyBlock *kb, ListBase *nurb) int a, tot; /* count */ - tot = count_curveverts(nurb); + tot = BKE_nurbList_verts_count(nurb); if (tot == 0) return; if (kb->data) MEM_freeN(kb->data); @@ -1647,7 +1647,7 @@ void key_to_curve(KeyBlock *kb, Curve *UNUSED(cu), ListBase *nurb) nu = nurb->first; fp = kb->data; - tot = count_curveverts(nurb); + tot = BKE_nurbList_verts_count(nurb); tot = MIN2(kb->totelem, tot); @@ -1742,7 +1742,7 @@ float (*key_to_vertcos(Object * ob, KeyBlock * kb))[3] } else if (ELEM(ob->type, OB_CURVE, OB_SURF)) { Curve *cu = (Curve *)ob->data; - tot = count_curveverts(&cu->nurb); + tot = BKE_nurbList_verts_count(&cu->nurb); } if (tot == 0) return NULL; @@ -1822,7 +1822,7 @@ void vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3]) else if (ELEM(ob->type, OB_CURVE, OB_SURF)) { Curve *cu = (Curve *)ob->data; elemsize = cu->key->elemsize; - tot = count_curveverts(&cu->nurb); + tot = BKE_nurbList_verts_count(&cu->nurb); } if (tot == 0) { diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 07839b10ef1..71266275fbd 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -198,12 +198,12 @@ int id_make_local(ID *id, int test) return 1; case ID_CU: if (!test) { - make_local_curve((Curve*)id); + BKE_curve_make_local((Curve*)id); make_local_key(((Curve*)id)->key); } return 1; case ID_MB: - if (!test) make_local_mball((MetaBall*)id); + if (!test) BKE_metaball_make_local((MetaBall*)id); return 1; case ID_MA: if (!test) make_local_material((Material*)id); @@ -291,10 +291,10 @@ int id_copy(ID *id, ID **newid, int test) if (!test) *newid= (ID*)copy_mesh((Mesh*)id); return 1; case ID_CU: - if (!test) *newid= (ID*)copy_curve((Curve*)id); + if (!test) *newid= (ID*)BKE_curve_copy((Curve*)id); return 1; case ID_MB: - if (!test) *newid= (ID*)copy_mball((MetaBall*)id); + if (!test) *newid= (ID*)BKE_metaball_copy((MetaBall*)id); return 1; case ID_MA: if (!test) *newid= (ID*)copy_material((Material*)id); @@ -810,10 +810,10 @@ void free_libblock(ListBase *lb, void *idv) free_mesh((Mesh *)id, 1); break; case ID_CU: - free_curve((Curve *)id); + BKE_curve_free((Curve *)id); break; case ID_MB: - free_mball((MetaBall *)id); + BKE_metaball_free((MetaBall *)id); break; case ID_MA: free_material((Material *)id); @@ -886,7 +886,7 @@ void free_libblock(ListBase *lb, void *idv) free_gpencil_data((bGPdata *)id); break; case ID_MC: - free_movieclip((MovieClip *)id); + BKE_movieclip_free((MovieClip *)id); break; } diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 21a91b34e8d..2dfd41f299a 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -530,7 +530,7 @@ static void data_delete_material_index_id(ID *id, short index) mesh_delete_material_index((Mesh *)id, index); break; case ID_CU: - curve_delete_material_index((Curve *)id, index); + BKE_curve_delete_material_index((Curve *)id, index); break; case ID_MB: /* meta-elems don't have materials atm */ diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c index 60ccfa2a7cb..73e3576b57f 100644 --- a/source/blender/blenkernel/intern/mball.c +++ b/source/blender/blenkernel/intern/mball.c @@ -65,6 +65,106 @@ #include "BKE_object.h" #include "BKE_material.h" +/* Data types */ + +typedef struct point { /* a three-dimensional point */ + float x, y, z; /* its coordinates */ +} MB_POINT; + +typedef struct vertex { /* surface vertex */ + MB_POINT position, normal; /* position and surface normal */ +} VERTEX; + +typedef struct vertices { /* list of vertices in polygonization */ + int count, max; /* # vertices, max # allowed */ + VERTEX *ptr; /* dynamically allocated */ +} VERTICES; + +typedef struct corner { /* corner of a cube */ + int i, j, k; /* (i, j, k) is index within lattice */ + float x, y, z, value; /* location and function value */ + struct corner *next; +} CORNER; + +typedef struct cube { /* partitioning cell (cube) */ + int i, j, k; /* lattice location of cube */ + CORNER *corners[8]; /* eight corners */ +} CUBE; + +typedef struct cubes { /* linked list of cubes acting as stack */ + CUBE cube; /* a single cube */ + struct cubes *next; /* remaining elements */ +} CUBES; + +typedef struct centerlist { /* list of cube locations */ + int i, j, k; /* cube location */ + struct centerlist *next; /* remaining elements */ +} CENTERLIST; + +typedef struct edgelist { /* list of edges */ + int i1, j1, k1, i2, j2, k2; /* edge corner ids */ + int vid; /* vertex id */ + struct edgelist *next; /* remaining elements */ +} EDGELIST; + +typedef struct intlist { /* list of integers */ + int i; /* an integer */ + struct intlist *next; /* remaining elements */ +} INTLIST; + +typedef struct intlists { /* list of list of integers */ + INTLIST *list; /* a list of integers */ + struct intlists *next; /* remaining elements */ +} INTLISTS; + +typedef struct process { /* parameters, function, storage */ + /* what happens here? floats, I think. */ + /* float (*function)(void); */ /* implicit surface function */ + float (*function)(float, float, float); + float size, delta; /* cube size, normal delta */ + int bounds; /* cube range within lattice */ + CUBES *cubes; /* active cubes */ + VERTICES vertices; /* surface vertices */ + CENTERLIST **centers; /* cube center hash table */ + CORNER **corners; /* corner value hash table */ + EDGELIST **edges; /* edge and vertex id hash table */ +} PROCESS; + +/* dividing scene using octal tree makes polygonisation faster */ +typedef struct ml_pointer { + struct ml_pointer *next, *prev; + struct MetaElem *ml; +} ml_pointer; + +typedef struct octal_node { + struct octal_node *nodes[8]; /* children of current node */ + struct octal_node *parent; /* parent of current node */ + struct ListBase elems; /* ListBase of MetaElem pointers (ml_pointer) */ + float x_min, y_min, z_min; /* 1st border point */ + float x_max, y_max, z_max; /* 7th border point */ + float x,y,z; /* center of node */ + int pos, neg; /* number of positive and negative MetaElements in the node */ + int count; /* number of MetaElems, which belongs to the node */ +} octal_node; + +typedef struct octal_tree { + struct octal_node *first; /* first node */ + int pos, neg; /* number of positive and negative MetaElements in the scene */ + short depth; /* number of scene subdivision */ +} octal_tree; + +struct pgn_elements { + struct pgn_elements *next, *prev; + char *data; +}; + +/* Forward declarations */ +static int vertid(CORNER *c1, CORNER *c2, PROCESS *p, MetaBall *mb); +static int setcenter(CENTERLIST *table[], int i, int j, int k); +static CORNER *setcorner(PROCESS* p, int i, int j, int k); +static void converge (MB_POINT *p1, MB_POINT *p2, float v1, float v2, + float (*function)(float, float, float), MB_POINT *p, MetaBall *mb, int f); + /* Global variables */ static float thresh= 0.6f; @@ -73,7 +173,7 @@ static MetaElem **mainb; static octal_tree *metaball_tree = NULL; /* Functions */ -void unlink_mball(MetaBall *mb) +void BKE_metaball_unlink(MetaBall *mb) { int a; @@ -85,9 +185,9 @@ void unlink_mball(MetaBall *mb) /* do not free mball itself */ -void free_mball(MetaBall *mb) +void BKE_metaball_free(MetaBall *mb) { - unlink_mball(mb); + BKE_metaball_unlink(mb); if (mb->adt) { BKE_free_animdata((ID *)mb); @@ -99,7 +199,7 @@ void free_mball(MetaBall *mb) if (mb->disp.first) freedisplist(&mb->disp); } -MetaBall *add_mball(const char *name) +MetaBall *BKE_metaball_add(const char *name) { MetaBall *mb; @@ -115,7 +215,7 @@ MetaBall *add_mball(const char *name) return mb; } -MetaBall *copy_mball(MetaBall *mb) +MetaBall *BKE_metaball_copy(MetaBall *mb) { MetaBall *mbn; int a; @@ -143,7 +243,7 @@ static void extern_local_mball(MetaBall *mb) } } -void make_local_mball(MetaBall *mb) +void BKE_metaball_make_local(MetaBall *mb) { Main *bmain= G.main; Object *ob; @@ -174,7 +274,7 @@ void make_local_mball(MetaBall *mb) extern_local_mball(mb); } else if (is_local && is_lib) { - MetaBall *mb_new= copy_mball(mb); + MetaBall *mb_new= BKE_metaball_copy(mb); mb_new->id.us= 0; /* Remap paths of new ID using old library as base. */ @@ -194,7 +294,7 @@ void make_local_mball(MetaBall *mb) /* most simple meta-element adding function * don't do context manipulation here (rna uses) */ -MetaElem *add_metaball_element(MetaBall *mb, const int type) +MetaElem *BKE_metaball_element_add(MetaBall *mb, const int type) { MetaElem *ml= MEM_callocN(sizeof(MetaElem), "metaelem"); @@ -246,7 +346,7 @@ MetaElem *add_metaball_element(MetaBall *mb, const int type) * basic MetaBall (usually with name Meta). All other MetaBalls (with * names Meta.001, Meta.002, etc) are included in this Bounding Box. */ -void tex_space_mball(Object *ob) +void BKE_metaball_tex_space_calc(Object *ob) { DispList *dl; BoundBox *bb; @@ -290,7 +390,7 @@ void tex_space_mball(Object *ob) boundbox_set_from_min_max(bb, min, max); } -float *make_orco_mball(Object *ob, ListBase *dispbase) +float *BKE_metaball_make_orco(Object *ob, ListBase *dispbase) { BoundBox *bb; DispList *dl; @@ -342,7 +442,7 @@ float *make_orco_mball(Object *ob, ListBase *dispbase) * It test last character of Object ID name. If last character * is digit it return 0, else it return 1. */ -int is_basis_mball(Object *ob) +int BKE_metaball_is_basis(Object *ob) { int len; @@ -353,7 +453,7 @@ int is_basis_mball(Object *ob) } /* return nonzero if ob1 is a basis mball for ob */ -int is_mball_basis_for (Object *ob1, Object *ob2) +int BKE_metaball_is_basis_for (Object *ob1, Object *ob2) { int basis1nr, basis2nr; char basis1name[MAX_ID_NAME], basis2name[MAX_ID_NAME]; @@ -361,7 +461,7 @@ int is_mball_basis_for (Object *ob1, Object *ob2) BLI_split_name_num(basis1name, &basis1nr, ob1->id.name+2, '.'); BLI_split_name_num(basis2name, &basis2nr, ob2->id.name+2, '.'); - if (!strcmp(basis1name, basis2name)) return is_basis_mball(ob1); + if (!strcmp(basis1name, basis2name)) return BKE_metaball_is_basis(ob1); else return 0; } @@ -371,7 +471,7 @@ int is_mball_basis_for (Object *ob1, Object *ob2) * are copied to all metaballs in same "group" (metaballs with same base name: MBall, * MBall.001, MBall.002, etc). The most important is to copy properties to the base metaball, * because this metaball influence polygonisation of metaballs. */ -void copy_mball_properties(Scene *scene, Object *active_object) +void BKE_metaball_properties_copy(Scene *scene, Object *active_object) { Scene *sce_iter= scene; Base *base; @@ -416,7 +516,7 @@ void copy_mball_properties(Scene *scene, Object *active_object) * * warning!, is_basis_mball() can fail on returned object, see long note above. */ -Object *find_basis_mball(Scene *scene, Object *basis) +Object *BKE_metaball_basis_find(Scene *scene, Object *basis) { Scene *sce_iter= scene; Base *base; @@ -522,14 +622,14 @@ Object *find_basis_mball(Scene *scene, Object *basis) /* **************** POLYGONIZATION ************************ */ -void calc_mballco(MetaElem *ml, float vec[3]) +static void calc_mballco(MetaElem *ml, float vec[3]) { if (ml->mat) { mul_m4_v3((float (*)[4])ml->mat, vec); } } -float densfunc(MetaElem *ball, float x, float y, float z) +static float densfunc(MetaElem *ball, float x, float y, float z) { float dist2 = 0.0, dx, dy, dz; float vec[3]; @@ -605,7 +705,7 @@ float densfunc(MetaElem *ball, float x, float y, float z) } } -octal_node* find_metaball_octal_node(octal_node *node, float x, float y, float z, short depth) +static octal_node* find_metaball_octal_node(octal_node *node, float x, float y, float z, short depth) { if (!depth) return node; @@ -673,7 +773,7 @@ octal_node* find_metaball_octal_node(octal_node *node, float x, float y, float z return node; } -float metaball(float x, float y, float z) +static float metaball(float x, float y, float z) /* float x, y, z; */ { struct octal_node *node; @@ -713,7 +813,7 @@ static int *indices=NULL; static int totindex, curindex; -void accum_mballfaces(int i1, int i2, int i3, int i4) +static void accum_mballfaces(int i1, int i2, int i3, int i4) { int *newi, *cur; /* static int i=0; I would like to delete altogether, but I don't dare to, yet */ @@ -746,7 +846,7 @@ void accum_mballfaces(int i1, int i2, int i3, int i4) } /* ******************* MEMORY MANAGEMENT *********************** */ -void *new_pgn_element(int size) +static void *new_pgn_element(int size) { /* during polygonize 1000s of elements are allocated * and never freed in between. Freeing only done at the end. @@ -789,7 +889,7 @@ void *new_pgn_element(int size) return cur->data; } -void freepolygonize(PROCESS *p) +static void freepolygonize(PROCESS *p) { MEM_freeN(p->corners); MEM_freeN(p->edges); @@ -832,7 +932,7 @@ static int rightface[12] = { /* docube: triangulate the cube directly, without decomposition */ -void docube(CUBE *cube, PROCESS *p, MetaBall *mb) +static void docube(CUBE *cube, PROCESS *p, MetaBall *mb) { INTLISTS *polys; CORNER *c1, *c2; @@ -900,7 +1000,7 @@ void docube(CUBE *cube, PROCESS *p, MetaBall *mb) * if surface crosses face, compute other four corners of adjacent cube * and add new cube to cube stack */ -void testface(int i, int j, int k, CUBE* old, int bit, int c1, int c2, int c3, int c4, PROCESS *p) +static void testface(int i, int j, int k, CUBE* old, int bit, int c1, int c2, int c3, int c4, PROCESS *p) { CUBE newc; CUBES *oldcubes = p->cubes; @@ -951,7 +1051,7 @@ void testface(int i, int j, int k, CUBE* old, int bit, int c1, int c2, int c3, i /* setcorner: return corner with the given lattice location * set (and cache) its function value */ -CORNER *setcorner (PROCESS* p, int i, int j, int k) +static CORNER *setcorner (PROCESS* p, int i, int j, int k) { /* for speed, do corner value caching here */ CORNER *c; @@ -986,7 +1086,7 @@ CORNER *setcorner (PROCESS* p, int i, int j, int k) /* nextcwedge: return next clockwise edge from given edge around given face */ -int nextcwedge (int edge, int face) +static int nextcwedge (int edge, int face) { switch (edge) { case LB: @@ -1020,7 +1120,7 @@ int nextcwedge (int edge, int face) /* otherface: return face adjoining edge that is not the given face */ -int otherface (int edge, int face) +static int otherface (int edge, int face) { int other = leftface[edge]; return face == other? rightface[edge] : other; @@ -1029,7 +1129,7 @@ int otherface (int edge, int face) /* makecubetable: create the 256 entry table for cubical polygonization */ -void makecubetable (void) +static void makecubetable (void) { static int isdone= 0; int i, e, c, done[12], pos[8]; @@ -1070,7 +1170,7 @@ void makecubetable (void) } } -void BKE_freecubetable(void) +void BKE_metaball_cubeTable_free(void) { int i; INTLISTS *lists, *nlists; @@ -1100,7 +1200,7 @@ void BKE_freecubetable(void) /* setcenter: set (i,j,k) entry of table[] * return 1 if already set; otherwise, set and return 0 */ -int setcenter(CENTERLIST *table[], int i, int j, int k) +static int setcenter(CENTERLIST *table[], int i, int j, int k) { int index; CENTERLIST *newc, *l, *q; @@ -1125,7 +1225,7 @@ int setcenter(CENTERLIST *table[], int i, int j, int k) /* setedge: set vertex id for edge */ -void setedge (EDGELIST *table[], +static void setedge (EDGELIST *table[], int i1, int j1, int k1, int i2, int j2, int k2, @@ -1161,7 +1261,7 @@ void setedge (EDGELIST *table[], /* getedge: return vertex id for edge; return -1 if not set */ -int getedge (EDGELIST *table[], +static int getedge (EDGELIST *table[], int i1, int j1, int k1, int i2, int j2, int k2) { @@ -1202,7 +1302,7 @@ int getedge (EDGELIST *table[], /* addtovertices: add v to sequence of vertices */ -void addtovertices (VERTICES *vertices, VERTEX v) +static void addtovertices (VERTICES *vertices, VERTEX v) { if (vertices->count == vertices->max) { int i; @@ -1220,7 +1320,7 @@ void addtovertices (VERTICES *vertices, VERTEX v) /* vnormal: compute unit length surface normal at point */ -void vnormal (MB_POINT *point, PROCESS *p, MB_POINT *v) +static void vnormal (MB_POINT *point, PROCESS *p, MB_POINT *v) { float delta= 0.2f*p->delta; float f = p->function(point->x, point->y, point->z); @@ -1270,7 +1370,7 @@ void vnormal (MB_POINT *point, PROCESS *p, MB_POINT *v) } -int vertid (CORNER *c1, CORNER *c2, PROCESS *p, MetaBall *mb) +static int vertid (CORNER *c1, CORNER *c2, PROCESS *p, MetaBall *mb) { VERTEX v; MB_POINT a, b; @@ -1299,7 +1399,7 @@ int vertid (CORNER *c1, CORNER *c2, PROCESS *p, MetaBall *mb) /* converge: from two points of differing sign, converge to zero crossing */ /* watch it: p1 and p2 are used to calculate */ -void converge (MB_POINT *p1, MB_POINT *p2, float v1, float v2, +static void converge (MB_POINT *p1, MB_POINT *p2, float v1, float v2, float (*function)(float, float, float), MB_POINT *p, MetaBall *mb, int f) { int i = 0; @@ -1399,7 +1499,7 @@ void converge (MB_POINT *p1, MB_POINT *p2, float v1, float v2, } /* ************************************** */ -void add_cube(PROCESS *mbproc, int i, int j, int k, int count) +static void add_cube(PROCESS *mbproc, int i, int j, int k, int count) { CUBES *ncube; int n; @@ -1429,7 +1529,7 @@ void add_cube(PROCESS *mbproc, int i, int j, int k, int count) } -void find_first_points(PROCESS *mbproc, MetaBall *mb, int a) +static void find_first_points(PROCESS *mbproc, MetaBall *mb, int a) { MB_POINT IN, in, OUT, out; /*point;*/ MetaElem *ml; @@ -1549,7 +1649,7 @@ void find_first_points(PROCESS *mbproc, MetaBall *mb, int a) } } -void polygonize(PROCESS *mbproc, MetaBall *mb) +static void polygonize(PROCESS *mbproc, MetaBall *mb) { CUBE c; int a; @@ -1589,7 +1689,7 @@ void polygonize(PROCESS *mbproc, MetaBall *mb) } } -float init_meta(Scene *scene, Object *ob) /* return totsize */ +static float init_meta(Scene *scene, Object *ob) /* return totsize */ { Scene *sce_iter= scene; Base *base; @@ -1815,7 +1915,7 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */ /* if MetaElem lies in node, then node includes MetaElem pointer (ml_p) * pointing at MetaElem (ml) */ -void fill_metaball_octal_node(octal_node *node, MetaElem *ml, short i) +static void fill_metaball_octal_node(octal_node *node, MetaElem *ml, short i) { ml_pointer *ml_p; @@ -1847,7 +1947,7 @@ void fill_metaball_octal_node(octal_node *node, MetaElem *ml, short i) * +------+------+ * */ -void subdivide_metaball_octal_node(octal_node *node, float size_x, float size_y, float size_z, short depth) +static void subdivide_metaball_octal_node(octal_node *node, float size_x, float size_y, float size_z, short depth) { MetaElem *ml; ml_pointer *ml_p; @@ -2104,7 +2204,7 @@ void subdivide_metaball_octal_node(octal_node *node, float size_x, float size_y, } /* free all octal nodes recursively */ -void free_metaball_octal_node(octal_node *node) +static void free_metaball_octal_node(octal_node *node) { int a; for (a=0;a<8;a++) { @@ -2115,7 +2215,7 @@ void free_metaball_octal_node(octal_node *node) } /* If scene include more then one MetaElem, then octree is used */ -void init_metaball_octal_tree(int depth) +static void init_metaball_octal_tree(int depth) { struct octal_node *node; ml_pointer *ml_p; @@ -2173,7 +2273,7 @@ void init_metaball_octal_tree(int depth) subdivide_metaball_octal_node(node, size[0], size[1], size[2], metaball_tree->depth); } -void metaball_polygonize(Scene *scene, Object *ob, ListBase *dispbase) +void BKE_metaball_polygonize(Scene *scene, Object *ob, ListBase *dispbase) { PROCESS mbproc; MetaBall *mb; diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 14ccd401a30..c7f6bf93831 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -1616,7 +1616,7 @@ void mesh_to_curve(Scene *scene, Object *ob) BLI_edgehash_free(eh, NULL); if (edges.first) { - Curve *cu = add_curve(ob->id.name+2, OB_CURVE); + Curve *cu = BKE_curve_add(ob->id.name+2, OB_CURVE); cu->flag |= CU_3D; while (edges.first) { diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c index a3baa883a4a..d548d7589bb 100644 --- a/source/blender/blenkernel/intern/movieclip.c +++ b/source/blender/blenkernel/intern/movieclip.c @@ -450,7 +450,7 @@ static MovieClip *movieclip_alloc(const char *name) * otherwise creates new. * does not load ibuf itself * pass on optional frame for #name images */ -MovieClip *BKE_add_movieclip_file(const char *name) +MovieClip *BKE_movieclip_file_add(const char *name) { MovieClip *clip; MovieClipUser user; @@ -1149,14 +1149,14 @@ void BKE_movieclip_build_proxy_frame(MovieClip *clip, int clip_flag, struct Movi } } -void free_movieclip(MovieClip *clip) +void BKE_movieclip_free(MovieClip *clip) { free_buffers(clip); BKE_tracking_free(&clip->tracking); } -void unlink_movieclip(Main *bmain, MovieClip *clip) +void BKE_movieclip_unlink(Main *bmain, MovieClip *clip) { bScreen *scr; ScrArea *area; diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 6b44ba976d5..3ffd8115914 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -319,8 +319,8 @@ void free_object(Object *ob) id->us--; if (id->us==0) { if (ob->type==OB_MESH) unlink_mesh(ob->data); - else if (ob->type==OB_CURVE) unlink_curve(ob->data); - else if (ob->type==OB_MBALL) unlink_mball(ob->data); + else if (ob->type==OB_CURVE) BKE_curve_unlink(ob->data); + else if (ob->type==OB_MBALL) BKE_metaball_unlink(ob->data); } ob->data= NULL; } @@ -459,7 +459,7 @@ void unlink_object(Object *ob) } } else if (ELEM(OB_MBALL, ob->type, obt->type)) { - if (is_mball_basis_for (obt, ob)) + if (BKE_metaball_is_basis_for (obt, ob)) obt->recalc|= OB_RECALC_DATA; } @@ -749,10 +749,10 @@ static void *add_obdata_from_type(int type) { switch (type) { case OB_MESH: return add_mesh("Mesh"); - case OB_CURVE: return add_curve("Curve", OB_CURVE); - case OB_SURF: return add_curve("Surf", OB_SURF); - case OB_FONT: return add_curve("Text", OB_FONT); - case OB_MBALL: return add_mball("Meta"); + case OB_CURVE: return BKE_curve_add("Curve", OB_CURVE); + case OB_SURF: return BKE_curve_add("Surf", OB_SURF); + case OB_FONT: return BKE_curve_add("Text", OB_FONT); + case OB_MBALL: return BKE_metaball_add("Meta"); case OB_CAMERA: return add_camera("Camera"); case OB_LAMP: return add_lamp("Lamp"); case OB_LATTICE: return add_lattice("Lattice"); @@ -1822,7 +1822,7 @@ static void give_parvert(Object *par, int nr, float vec[3]) ListBase *nurbs; cu= par->data; - nurbs= BKE_curve_nurbs(cu); + nurbs= BKE_curve_nurbs_get(cu); nu= nurbs->first; count= 0; @@ -2268,7 +2268,7 @@ void minmax_object(Object *ob, float min[3], float max[3]) { Curve *cu= ob->data; - if (cu->bb==NULL) tex_space_curve(cu); + if (cu->bb==NULL) BKE_curve_tex_space_calc(cu); bb= *(cu->bb); for (a=0; a<8; a++) { @@ -2930,7 +2930,7 @@ static KeyBlock *insert_curvekey(Scene *scene, Object *ob, const char *name, int Curve *cu= ob->data; Key *key= cu->key; KeyBlock *kb; - ListBase *lb= BKE_curve_nurbs(cu); + ListBase *lb= BKE_curve_nurbs_get(cu); int newkey= 0; if (key==NULL) { @@ -2957,7 +2957,7 @@ static KeyBlock *insert_curvekey(Scene *scene, Object *ob, const char *name, int /* create new block with prepared data */ kb = add_keyblock_ctime(key, name, FALSE); - kb->totelem= count_curveverts(lb); + kb->totelem= BKE_nurbList_verts_count(lb); kb->data= data; } diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c index d0eca731a1a..5d8a4955e58 100644 --- a/source/blender/blenkernel/intern/softbody.c +++ b/source/blender/blenkernel/intern/softbody.c @@ -3559,7 +3559,7 @@ static void curve_surf_to_softbody(Scene *scene, Object *ob) int a, curindex=0; int totvert, totspring = 0, setgoal=0; - totvert= count_curveverts(&cu->nurb); + totvert= BKE_nurbList_verts_count(&cu->nurb); if (ob->softflag & OB_SB_EDGES) { if (ob->type==OB_CURVE) { diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c index fbed5cc539a..8aafdc6ab40 100644 --- a/source/blender/editors/animation/anim_channels_defines.c +++ b/source/blender/editors/animation/anim_channels_defines.c @@ -1427,7 +1427,7 @@ static bAnimChannelType ACF_DSCAM= static int acf_dscur_icon(bAnimListElem *ale) { Curve *cu= (Curve *)ale->data; - short obtype= curve_type(cu); + short obtype= BKE_curve_type_get(cu); switch (obtype) { case OB_FONT: diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index d339af39b22..e65b4280dc9 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -132,7 +132,7 @@ static void set_actNurb(Object *obedit, Nurb *nu) if (nu==NULL) cu->actnu = -1; else { - ListBase *nurbs= curve_editnurbs(cu); + ListBase *nurbs= BKE_curve_editNurbs_get(cu); cu->actnu = BLI_findindex(nurbs, nu); } } @@ -140,7 +140,7 @@ static void set_actNurb(Object *obedit, Nurb *nu) static Nurb *get_actNurb(Object *obedit) { Curve *cu= obedit->data; - ListBase *nurbs= curve_editnurbs(cu); + ListBase *nurbs= BKE_curve_editNurbs_get(cu); return BLI_findlink(nurbs, cu->actnu); } @@ -736,7 +736,7 @@ static void calc_keyHandles(ListBase *nurb, float *key) if (nextp) key_to_bezt(nextfp, nextp, &next); if (prevp) key_to_bezt(prevfp, prevp, &prev); - calchandleNurb(&cur, prevp ? &prev : NULL, nextp ? &next : NULL, 0); + BKE_nurb_handle_calc(&cur, prevp ? &prev : NULL, nextp ? &next : NULL, 0); bezt_to_key(&cur, fp); prevp= bezt; @@ -782,7 +782,7 @@ static void calc_shapeKeys(Object *obedit) BezTriple *bezt, *oldbezt; BPoint *bp, *oldbp; Nurb *nu; - int totvert= count_curveverts(&editnurb->nurbs); + int totvert= BKE_nurbList_verts_count(&editnurb->nurbs); float (*ofs)[3] = NULL; float *oldkey, *newkey, *ofp; @@ -1207,11 +1207,11 @@ void load_editNurb(Object *obedit) ListBase newnurb= {NULL, NULL}, oldnurb= cu->nurb; for (nu= editnurb->first; nu; nu= nu->next) { - newnu= duplicateNurb(nu); + newnu= BKE_nurb_duplicate(nu); BLI_addtail(&newnurb, newnu); if (nu->type == CU_NURBS) { - clamp_nurb_order_u(nu); + BKE_nurb_order_clamp_u(nu); } } @@ -1220,7 +1220,7 @@ void load_editNurb(Object *obedit) calc_shapeKeys(obedit); ED_curve_updateAnimPaths(obedit->data); - freeNurblist(&oldnurb); + BKE_nurbList_free(&oldnurb); } set_actNurb(obedit, NULL); @@ -1247,8 +1247,8 @@ void make_editNurb(Object *obedit) } if (editnurb) { - freeNurblist(&editnurb->nurbs); - free_curve_editNurb_keyIndex(editnurb); + BKE_nurbList_free(&editnurb->nurbs); + BKE_curve_editNurb_keyIndex_free(editnurb); editnurb->keyindex= NULL; } else { @@ -1260,8 +1260,8 @@ void make_editNurb(Object *obedit) cu->lastsel= NULL; /* for select row */ while (nu) { - newnu= duplicateNurb(nu); - test2DNurb(newnu); // after join, or any other creation of curve + newnu= BKE_nurb_duplicate(nu); + BKE_nurb_test2D(newnu); // after join, or any other creation of curve BLI_addtail(&editnurb->nurbs, newnu); if (nu_act == NULL && isNurbsel(nu)) { @@ -1285,7 +1285,7 @@ void free_editNurb(Object *obedit) { Curve *cu= obedit->data; - free_curve_editNurb(cu); + BKE_curve_editNurb_free(cu); } void CU_deselect_all(Object *obedit) @@ -1377,15 +1377,15 @@ static int separate_exec(bContext *C, wmOperator *op) ED_base_object_select(newbase, BA_DESELECT); newob= newbase->object; - newcu= newob->data= copy_curve(oldcu); + newcu= newob->data= BKE_curve_copy(oldcu); newcu->editnurb= NULL; oldcu->id.us--; /* because new curve is a copy: reduce user count */ /* 2. put new object in editmode and clear it */ make_editNurb(newob); newedit= newcu->editnurb; - freeNurblist(&newedit->nurbs); - free_curve_editNurb_keyIndex(newedit); + BKE_nurbList_free(&newedit->nurbs); + BKE_curve_editNurb_keyIndex_free(newedit); /* 3. move over parts from old object */ for (nu= oldedit->nurbs.first; nu; nu=nu1) { @@ -1547,7 +1547,7 @@ static void translateflagNurb(ListBase *editnurb, short flag, const float vec[3] } } - test2DNurb(nu); + BKE_nurb_test2D(nu); } } @@ -1602,7 +1602,7 @@ static int deleteflagNurb(bContext *C, wmOperator *UNUSED(op), int flag) if (a==0) { BLI_remlink(editnurb, nu); keyIndex_delNurb(cu->editnurb, nu); - freeNurb(nu); nu=NULL; + BKE_nurb_free(nu); nu=NULL; } else { /* is nurb in U direction selected */ @@ -1640,9 +1640,9 @@ static int deleteflagNurb(bContext *C, wmOperator *UNUSED(op), int flag) nu->pntsv= newv; MEM_freeN(nu->bp); nu->bp= newbp; - clamp_nurb_order_v(nu); + BKE_nurb_order_clamp_v(nu); - nurbs_knot_calc_v(nu); + BKE_nurb_knot_calc_v(nu); } else { /* is the nurb in V direction selected */ @@ -1684,15 +1684,15 @@ static int deleteflagNurb(bContext *C, wmOperator *UNUSED(op), int flag) nu->pntsu= nu->pntsv; nu->pntsv= 1; SWAP(short, nu->orderu, nu->orderv); - clamp_nurb_order_u(nu); + BKE_nurb_order_clamp_u(nu); if (nu->knotsv) MEM_freeN(nu->knotsv); nu->knotsv= NULL; } else { nu->pntsu= newu; - clamp_nurb_order_u(nu); + BKE_nurb_order_clamp_u(nu); } - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); } } } @@ -1743,7 +1743,7 @@ static short extrudeflagNurb(EditNurb *editnurb, int flag) nu->pntsv= 2; nu->orderv= 2; - nurbs_knot_calc_v(nu); + BKE_nurb_knot_calc_v(nu); } } else { @@ -1786,7 +1786,7 @@ static short extrudeflagNurb(EditNurb *editnurb, int flag) MEM_freeN(nu->bp); nu->bp= newbp; nu->pntsv++; - nurbs_knot_calc_v(nu); + BKE_nurb_knot_calc_v(nu); } else if (v==0 || v== nu->pntsu-1) { /* column in v-direction selected */ ok= 1; @@ -1813,7 +1813,7 @@ static short extrudeflagNurb(EditNurb *editnurb, int flag) MEM_freeN(nu->bp); nu->bp= newbp; nu->pntsu++; - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); } } } @@ -1911,7 +1911,7 @@ static void adduplicateflagNurb(Object *obedit, short flag) /* knots */ newnu->knotsu= NULL; - nurbs_knot_calc_u(newnu); + BKE_nurb_knot_calc_u(newnu); } bp++; } @@ -1956,8 +1956,8 @@ static void adduplicateflagNurb(Object *obedit, short flag) newnu->pntsv= newv; newnu->bp = (BPoint*)MEM_mallocN(newu * newv * sizeof(BPoint), "adduplicateN6"); - clamp_nurb_order_u(newnu); - clamp_nurb_order_v(newnu); + BKE_nurb_order_clamp_u(newnu); + BKE_nurb_order_clamp_v(newnu); newnu->knotsu= newnu->knotsv= NULL; @@ -1972,20 +1972,20 @@ static void adduplicateflagNurb(Object *obedit, short flag) } } } - if (check_valid_nurb_u(newnu)) { + if (BKE_nurb_check_valid_u(newnu)) { if (nu->pntsu==newnu->pntsu && nu->knotsu) { newnu->knotsu= MEM_dupallocN( nu->knotsu ); } else { - nurbs_knot_calc_u(newnu); + BKE_nurb_knot_calc_u(newnu); } } - if (check_valid_nurb_v(newnu)) { + if (BKE_nurb_check_valid_v(newnu)) { if (nu->pntsv==newnu->pntsv && nu->knotsv) { newnu->knotsv= MEM_dupallocN( nu->knotsv ); } else { - nurbs_knot_calc_v(newnu); + BKE_nurb_knot_calc_v(newnu); } } } @@ -2010,7 +2010,7 @@ static int switch_direction_exec(bContext *C, wmOperator *UNUSED(op)) for (nu= editnurb->nurbs.first; nu; nu= nu->next) if (isNurbsel(nu)) { - switchdirectionNurb(nu); + BKE_nurb_direction_switch(nu); keyData_switchDirectionNurb(cu, nu); } @@ -2174,7 +2174,7 @@ static int smooth_exec(bContext *C, wmOperator *UNUSED(op)) } MEM_freeN(beztOrig); if (change) - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } else if (nu->bp) { bpOrig = MEM_dupallocN( nu->bp ); @@ -2893,7 +2893,7 @@ static void subdividenurb(Object *obedit, int number_cuts) nu->bezt= beztnew; nu->pntsu+= amount; - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } } /* End of 'if (nu->type == CU_BEZIER)' */ else if (nu->pntsv==1) { @@ -2965,7 +2965,7 @@ static void subdividenurb(Object *obedit, int number_cuts) nu->pntsu+= amount; if (nu->type & CU_NURBS) { - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); } } } /* End of 'else if (nu->pntsv==1)' */ @@ -3086,8 +3086,8 @@ static void subdividenurb(Object *obedit, int number_cuts) nu->bp= bpnew; nu->pntsu= (number_cuts+1)*nu->pntsu-number_cuts; nu->pntsv= (number_cuts+1)*nu->pntsv-number_cuts; - nurbs_knot_calc_u(nu); - nurbs_knot_calc_v(nu); + BKE_nurb_knot_calc_u(nu); + BKE_nurb_knot_calc_v(nu); } /* End of 'if (sel== nu->pntsu*nu->pntsv)' (subdivide entire NURB) */ else { /* subdivide in v direction? */ @@ -3132,7 +3132,7 @@ static void subdividenurb(Object *obedit, int number_cuts) MEM_freeN(nu->bp); nu->bp= bpnew; nu->pntsv+= sel; - nurbs_knot_calc_v(nu); + BKE_nurb_knot_calc_v(nu); } else { /* or in u direction? */ @@ -3173,7 +3173,7 @@ static void subdividenurb(Object *obedit, int number_cuts) MEM_freeN(nu->bp); nu->bp= bpnew; nu->pntsu+= sel; - nurbs_knot_calc_u(nu); /* shift knots forward */ + BKE_nurb_knot_calc_u(nu); /* shift knots forward */ } } } @@ -3373,13 +3373,13 @@ static int convertspline(short type, Nurb *nu) nu->bp= NULL; nu->pntsu= nr; nu->type = CU_BEZIER; - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } else if (type==CU_NURBS) { nu->type = CU_NURBS; nu->orderu= 4; nu->flagu &= CU_NURB_CYCLIC; /* disable all flags except for cyclic */ - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); a= nu->pntsu*nu->pntsv; bp= nu->bp; while (a--) { @@ -3436,7 +3436,7 @@ static int convertspline(short type, Nurb *nu) if (type== CU_NURBS) { nu->flagu &= CU_NURB_CYCLIC; /* disable all flags except for cyclic */ nu->flagu |= CU_NURB_BEZIER; - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); } } } @@ -3559,7 +3559,7 @@ static int set_handle_type_exec(bContext *C, wmOperator *op) Object *obedit= CTX_data_edit_object(C); ListBase *editnurb= object_editcurve_get(obedit); - sethandlesNurb(editnurb, RNA_enum_get(op->ptr, "type")); + BKE_nurbList_handles_set(editnurb, RNA_enum_get(op->ptr, "type")); WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); DAG_id_tag_update(obedit->data, 0); @@ -3865,15 +3865,15 @@ static void merge_2_nurb(wmOperator *op, ListBase *editnurb, Nurb *nu1, Nurb *nu if (nu1->type == CU_NURBS) { /* merge knots */ - nurbs_knot_calc_u(nu1); + BKE_nurb_knot_calc_u(nu1); /* make knots, for merged curved for example */ - nurbs_knot_calc_v(nu1); + BKE_nurb_knot_calc_v(nu1); } MEM_freeN(temp); BLI_remlink(editnurb, nu2); - freeNurb(nu2); + BKE_nurb_free(nu2); } static int merge_nurb(bContext *C, wmOperator *op) @@ -3976,7 +3976,7 @@ static int make_segment_exec(bContext *C, wmOperator *op) else { if ( BEZSELECTED_HIDDENHANDLES(cu, &(nu->bezt[nu->pntsu-1])) ) { nu1= nu; - switchdirectionNurb(nu); + BKE_nurb_direction_switch(nu); keyData_switchDirectionNurb(cu, nu); } } @@ -3984,7 +3984,7 @@ static int make_segment_exec(bContext *C, wmOperator *op) else if (nu2==NULL) { if ( BEZSELECTED_HIDDENHANDLES(cu, nu->bezt) ) { nu2= nu; - switchdirectionNurb(nu); + BKE_nurb_direction_switch(nu); keyData_switchDirectionNurb(cu, nu); } else { @@ -4003,7 +4003,7 @@ static int make_segment_exec(bContext *C, wmOperator *op) bp= bp+(nu->pntsu-1); if ( bp->f1 & SELECT ) { nu1= nu; - switchdirectionNurb(nu); + BKE_nurb_direction_switch(nu); keyData_switchDirectionNurb(cu, nu); } } @@ -4011,7 +4011,7 @@ static int make_segment_exec(bContext *C, wmOperator *op) else if (nu2==NULL) { if ( bp->f1 & SELECT ) { nu2= nu; - switchdirectionNurb(nu); + BKE_nurb_direction_switch(nu); keyData_switchDirectionNurb(cu, nu); } else { @@ -4038,8 +4038,8 @@ static int make_segment_exec(bContext *C, wmOperator *op) nu1->bezt= bezt; nu1->pntsu+= nu2->pntsu; BLI_remlink(nubase, nu2); - freeNurb(nu2); nu2= NULL; - calchandlesNurb(nu1); + BKE_nurb_free(nu2); nu2= NULL; + BKE_nurb_handles_calc(nu1); } else { bp = @@ -4057,7 +4057,7 @@ static int make_segment_exec(bContext *C, wmOperator *op) /* now join the knots */ if (nu1->type == CU_NURBS) { if (nu1->knotsu==NULL) { - nurbs_knot_calc_u(nu1); + BKE_nurb_knot_calc_u(nu1); } else { fp= MEM_mallocN(sizeof(float)*KNOTSU(nu1), "addsegment3"); @@ -4076,7 +4076,7 @@ static int make_segment_exec(bContext *C, wmOperator *op) } } } - freeNurb(nu2); nu2= NULL; + BKE_nurb_free(nu2); nu2= NULL; } set_actNurb(obedit, nu1); /* for selected */ @@ -4088,12 +4088,12 @@ static int make_segment_exec(bContext *C, wmOperator *op) if (nu1->type == CU_BEZIER && BEZSELECTED_HIDDENHANDLES(cu, nu1->bezt) && BEZSELECTED_HIDDENHANDLES(cu, nu1->bezt+(nu1->pntsu-1))) { nu1->flagu|= CU_NURB_CYCLIC; - calchandlesNurb(nu1); + BKE_nurb_handles_calc(nu1); ok= 1; } else if (nu1->type == CU_NURBS && nu1->bp->f1&SELECT && (nu1->bp+(nu1->pntsu-1))->f1&SELECT) { nu1->flagu|= CU_NURB_CYCLIC; - nurbs_knot_calc_u(nu1); + BKE_nurb_knot_calc_u(nu1); ok= 1; } } @@ -4293,7 +4293,7 @@ static int spin_nurb(float viewmat[][4], Object *obedit, float *axis, float *cen if (isNurbsel(nu)) { nu->orderv= 4; nu->flagv |= CU_NURB_CYCLIC; - nurbs_knot_calc_v(nu); + BKE_nurb_knot_calc_v(nu); } } } @@ -4446,7 +4446,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3]) newbp->vec[3]= 1.0; newnu->knotsu= newnu->knotsv= NULL; - nurbs_knot_calc_u(newnu); + BKE_nurb_knot_calc_u(newnu); ok= 1; nu= newnu; @@ -4538,7 +4538,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3]) if (bezt_recalc[1]) { const char h1 = bezt_recalc[1]->h1, h2 = bezt_recalc[1]->h2; bezt_recalc[1]->h1 = bezt_recalc[1]->h2 = HD_AUTO; - calchandleNurb(bezt_recalc[1], bezt_recalc[0], bezt_recalc[2], 0); + BKE_nurb_handle_calc(bezt_recalc[1], bezt_recalc[0], bezt_recalc[2], 0); bezt_recalc[1]->h1 = h1; bezt_recalc[1]->h2 = h2; } @@ -4548,8 +4548,8 @@ static int addvert_Nurb(bContext *C, short mode, float location[3]) } - if (newnu) calchandlesNurb(newnu); - else calchandlesNurb(nu); + if (newnu) BKE_nurb_handles_calc(newnu); + else BKE_nurb_handles_calc(nu); } } } @@ -4617,14 +4617,14 @@ static int addvert_Nurb(bContext *C, short mode, float location[3]) if (!newnu) { nu->pntsu++; - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); } - else nurbs_knot_calc_u(newnu); + else BKE_nurb_knot_calc_u(newnu); } } if (ok) { - test2DNurb(nu); + BKE_nurb_test2D(nu); if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); @@ -4783,7 +4783,7 @@ static int toggle_cyclic_exec(bContext *C, wmOperator *op) } bezt++; } - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } else if (nu->pntsv==1 && nu->type == CU_NURBS) { if (nu->knotsu) { /* if check_valid_nurb_u fails the knotsu can be NULL */ @@ -4792,7 +4792,7 @@ static int toggle_cyclic_exec(bContext *C, wmOperator *op) while (a--) { if ( bp->f1 & SELECT ) { nu->flagu ^= CU_NURB_CYCLIC; - nurbs_knot_calc_u(nu); /* 1==u type is ignored for cyclic curves */ + BKE_nurb_knot_calc_u(nu); /* 1==u type is ignored for cyclic curves */ break; } bp++; @@ -4807,11 +4807,11 @@ static int toggle_cyclic_exec(bContext *C, wmOperator *op) if ( bp->f1 & SELECT) { if (direction==0 && nu->pntsu>1) { nu->flagu ^= CU_NURB_CYCLIC; - nurbs_knot_calc_u(nu); /* 1==u type is ignored for cyclic curves */ + BKE_nurb_knot_calc_u(nu); /* 1==u type is ignored for cyclic curves */ } if (direction==1 && nu->pntsv>1) { nu->flagv ^= CU_NURB_CYCLIC; - nurbs_knot_calc_v(nu); /* 2==v type is ignored for cyclic curves */ + BKE_nurb_knot_calc_v(nu); /* 2==v type is ignored for cyclic curves */ } break; } @@ -5472,7 +5472,7 @@ static int point_on_nurb(Nurb *nu, void *point) static Nurb *get_lastsel_nurb(Curve *cu) { - ListBase *nubase= curve_editnurbs(cu); + ListBase *nubase= BKE_curve_editNurbs_get(cu); Nurb *nu= nubase->first; if (!cu->lastsel) @@ -5638,7 +5638,7 @@ static int delete_exec(bContext *C, wmOperator *op) } else { keyIndex_delNurbList(editnurb, nubase); - freeNurblist(nubase); + BKE_nurbList_free(nubase); if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, obedit); @@ -5672,7 +5672,7 @@ static int delete_exec(bContext *C, wmOperator *op) BLI_remlink(nubase, nu); keyIndex_delNurb(editnurb, nu); - freeNurb(nu); nu= NULL; + BKE_nurb_free(nu); nu= NULL; } } } @@ -5692,7 +5692,7 @@ static int delete_exec(bContext *C, wmOperator *op) BLI_remlink(nubase, nu); keyIndex_delNurb(editnurb, nu); - freeNurb(nu); nu= NULL; + BKE_nurb_free(nu); nu= NULL; } } } @@ -5734,7 +5734,7 @@ static int delete_exec(bContext *C, wmOperator *op) keyIndex_updateBezt(editnurb, nu->bezt, bezt1, nu->pntsu); MEM_freeN(nu->bezt); nu->bezt= bezt1; - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } } else if (nu->pntsv==1) { @@ -5770,8 +5770,8 @@ static int delete_exec(bContext *C, wmOperator *op) } #endif } - clamp_nurb_order_u(nu); - nurbs_knot_calc_u(nu); + BKE_nurb_order_clamp_u(nu); + BKE_nurb_knot_calc_u(nu); } nu= next; } @@ -5797,7 +5797,7 @@ static int delete_exec(bContext *C, wmOperator *op) bezt2= bezt+(nu->pntsu-1); if ( (bezt2->f1 & SELECT) || (bezt2->f2 & SELECT) || (bezt2->f3 & SELECT) ) { nu->flagu &= ~CU_NURB_CYCLIC; - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); DAG_id_tag_update(obedit->data, 0); } @@ -5850,7 +5850,7 @@ static int delete_exec(bContext *C, wmOperator *op) cu->actnu= -1; BLI_remlink(nubase, nu); - freeNurb(nu); nu = NULL; + BKE_nurb_free(nu); nu = NULL; } else if (nu1->flagu & CU_NURB_CYCLIC) { /* cyclic */ bezt = @@ -5862,7 +5862,7 @@ static int delete_exec(bContext *C, wmOperator *op) nu1->flagu &= ~CU_NURB_CYCLIC; MEM_freeN(bezt); - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } else { /* add new curve */ @@ -5886,8 +5886,8 @@ static int delete_exec(bContext *C, wmOperator *op) nu->pntsu= cut+1; - calchandlesNurb(nu); - calchandlesNurb(nu1); + BKE_nurb_handles_calc(nu); + BKE_nurb_handles_calc(nu1); } } else if (bp1) { @@ -5896,7 +5896,7 @@ static int delete_exec(bContext *C, wmOperator *op) cu->actnu= -1; BLI_remlink(nubase, nu); - freeNurb(nu); nu= NULL; + BKE_nurb_free(nu); nu= NULL; } else if (nu1->flagu & CU_NURB_CYCLIC) { /* cyclic */ bp = @@ -5926,11 +5926,11 @@ static int delete_exec(bContext *C, wmOperator *op) nu1->knotsu= NULL; nu->pntsu= cut+1; - clamp_nurb_order_u(nu); - nurbs_knot_calc_u(nu); + BKE_nurb_order_clamp_u(nu); + BKE_nurb_knot_calc_u(nu); - clamp_nurb_order_u(nu1); - nurbs_knot_calc_u(nu1); + BKE_nurb_order_clamp_u(nu1); + BKE_nurb_knot_calc_u(nu1); } } } @@ -5938,7 +5938,7 @@ static int delete_exec(bContext *C, wmOperator *op) else if (type==2) { cu->actnu= -1; keyIndex_delNurbList(editnurb, nubase); - freeNurblist(nubase); + BKE_nurbList_free(nubase); } if (ED_curve_updateAnimPaths(obedit->data)) @@ -6083,7 +6083,7 @@ int join_curve_exec(bContext *C, wmOperator *UNUSED(op)) nu= cu->nurb.first; while (nu) { - newnu= duplicateNurb(nu); + newnu= BKE_nurb_duplicate(nu); if (ob->totcol) { /* TODO, merge material lists */ CLAMP(newnu->mat_nr, 0, ob->totcol-1); } @@ -6098,7 +6098,7 @@ int join_curve_exec(bContext *C, wmOperator *UNUSED(op)) mul_m4_v3(cmat, bezt->vec[2]); bezt++; } - calchandlesNurb(newnu); + BKE_nurb_handles_calc(newnu); } if ( (bp= newnu->bp) ) { a= newnu->pntsu*nu->pntsv; @@ -6240,7 +6240,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) bezt->vec[2][1] = 0; for (a=0;a<3;a++) mul_m4_v3(mat, bezt->vec[a]); - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } else { @@ -6272,7 +6272,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) if (cutype==CU_NURBS) { nu->knotsu= NULL; /* nurbs_knot_calc_u allocates */ - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); } } @@ -6306,7 +6306,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) if (cutype==CU_NURBS) { nu->knotsu= NULL; /* nurbs_knot_calc_u allocates */ - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); } break; @@ -6347,7 +6347,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) for (a=0;a<3;a++) mul_m4_v3(mat,bezt->vec[a]); bezt->radius = bezt->weight = 1.0; - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } else if ( cutype==CU_NURBS ) { /* nurb */ nu->pntsu= 8; @@ -6375,7 +6375,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) bp++; } - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); } break; case CU_PRIM_PATCH: /* 4x4 patch */ @@ -6407,8 +6407,8 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) } } - nurbs_knot_calc_u(nu); - nurbs_knot_calc_v(nu); + BKE_nurb_knot_calc_u(nu); + BKE_nurb_knot_calc_v(nu); } break; case CU_PRIM_TUBE: /* Cylinder */ @@ -6469,7 +6469,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) bp++; } nu->flagu= CU_NURB_BEZIER; - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); BLI_addtail(editnurb, nu); /* temporal for spin */ @@ -6477,7 +6477,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) else if ((U.flag & USER_ADD_VIEWALIGNED)) spin_nurb(viewmat, obedit, zvec, mat[3]); else spin_nurb(umat, obedit, tmp_vec, mat[3]); - nurbs_knot_calc_v(nu); + BKE_nurb_knot_calc_v(nu); a= nu->pntsu*nu->pntsv; bp= nu->bp; @@ -6529,7 +6529,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newob) if (nu) { /* should always be set */ nu->flag |= CU_SMOOTH; - test2DNurb(nu); + BKE_nurb_test2D(nu); } return nu; @@ -6947,13 +6947,13 @@ static void undoCurve_to_editCurve(void *ucu, void *UNUSED(edata), void *cu_v) Curve *cu= cu_v; UndoCurve *undoCurve= ucu; ListBase *undobase= &undoCurve->nubase; - ListBase *editbase= curve_editnurbs(cu); + ListBase *editbase= BKE_curve_editNurbs_get(cu); Nurb *nu, *newnu; EditNurb *editnurb= cu->editnurb; void *lastsel= NULL; AnimData *ad= BKE_animdata_from_id(&cu->id); - freeNurblist(editbase); + BKE_nurbList_free(editbase); if (undoCurve->undoIndex) { BLI_ghash_free(editnurb->keyindex, NULL, (GHashValFreeFP)MEM_freeN); @@ -6972,7 +6972,7 @@ static void undoCurve_to_editCurve(void *ucu, void *UNUSED(edata), void *cu_v) /* copy */ for (nu= undobase->first; nu; nu= nu->next) { - newnu= duplicateNurb(nu); + newnu= BKE_nurb_duplicate(nu); if (lastsel == NULL) { lastsel= undo_check_lastsel(undoCurve->lastsel, nu, newnu); @@ -6993,7 +6993,7 @@ static void undoCurve_to_editCurve(void *ucu, void *UNUSED(edata), void *cu_v) static void *editCurve_to_undoCurve(void *UNUSED(edata), void *cu_v) { Curve *cu= cu_v; - ListBase *nubase= curve_editnurbs(cu); + ListBase *nubase= BKE_curve_editNurbs_get(cu); UndoCurve *undoCurve; EditNurb *editnurb= cu->editnurb, tmpEditnurb; Nurb *nu, *newnu; @@ -7016,7 +7016,7 @@ static void *editCurve_to_undoCurve(void *UNUSED(edata), void *cu_v) /* copy */ for (nu= nubase->first; nu; nu= nu->next) { - newnu= duplicateNurb(nu); + newnu= BKE_nurb_duplicate(nu); if (lastsel == NULL) { lastsel= undo_check_lastsel(cu->lastsel, nu, newnu); @@ -7039,7 +7039,7 @@ static void free_undoCurve(void *ucv) { UndoCurve *undoCurve= ucv; - freeNurblist(&undoCurve->nubase); + BKE_nurbList_free(&undoCurve->nubase); if (undoCurve->undoIndex) BLI_ghash_free(undoCurve->undoIndex, NULL, (GHashValFreeFP)MEM_freeN); diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c index 29bebfab9e0..cca5dd7a37b 100644 --- a/source/blender/editors/curve/editfont.c +++ b/source/blender/editors/curve/editfont.c @@ -1500,7 +1500,7 @@ void load_editText(Object *obedit) void free_editText(Object *obedit) { - BKE_free_editfont((Curve *)obedit->data); + BKE_curve_editfont_free((Curve *)obedit->data); } /********************** set case operator *********************/ diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index d48cfaab63c..5f31a273d1a 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -534,7 +534,7 @@ static void gp_stroke_to_bezier (bContext *C, bGPDlayer *gpl, bGPDstroke *gps, C } /* must calculate handles or else we crash */ - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); /* add nurb to curve */ BLI_addtail(&cu->nurb, nu); diff --git a/source/blender/editors/include/ED_curve.h b/source/blender/editors/include/ED_curve.h index 50e43c46de5..73ff8e9304d 100644 --- a/source/blender/editors/include/ED_curve.h +++ b/source/blender/editors/include/ED_curve.h @@ -63,7 +63,7 @@ void load_editNurb (struct Object *obedit); void make_editNurb (struct Object *obedit); void free_editNurb (struct Object *obedit); -void free_curve_editNurb (struct Curve *cu); +void BKE_curve_editNurb_free (struct Curve *cu); int mouse_nurb (struct bContext *C, const int mval[2], int extend); diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 4666232c232..fe7a4e85418 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -2231,8 +2231,8 @@ int ui_link_bezier_points(rcti *rect, float coord_array[][2], int resol) vec[2][0] = vec[3][0] - dist; vec[2][1] = vec[3][1]; - forward_diff_bezier(vec[0][0], vec[1][0], vec[2][0], vec[3][0], coord_array[0], resol, sizeof(float) * 2); - forward_diff_bezier(vec[0][1], vec[1][1], vec[2][1], vec[3][1], coord_array[0] + 1, resol, sizeof(float) * 2); + BKE_curve_forward_diff_bezier(vec[0][0], vec[1][0], vec[2][0], vec[3][0], coord_array[0], resol, sizeof(float) * 2); + BKE_curve_forward_diff_bezier(vec[0][1], vec[1][1], vec[2][1], vec[3][1], coord_array[0] + 1, resol, sizeof(float) * 2); return 1; } diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c index 713009d2a19..1407d38ed0f 100644 --- a/source/blender/editors/metaball/mball_edit.c +++ b/source/blender/editors/metaball/mball_edit.c @@ -111,7 +111,7 @@ MetaElem *add_metaball_primitive(bContext *C, float mat[4][4], int type, int UNU ml= ml->next; } - ml= add_metaball_element(mball, type); + ml= BKE_metaball_element_add(mball, type); copy_v3_v3(&ml->x, mat[3]); ml->flag |= SELECT; diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 21c9f776b94..fcce65c9326 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -1391,7 +1391,7 @@ static int convert_exec(bContext *C, wmOperator *op) ((Curve *)newob->data)->id.us--; /* make a new copy of the curve */ - newob->data = copy_curve(ob->data); + newob->data = BKE_curve_copy(ob->data); } else { newob = ob; @@ -1456,7 +1456,7 @@ static int convert_exec(bContext *C, wmOperator *op) ((Curve *)newob->data)->id.us--; /* make a new copy of the curve */ - newob->data = copy_curve(ob->data); + newob->data = BKE_curve_copy(ob->data); } else { newob = ob; @@ -1474,7 +1474,7 @@ static int convert_exec(bContext *C, wmOperator *op) base->flag &= ~SELECT; ob->flag &= ~SELECT; - baseob = find_basis_mball(scene, ob); + baseob = BKE_metaball_basis_find(scene, ob); if (ob != baseob) { /* if motherball is converting it would be marked as done later */ @@ -1701,7 +1701,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base if (dupflag & USER_DUP_CURVE) { ID_NEW_US2(obn->data) else { - obn->data = copy_curve(obn->data); + obn->data = BKE_curve_copy(obn->data); didit = 1; } id->us--; @@ -1711,7 +1711,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base if (dupflag & USER_DUP_SURF) { ID_NEW_US2(obn->data) else { - obn->data = copy_curve(obn->data); + obn->data = BKE_curve_copy(obn->data); didit = 1; } id->us--; @@ -1721,7 +1721,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base if (dupflag & USER_DUP_FONT) { ID_NEW_US2(obn->data) else { - obn->data = copy_curve(obn->data); + obn->data = BKE_curve_copy(obn->data); didit = 1; } id->us--; @@ -1731,7 +1731,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base if (dupflag & USER_DUP_MBALL) { ID_NEW_US2(obn->data) else { - obn->data = copy_mball(obn->data); + obn->data = BKE_metaball_copy(obn->data); didit = 1; } id->us--; diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 874b04fe87d..d5385d00c8a 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -746,10 +746,10 @@ static void copy_texture_space(Object *to, Object *ob) /* pass */ } else if (to->type == OB_MBALL) { - tex_space_mball(to); + BKE_metaball_tex_space_calc(to); } else { - tex_space_curve(to->data); + BKE_curve_tex_space_calc(to->data); } } diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index bd69b3adc5e..f2d682cd0cb 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -544,9 +544,9 @@ static int modifier_apply_obdata(ReportList *reports, Scene *scene, Object *ob, cu = ob->data; BKE_report(reports, RPT_INFO, "Applied modifier only changed CV points, not tessellated/bevel vertices"); - vertexCos = curve_getVertexCos(cu, &cu->nurb, &numVerts); + vertexCos = BKE_curve_vertexCos_get(cu, &cu->nurb, &numVerts); mti->deformVerts(md, ob, NULL, vertexCos, numVerts, 0, 0); - curve_applyVertexCos(cu, &cu->nurb, vertexCos); + BK_curve_vertexCos_apply(cu, &cu->nurb, vertexCos); MEM_freeN(vertexCos); diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 3a00c69fc47..077ae2830a9 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -1480,12 +1480,12 @@ static void single_obdata_users(Main *bmain, Scene *scene, int flag) // ipo_idnew(me->key->ipo); /* drivers */ break; case OB_MBALL: - ob->data = copy_mball(ob->data); + ob->data = BKE_metaball_copy(ob->data); break; case OB_CURVE: case OB_SURF: case OB_FONT: - ob->data = cu = copy_curve(ob->data); + ob->data = cu = BKE_curve_copy(ob->data); ID_NEW(cu->bevobj); ID_NEW(cu->taperobj); break; diff --git a/source/blender/editors/object/object_shapekey.c b/source/blender/editors/object/object_shapekey.c index bd88bbda32c..5d31bfff99a 100644 --- a/source/blender/editors/object/object_shapekey.c +++ b/source/blender/editors/object/object_shapekey.c @@ -119,7 +119,7 @@ static int ED_object_shape_key_remove(bContext *C, Object *ob) break; case OB_CURVE: case OB_SURF: - key_to_curve(key->refkey, ob->data, BKE_curve_nurbs(ob->data)); + key_to_curve(key->refkey, ob->data, BKE_curve_nurbs_get(ob->data)); break; case OB_LATTICE: key_to_latt(key->refkey, ob->data); diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 1c0899ab551..e416bd5b762 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -520,7 +520,7 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo mul_m4_v3(mat, bezt->vec[2]); bezt->radius *= scale; } - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } else { a = nu->pntsu * nu->pntsv; @@ -779,15 +779,15 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) Curve *cu = ob->data; if (centermode == ORIGIN_TO_CURSOR) { /* done */ } - else if (around == V3D_CENTROID) { curve_center_median(cu, cent); } - else { curve_center_bounds(cu, cent); } + else if (around == V3D_CENTROID) { BKE_curve_center_median(cu, cent); } + else { BKE_curve_center_bounds(cu, cent); } /* don't allow Z change if curve is 2D */ if ((ob->type == OB_CURVE) && !(cu->flag & CU_3D)) cent[2] = 0.0; negate_v3_v3(cent_neg, cent); - curve_translate(cu, cent_neg, 1); + BKE_curve_translate(cu, cent_neg, 1); tot_change++; cu->id.flag |= LIB_DOIT; diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index bced6f07564..b648dac6343 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -178,7 +178,7 @@ static int material_slot_assign_exec(bContext *C, wmOperator *UNUSED(op)) } else if (ELEM(ob->type, OB_CURVE, OB_SURF)) { Nurb *nu; - ListBase *nurbs = curve_editnurbs((Curve *)ob->data); + ListBase *nurbs = BKE_curve_editNurbs_get((Curve *)ob->data); if (nurbs) { for (nu = nurbs->first; nu; nu = nu->next) @@ -233,7 +233,7 @@ static int material_slot_de_select(bContext *C, int select) } } else if (ELEM(ob->type, OB_CURVE, OB_SURF)) { - ListBase *nurbs = curve_editnurbs((Curve *)ob->data); + ListBase *nurbs = BKE_curve_editNurbs_get((Curve *)ob->data); Nurb *nu; BPoint *bp; BezTriple *bezt; diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c index 64ce529345c..c7033b0db99 100644 --- a/source/blender/editors/space_clip/clip_ops.c +++ b/source/blender/editors/space_clip/clip_ops.c @@ -157,7 +157,7 @@ static int open_exec(bContext *C, wmOperator *op) errno = 0; - clip = BKE_add_movieclip_file(str); + clip = BKE_movieclip_file_add(str); if (!clip) { if (op->customdata) diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index fc84cfc46a2..d435b78b65c 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -720,8 +720,8 @@ static void draw_fcurve_curve_bezts (bAnimContext *ac, ID *id, FCurve *fcu, View correct_bezpart(v1, v2, v3, v4); - forward_diff_bezier(v1[0], v2[0], v3[0], v4[0], data, resol, sizeof(float)*3); - forward_diff_bezier(v1[1], v2[1], v3[1], v4[1], data+1, resol, sizeof(float)*3); + BKE_curve_forward_diff_bezier(v1[0], v2[0], v3[0], v4[0], data, resol, sizeof(float)*3); + BKE_curve_forward_diff_bezier(v1[1], v2[1], v3[1], v4[1], data+1, resol, sizeof(float)*3); for (fp= data; resol; resol--, fp+= 3) glVertex2fv(fp); diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c index 1c2f43f67a4..2ef8f6c306c 100644 --- a/source/blender/editors/space_info/info_stats.c +++ b/source/blender/editors/space_info/info_stats.c @@ -183,7 +183,7 @@ static void stats_object_edit(Object *obedit, SceneStats *stats) BezTriple *bezt; BPoint *bp; int a; - ListBase *nurbs = curve_editnurbs(cu); + ListBase *nurbs = BKE_curve_editNurbs_get(cu); for (nu = nurbs->first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) { diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index e00abff30f2..91ece361aac 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -2499,8 +2499,8 @@ int node_link_bezier_points(View2D *v2d, SpaceNode *snode, bNodeLink *link, floa else { /* always do all three, to prevent data hanging around */ - forward_diff_bezier(vec[0][0], vec[1][0], vec[2][0], vec[3][0], coord_array[0], resol, sizeof(float)*2); - forward_diff_bezier(vec[0][1], vec[1][1], vec[2][1], vec[3][1], coord_array[0]+1, resol, sizeof(float)*2); + BKE_curve_forward_diff_bezier(vec[0][0], vec[1][0], vec[2][0], vec[3][0], coord_array[0], resol, sizeof(float)*2); + BKE_curve_forward_diff_bezier(vec[0][1], vec[1][1], vec[2][1], vec[3][1], coord_array[0]+1, resol, sizeof(float)*2); return 1; } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 4508dae36e7..3f431585fc9 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2213,7 +2213,7 @@ void nurbs_foreachScreenVert( short s[2] = {IS_CLIPPED, 0}; Nurb *nu; int i; - ListBase *nurbs = curve_editnurbs(cu); + ListBase *nurbs = BKE_curve_editNurbs_get(cu); ED_view3d_clipping_local(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */ @@ -3963,7 +3963,7 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas break; case OB_MBALL: - if (is_basis_mball(ob)) { + if (BKE_metaball_is_basis(ob)) { lb = &ob->disp; if (lb->first == NULL) makeDispListMBall(scene, ob); if (lb->first == NULL) return 1; @@ -6140,7 +6140,7 @@ static void draw_bounding_volume(Scene *scene, Object *ob, char type) bb = ob->bb ? ob->bb : ( (Curve *)ob->data)->bb; } else if (ob->type == OB_MBALL) { - if (is_basis_mball(ob)) { + if (BKE_metaball_is_basis(ob)) { bb = ob->bb; if (bb == NULL) { makeDispListMBall(scene, ob); @@ -6231,7 +6231,7 @@ static void drawObjectSelect(Scene *scene, View3D *v3d, ARegion *ar, Base *base) } } else if (ob->type == OB_MBALL) { - if (is_basis_mball(ob)) { + if (BKE_metaball_is_basis(ob)) { if ((base->flag & OB_FROMDUPLI) == 0) drawDispListwire(&ob->disp); } @@ -6291,7 +6291,7 @@ static void drawWireExtra(Scene *scene, RegionView3D *rv3d, Object *ob) } } else if (ob->type == OB_MBALL) { - if (is_basis_mball(ob)) { + if (BKE_metaball_is_basis(ob)) { drawDispListwire(&ob->disp); } } @@ -6670,7 +6670,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) cu = ob->data; if (cu->editnurb) { - ListBase *nurbs = curve_editnurbs(cu); + ListBase *nurbs = BKE_curve_editNurbs_get(cu); drawnurb(scene, v3d, rv3d, base, nurbs->first, dt); } else if (dt == OB_BOUNDBOX) { diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index c3ff00e3c82..6d810d9103c 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -211,7 +211,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float BPoint *bp; BezTriple *bezt; int a; - ListBase *nurbs = curve_editnurbs(cu); + ListBase *nurbs = BKE_curve_editNurbs_get(cu); StructRNA *seltype = NULL; void *selp = NULL; @@ -509,7 +509,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float BPoint *bp; BezTriple *bezt; int a; - ListBase *nurbs = curve_editnurbs(cu); + ListBase *nurbs = BKE_curve_editNurbs_get(cu); const float scale_w = compute_scale_factor(ve_median[4], median[4]); nu = nurbs->first; @@ -571,8 +571,8 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float bp++; } } - test2DNurb(nu); - testhandlesNurb(nu); /* test for bezier too */ + BKE_nurb_test2D(nu); + BKE_nurb_handles_test(nu); /* test for bezier too */ nu = nu->next; } diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 2c301dc8abc..988d0a00601 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -106,7 +106,7 @@ static void special_transvert_update(Object *obedit) } else if (ELEM(obedit->type, OB_CURVE, OB_SURF)) { Curve *cu = obedit->data; - ListBase *nurbs = curve_editnurbs(cu); + ListBase *nurbs = BKE_curve_editNurbs_get(cu); Nurb *nu = nurbs->first; while (nu) { @@ -141,8 +141,8 @@ static void special_transvert_update(Object *obedit) } } - test2DNurb(nu); - testhandlesNurb(nu); /* test for bezier too */ + BKE_nurb_test2D(nu); + BKE_nurb_handles_test(nu); /* test for bezier too */ nu = nu->next; } } @@ -375,7 +375,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) else if (ELEM(obedit->type, OB_CURVE, OB_SURF)) { Curve *cu = obedit->data; int totmalloc = 0; - ListBase *nurbs = curve_editnurbs(cu); + ListBase *nurbs = BKE_curve_editNurbs_get(cu); for (nu = nurbs->first; nu; nu = nu->next) { if (nu->type == CU_BEZIER) diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index bdae2c0c84f..00c8e0a1d34 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -1438,7 +1438,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) if (cu->editnurb==NULL) return; /* count total of vertices, check identical as in 2nd loop for making transdata! */ - nurbs= curve_editnurbs(cu); + nurbs= BKE_curve_editNurbs_get(cu); for (nu= nurbs->first; nu; nu= nu->next) { if (nu->type == CU_BEZIER) { for (a=0, bezt= nu->bezt; apntsu; a++, bezt++) { @@ -1588,7 +1588,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t) * but for now just don't change handle types */ if (ELEM(t->mode, TFM_CURVE_SHRINKFATTEN, TFM_TILT) == 0) { /* sets the handles based on their selection, do this after the data is copied to the TransData */ - testhandlesNurb(nu); + BKE_nurb_handles_test(nu); } } else { diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 2c5d074e2cf..217e0d36fce 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -673,7 +673,7 @@ static void recalcData_view3d(TransInfo *t) if (t->obedit) { if (ELEM(t->obedit->type, OB_CURVE, OB_SURF)) { Curve *cu= t->obedit->data; - ListBase *nurbs= curve_editnurbs(cu); + ListBase *nurbs= BKE_curve_editNurbs_get(cu); Nurb *nu= nurbs->first; if (t->state != TRANS_CANCEL) { @@ -685,15 +685,15 @@ static void recalcData_view3d(TransInfo *t) if (t->state == TRANS_CANCEL) { while (nu) { - calchandlesNurb(nu); /* Cant do testhandlesNurb here, it messes up the h1 and h2 flags */ + BKE_nurb_handles_calc(nu); /* Cant do testhandlesNurb here, it messes up the h1 and h2 flags */ nu= nu->next; } } else { /* Normal updating */ while (nu) { - test2DNurb(nu); - calchandlesNurb(nu); + BKE_nurb_test2D(nu); + BKE_nurb_handles_calc(nu); nu= nu->next; } } diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index c043be0c7f8..f8a982c6b71 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -389,7 +389,7 @@ int calc_manipulator_stats(const bContext *C) Nurb *nu; BezTriple *bezt; BPoint *bp; - ListBase *nurbs= curve_editnurbs(cu); + ListBase *nurbs= BKE_curve_editNurbs_get(cu); nu= nurbs->first; while (nu) { diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 0f9f90819d0..db974626b14 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -715,7 +715,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], Nurb *nu; BezTriple *bezt; int a; - ListBase *nurbs= curve_editnurbs(cu); + ListBase *nurbs= BKE_curve_editNurbs_get(cu); for (nu = nurbs->first; nu; nu = nu->next) { /* only bezier has a normal */ diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index 97cf73ab998..86a2d6c9a46 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -100,12 +100,12 @@ static const EnumPropertyItem curve2d_fill_mode_items[] = { #include "MEM_guardedalloc.h" -#include "ED_curve.h" /* for BKE_curve_nurbs */ +#include "ED_curve.h" /* for BKE_curve_nurbs_get */ /* highly irritating but from RNA we cant know this */ static Nurb *curve_nurb_from_point(Curve *cu, const void *point, int *nu_index, int *pt_index) { - ListBase *nurbs = BKE_curve_nurbs(cu); + ListBase *nurbs = BKE_curve_nurbs_get(cu); Nurb *nu; int i = 0; @@ -139,7 +139,7 @@ static Nurb *curve_nurb_from_point(Curve *cu, const void *point, int *nu_index, static StructRNA *rna_Curve_refine(PointerRNA *ptr) { Curve *cu = (Curve*)ptr->data; - short obtype = curve_type(cu); + short obtype = BKE_curve_type_get(cu); if (obtype == OB_FONT) return &RNA_TextCurve; else if (obtype == OB_SURF) return &RNA_SurfaceCurve; @@ -205,7 +205,7 @@ static void rna_Curve_texspace_set(Main *UNUSED(bmain), Scene *UNUSED(scene), Po Curve *cu = (Curve*)ptr->data; if (cu->texflag & CU_AUTOSPACE) - tex_space_curve(cu); + BKE_curve_tex_space_calc(cu); } static int rna_Curve_texspace_editable(PointerRNA *ptr) @@ -219,7 +219,7 @@ static void rna_Curve_texspace_loc_get(PointerRNA *ptr, float *values) Curve *cu = (Curve *)ptr->data; if (!cu->bb) - tex_space_curve(cu); + BKE_curve_tex_space_calc(cu); copy_v3_v3(values, cu->loc); } @@ -236,7 +236,7 @@ static void rna_Curve_texspace_size_get(PointerRNA *ptr, float *values) Curve *cu = (Curve *)ptr->data; if (!cu->bb) - tex_space_curve(cu); + BKE_curve_tex_space_calc(cu); copy_v3_v3(values, cu->size); } @@ -271,7 +271,7 @@ static void rna_Curve_dimension_set(PointerRNA *ptr, int value) if (value == CU_3D) cu->flag |= CU_3D; else cu->flag &= ~CU_3D; - update_curve_dimension(cu); + BKE_curve_curve_dimension_update(cu); } static EnumPropertyItem *rna_Curve_fill_mode_itemf(bContext *UNUSED(C), PointerRNA *ptr, @@ -326,7 +326,7 @@ static void rna_Curve_update_points(Main *bmain, Scene *scene, PointerRNA *ptr) Nurb *nu = curve_nurb_from_point(cu, ptr->data, NULL, NULL); if (nu) - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); rna_Curve_update_data(bmain, scene, ptr); } @@ -404,7 +404,7 @@ static void rna_Curve_taperObject_set(PointerRNA *ptr, PointerRNA value) static void rna_Curve_resolution_u_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { Curve *cu = (Curve*)ptr->id.data; - ListBase *nurbs = BKE_curve_nurbs(cu); + ListBase *nurbs = BKE_curve_nurbs_get(cu); Nurb *nu = nurbs->first; while (nu) { @@ -418,7 +418,7 @@ static void rna_Curve_resolution_u_update_data(Main *bmain, Scene *scene, Pointe static void rna_Curve_resolution_v_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { Curve *cu = (Curve*)ptr->id.data; - ListBase *nurbs = BKE_curve_nurbs(cu); + ListBase *nurbs = BKE_curve_nurbs_get(cu); Nurb *nu = nurbs->first; @@ -481,10 +481,10 @@ static void rna_Nurb_update_cyclic_u(Main *bmain, Scene *scene, PointerRNA *ptr) Nurb *nu = (Nurb*)ptr->data; if (nu->type == CU_BEZIER) { - calchandlesNurb(nu); + BKE_nurb_handles_calc(nu); } else { - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); } rna_Curve_update_data(bmain, scene, ptr); @@ -494,7 +494,7 @@ static void rna_Nurb_update_cyclic_v(Main *bmain, Scene *scene, PointerRNA *ptr) { Nurb *nu = (Nurb*)ptr->data; - nurbs_knot_calc_v(nu); + BKE_nurb_knot_calc_v(nu); rna_Curve_update_data(bmain, scene, ptr); } @@ -503,8 +503,8 @@ static void rna_Nurb_update_knot_u(Main *bmain, Scene *scene, PointerRNA *ptr) { Nurb *nu = (Nurb*)ptr->data; - clamp_nurb_order_u(nu); - nurbs_knot_calc_u(nu); + BKE_nurb_order_clamp_u(nu); + BKE_nurb_knot_calc_u(nu); rna_Curve_update_data(bmain, scene, ptr); } @@ -513,8 +513,8 @@ static void rna_Nurb_update_knot_v(Main *bmain, Scene *scene, PointerRNA *ptr) { Nurb *nu = (Nurb*)ptr->data; - clamp_nurb_order_v(nu); - nurbs_knot_calc_v(nu); + BKE_nurb_order_clamp_v(nu); + BKE_nurb_knot_calc_v(nu); rna_Curve_update_data(bmain, scene, ptr); } @@ -529,10 +529,10 @@ static void rna_Curve_spline_points_add(ID *id, Nurb *nu, ReportList *reports, i } else { - addNurbPoints(nu, number); + BKE_nurb_points_add(nu, number); /* update */ - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); rna_Curve_update_data_id(NULL, NULL, id); } @@ -547,10 +547,10 @@ static void rna_Curve_spline_bezpoints_add(ID *id, Nurb *nu, ReportList *reports /* do nothing */ } else { - addNurbPointsBezier(nu, number); + BKE_nurb_bezierPoints_add(nu, number); /* update */ - nurbs_knot_calc_u(nu); + BKE_nurb_knot_calc_u(nu); rna_Curve_update_data_id(NULL, NULL, id); } @@ -579,7 +579,7 @@ static Nurb *rna_Curve_spline_new(Curve *cu, int type) nu->resolu = nu->resolv = 12; nu->flag = CU_SMOOTH; - BLI_addtail(BKE_curve_nurbs(cu), nu); + BLI_addtail(BKE_curve_nurbs_get(cu), nu); return nu; } @@ -587,7 +587,7 @@ static Nurb *rna_Curve_spline_new(Curve *cu, int type) static void rna_Curve_spline_remove(Curve *cu, ReportList *reports, Nurb *nu) { int found = 0; - ListBase *nurbs = BKE_curve_nurbs(cu); + ListBase *nurbs = BKE_curve_nurbs_get(cu); found = BLI_remlink_safe(nurbs, nu); @@ -596,7 +596,7 @@ static void rna_Curve_spline_remove(Curve *cu, ReportList *reports, Nurb *nu) return; } - freeNurb(nu); + BKE_nurb_free(nu); /* invalidate pointer!, no can do */ DAG_id_tag_update(&cu->id, OB_RECALC_DATA); @@ -605,9 +605,9 @@ static void rna_Curve_spline_remove(Curve *cu, ReportList *reports, Nurb *nu) static void rna_Curve_spline_clear(Curve *cu) { - ListBase *nurbs = BKE_curve_nurbs(cu); + ListBase *nurbs = BKE_curve_nurbs_get(cu); - freeNurblist(nurbs); + BKE_nurbList_free(nurbs); DAG_id_tag_update(&cu->id, OB_RECALC_DATA); WM_main_add_notifier(NC_GEOM|ND_DATA, NULL); @@ -617,7 +617,7 @@ static PointerRNA rna_Curve_active_spline_get(PointerRNA *ptr) { Curve *cu = (Curve*)ptr->data; Nurb *nu; - ListBase *nurbs = BKE_curve_nurbs(cu); + ListBase *nurbs = BKE_curve_nurbs_get(cu); /* for curve outside editmode will set to -1, should be changed to be allowed outside of editmode. */ nu = BLI_findlink(nurbs, cu->actnu); @@ -632,7 +632,7 @@ static void rna_Curve_active_spline_set(PointerRNA *ptr, PointerRNA value) { Curve *cu = (Curve*)ptr->data; Nurb *nu = value.data; - ListBase *nubase = BKE_curve_nurbs(cu); + ListBase *nubase = BKE_curve_nurbs_get(cu); /* -1 is ok for an unset index */ if (nu == NULL) @@ -644,7 +644,7 @@ static void rna_Curve_active_spline_set(PointerRNA *ptr, PointerRNA value) static char *rna_Curve_spline_path(PointerRNA *ptr) { Curve *cu = (Curve*)ptr->id.data; - ListBase *nubase = BKE_curve_nurbs(cu); + ListBase *nubase = BKE_curve_nurbs_get(cu); Nurb *nu = ptr->data; int index = BLI_findindex(nubase, nu); @@ -693,7 +693,7 @@ static char *rna_TextBox_path(PointerRNA *ptr) static void rna_Curve_splines_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { Curve *cu = (Curve*)ptr->id.data; - rna_iterator_listbase_begin(iter, BKE_curve_nurbs(cu), NULL); + rna_iterator_listbase_begin(iter, BKE_curve_nurbs_get(cu), NULL); } #else diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c index 10a45fbb94d..63006af7c72 100644 --- a/source/blender/makesrna/intern/rna_main_api.c +++ b/source/blender/makesrna/intern/rna_main_api.c @@ -141,7 +141,7 @@ Object *rna_Main_objects_new(Main *UNUSED(bmain), ReportList *reports, const cha type = OB_MESH; break; case ID_CU: - type = curve_type((struct Curve *)data); + type = BKE_curve_type_get((struct Curve *)data); break; case ID_MB: type = OB_MBALL; @@ -314,7 +314,7 @@ void rna_Main_lattices_remove(Main *bmain, ReportList *reports, struct Lattice * Curve *rna_Main_curves_new(Main *UNUSED(bmain), const char *name, int type) { - Curve *cu = add_curve(name, type); + Curve *cu = BKE_curve_add(name, type); id_us_min(&cu->id); return cu; } @@ -329,7 +329,7 @@ void rna_Main_curves_remove(Main *bmain, ReportList *reports, struct Curve *cu) MetaBall *rna_Main_metaballs_new(Main *UNUSED(bmain), const char *name) { - MetaBall *mb = add_mball(name); + MetaBall *mb = BKE_metaball_add(name); id_us_min(&mb->id); return mb; } @@ -523,7 +523,7 @@ MovieClip *rna_Main_movieclip_load(Main *UNUSED(bmain), ReportList *reports, con MovieClip *clip; errno = 0; - clip = BKE_add_movieclip_file(filepath); + clip = BKE_movieclip_file_add(filepath); if (!clip) BKE_reportf(reports, RPT_ERROR, "Can't read: \"%s\", %s.", filepath, @@ -534,7 +534,7 @@ MovieClip *rna_Main_movieclip_load(Main *UNUSED(bmain), ReportList *reports, con void rna_Main_movieclips_remove(Main *bmain, MovieClip *clip) { - unlink_movieclip(bmain, clip); + BKE_movieclip_unlink(bmain, clip); free_libblock(&bmain->movieclip, clip); /* XXX python now has invalid pointer? */ } diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c index e8ea19a5c5b..f7ef0c5c89a 100644 --- a/source/blender/makesrna/intern/rna_meta.c +++ b/source/blender/makesrna/intern/rna_meta.c @@ -99,7 +99,7 @@ static void rna_MetaBall_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) if (mb->id.us > 0) { for (ob = bmain->object.first; ob; ob = ob->id.next) if (ob->data == mb) - copy_mball_properties(scene, ob); + BKE_metaball_properties_copy(scene, ob); DAG_id_tag_update(&mb->id, 0); WM_main_add_notifier(NC_GEOM|ND_DATA, mb); @@ -115,7 +115,7 @@ static void rna_MetaBall_update_rotation(Main *bmain, Scene *scene, PointerRNA * static MetaElem *rna_MetaBall_elements_new(MetaBall *mb, int type) { - MetaElem *ml = add_metaball_element(mb, type); + MetaElem *ml = BKE_metaball_element_add(mb, type); /* cheating way for importers to avoid slow updates */ if (mb->id.us > 0) { diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index bd024ba90be..140e874eb78 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -353,7 +353,7 @@ static void rna_Object_data_set(PointerRNA *ptr, PointerRNA value) test_object_materials(id); if (GS(id->name) == ID_CU) - test_curve_type(ob); + BKE_curve_type_test(ob); else if (ob->type == OB_ARMATURE) armature_rebuild_pose(ob, ob->data); } diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c index fb383b1256b..0ac6dcbc518 100644 --- a/source/blender/makesrna/intern/rna_object_api.c +++ b/source/blender/makesrna/intern/rna_object_api.c @@ -96,7 +96,7 @@ Mesh *rna_Object_to_mesh(Object *ob, ReportList *reports, Scene *sce, int apply_ object_free_modifiers(tmpobj); /* copies the data */ - copycu = tmpobj->data = copy_curve( (Curve *) ob->data ); + copycu = tmpobj->data = BKE_curve_copy( (Curve *) ob->data ); /* temporarily set edit so we get updates from edit mode, but * also because for text datablocks copying it while in edit @@ -124,7 +124,7 @@ Mesh *rna_Object_to_mesh(Object *ob, ReportList *reports, Scene *sce, int apply_ case OB_MBALL: { /* metaballs don't have modifiers, so just convert to mesh */ - Object *basis_ob = find_basis_mball(sce, ob); + Object *basis_ob = BKE_metaball_basis_find(sce, ob); /* todo, re-generatre for render-res */ /* metaball_polygonize(scene, ob) */ diff --git a/source/blender/python/mathutils/mathutils_geometry.c b/source/blender/python/mathutils/mathutils_geometry.c index b94c2e21139..543574e5136 100644 --- a/source/blender/python/mathutils/mathutils_geometry.c +++ b/source/blender/python/mathutils/mathutils_geometry.c @@ -1011,7 +1011,7 @@ static PyObject *M_Geometry_interpolate_bezier(PyObject *UNUSED(self), PyObject coord_array = MEM_callocN(dims * (resolu) * sizeof(float), "interpolate_bezier"); for (i = 0; i < dims; i++) { - forward_diff_bezier(k1[i], h1[i], h2[i], k2[i], coord_array + i, resolu - 1, sizeof(float) * dims); + BKE_curve_forward_diff_bezier(k1[i], h1[i], h2[i], k2[i], coord_array + i, resolu - 1, sizeof(float) * dims); } list = PyList_New(resolu); diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 404901f2bb7..7fe1fab1681 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -908,10 +908,10 @@ static float *get_object_orco(Render *re, Object *ob) if (!orco) { if (ELEM(ob->type, OB_CURVE, OB_FONT)) { - orco = make_orco_curve(re->scene, ob); + orco = BKE_curve_make_orco(re->scene, ob); } else if (ob->type==OB_SURF) { - orco = make_orco_surf(ob); + orco = BKE_curve_surf_make_orco(ob); } if (orco) @@ -2437,7 +2437,7 @@ static void init_render_mball(Render *re, ObjectRen *obr) int a, need_orco, vlakindex, *index, negative_scale; ListBase dispbase= {NULL, NULL}; - if (ob!=find_basis_mball(re->scene, ob)) + if (ob!=BKE_metaball_basis_find(re->scene, ob)) return; mult_m4_m4m4(mat, re->viewmat, ob->obmat); @@ -2463,7 +2463,7 @@ static void init_render_mball(Render *re, ObjectRen *obr) if (!orco) { /* orco hasn't been found in cache - create new one and add to cache */ - orco= make_orco_mball(ob, &dispbase); + orco= BKE_metaball_make_orco(ob, &dispbase); set_object_orco(re, ob, orco); } } @@ -4725,7 +4725,7 @@ static int allow_render_object(Render *re, Object *ob, int nolamps, int onlysele return 0; /* don't add non-basic meta objects, ends up having renderobjects with no geometry */ - if (ob->type == OB_MBALL && ob!=find_basis_mball(re->scene, ob)) + if (ob->type == OB_MBALL && ob!=BKE_metaball_basis_find(re->scene, ob)) return 0; if (nolamps && (ob->type==OB_LAMP)) diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 0c95ccea5d7..58c2c649163 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -364,7 +364,7 @@ void WM_exit_ext(bContext *C, const short do_python) free_openrecent(); - BKE_freecubetable(); + BKE_metaball_cubeTable_free(); ED_preview_free_dbase(); /* frees a Main dbase, before free_blender! */ -- cgit v1.2.3 From 3865276eb8c0f73646a32c05dbe9d8f65babe332 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Sat, 28 Apr 2012 17:16:38 +0000 Subject: User Preferences/ Themes * Tooltip section was there twice (User Interface category) Issue introduced in r45092! --- release/scripts/startup/bl_ui/space_userpref.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 6ae66481fa1..113c370e687 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -637,10 +637,6 @@ class USERPREF_PT_theme(Panel): col.label(text="Tooltip:") ui_items_general(col, ui) - ui = theme.user_interface.wcol_tooltip - col.label(text="Tooltip:") - ui_items_general(col, ui) - ui = theme.user_interface.wcol_menu_item col.label(text="Menu Item:") ui_items_general(col, ui) -- cgit v1.2.3 From 4465d2f419a8515df41a8fc415774eedaef0e6f6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 28 Apr 2012 18:39:37 +0000 Subject: bmesh api functions, not used yet: BM_iter_elem_count_flag() BM_iter_mesh_count_flag() --- source/blender/bmesh/intern/bmesh_iterators.c | 44 +++++++++++++++++++++++++++ source/blender/bmesh/intern/bmesh_iterators.h | 2 ++ 2 files changed, 46 insertions(+) diff --git a/source/blender/bmesh/intern/bmesh_iterators.c b/source/blender/bmesh/intern/bmesh_iterators.c index 384715d74f7..8103ae1ee11 100644 --- a/source/blender/bmesh/intern/bmesh_iterators.c +++ b/source/blender/bmesh/intern/bmesh_iterators.c @@ -104,6 +104,50 @@ int BM_iter_as_array(BMesh *bm, const char itype, void *data, void **array, cons return i; } +/** + * \brief Elem Iter Flag Count + * + * Counts how many flagged / unflagged items are found in this element. + */ +int BM_iter_elem_count_flag(const char itype, void *data, const char hflag, const short value) +{ + BMIter iter; + BMElem *ele; + int count = 0; + + BLI_assert(ELEM(value, TRUE, FALSE)); + + for (ele = BM_iter_new(&iter, NULL, itype, data); ele; ele = BM_iter_step(&iter)) { + if (BM_elem_flag_test_bool(ele, hflag) == value) { + count++; + } + } + + return count; +} + +/** + * \brief Mesh Iter Flag Count + * + * Counts how many flagged / unflagged items are found in this mesh. + */ +int BM_iter_mesh_count_flag(const char itype, BMesh *bm, const char hflag, const short value) +{ + BMIter iter; + BMElem *ele; + int count = 0; + + BLI_assert(ELEM(value, TRUE, FALSE)); + + for (ele = BM_iter_new(&iter, bm, itype, NULL); ele; ele = BM_iter_step(&iter)) { + if (BM_elem_flag_test_bool(ele, hflag) == value) { + count++; + } + } + + return count; +} + /** * \brief Init Iterator diff --git a/source/blender/bmesh/intern/bmesh_iterators.h b/source/blender/bmesh/intern/bmesh_iterators.h index c687e4b4e7a..1361a91a692 100644 --- a/source/blender/bmesh/intern/bmesh_iterators.h +++ b/source/blender/bmesh/intern/bmesh_iterators.h @@ -117,6 +117,8 @@ typedef struct BMIter { void *BM_iter_at_index(BMesh *bm, const char itype, void *data, int index); int BM_iter_as_array(BMesh *bm, const char itype, void *data, void **array, const int len); +int BM_iter_elem_count_flag(const char itype, void *data, const char hflag, const short value); +int BM_iter_mesh_count_flag(const char itype, BMesh *bm, const char hflag, const short value); /* private for bmesh_iterators_inline.c */ void bmiter__vert_of_mesh_begin(struct BMIter *iter); -- cgit v1.2.3 From 8bf8a128c2f1df5c85ee0005d1821316d3e88261 Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Sat, 28 Apr 2012 21:46:43 +0000 Subject: Smoke: Support for moving obstacles. (Merge from Smoke2 branch) Sponsored by the Blender Development Fund. http://www.blender.org/blenderorg/blender-foundation/development-fund/ Remarks: The original code was not designed to support moving obstacles so I had to introduce some velocity constraints into the code to prevent smoke from exploding. If this causes problems with "fire" emulation, please let me know. --- intern/smoke/extern/smoke_API.h | 7 +- intern/smoke/intern/FLUID_3D.cpp | 228 ++- intern/smoke/intern/FLUID_3D.h | 17 +- intern/smoke/intern/OBSTACLE.h | 6 +- intern/smoke/intern/WTURBULENCE.cpp | 9 +- intern/smoke/intern/smoke_API.cpp | 53 +- .../startup/bl_ui/properties_physics_smoke.py | 9 + source/blender/blenkernel/intern/smoke.c | 1536 ++++++++++++-------- source/blender/makesdna/DNA_smoke_types.h | 12 +- source/blender/makesrna/intern/rna_smoke.c | 14 + 10 files changed, 1249 insertions(+), 642 deletions(-) diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h index 9d5dfd98823..a0eb1bf38e0 100644 --- a/intern/smoke/extern/smoke_API.h +++ b/intern/smoke/extern/smoke_API.h @@ -41,11 +41,11 @@ struct FLUID_3D; void smoke_export(struct FLUID_3D *fluid, float *dt, float *dx, float **dens, float **densold, float **heat, float **heatold, float **vx, float **vy, float **vz, float **vxold, float **vyold, float **vzold, unsigned char **obstacles); // low res -struct FLUID_3D *smoke_init(int *res, float *p0); +struct FLUID_3D *smoke_init(int *res, float *p0, float dtdef); void smoke_free(struct FLUID_3D *fluid); void smoke_initBlenderRNA(struct FLUID_3D *fluid, float *alpha, float *beta, float *dt_factor, float *vorticity, int *border_colli); -void smoke_step(struct FLUID_3D *fluid, size_t framenr, float fps); +void smoke_step(struct FLUID_3D *fluid, float dtSubdiv); float *smoke_get_density(struct FLUID_3D *fluid); float *smoke_get_heat(struct FLUID_3D *fluid); @@ -53,6 +53,9 @@ float *smoke_get_velocity_x(struct FLUID_3D *fluid); float *smoke_get_velocity_y(struct FLUID_3D *fluid); float *smoke_get_velocity_z(struct FLUID_3D *fluid); +/* Moving obstacle velocity provided by blender */ +void smoke_get_ob_velocity(struct FLUID_3D *fluid, float **x, float **y, float **z); + float *smoke_get_force_x(struct FLUID_3D *fluid); float *smoke_get_force_y(struct FLUID_3D *fluid); float *smoke_get_force_z(struct FLUID_3D *fluid); diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp index 9f036cc6d2f..04971f898e9 100644 --- a/intern/smoke/intern/FLUID_3D.cpp +++ b/intern/smoke/intern/FLUID_3D.cpp @@ -34,6 +34,8 @@ #include "SPHERE.h" #include +#include "float.h" + #if PARALLEL==1 #include #endif // PARALLEL @@ -42,11 +44,11 @@ // Construction/Destruction ////////////////////////////////////////////////////////////////////// -FLUID_3D::FLUID_3D(int *res, float *p0) : +FLUID_3D::FLUID_3D(int *res, float *p0, float dtdef) : _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f) { // set simulation consts - _dt = DT_DEFAULT; // just in case. set in step from a RNA factor + _dt = dtdef; // just in case. set in step from a RNA factor // start point of array _p0[0] = p0[0]; @@ -81,6 +83,9 @@ FLUID_3D::FLUID_3D(int *res, float *p0) : _xVelocity = new float[_totalCells]; _yVelocity = new float[_totalCells]; _zVelocity = new float[_totalCells]; + _xVelocityOb = new float[_totalCells]; + _yVelocityOb = new float[_totalCells]; + _zVelocityOb = new float[_totalCells]; _xVelocityOld = new float[_totalCells]; _yVelocityOld = new float[_totalCells]; _zVelocityOld = new float[_totalCells]; @@ -111,6 +116,9 @@ FLUID_3D::FLUID_3D(int *res, float *p0) : _xVelocity[x] = 0.0f; _yVelocity[x] = 0.0f; _zVelocity[x] = 0.0f; + _xVelocityOb[x] = 0.0f; + _yVelocityOb[x] = 0.0f; + _zVelocityOb[x] = 0.0f; _xVelocityOld[x] = 0.0f; _yVelocityOld[x] = 0.0f; _zVelocityOld[x] = 0.0f; @@ -131,9 +139,15 @@ FLUID_3D::FLUID_3D(int *res, float *p0) : _colloPrev = 1; // default value + setBorderObstacles(); // walls + +} +void FLUID_3D::setBorderObstacles() +{ + // set side obstacles - int index; + unsigned int index; for (int y = 0; y < _yRes; y++) for (int x = 0; x < _xRes; x++) { @@ -169,7 +183,6 @@ FLUID_3D::FLUID_3D(int *res, float *p0) : index += _xRes - 1; if(_domainBcRight==1) _obstacles[index] = 1; } - } FLUID_3D::~FLUID_3D() @@ -177,6 +190,9 @@ FLUID_3D::~FLUID_3D() if (_xVelocity) delete[] _xVelocity; if (_yVelocity) delete[] _yVelocity; if (_zVelocity) delete[] _zVelocity; + if (_xVelocityOb) delete[] _xVelocityOb; + if (_yVelocityOb) delete[] _yVelocityOb; + if (_zVelocityOb) delete[] _zVelocityOb; if (_xVelocityOld) delete[] _xVelocityOld; if (_yVelocityOld) delete[] _yVelocityOld; if (_zVelocityOld) delete[] _zVelocityOld; @@ -214,10 +230,18 @@ void FLUID_3D::initBlenderRNA(float *alpha, float *beta, float *dt_factor, float ////////////////////////////////////////////////////////////////////// void FLUID_3D::step(float dt) { +#if 0 // If border rules have been changed if (_colloPrev != *_borderColli) { + printf("Border collisions changed\n"); + + // DG TODO: Need to check that no animated obstacle flags are overwritten setBorderCollisions(); } +#endif + + // DG: TODO for the moment redo border for every timestep since it's been deleted every time by moving obstacles + setBorderCollisions(); // set delta time by dt_factor @@ -786,6 +810,7 @@ void FLUID_3D::project() memset(_pressure, 0, sizeof(float)*_totalCells); memset(_divergence, 0, sizeof(float)*_totalCells); + // set velocity and pressure inside of obstacles to zero setObstacleBoundaries(_pressure, 0, _zRes); // copy out the boundaries @@ -798,12 +823,49 @@ void FLUID_3D::project() if(_domainBcTop == 0) setNeumannZ(_zVelocity, _res, 0, _zRes); else setZeroZ(_zVelocity, _res, 0, _zRes); + /* + { + float maxx = 0, maxy = 0, maxz = 0; + for(unsigned int i = 0; i < _xRes * _yRes * _zRes; i++) + { + if(_xVelocity[i] > maxx) + maxx = _xVelocity[i]; + if(_yVelocity[i] > maxy) + maxy = _yVelocity[i]; + if(_zVelocity[i] > maxz) + maxz = _zVelocity[i]; + } + printf("Max velx: %f, vely: %f, velz: %f\n", maxx, maxy, maxz); + } + */ + + /* + { + float maxvalue = 0; + for(unsigned int i = 0; i < _xRes * _yRes * _zRes; i++) + { + if(_heat[i] > maxvalue) + maxvalue = _heat[i]; + + } + printf("Max heat: %f\n", maxvalue); + } + */ + // calculate divergence index = _slabSize + _xRes + 1; for (z = 1; z < _zRes - 1; z++, index += 2 * _xRes) for (y = 1; y < _yRes - 1; y++, index += 2) for (x = 1; x < _xRes - 1; x++, index++) { + + if(_obstacles[index]) + { + _divergence[index] = 0.0f; + continue; + } + + float xright = _xVelocity[index + 1]; float xleft = _xVelocity[index - 1]; float yup = _yVelocity[index + _xRes]; @@ -811,26 +873,82 @@ void FLUID_3D::project() float ztop = _zVelocity[index + _slabSize]; float zbottom = _zVelocity[index - _slabSize]; - if(_obstacles[index+1]) xright = - _xVelocity[index]; + if(_obstacles[index+1]) xright = - _xVelocity[index]; // DG: += if(_obstacles[index-1]) xleft = - _xVelocity[index]; if(_obstacles[index+_xRes]) yup = - _yVelocity[index]; if(_obstacles[index-_xRes]) ydown = - _yVelocity[index]; if(_obstacles[index+_slabSize]) ztop = - _zVelocity[index]; if(_obstacles[index-_slabSize]) zbottom = - _zVelocity[index]; + if(_obstacles[index+1] & 8) xright += _xVelocityOb[index + 1]; + if(_obstacles[index-1] & 8) xleft += _xVelocityOb[index - 1]; + if(_obstacles[index+_xRes] & 8) yup += _yVelocityOb[index + _xRes]; + if(_obstacles[index-_xRes] & 8) ydown += _yVelocityOb[index - _xRes]; + if(_obstacles[index+_slabSize] & 8) ztop += _zVelocityOb[index + _slabSize]; + if(_obstacles[index-_slabSize] & 8) zbottom += _zVelocityOb[index - _slabSize]; + _divergence[index] = -_dx * 0.5f * ( xright - xleft + yup - ydown + ztop - zbottom ); - // DG: commenting this helps CG to get a better start, 10-20% speed improvement - // _pressure[index] = 0.0f; + // Pressure is zero anyway since now a local array is used + _pressure[index] = 0.0f; } + + + /* + { + float maxvalue = 0; + for(unsigned int i = 0; i < _xRes * _yRes * _zRes; i++) + { + if(_divergence[i] > maxvalue) + maxvalue = _divergence[i]; + + } + printf("Max divergence: %f\n", maxvalue); + } + */ + copyBorderAll(_pressure, 0, _zRes); + /* + { + float maxvalue = 0; + for(unsigned int i = 0; i < _xRes * _yRes * _zRes; i++) + { + if(_pressure[i] > maxvalue) + maxvalue = _pressure[i]; + } + printf("Max pressure BEFORE: %f\n", maxvalue); + } + */ + // solve Poisson equation solvePressurePre(_pressure, _divergence, _obstacles); + { + float maxvalue = 0; + for(unsigned int i = 0; i < _xRes * _yRes * _zRes; i++) + { + if(_pressure[i] > maxvalue) + maxvalue = _pressure[i]; + + /* HACK: Animated collision object sometimes result in a non converging solvePressurePre() */ + if(_pressure[i] > _dx * _dt) + _pressure[i] = _dx * _dt; + else if(_pressure[i] < -_dx * _dt) + _pressure[i] = -_dx * _dt; + + // if(_obstacle[i] && _pressure[i] != 0.0) + // printf("BAD PRESSURE i\n"); + + // if(_pressure[i]>1) + // printf("index: %d\n", i); + } + // printf("Max pressure: %f, dx: %f\n", maxvalue, _dx); + } + setObstaclePressure(_pressure, 0, _zRes); // project out solution @@ -848,12 +966,74 @@ void FLUID_3D::project() } } + setObstacleVelocity(0, _zRes); + if (_pressure) delete[] _pressure; if (_divergence) delete[] _divergence; } +////////////////////////////////////////////////////////////////////// +// calculate the obstacle velocity at boundary +////////////////////////////////////////////////////////////////////// +void FLUID_3D::setObstacleVelocity(int zBegin, int zEnd) +{ + + // completely TODO <-- who wrote this and what is here TODO? DG + const size_t index_ = _slabSize + _xRes + 1; + + //int vIndex=_slabSize + _xRes + 1; + + int bb=0; + int bt=0; + + if (zBegin == 0) {bb = 1;} + if (zEnd == _zRes) {bt = 1;} + // tag remaining obstacle blocks + for (int z = zBegin + bb; z < zEnd - bt; z++) + { + size_t index = index_ +(z-1)*_slabSize; + + for (int y = 1; y < _yRes - 1; y++, index += 2) + { + for (int x = 1; x < _xRes - 1; x++, index++) + { + if (!_obstacles[index]) + { + // if(_obstacles[index+1]) xright = - _xVelocityOb[index]; + if((_obstacles[index - 1] & 8) && abs(_xVelocityOb[index - 1]) > FLT_EPSILON ) + { + // printf("velocity x!\n"); + _xVelocity[index] = _xVelocityOb[index - 1]; + _xVelocity[index - 1] = _xVelocityOb[index - 1]; + } + // if(_obstacles[index+_xRes]) yup = - _yVelocityOb[index]; + if((_obstacles[index - _xRes] & 8) && abs(_yVelocityOb[index - _xRes]) > FLT_EPSILON) + { + // printf("velocity y!\n"); + _yVelocity[index] = _yVelocityOb[index - _xRes]; + _yVelocity[index - _xRes] = _yVelocityOb[index - _xRes]; + } + // if(_obstacles[index+_slabSize]) ztop = - _zVelocityOb[index]; + if((_obstacles[index - _slabSize] & 8) && abs(_zVelocityOb[index - _slabSize]) > FLT_EPSILON) + { + // printf("velocity z!\n"); + _zVelocity[index] = _zVelocityOb[index - _slabSize]; + _zVelocity[index - _slabSize] = _zVelocityOb[index - _slabSize]; + } + } + else + { + _density[index] = 0; + } + //vIndex++; + } // x loop + //vIndex += 2; + } // y loop + //vIndex += 2 * _xRes; + } // z loop +} ////////////////////////////////////////////////////////////////////// // diffuse heat @@ -892,7 +1072,7 @@ void FLUID_3D::addObstacle(OBSTACLE* obstacle) void FLUID_3D::setObstaclePressure(float *_pressure, int zBegin, int zEnd) { - // compleately TODO + // completely TODO <-- who wrote this and what is here TODO? DG const size_t index_ = _slabSize + _xRes + 1; @@ -914,7 +1094,7 @@ void FLUID_3D::setObstaclePressure(float *_pressure, int zBegin, int zEnd) for (int x = 1; x < _xRes - 1; x++, index++) { // could do cascade of ifs, but they are a pain - if (_obstacles[index]) + if (_obstacles[index] /* && !(_obstacles[index] & 8) DG TODO TEST THIS CONDITION */) { const int top = _obstacles[index + _slabSize]; const int bottom= _obstacles[index - _slabSize]; @@ -928,9 +1108,11 @@ void FLUID_3D::setObstaclePressure(float *_pressure, int zBegin, int zEnd) // const bool fully = (up && down); //const bool fullx = (left && right); + /* _xVelocity[index] = _yVelocity[index] = _zVelocity[index] = 0.0f; + */ _pressure[index] = 0.0f; // average pressure neighbors @@ -1253,7 +1435,35 @@ void FLUID_3D::advectMacCormackEnd2(int zBegin, int zEnd) setZeroBorder(_density, res, zBegin, zEnd); setZeroBorder(_heat, res, zBegin, zEnd); +#if 0 + { + const size_t index_ = _slabSize + _xRes + 1; + int bb=0; + int bt=0; + + if (zBegin == 0) {bb = 1;} + if (zEnd == _zRes) {bt = 1;} + + for (int z = zBegin + bb; z < zEnd - bt; z++) + { + size_t index = index_ +(z-1)*_slabSize; + for (int y = 1; y < _yRes - 1; y++, index += 2) + { + for (int x = 1; x < _xRes - 1; x++, index++) + { + // clean custom velocities from moving obstacles again + if (_obstacles[index]) + { + _xVelocity[index] = + _yVelocity[index] = + _zVelocity[index] = 0.0f; + } + } + } + } + } +#endif /*int begin=zBegin * _slabSize; int end=begin + (zEnd - zBegin) * _slabSize; diff --git a/intern/smoke/intern/FLUID_3D.h b/intern/smoke/intern/FLUID_3D.h index c9e18926fb2..5704cba3ed4 100644 --- a/intern/smoke/intern/FLUID_3D.h +++ b/intern/smoke/intern/FLUID_3D.h @@ -39,9 +39,6 @@ // #include "WTURBULENCE.h" #include "VEC3.h" -// timestep default value for nice appearance -#define DT_DEFAULT 0.1f; - using namespace std; using namespace BasicVector; class WTURBULENCE; @@ -49,7 +46,7 @@ class WTURBULENCE; class FLUID_3D { public: - FLUID_3D(int *res, /* int amplify, */ float *p0); + FLUID_3D(int *res, /* int amplify, */ float *p0, float dtdef); FLUID_3D() {}; virtual ~FLUID_3D(); @@ -72,7 +69,7 @@ class FLUID_3D int yRes() const { return _yRes; }; int zRes() const { return _zRes; }; - public: + public: // dimensions int _xRes, _yRes, _zRes, _maxRes; Vec3Int _res; @@ -89,6 +86,8 @@ class FLUID_3D void artificialDampingSL(int zBegin, int zEnd); void artificialDampingExactSL(int pos); + void setBorderObstacles(); + // fields float* _density; float* _densityOld; @@ -97,13 +96,17 @@ class FLUID_3D float* _xVelocity; float* _yVelocity; float* _zVelocity; + float* _xVelocityOb; + float* _yVelocityOb; + float* _zVelocityOb; float* _xVelocityOld; float* _yVelocityOld; float* _zVelocityOld; float* _xForce; float* _yForce; float* _zForce; - unsigned char* _obstacles; + unsigned char* _obstacles; /* only used (usefull) for static obstacles like domain boundaries */ + unsigned char* _obstaclesAnim; // Required for proper threading: float* _xVelocityTemp; @@ -137,6 +140,8 @@ class FLUID_3D // have to recalibrate borders if nothing has changed void setBorderCollisions(); + void setObstacleVelocity(int zBegin, int zEnd); + // WTURBULENCE object, if active // WTURBULENCE* _wTurbulence; diff --git a/intern/smoke/intern/OBSTACLE.h b/intern/smoke/intern/OBSTACLE.h index 61d47b727f0..da8ec6be024 100644 --- a/intern/smoke/intern/OBSTACLE.h +++ b/intern/smoke/intern/OBSTACLE.h @@ -27,9 +27,11 @@ #define OBSTACLE_H enum OBSTACLE_FLAGS { - EMPTY = 0, + EMPTY = 0, + /* 1 is used to flag an object cell */ MARCHED = 2, - RETIRED = 4 + RETIRED = 4, + ANIMATED = 8, }; class OBSTACLE diff --git a/intern/smoke/intern/WTURBULENCE.cpp b/intern/smoke/intern/WTURBULENCE.cpp index cd18cf7b344..83bec466c9f 100644 --- a/intern/smoke/intern/WTURBULENCE.cpp +++ b/intern/smoke/intern/WTURBULENCE.cpp @@ -431,8 +431,11 @@ void WTURBULENCE::decomposeEnergy(float *_energy, float *_highFreqEnergy) // compute velocity from energies and march into obstacles // for wavelet decomposition ////////////////////////////////////////////////////////////////////// -void WTURBULENCE::computeEnergy(float *_energy, float* xvel, float* yvel, float* zvel, unsigned char *obstacles) +void WTURBULENCE::computeEnergy(float *_energy, float* xvel, float* yvel, float* zvel, unsigned char *origObstacles) { + unsigned char *obstacles = new unsigned char[_totalCellsSm]; + memcpy(obstacles, origObstacles, sizeof(unsigned char) * _totalCellsSm); + // compute everywhere for (int x = 0; x < _totalCellsSm; x++) _energy[x] = 0.5f * (xvel[x] * xvel[x] + yvel[x] * yvel[x] + zvel[x] * zvel[x]); @@ -506,7 +509,9 @@ void WTURBULENCE::computeEnergy(float *_energy, float* xvel, float* yvel, float* for (int y = 1; y < _yResSm - 1; y++, index += 2) for (int x = 1; x < _xResSm - 1; x++, index++) if (obstacles[index]) - obstacles[index] = 1; + obstacles[index] = 1; // DG TODO ? animated obstacle flag? + + free(obstacles); } ////////////////////////////////////////////////////////////////////////////////////////// diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp index a2f3c21bbbf..78f7d35360a 100644 --- a/intern/smoke/intern/smoke_API.cpp +++ b/intern/smoke/intern/smoke_API.cpp @@ -19,6 +19,7 @@ * All rights reserved. * * Contributor(s): Daniel Genrich + * Blender Foundation * * ***** END GPL LICENSE BLOCK ***** */ @@ -36,10 +37,10 @@ #include // y in smoke is z in blender -extern "C" FLUID_3D *smoke_init(int *res, float *p0) +extern "C" FLUID_3D *smoke_init(int *res, float *p0, float dtdef) { // smoke lib uses y as top-bottom/vertical axis where blender uses z - FLUID_3D *fluid = new FLUID_3D(res, p0); + FLUID_3D *fluid = new FLUID_3D(res, p0, dtdef); // printf("xres: %d, yres: %d, zres: %d\n", res[0], res[1], res[2]); @@ -78,41 +79,9 @@ extern "C" size_t smoke_get_index2d(int x, int max_x, int y /*, int max_y, int z return x + y * max_x; } -extern "C" void smoke_step(FLUID_3D *fluid, size_t framenr, float fps) +extern "C" void smoke_step(FLUID_3D *fluid, float dtSubdiv) { - /* stability values copied from wturbulence.cpp */ - const int maxSubSteps = 25; - const float maxVel = 0.5f; /* TODO: maybe 0.5 is still too high, please confirm! -dg */ - - float dt = DT_DEFAULT; - float maxVelMag = 0.0f; - int totalSubsteps; - int substep = 0; - float dtSubdiv; - - /* get max velocity and lower the dt value if it is too high */ - size_t size= fluid->_xRes * fluid->_yRes * fluid->_zRes; - - for(size_t i = 0; i < size; i++) - { - float vtemp = (fluid->_xVelocity[i]*fluid->_xVelocity[i]+fluid->_yVelocity[i]*fluid->_yVelocity[i]+fluid->_zVelocity[i]*fluid->_zVelocity[i]); - if(vtemp > maxVelMag) - maxVelMag = vtemp; - } - - /* adapt timestep for different framerates, dt = 0.1 is at 25fps */ - dt *= (25.0f / fps); - - maxVelMag = sqrt(maxVelMag) * dt * (*(fluid->_dtFactor)); - totalSubsteps = (int)((maxVelMag / maxVel) + 1.0f); /* always round up */ - totalSubsteps = (totalSubsteps < 1) ? 1 : totalSubsteps; - totalSubsteps = (totalSubsteps > maxSubSteps) ? maxSubSteps : totalSubsteps; - dtSubdiv = (float)dt / (float)totalSubsteps; - - // printf("totalSubsteps: %d, maxVelMag: %f, dt: %f\n", totalSubsteps, maxVelMag, dt); - - for(substep = 0; substep < totalSubsteps; substep++) - fluid->step(dtSubdiv); + fluid->step(dtSubdiv); } extern "C" void smoke_turbulence_step(WTURBULENCE *wt, FLUID_3D *fluid) @@ -307,6 +276,18 @@ extern "C" unsigned char *smoke_get_obstacle(FLUID_3D *fluid) return fluid->_obstacles; } +extern "C" void smoke_get_ob_velocity(struct FLUID_3D *fluid, float **x, float **y, float **z) +{ + *x = fluid->_xVelocityOb; + *y = fluid->_yVelocityOb; + *z = fluid->_zVelocityOb; +} + +extern "C" unsigned char *smoke_get_obstacle_anim(FLUID_3D *fluid) +{ + return fluid->_obstaclesAnim; +} + extern "C" void smoke_turbulence_set_noise(WTURBULENCE *wt, int type) { wt->setNoise(type); diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py index 9f760f2f024..d3ab616a793 100644 --- a/release/scripts/startup/bl_ui/properties_physics_smoke.py +++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py @@ -100,6 +100,15 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel): sub.prop(flow, "use_absolute") sub.prop(flow, "density") sub.prop(flow, "temperature") + + elif md.smoke_type == 'COLLISION': + coll = md.coll_settings + + split = layout.split() + + col = split.column() + col.prop(coll, "collision_type") + class PHYSICS_PT_smoke_groups(PhysicButtonsPanel, Panel): diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index 9d13397859d..f3939a2ebfc 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -21,6 +21,7 @@ * The Original Code is: all of this file. * * Contributor(s): Daniel Genrich + * Blender Foundation * * ***** END GPL LICENSE BLOCK ***** */ @@ -53,6 +54,7 @@ #include "BKE_bvhutils.h" #include "BKE_cdderivedmesh.h" +#include "BKE_collision.h" #include "BKE_customdata.h" #include "BKE_DerivedMesh.h" #include "BKE_effect.h" @@ -118,7 +120,6 @@ static void tend ( void ) gettimeofday ( &_tend,&tz ); } -#if 0 // unused static double tval() { double t1, t2; @@ -127,14 +128,16 @@ static double tval() return t2-t1; } #endif -#endif struct Object; struct Scene; struct DerivedMesh; struct SmokeModifierData; -#define TRI_UVOFFSET (1.0 / 4.0) +#define TRI_UVOFFSET (1./4.) + +// timestep default value for nice appearance 0.1f +#define DT_DEFAULT 0.1f /* forward declerations */ static void calcTriangleDivs(Object *ob, MVert *verts, int numverts, MFace *tris, int numfaces, int numtris, int **tridivs, float cell_len); @@ -159,7 +162,7 @@ void smokeModifier_do(SmokeModifierData *UNUSED(smd), Scene *UNUSED(scene), Obje static int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, DerivedMesh *dm) { - if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain && !smd->domain->fluid) + if((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain && !smd->domain->fluid) { size_t i; float min[3] = {FLT_MAX, FLT_MAX, FLT_MAX}, max[3] = {-FLT_MAX, -FLT_MAX, -FLT_MAX}; @@ -171,7 +174,7 @@ static int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, res = smd->domain->maxres; // get BB of domain - for (i = 0; i < dm->getNumVerts(dm); i++) + for(i = 0; i < dm->getNumVerts(dm); i++) { float tmp[3]; @@ -198,32 +201,32 @@ static int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, // printf("size: %f, %f, %f\n", size[0], size[1], size[2]); // prevent crash when initializing a plane as domain - if ((size[0] < FLT_EPSILON) || (size[1] < FLT_EPSILON) || (size[2] < FLT_EPSILON)) + if((size[0] < FLT_EPSILON) || (size[1] < FLT_EPSILON) || (size[2] < FLT_EPSILON)) return 0; - if (size[0] > size[1]) + if(size[0] > size[1]) { - if (size[0] > size[2]) + if(size[0] > size[2]) { scale = res / size[0]; - smd->domain->dx = size[0] / res; + smd->domain->dx = size[0] / res; // dx is in global coords smd->domain->res[0] = res; smd->domain->res[1] = (int)(size[1] * scale + 0.5); smd->domain->res[2] = (int)(size[2] * scale + 0.5); } else { scale = res / size[2]; - smd->domain->dx = size[2] / res; + smd->domain->dx = size[2] / res; // dx is in global coords smd->domain->res[2] = res; smd->domain->res[0] = (int)(size[0] * scale + 0.5); smd->domain->res[1] = (int)(size[1] * scale + 0.5); } } else { - if (size[1] > size[2]) + if(size[1] > size[2]) { scale = res / size[1]; - smd->domain->dx = size[1] / res; + smd->domain->dx = size[1] / res; // dx is in global coords smd->domain->res[1] = res; smd->domain->res[0] = (int)(size[0] * scale + 0.5); smd->domain->res[2] = (int)(size[2] * scale + 0.5); @@ -243,10 +246,10 @@ static int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, // printf("res[0]: %d, res[1]: %d, res[2]: %d\n", smd->domain->res[0], smd->domain->res[1], smd->domain->res[2]); // dt max is 0.1 - smd->domain->fluid = smoke_init(smd->domain->res, smd->domain->p0); + smd->domain->fluid = smoke_init(smd->domain->res, smd->domain->p0, DT_DEFAULT); smd->time = scene->r.cfra; - if (smd->domain->flags & MOD_SMOKE_HIGHRES) + if(smd->domain->flags & MOD_SMOKE_HIGHRES) { smd->domain->wt = smoke_turbulence_init(smd->domain->res, smd->domain->amplify + 1, smd->domain->noise); smd->domain->res_wt[0] = smd->domain->res[0] * (smd->domain->amplify + 1); @@ -257,19 +260,19 @@ static int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, // printf("(smd->domain->flags & MOD_SMOKE_HIGHRES)\n"); } - if (!smd->domain->shadow) + if(!smd->domain->shadow) smd->domain->shadow = MEM_callocN(sizeof(float) * smd->domain->res[0] * smd->domain->res[1] * smd->domain->res[2], "SmokeDomainShadow"); smoke_initBlenderRNA(smd->domain->fluid, &(smd->domain->alpha), &(smd->domain->beta), &(smd->domain->time_scale), &(smd->domain->vorticity), &(smd->domain->border_collisions)); - if (smd->domain->wt) + if(smd->domain->wt) { smoke_initWaveletBlenderRNA(smd->domain->wt, &(smd->domain->strength)); // printf("smoke_initWaveletBlenderRNA\n"); } return 1; } - else if ((smd->type & MOD_SMOKE_TYPE_FLOW) && smd->flow) + else if((smd->type & MOD_SMOKE_TYPE_FLOW) && smd->flow) { // handle flow object here // XXX TODO @@ -288,7 +291,7 @@ static int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, } /* - if (!smd->flow->bvh) + if(!smd->flow->bvh) { // smd->flow->bvh = MEM_callocN(sizeof(BVHTreeFromMesh), "smoke_bvhfromfaces"); // bvhtree_from_mesh_faces(smd->flow->bvh, dm, 0.0, 2, 6); @@ -301,28 +304,33 @@ static int smokeModifier_init (SmokeModifierData *smd, Object *ob, Scene *scene, return 1; } - else if ((smd->type & MOD_SMOKE_TYPE_COLL)) + else if((smd->type & MOD_SMOKE_TYPE_COLL)) { - smd->time = scene->r.cfra; - // todo: delete this when loading colls work -dg - if (!smd->coll) + + if(!smd->coll) + { smokeModifier_createType(smd); + } - if (!smd->coll->points) + if(!smd->coll->points) { // init collision points SmokeCollSettings *scs = smd->coll; + smd->time = scene->r.cfra; + // copy obmat copy_m4_m4(scs->mat, ob->obmat); copy_m4_m4(scs->mat_old, ob->obmat); DM_ensure_tessface(dm); fill_scs_points(ob, dm, scs); + + // DEBUG printf("scs->dx: %f\n", scs->dx); } - if (!smd->coll->bvhtree) + if(!smd->coll->bvhtree) { smd->coll->bvhtree = NULL; // bvhtree_build_from_smoke ( ob->obmat, dm->getTessFaceArray(dm), dm->getNumTessFaces(dm), dm->getVertArray(dm), dm->getNumVerts(dm), 0.0 ); } @@ -337,50 +345,52 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) MVert *mvert = dm->getVertArray(dm); MFace *mface = dm->getTessFaceArray(dm); int i = 0, divs = 0; - int *tridivs = NULL; - float cell_len = 1.0 / 50.0; // for res = 50 + + // DG TODO: need to do this dynamically according to the domain object! + float cell_len = scs->dx; int newdivs = 0; int quads = 0, facecounter = 0; // count quads - for (i = 0; i < dm->getNumTessFaces(dm); i++) + for(i = 0; i < dm->getNumTessFaces(dm); i++) { - if (mface[i].v4) + if(mface[i].v4) quads++; } - calcTriangleDivs(ob, mvert, dm->getNumVerts(dm), mface, dm->getNumTessFaces(dm), dm->getNumTessFaces(dm) + quads, &tridivs, cell_len); + scs->numtris = dm->getNumTessFaces(dm) + quads; + scs->tridivs = NULL; + calcTriangleDivs(ob, mvert, dm->getNumVerts(dm), mface, dm->getNumTessFaces(dm), scs->numtris, &(scs->tridivs), cell_len); // count triangle divisions - for (i = 0; i < dm->getNumTessFaces(dm) + quads; i++) + for(i = 0; i < dm->getNumTessFaces(dm) + quads; i++) { - divs += (tridivs[3 * i] + 1) * (tridivs[3 * i + 1] + 1) * (tridivs[3 * i + 2] + 1); + divs += (scs->tridivs[3 * i] + 1) * (scs->tridivs[3 * i + 1] + 1) * (scs->tridivs[3 * i + 2] + 1); } - // printf("divs: %d\n", divs); - scs->points = MEM_callocN(sizeof(float) * (dm->getNumVerts(dm) + divs) * 3, "SmokeCollPoints"); + scs->points_old = MEM_callocN(sizeof(float) * (dm->getNumVerts(dm) + divs) * 3, "SmokeCollPointsOld"); - for (i = 0; i < dm->getNumVerts(dm); i++) + for(i = 0; i < dm->getNumVerts(dm); i++) { float tmpvec[3]; copy_v3_v3(tmpvec, mvert[i].co); - mul_m4_v3(ob->obmat, tmpvec); + // mul_m4_v3(ob->obmat, tmpvec); // DG: use local coordinates, we save MAT anyway copy_v3_v3(&scs->points[i * 3], tmpvec); } - for (i = 0, facecounter = 0; i < dm->getNumTessFaces(dm); i++) + for(i = 0, facecounter = 0; i < dm->getNumTessFaces(dm); i++) { int again = 0; do { int j, k; - int divs1 = tridivs[3 * facecounter + 0]; - int divs2 = tridivs[3 * facecounter + 1]; - //int divs3 = tridivs[3 * facecounter + 2]; + int divs1 = scs->tridivs[3 * facecounter + 0]; + int divs2 = scs->tridivs[3 * facecounter + 1]; + //int divs3 = scs->tridivs[3 * facecounter + 2]; float side1[3], side2[3], trinormorg[3], trinorm[3]; - if (again == 1 && mface[i].v4) + if(again == 1 && mface[i].v4) { sub_v3_v3v3(side1, mvert[ mface[i].v3 ].co, mvert[ mface[i].v1 ].co); sub_v3_v3v3(side2, mvert[ mface[i].v4 ].co, mvert[ mface[i].v1 ].co); @@ -395,23 +405,23 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) copy_v3_v3(trinorm, trinormorg); mul_v3_fl(trinorm, 0.25 * cell_len); - for (j = 0; j <= divs1; j++) + for(j = 0; j <= divs1; j++) { - for (k = 0; k <= divs2; k++) + for(k = 0; k <= divs2; k++) { float p1[3], p2[3], p3[3], p[3]={0,0,0}; const float uf = (float)(j + TRI_UVOFFSET) / (float)(divs1 + 0.0); const float vf = (float)(k + TRI_UVOFFSET) / (float)(divs2 + 0.0); float tmpvec[3]; - if (uf+vf > 1.0) + if(uf+vf > 1.0) { // printf("bigger - divs1: %d, divs2: %d\n", divs1, divs2); continue; } copy_v3_v3(p1, mvert[ mface[i].v1 ].co); - if (again == 1 && mface[i].v4) + if(again == 1 && mface[i].v4) { copy_v3_v3(p2, mvert[ mface[i].v3 ].co); copy_v3_v3(p3, mvert[ mface[i].v4 ].co); @@ -428,40 +438,211 @@ static void fill_scs_points(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) add_v3_v3v3(p, p1, p2); add_v3_v3(p, p3); - if (newdivs > divs) + if(newdivs > divs) printf("mem problem\n"); // mMovPoints.push_back(p + trinorm); add_v3_v3v3(tmpvec, p, trinorm); - mul_m4_v3(ob->obmat, tmpvec); + // mul_m4_v3(ob->obmat, tmpvec); // DG: use local coordinates, we save MAT anyway copy_v3_v3(&scs->points[3 * (dm->getNumVerts(dm) + newdivs)], tmpvec); newdivs++; - if (newdivs > divs) + if(newdivs > divs) printf("mem problem\n"); // mMovPoints.push_back(p - trinorm); copy_v3_v3(tmpvec, p); sub_v3_v3(tmpvec, trinorm); - mul_m4_v3(ob->obmat, tmpvec); + // mul_m4_v3(ob->obmat, tmpvec); // DG: use local coordinates, we save MAT anyway copy_v3_v3(&scs->points[3 * (dm->getNumVerts(dm) + newdivs)], tmpvec); newdivs++; } } - if (again == 0 && mface[i].v4) + if(again == 0 && mface[i].v4) again++; else again = 0; facecounter++; - } while (again!=0); + } while(again!=0); } + scs->numverts = dm->getNumVerts(dm); + // DG TODO: also save triangle count? + scs->numpoints = dm->getNumVerts(dm) + newdivs; - MEM_freeN(tridivs); + for(i = 0; i < scs->numpoints * 3; i++) + { + scs->points_old[i] = scs->points[i]; + } +} + + +static void fill_scs_points_anim(Object *ob, DerivedMesh *dm, SmokeCollSettings *scs) +{ + MVert *mvert = dm->getVertArray(dm); + MFace *mface = dm->getTessFaceArray(dm); + int quads = 0, numtris = 0, facecounter = 0; + unsigned int i = 0; + int divs = 0, newdivs = 0; + + // DG TODO: need to do this dynamically according to the domain object! + float cell_len = scs->dx; + + // count quads + for(i = 0; i < dm->getNumTessFaces(dm); i++) + { + if(mface[i].v4) + quads++; + } + + numtris = dm->getNumTessFaces(dm) + quads; + + // check if mesh changed topology + if(scs->numtris != numtris) + return; + if(scs->numverts != dm->getNumVerts(dm)) + return; + + // update new positions + for(i = 0; i < dm->getNumVerts(dm); i++) + { + float tmpvec[3]; + copy_v3_v3(tmpvec, mvert[i].co); + copy_v3_v3(&scs->points[i * 3], tmpvec); + } + + // for every triangle // update div points + for(i = 0, facecounter = 0; i < dm->getNumTessFaces(dm); i++) + { + int again = 0; + do + { + int j, k; + int divs1 = scs->tridivs[3 * facecounter + 0]; + int divs2 = scs->tridivs[3 * facecounter + 1]; + float srcside1[3], srcside2[3], destside1[3], destside2[3], src_trinormorg[3], dest_trinormorg[3], src_trinorm[3], dest_trinorm[3]; + + if(again == 1 && mface[i].v4) + { + sub_v3_v3v3(srcside1, &scs->points_old[mface[i].v3 * 3], &scs->points_old[mface[i].v1 * 3]); + sub_v3_v3v3(destside1, &scs->points[mface[i].v3 * 3], &scs->points[mface[i].v1 * 3]); + + sub_v3_v3v3(srcside2, &scs->points_old[mface[i].v4 * 3], &scs->points_old[mface[i].v1 * 3]); + sub_v3_v3v3(destside2, &scs->points[mface[i].v4 * 3], &scs->points[mface[i].v1 * 3]); + } + else { + sub_v3_v3v3(srcside1, &scs->points_old[mface[i].v2 * 3], &scs->points_old[mface[i].v1 * 3]); + sub_v3_v3v3(destside1, &scs->points[mface[i].v2 * 3], &scs->points[mface[i].v1 * 3]); + + sub_v3_v3v3(srcside2, &scs->points_old[mface[i].v3 * 3], &scs->points_old[mface[i].v1 * 3]); + sub_v3_v3v3(destside2, &scs->points[mface[i].v3 * 3], &scs->points[mface[i].v1 * 3]); + } + + cross_v3_v3v3(src_trinormorg, srcside1, srcside2); + cross_v3_v3v3(dest_trinormorg, destside1, destside2); + + normalize_v3(src_trinormorg); + normalize_v3(dest_trinormorg); + + copy_v3_v3(src_trinorm, src_trinormorg); + copy_v3_v3(dest_trinorm, dest_trinormorg); + + mul_v3_fl(src_trinorm, 0.25 * cell_len); + mul_v3_fl(dest_trinorm, 0.25 * cell_len); + + for(j = 0; j <= divs1; j++) + { + for(k = 0; k <= divs2; k++) + { + float src_p1[3], src_p2[3], src_p3[3], src_p[3]={0,0,0}; + float dest_p1[3], dest_p2[3], dest_p3[3], dest_p[3]={0,0,0}; + const float uf = (float)(j + TRI_UVOFFSET) / (float)(divs1 + 0.0); + const float vf = (float)(k + TRI_UVOFFSET) / (float)(divs2 + 0.0); + float src_tmpvec[3], dest_tmpvec[3]; + + if(uf+vf > 1.0) + { + // printf("bigger - divs1: %d, divs2: %d\n", divs1, divs2); + continue; + } + + copy_v3_v3(src_p1, &scs->points_old[mface[i].v1 * 3]); + copy_v3_v3(dest_p1, &scs->points[mface[i].v1 * 3]); + if(again == 1 && mface[i].v4) + { + copy_v3_v3(src_p2, &scs->points_old[mface[i].v3 * 3]); + copy_v3_v3(dest_p2, &scs->points[mface[i].v3 * 3]); + + copy_v3_v3(src_p3,&scs->points_old[mface[i].v4 * 3]); + copy_v3_v3(dest_p3, &scs->points[mface[i].v4 * 3]); + } + else { + copy_v3_v3(src_p2, &scs->points_old[mface[i].v2 * 3]); + copy_v3_v3(dest_p2, &scs->points[mface[i].v2 * 3]); + copy_v3_v3(src_p3, &scs->points_old[mface[i].v3 * 3]); + copy_v3_v3(dest_p3, &scs->points[mface[i].v3 * 3]); + } + + mul_v3_fl(src_p1, (1.0-uf-vf)); + mul_v3_fl(dest_p1, (1.0-uf-vf)); + + mul_v3_fl(src_p2, uf); + mul_v3_fl(dest_p2, uf); + + mul_v3_fl(src_p3, vf); + mul_v3_fl(dest_p3, vf); + + add_v3_v3v3(src_p, src_p1, src_p2); + add_v3_v3v3(dest_p, dest_p1, dest_p2); + + add_v3_v3(src_p, src_p3); + add_v3_v3(dest_p, dest_p3); + + if(newdivs > divs) + printf("mem problem\n"); + + // mMovPoints.push_back(p + trinorm); + add_v3_v3v3(src_tmpvec, src_p, src_trinorm); + add_v3_v3v3(dest_tmpvec, dest_p, dest_trinorm); + + // mul_m4_v3(ob->obmat, tmpvec); // DG: use local coordinates, we save MAT anyway + copy_v3_v3(&scs->points_old[3 * (dm->getNumVerts(dm) + newdivs)], src_tmpvec); + copy_v3_v3(&scs->points[3 * (dm->getNumVerts(dm) + newdivs)], dest_tmpvec); + newdivs++; + + if(newdivs > divs) + printf("mem problem\n"); + + // mMovPoints.push_back(p - trinorm); + copy_v3_v3(src_tmpvec, src_p); + copy_v3_v3(dest_tmpvec, dest_p); + + sub_v3_v3(src_tmpvec, src_trinorm); + sub_v3_v3(dest_tmpvec, dest_trinorm); + + // mul_m4_v3(ob->obmat, tmpvec); // DG: use local coordinates, we save MAT anyway + copy_v3_v3(&scs->points_old[3 * (dm->getNumVerts(dm) + newdivs)], src_tmpvec); + copy_v3_v3(&scs->points[3 * (dm->getNumVerts(dm) + newdivs)], dest_tmpvec); + newdivs++; + } + } + + if(again == 0 && mface[i].v4) + again++; + else + again = 0; + + facecounter++; + + } while(again!=0); + } + + // scs->numpoints = dm->getNumVerts(dm) + newdivs; + } /*! init triangle divisions */ @@ -472,22 +653,22 @@ static void calcTriangleDivs(Object *ob, MVert *verts, int UNUSED(numverts), MFa // mTriangleDivs3.resize( faces.size() ); size_t i = 0, facecounter = 0; - float maxscale[3] = {1,1,1}; // = channelFindMaxVf(mcScale); + float maxscale[3] = {1,1,1}; // = channelFindMaxVf(mcScale); get max scale value float maxpart = ABS(maxscale[0]); float scaleFac = 0; float fsTri = 0; - if (ABS(maxscale[1])>maxpart) maxpart = ABS(maxscale[1]); - if (ABS(maxscale[2])>maxpart) maxpart = ABS(maxscale[2]); + if(ABS(maxscale[1])>maxpart) maxpart = ABS(maxscale[1]); + if(ABS(maxscale[2])>maxpart) maxpart = ABS(maxscale[2]); scaleFac = 1.0 / maxpart; // featureSize = mLevel[mMaxRefine].nodeSize - fsTri = cell_len * 0.5 * scaleFac; + fsTri = cell_len * 0.75 * scaleFac; // fsTri = cell_len * 0.9; - if (*tridivs) + if(*tridivs) MEM_freeN(*tridivs); *tridivs = MEM_callocN(sizeof(int) * numtris * 3, "Smoke_Tridivs"); - for (i = 0, facecounter = 0; i < numfaces; i++) + for(i = 0, facecounter = 0; i < numfaces; i++) { float p0[3], p1[3], p2[3]; float side1[3]; @@ -506,21 +687,22 @@ static void calcTriangleDivs(Object *ob, MVert *verts, int UNUSED(numverts), MFa sub_v3_v3v3(side2, p2, p0); sub_v3_v3v3(side3, p1, p2); - if (dot_v3v3(side1, side1) > fsTri*fsTri) + if(dot_v3v3(side1, side1) > fsTri*fsTri) { float tmp = normalize_v3(side1); divs1 = (int)ceil(tmp/fsTri); } - if (dot_v3v3(side2, side2) > fsTri*fsTri) + if(dot_v3v3(side2, side2) > fsTri*fsTri) { float tmp = normalize_v3(side2); divs2 = (int)ceil(tmp/fsTri); - /* + /* // debug - if (i==0) + if(i==0) printf("b tmp: %f, fsTri: %f, divs2: %d\n", tmp, fsTri, divs2); */ + } (*tridivs)[3 * facecounter + 0] = divs1; @@ -528,7 +710,7 @@ static void calcTriangleDivs(Object *ob, MVert *verts, int UNUSED(numverts), MFa (*tridivs)[3 * facecounter + 2] = divs3; // TODO quad case - if (faces[i].v4) + if(faces[i].v4) { divs1=0, divs2=0, divs3=0; @@ -545,12 +727,12 @@ static void calcTriangleDivs(Object *ob, MVert *verts, int UNUSED(numverts), MFa sub_v3_v3v3(side2, p2, p0); sub_v3_v3v3(side3, p1, p2); - if (dot_v3v3(side1, side1) > fsTri*fsTri) + if(dot_v3v3(side1, side1) > fsTri*fsTri) { float tmp = normalize_v3(side1); divs1 = (int)ceil(tmp/fsTri); } - if (dot_v3v3(side2, side2) > fsTri*fsTri) + if(dot_v3v3(side2, side2) > fsTri*fsTri) { float tmp = normalize_v3(side2); divs2 = (int)ceil(tmp/fsTri); @@ -568,19 +750,19 @@ static void calcTriangleDivs(Object *ob, MVert *verts, int UNUSED(numverts), MFa static void smokeModifier_freeDomain(SmokeModifierData *smd) { - if (smd->domain) + if(smd->domain) { - if (smd->domain->shadow) + if(smd->domain->shadow) MEM_freeN(smd->domain->shadow); smd->domain->shadow = NULL; - if (smd->domain->fluid) + if(smd->domain->fluid) smoke_free(smd->domain->fluid); - if (smd->domain->wt) + if(smd->domain->wt) smoke_turbulence_free(smd->domain->wt); - if (smd->domain->effector_weights) + if(smd->domain->effector_weights) MEM_freeN(smd->domain->effector_weights); smd->domain->effector_weights = NULL; @@ -594,10 +776,10 @@ static void smokeModifier_freeDomain(SmokeModifierData *smd) static void smokeModifier_freeFlow(SmokeModifierData *smd) { - if (smd->flow) + if(smd->flow) { /* - if (smd->flow->bvh) + if(smd->flow->bvh) { free_bvhtree_from_mesh(smd->flow->bvh); MEM_freeN(smd->flow->bvh); @@ -611,22 +793,37 @@ static void smokeModifier_freeFlow(SmokeModifierData *smd) static void smokeModifier_freeCollision(SmokeModifierData *smd) { - if (smd->coll) + if(smd->coll) { - if (smd->coll->points) + SmokeCollSettings *scs = smd->coll; + + if(scs->numpoints) { - MEM_freeN(smd->coll->points); - smd->coll->points = NULL; + if(scs->points) + { + MEM_freeN(scs->points); + scs->points = NULL; + } + if(scs->points_old) + { + MEM_freeN(scs->points_old); + scs->points_old = NULL; + } + if(scs->tridivs) + { + MEM_freeN(scs->tridivs); + scs->tridivs = NULL; + } } - if (smd->coll->bvhtree) + if(scs->bvhtree) { - BLI_bvhtree_free(smd->coll->bvhtree); - smd->coll->bvhtree = NULL; + BLI_bvhtree_free(scs->bvhtree); + scs->bvhtree = NULL; } #ifdef USE_SMOKE_COLLISION_DM - if (smd->coll->dm) + if(smd->coll->dm) smd->coll->dm->release(smd->coll->dm); smd->coll->dm = NULL; #endif @@ -638,7 +835,7 @@ static void smokeModifier_freeCollision(SmokeModifierData *smd) void smokeModifier_reset_turbulence(struct SmokeModifierData *smd) { - if (smd && smd->domain && smd->domain->wt) + if(smd && smd->domain && smd->domain->wt) { smoke_turbulence_free(smd->domain->wt); smd->domain->wt = NULL; @@ -647,15 +844,15 @@ void smokeModifier_reset_turbulence(struct SmokeModifierData *smd) void smokeModifier_reset(struct SmokeModifierData *smd) { - if (smd) + if(smd) { - if (smd->domain) + if(smd->domain) { - if (smd->domain->shadow) + if(smd->domain->shadow) MEM_freeN(smd->domain->shadow); smd->domain->shadow = NULL; - if (smd->domain->fluid) + if(smd->domain->fluid) { smoke_free(smd->domain->fluid); smd->domain->fluid = NULL; @@ -667,10 +864,10 @@ void smokeModifier_reset(struct SmokeModifierData *smd) // printf("reset domain end\n"); } - else if (smd->flow) + else if(smd->flow) { /* - if (smd->flow->bvh) + if(smd->flow->bvh) { free_bvhtree_from_mesh(smd->flow->bvh); MEM_freeN(smd->flow->bvh); @@ -678,33 +875,33 @@ void smokeModifier_reset(struct SmokeModifierData *smd) smd->flow->bvh = NULL; */ } - else if (smd->coll) + else if(smd->coll) { - if (smd->coll->points) - { - MEM_freeN(smd->coll->points); - smd->coll->points = NULL; - } + SmokeCollSettings *scs = smd->coll; - if (smd->coll->bvhtree) + if(scs->numpoints && scs->points) { - BLI_bvhtree_free(smd->coll->bvhtree); - smd->coll->bvhtree = NULL; + MEM_freeN(scs->points); + scs->points = NULL; + + if(scs->points_old) + { + MEM_freeN(scs->points_old); + scs->points_old = NULL; + } + if(scs->tridivs) + { + MEM_freeN(scs->tridivs); + scs->tridivs = NULL; + } } - -#ifdef USE_SMOKE_COLLISION_DM - if (smd->coll->dm) - smd->coll->dm->release(smd->coll->dm); - smd->coll->dm = NULL; -#endif - } } } void smokeModifier_free (SmokeModifierData *smd) { - if (smd) + if(smd) { smokeModifier_freeDomain(smd); smokeModifier_freeFlow(smd); @@ -714,11 +911,11 @@ void smokeModifier_free (SmokeModifierData *smd) void smokeModifier_createType(struct SmokeModifierData *smd) { - if (smd) + if(smd) { - if (smd->type & MOD_SMOKE_TYPE_DOMAIN) + if(smd->type & MOD_SMOKE_TYPE_DOMAIN) { - if (smd->domain) + if(smd->domain) smokeModifier_freeDomain(smd); smd->domain = MEM_callocN(sizeof(SmokeDomainSettings), "SmokeDomain"); @@ -745,7 +942,7 @@ void smokeModifier_createType(struct SmokeModifierData *smd) smd->domain->beta = 0.1; smd->domain->time_scale = 1.0; smd->domain->vorticity = 2.0; - smd->domain->border_collisions = 1; // vertically non-colliding + smd->domain->border_collisions = SM_BORDER_OPEN; // open domain smd->domain->flags = MOD_SMOKE_DISSOLVE_LOG | MOD_SMOKE_HIGH_SMOOTH; smd->domain->strength = 2.0; smd->domain->noise = MOD_SMOKE_NOISEWAVE; @@ -755,9 +952,9 @@ void smokeModifier_createType(struct SmokeModifierData *smd) smd->domain->viewsettings = MOD_SMOKE_VIEW_SHOWBIG; smd->domain->effector_weights = BKE_add_effector_weights(NULL); } - else if (smd->type & MOD_SMOKE_TYPE_FLOW) + else if(smd->type & MOD_SMOKE_TYPE_FLOW) { - if (smd->flow) + if(smd->flow) smokeModifier_freeFlow(smd); smd->flow = MEM_callocN(sizeof(SmokeFlowSettings), "SmokeFlow"); @@ -773,17 +970,23 @@ void smokeModifier_createType(struct SmokeModifierData *smd) smd->flow->psys = NULL; } - else if (smd->type & MOD_SMOKE_TYPE_COLL) + else if(smd->type & MOD_SMOKE_TYPE_COLL) { - if (smd->coll) + if(smd->coll) smokeModifier_freeCollision(smd); smd->coll = MEM_callocN(sizeof(SmokeCollSettings), "SmokeColl"); smd->coll->smd = smd; smd->coll->points = NULL; + smd->coll->points_old = NULL; + smd->coll->tridivs = NULL; + smd->coll->vel = NULL; smd->coll->numpoints = 0; + smd->coll->numtris = 0; smd->coll->bvhtree = NULL; + smd->coll->type = 0; // static obstacle + smd->coll->dx = 1.0f / 50.0f; #ifdef USE_SMOKE_COLLISION_DM smd->coll->dm = NULL; @@ -818,7 +1021,7 @@ void smokeModifier_copy(struct SmokeModifierData *smd, struct SmokeModifierData MEM_freeN(tsmd->domain->effector_weights); tsmd->domain->effector_weights = MEM_dupallocN(smd->domain->effector_weights); - } + } else if (tsmd->flow) { tsmd->flow->density = smd->flow->density; tsmd->flow->temp = smd->flow->temp; @@ -845,15 +1048,15 @@ static int get_lamp(Scene *scene, float *light) int found_lamp = 0; // try to find a lamp, preferably local - for (base_tmp = scene->base.first; base_tmp; base_tmp= base_tmp->next) { - if (base_tmp->object->type == OB_LAMP) { + for(base_tmp = scene->base.first; base_tmp; base_tmp= base_tmp->next) { + if(base_tmp->object->type == OB_LAMP) { Lamp *la = base_tmp->object->data; - if (la->type == LA_LOCAL) { + if(la->type == LA_LOCAL) { copy_v3_v3(light, base_tmp->object->obmat[3]); return 1; } - else if (!found_lamp) { + else if(!found_lamp) { copy_v3_v3(light, base_tmp->object->obmat[3]); found_lamp = 1; } @@ -865,497 +1068,603 @@ static int get_lamp(Scene *scene, float *light) static void smoke_calc_domain(Scene *scene, Object *ob, SmokeModifierData *smd) { +#if 0 SmokeDomainSettings *sds = smd->domain; GroupObject *go = NULL; - Base *base = NULL; + Base *base = NULL; - // do collisions, needs to be done before emission, so that smoke isn't emitted inside collision cells - if (1) + /* do collisions, needs to be done before emission, so that smoke isn't emitted inside collision cells */ + if(1) { - Object *otherobj = NULL; - ModifierData *md = NULL; + unsigned int i; + Object **collobjs = NULL; + unsigned int numcollobj = 0; + collobjs = get_collisionobjects(scene, ob, sds->coll_group, &numcollobj); - if (sds->coll_group) // we use groups since we have 2 domains - go = sds->coll_group->gobject.first; - else - base = scene->base.first; - - while (base || go) + for(i = 0; i < numcollobj; i++) { - otherobj = NULL; - if (sds->coll_group) - { - if (go->ob) - otherobj = go->ob; - } - else - otherobj = base->object; - if (!otherobj) - { - if (sds->coll_group) - go = go->next; - else - base= base->next; - continue; - } - md = modifiers_findByType(otherobj, eModifierType_Smoke); + Object *collob= collobjs[i]; + SmokeModifierData *smd2 = (SmokeModifierData*)modifiers_findByType(collob, eModifierType_Smoke); // check for active smoke modifier - if (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) + // if(md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) + // SmokeModifierData *smd2 = (SmokeModifierData *)md; + + if((smd2->type & MOD_SMOKE_TYPE_COLL) && smd2->coll && smd2->coll->points && smd2->coll->points_old) { - SmokeModifierData *smd2 = (SmokeModifierData *)md; + // ??? anything to do here? + + // TODO: only something to do for ANIMATED obstacles: need to update positions + + } + } + + if(collobjs) + MEM_freeN(collobjs); + } + +#endif +} - if ((smd2->type & MOD_SMOKE_TYPE_COLL) && smd2->coll && smd2->coll->points) +/* Animated obstacles: dx_step = ((x_new - x_old) / totalsteps) * substep */ +static void update_obstacles(Scene *scene, Object *ob, SmokeDomainSettings *sds, float dt, int substep, int totalsteps) +{ + Object **collobjs = NULL; + unsigned int numcollobj = 0; + + unsigned int collIndex; + unsigned char *obstacles = smoke_get_obstacle(sds->fluid); + float *velx = NULL; + float *vely = NULL; + float *velz = NULL; + float *velxOrig = smoke_get_velocity_x(sds->fluid); + float *velyOrig = smoke_get_velocity_y(sds->fluid); + float *velzOrig = smoke_get_velocity_z(sds->fluid); + // float *density = smoke_get_density(sds->fluid); + unsigned int z; + + smoke_get_ob_velocity(sds->fluid, &velx, &vely, &velz); + + // TODO: delete old obstacle flags + for(z = 0; z < sds->res[0] * sds->res[1] * sds->res[2]; z++) + { + if(obstacles[z]) + { + // density[z] = 0; + + velxOrig[z] = 0; + velyOrig[z] = 0; + velzOrig[z] = 0; + } + + if(obstacles[z] & 8) // Do not delete static obstacles + { + obstacles[z] = 0; + } + + velx[z] = 0; + vely[z] = 0; + velz[z] = 0; + } + + collobjs = get_collisionobjects(scene, ob, sds->coll_group, &numcollobj, eModifierType_Smoke); + + // update obstacle tags in cells + for(collIndex = 0; collIndex < numcollobj; collIndex++) + { + Object *collob= collobjs[collIndex]; + SmokeModifierData *smd2 = (SmokeModifierData*)modifiers_findByType(collob, eModifierType_Smoke); + + // DG TODO: check if modifier is active? + + if((smd2->type & MOD_SMOKE_TYPE_COLL) && smd2->coll && smd2->coll->points && smd2->coll->points_old) + { + SmokeCollSettings *scs = smd2->coll; + unsigned int i; + + /* + // DG TODO: support static cobstacles, but basicly we could even support static + rigid with one set of code + if(scs->type > SM_COLL_STATIC) + */ + + /* Handle collisions */ + for(i = 0; i < scs->numpoints; i++) + { + // 1. get corresponding cell + int cell[3]; + float pos[3], oldpos[3], vel[3]; + float cPos[3], cOldpos[3]; /* current position in substeps */ + int badcell = 0; + size_t index; + int j; + + // translate local points into global positions + copy_v3_v3(cPos, &scs->points[3 * i]); + mul_m4_v3(scs->mat, cPos); + copy_v3_v3(pos, cPos); + + copy_v3_v3(cOldpos, &scs->points_old[3 * i]); + mul_m4_v3(scs->mat_old, cOldpos); + copy_v3_v3(oldpos, cOldpos); + + /* support for rigid bodies, armatures etc */ { - // we got nice collision object - SmokeCollSettings *scs = smd2->coll; - size_t i, j; - unsigned char *obstacles = smoke_get_obstacle(smd->domain->fluid); + float tmp[3]; - for (i = 0; i < scs->numpoints; i++) - { - int badcell = 0; - size_t index = 0; - int cell[3]; + /* x_current = x_old + (x_new - x_old) * step_current / steps_total */ + float mulStep = (float)(((float)substep) / ((float)totalsteps)); - // 1. get corresponding cell - get_cell(smd->domain->p0, smd->domain->res, smd->domain->dx, &scs->points[3 * i], cell, 0); - - // check if cell is valid (in the domain boundary) - for (j = 0; j < 3; j++) - if ((cell[j] > sds->res[j] - 1) || (cell[j] < 0)) - { - badcell = 1; - break; - } - - if (badcell) - continue; - // 2. set cell values (heat, density and velocity) - index = smoke_get_index(cell[0], sds->res[0], cell[1], sds->res[1], cell[2]); - - // printf("cell[0]: %d, cell[1]: %d, cell[2]: %d\n", cell[0], cell[1], cell[2]); - // printf("res[0]: %d, res[1]: %d, res[2]: %d, index: %d\n\n", sds->res[0], sds->res[1], sds->res[2], index); - obstacles[index] = 1; - // for moving gobstacles - /* - const LbmFloat maxVelVal = 0.1666; - const LbmFloat maxusqr = maxVelVal*maxVelVal*3. *1.5; - - LbmVec objvel = vec2L((mMOIVertices[n]-mMOIVerticesOld[n]) /dvec); - { - const LbmFloat usqr = (objvel[0]*objvel[0]+objvel[1]*objvel[1]+objvel[2]*objvel[2])*1.5; - USQRMAXCHECK(usqr, objvel[0],objvel[1],objvel[2], mMaxVlen, mMxvx,mMxvy,mMxvz); - if (usqr>maxusqr) { - // cutoff at maxVelVal - for (int jj=0; jj<3; jj++) { - if (objvel[jj] > 0.0) objvel[jj] = maxVelVal; - if (objvel[jj] < 0.0) objvel[jj] = -maxVelVal; - } - } - } - const LbmFloat dp=dot(objvel, vec2L((*pNormals)[n]) ); - const LbmVec oldov=objvel; // debug - objvel = vec2L((*pNormals)[n]) *dp; - */ + sub_v3_v3v3(tmp, cPos, cOldpos); + mul_v3_fl(tmp, mulStep); + add_v3_v3(cOldpos, tmp); + } + + sub_v3_v3v3(vel, pos, oldpos); + /* Scale velocity to incorperate the object movement during this step */ + mul_v3_fl(vel, 1.0 / (totalsteps * dt)); + // mul_v3_fl(vel, 1.0 / dt); + + // DG TODO: cap velocity to maxVelMag (or maxvel) + + // oldpos + velocity * dt = newpos + get_cell(sds->p0, sds->res, sds->dx, cOldpos /* use current position here instead of "pos" */, cell, 0); + + // check if cell is valid (in the domain boundary) + for(j = 0; j < 3; j++) + if((cell[j] > sds->res[j] - 1) || (cell[j] < 0)) + { + badcell = 1; + break; } + + if(badcell) + continue; + + // 2. set cell values (heat, density and velocity) + index = smoke_get_index(cell[0], sds->res[0], cell[1], sds->res[1], cell[2]); + + // Don't overwrite existing obstacles + if(obstacles[index]) + continue; + + // printf("cell[0]: %d, cell[1]: %d, cell[2]: %d\n", cell[0], cell[1], cell[2]); + // printf("res[0]: %d, res[1]: %d, res[2]: %d, index: %d\n\n", sds->res[0], sds->res[1], sds->res[2], index); + obstacles[index] = 1 | 8 /* ANIMATED */; + + if(len_v3(vel) > FLT_EPSILON) + { + // Collision object is moving + + velx[index] = vel[0]; // use "+="? + vely[index] = vel[1]; + velz[index] = vel[2]; } } - - if (sds->coll_group) - go = go->next; - else - base= base->next; } } - // do flows and fluids - if (1) + if(collobjs) + MEM_freeN(collobjs); +} + +static void update_flowsfluids(Scene *scene, Object *ob, SmokeDomainSettings *sds, float time) +{ + Object **flowobjs = NULL; + unsigned int numflowobj = 0; + unsigned int flowIndex; + + flowobjs = get_collisionobjects(scene, ob, sds->fluid_group, &numflowobj, eModifierType_Smoke); + + // update obstacle tags in cells + for(flowIndex = 0; flowIndex < numflowobj; flowIndex++) { - Object *otherobj = NULL; - ModifierData *md = NULL; - if (sds->fluid_group) // we use groups since we have 2 domains - go = sds->fluid_group->gobject.first; - else - base = scene->base.first; - while (base || go) - { - otherobj = NULL; - if (sds->fluid_group) - { - if (go->ob) - otherobj = go->ob; - } - else - otherobj = base->object; - if (!otherobj) - { - if (sds->fluid_group) - go = go->next; - else - base= base->next; + Object *collob= flowobjs[flowIndex]; + SmokeModifierData *smd2 = (SmokeModifierData*)modifiers_findByType(collob, eModifierType_Smoke); - continue; - } + // check for initialized smoke object + if((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) + { + // we got nice flow object + SmokeFlowSettings *sfs = smd2->flow; - md = modifiers_findByType(otherobj, eModifierType_Smoke); - - // check for active smoke modifier - if (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render)) + if(sfs && sfs->psys && sfs->psys->part && sfs->psys->part->type==PART_EMITTER) // is particle system selected { - SmokeModifierData *smd2 = (SmokeModifierData *)md; - - // check for initialized smoke object - if ((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) + ParticleSimulationData sim; + ParticleSystem *psys = sfs->psys; + int totpart=psys->totpart, totchild; + int p = 0; + float *density = smoke_get_density(sds->fluid); + float *bigdensity = smoke_turbulence_get_density(sds->wt); + float *heat = smoke_get_heat(sds->fluid); + float *velocity_x = smoke_get_velocity_x(sds->fluid); + float *velocity_y = smoke_get_velocity_y(sds->fluid); + float *velocity_z = smoke_get_velocity_z(sds->fluid); + unsigned char *obstacle = smoke_get_obstacle(sds->fluid); + // DG TODO UNUSED unsigned char *obstacleAnim = smoke_get_obstacle_anim(sds->fluid); + int bigres[3]; + short absolute_flow = (sfs->flags & MOD_SMOKE_FLOW_ABSOLUTE); + short high_emission_smoothing = bigdensity ? (sds->flags & MOD_SMOKE_HIGH_SMOOTH) : 0; + + /* + * A temporary volume map used to store whole emissive + * area to be added to smoke density and interpolated + * for high resolution smoke. + */ + float *temp_emission_map = NULL; + + sim.scene = scene; + sim.ob = collob; + sim.psys = psys; + + // initialize temp emission map + if(!(sfs->type & MOD_SMOKE_FLOW_TYPE_OUTFLOW)) { - // we got nice flow object - SmokeFlowSettings *sfs = smd2->flow; - - if (sfs && sfs->psys && sfs->psys->part && sfs->psys->part->type==PART_EMITTER) // is particle system selected + int i; + temp_emission_map = MEM_callocN(sizeof(float) * sds->res[0]*sds->res[1]*sds->res[2], "SmokeTempEmission"); + // set whole volume to 0.0f + for (i=0; ires[0]*sds->res[1]*sds->res[2]; i++) { + temp_emission_map[i] = 0.0f; + } + } + + // mostly copied from particle code + if(psys->part->type==PART_HAIR) + { + /* + if(psys->childcache) { - ParticleSimulationData sim; - ParticleSystem *psys = sfs->psys; - int totpart=psys->totpart, totchild; - int p = 0; - float *density = smoke_get_density(sds->fluid); - float *bigdensity = smoke_turbulence_get_density(sds->wt); - float *heat = smoke_get_heat(sds->fluid); - float *velocity_x = smoke_get_velocity_x(sds->fluid); - float *velocity_y = smoke_get_velocity_y(sds->fluid); - float *velocity_z = smoke_get_velocity_z(sds->fluid); - unsigned char *obstacle = smoke_get_obstacle(sds->fluid); - int bigres[3]; - short absolute_flow = (sfs->flags & MOD_SMOKE_FLOW_ABSOLUTE); - short high_emission_smoothing = bigdensity ? (smd->domain->flags & MOD_SMOKE_HIGH_SMOOTH) : 0; - - /* - * A temporary volume map used to store whole emissive - * area to be added to smoke density and interpolated - * for high resolution smoke. - */ - float *temp_emission_map = NULL; - - sim.scene = scene; - sim.ob = otherobj; - sim.psys = psys; - - // initialize temp emission map - if (!(sfs->type & MOD_SMOKE_FLOW_TYPE_OUTFLOW)) + totchild = psys->totchildcache; + } + else + */ + + // TODO: PART_HAIR not supported whatsoever + totchild=0; + } + else + totchild=psys->totchild*psys->part->disp/100; + + for(p=0; pparticles[p].flag & (PARS_NO_DISP|PARS_UNEXIST)) + continue; + } + else { + /* handle child particle */ + ChildParticle *cpa = &psys->child[p - totpart]; + + if(psys->particles[cpa->parent].flag & (PARS_NO_DISP|PARS_UNEXIST)) + continue; + } + + state.time = time; + if(psys_get_particle_state(&sim, p, &state, 0) == 0) + continue; + + // copy_v3_v3(pos, pa->state.co); + // mul_m4_v3(ob->imat, pos); + // 1. get corresponding cell + get_cell(sds->p0, sds->res, sds->dx, state.co, cell, 0); + // check if cell is valid (in the domain boundary) + for(i = 0; i < 3; i++) + { + if((cell[i] > sds->res[i] - 1) || (cell[i] < 0)) + { + badcell = 1; + break; + } + } + if(badcell) + continue; + // 2. set cell values (heat, density and velocity) + index = smoke_get_index(cell[0], sds->res[0], cell[1], sds->res[1], cell[2]); + if(!(sfs->type & MOD_SMOKE_FLOW_TYPE_OUTFLOW) && !(obstacle[index])) // this is inflow + { + // heat[index] += sfs->temp * 0.1; + // density[index] += sfs->density * 0.1; + heat[index] = sfs->temp; + + // Add emitter density to temp emission map + temp_emission_map[index] = sfs->density; + + // Uses particle velocity as initial velocity for smoke + if(sfs->flags & MOD_SMOKE_FLOW_INITVELOCITY && (psys->part->phystype != PART_PHYS_NO)) { - int i; - temp_emission_map = MEM_callocN(sizeof(float) * sds->res[0]*sds->res[1]*sds->res[2], "SmokeTempEmission"); - // set whole volume to 0.0f - for (i=0; ires[0]*sds->res[1]*sds->res[2]; i++) { - temp_emission_map[i] = 0.0f; - } - } - - // mostly copied from particle code - if (psys->part->type==PART_HAIR) + velocity_x[index] = state.vel[0]*sfs->vel_multi; + velocity_y[index] = state.vel[1]*sfs->vel_multi; + velocity_z[index] = state.vel[2]*sfs->vel_multi; + } + } + else if(sfs->type & MOD_SMOKE_FLOW_TYPE_OUTFLOW) // outflow + { + heat[index] = 0.f; + density[index] = 0.f; + velocity_x[index] = 0.f; + velocity_y[index] = 0.f; + velocity_z[index] = 0.f; + // we need different handling for the high-res feature + if(bigdensity) { - /* - if (psys->childcache) - { - totchild = psys->totchildcache; - } - else - */ - - // TODO: PART_HAIR not supported whatsoever - totchild=0; + // init all surrounding cells according to amplification, too + int i, j, k; + smoke_turbulence_get_res(sds->wt, bigres); + + for(i = 0; i < sds->amplify + 1; i++) + for(j = 0; j < sds->amplify + 1; j++) + for(k = 0; k < sds->amplify + 1; k++) + { + index = smoke_get_index((sds->amplify + 1)* cell[0] + i, bigres[0], (sds->amplify + 1)* cell[1] + j, bigres[1], (sds->amplify + 1)* cell[2] + k); + bigdensity[index] = 0.f; + } } - else - totchild=psys->totchild*psys->part->disp/100; - - for (p=0; ptype & MOD_SMOKE_FLOW_TYPE_OUTFLOW)) + { + // initialize variables + int ii, jj, kk, x, y, z, block_size; + size_t index, index_big; + + smoke_turbulence_get_res(sds->wt, bigres); + block_size = sds->amplify + 1; // high res block size - if (p < totpart) + // loop through every low res cell + for(x = 0; x < sds->res[0]; x++) + for(y = 0; y < sds->res[1]; y++) + for(z = 0; z < sds->res[2]; z++) { - if (psys->particles[p].flag & (PARS_NO_DISP|PARS_UNEXIST)) - continue; - } - else { - /* handle child particle */ - ChildParticle *cpa = &psys->child[p - totpart]; - - if (psys->particles[cpa->parent].flag & (PARS_NO_DISP|PARS_UNEXIST)) - continue; - } + // neighbor cell emission densities (for high resolution smoke smooth interpolation) + float c000, c001, c010, c011, c100, c101, c110, c111; - state.time = smd->time; - if (psys_get_particle_state(&sim, p, &state, 0) == 0) - continue; - - // copy_v3_v3(pos, pa->state.co); - // mul_m4_v3(ob->imat, pos); - // 1. get corresponding cell - get_cell(smd->domain->p0, smd->domain->res, smd->domain->dx, state.co, cell, 0); - // check if cell is valid (in the domain boundary) - for (i = 0; i < 3; i++) - { - if ((cell[i] > sds->res[i] - 1) || (cell[i] < 0)) - { - badcell = 1; - break; - } - } - if (badcell) - continue; - // 2. set cell values (heat, density and velocity) - index = smoke_get_index(cell[0], sds->res[0], cell[1], sds->res[1], cell[2]); - if (!(sfs->type & MOD_SMOKE_FLOW_TYPE_OUTFLOW) && !(obstacle[index])) // this is inflow - { - // heat[index] += sfs->temp * 0.1; - // density[index] += sfs->density * 0.1; - heat[index] = sfs->temp; - - // Add emitter density to temp emission map - temp_emission_map[index] = sfs->density; - - // Uses particle velocity as initial velocity for smoke - if (sfs->flags & MOD_SMOKE_FLOW_INITVELOCITY && (psys->part->phystype != PART_PHYS_NO)) - { - velocity_x[index] = state.vel[0]*sfs->vel_multi; - velocity_y[index] = state.vel[1]*sfs->vel_multi; - velocity_z[index] = state.vel[2]*sfs->vel_multi; - } - } - else if (sfs->type & MOD_SMOKE_FLOW_TYPE_OUTFLOW) // outflow - { - heat[index] = 0.f; - density[index] = 0.f; - velocity_x[index] = 0.f; - velocity_y[index] = 0.f; - velocity_z[index] = 0.f; - // we need different handling for the high-res feature - if (bigdensity) + c000 = (x>0 && y>0 && z>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y-1, sds->res[1], z-1)] : 0; + c001 = (x>0 && y>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y-1, sds->res[1], z)] : 0; + c010 = (x>0 && z>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y, sds->res[1], z-1)] : 0; + c011 = (x>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y, sds->res[1], z)] : 0; + + c100 = (y>0 && z>0) ? temp_emission_map[smoke_get_index(x, sds->res[0], y-1, sds->res[1], z-1)] : 0; + c101 = (y>0) ? temp_emission_map[smoke_get_index(x, sds->res[0], y-1, sds->res[1], z)] : 0; + c110 = (z>0) ? temp_emission_map[smoke_get_index(x, sds->res[0], y, sds->res[1], z-1)] : 0; + c111 = temp_emission_map[smoke_get_index(x, sds->res[0], y, sds->res[1], z)]; // this cell + + // get cell index + index = smoke_get_index(x, sds->res[0], y, sds->res[1], z); + + // add emission to low resolution density + if (absolute_flow) { - // init all surrounding cells according to amplification, too - int i, j, k; - smoke_turbulence_get_res(smd->domain->wt, bigres); - - for (i = 0; i < smd->domain->amplify + 1; i++) - for (j = 0; j < smd->domain->amplify + 1; j++) - for (k = 0; k < smd->domain->amplify + 1; k++) - { - index = smoke_get_index((smd->domain->amplify + 1)* cell[0] + i, bigres[0], (smd->domain->amplify + 1)* cell[1] + j, bigres[1], (smd->domain->amplify + 1)* cell[2] + k); - bigdensity[index] = 0.f; - } + if (temp_emission_map[index]>0) + density[index] = temp_emission_map[index]; } - } - } // particles loop + else + { + density[index] += temp_emission_map[index]; + if (density[index]>1) + density[index]=1.0f; + } - // apply emission values - if (!(sfs->type & MOD_SMOKE_FLOW_TYPE_OUTFLOW)) { + smoke_turbulence_get_res(sds->wt, bigres); - // initialize variables - int ii, jj, kk, x, y, z, block_size; - size_t index, index_big; + /* loop through high res blocks if high res enabled */ + if (bigdensity) + for(ii = 0; ii < block_size; ii++) + for(jj = 0; jj < block_size; jj++) + for(kk = 0; kk < block_size; kk++) + { - smoke_turbulence_get_res(smd->domain->wt, bigres); - block_size = smd->domain->amplify + 1; // high res block size + float fx,fy,fz, interpolated_value; + int shift_x, shift_y, shift_z; - // loop through every low res cell - for (x = 0; x < sds->res[0]; x++) - for (y = 0; y < sds->res[1]; y++) - for (z = 0; z < sds->res[2]; z++) - { + /* + * Do volume interpolation if emitter smoothing + * is enabled + */ + if (high_emission_smoothing) + { + // convert block position to relative + // for interpolation smoothing + fx = (float)ii/block_size + 0.5f/block_size; + fy = (float)jj/block_size + 0.5f/block_size; + fz = (float)kk/block_size + 0.5f/block_size; + + // calculate trilinear interpolation + interpolated_value = c000 * (1-fx) * (1-fy) * (1-fz) + + c100 * fx * (1-fy) * (1-fz) + + c010 * (1-fx) * fy * (1-fz) + + c001 * (1-fx) * (1-fy) * fz + + c101 * fx * (1-fy) * fz + + c011 * (1-fx) * fy * fz + + c110 * fx * fy * (1-fz) + + c111 * fx * fy * fz; + + + // add some contrast / sharpness + // depending on hi-res block size + + interpolated_value = (interpolated_value-0.4f*sfs->density)*(block_size/2) + 0.4f*sfs->density; + if (interpolated_value<0.0f) interpolated_value = 0.0f; + if (interpolated_value>1.0f) interpolated_value = 1.0f; + + // shift smoke block index + // (because pixel center is actually + // in halfway of the low res block) + shift_x = (x < 1) ? 0 : block_size/2; + shift_y = (y < 1) ? 0 : block_size/2; + shift_z = (z < 1) ? 0 : block_size/2; + } + else + { + // without interpolation use same low resolution + // block value for all hi-res blocks + interpolated_value = c111; + shift_x = 0; + shift_y = 0; + shift_z = 0; + } - // neighbor cell emission densities (for high resolution smoke smooth interpolation) - float c000, c001, c010, c011, c100, c101, c110, c111; + // get shifted index for current high resolution block + index_big = smoke_get_index(block_size * x + ii - shift_x, bigres[0], block_size * y + jj - shift_y, bigres[1], block_size * z + kk - shift_z); - c000 = (x>0 && y>0 && z>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y-1, sds->res[1], z-1)] : 0; - c001 = (x>0 && y>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y-1, sds->res[1], z)] : 0; - c010 = (x>0 && z>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y, sds->res[1], z-1)] : 0; - c011 = (x>0) ? temp_emission_map[smoke_get_index(x-1, sds->res[0], y, sds->res[1], z)] : 0; + // add emission data to high resolution density + if (absolute_flow) + { + if (interpolated_value > 0) + bigdensity[index_big] = interpolated_value; + } + else + { + bigdensity[index_big] += interpolated_value; - c100 = (y>0 && z>0) ? temp_emission_map[smoke_get_index(x, sds->res[0], y-1, sds->res[1], z-1)] : 0; - c101 = (y>0) ? temp_emission_map[smoke_get_index(x, sds->res[0], y-1, sds->res[1], z)] : 0; - c110 = (z>0) ? temp_emission_map[smoke_get_index(x, sds->res[0], y, sds->res[1], z-1)] : 0; - c111 = temp_emission_map[smoke_get_index(x, sds->res[0], y, sds->res[1], z)]; // this cell + if (bigdensity[index_big]>1) + bigdensity[index_big]=1.0f; + } + } // end of hires loop + } // end of low res loop + // free temporary emission map + if (temp_emission_map) + MEM_freeN(temp_emission_map); - // get cell index - index = smoke_get_index(x, sds->res[0], y, sds->res[1], z); + } // end emission + } + } + } - // add emission to low resolution density - if (absolute_flow) {if (temp_emission_map[index]>0) density[index] = temp_emission_map[index];} - else { - density[index] += temp_emission_map[index]; - if (density[index]>1) density[index]=1.0f; - } + if(flowobjs) + MEM_freeN(flowobjs); +} - smoke_turbulence_get_res(smd->domain->wt, bigres); +static void update_effectors(Scene *scene, Object *ob, SmokeDomainSettings *sds, float dt) +{ + ListBase *effectors = pdInitEffectors(scene, ob, NULL, sds->effector_weights); + if(effectors) + { + float *density = smoke_get_density(sds->fluid); + float *force_x = smoke_get_force_x(sds->fluid); + float *force_y = smoke_get_force_y(sds->fluid); + float *force_z = smoke_get_force_z(sds->fluid); + float *velocity_x = smoke_get_velocity_x(sds->fluid); + float *velocity_y = smoke_get_velocity_y(sds->fluid); + float *velocity_z = smoke_get_velocity_z(sds->fluid); + unsigned char *obstacle = smoke_get_obstacle(sds->fluid); + int x, y, z; + + // precalculate wind forces + for(x = 0; x < sds->res[0]; x++) + for(y = 0; y < sds->res[1]; y++) + for(z = 0; z < sds->res[2]; z++) + { + EffectedPoint epoint; + float voxelCenter[3] = {0,0,0} , vel[3] = {0,0,0} , retvel[3] = {0,0,0}; + unsigned int index = smoke_get_index(x, sds->res[0], y, sds->res[1], z); + + if((density[index] < FLT_EPSILON) || obstacle[index]) + continue; + + vel[0] = velocity_x[index]; + vel[1] = velocity_y[index]; + vel[2] = velocity_z[index]; + + voxelCenter[0] = sds->p0[0] + sds->dx * x + sds->dx * 0.5; + voxelCenter[1] = sds->p0[1] + sds->dx * y + sds->dx * 0.5; + voxelCenter[2] = sds->p0[2] + sds->dx * z + sds->dx * 0.5; + + pd_point_from_loc(scene, voxelCenter, vel, index, &epoint); + pdDoEffectors(effectors, NULL, sds->effector_weights, &epoint, retvel, NULL); + + // TODO dg - do in force! + force_x[index] = MIN2(MAX2(-1.0, retvel[0] * 0.2), 1.0); + force_y[index] = MIN2(MAX2(-1.0, retvel[1] * 0.2), 1.0); + force_z[index] = MIN2(MAX2(-1.0, retvel[2] * 0.2), 1.0); + } + } + pdEndEffectors(&effectors); +} - /* - loop through high res blocks if high res enabled - */ - if (bigdensity) - for (ii = 0; ii < block_size; ii++) - for (jj = 0; jj < block_size; jj++) - for (kk = 0; kk < block_size; kk++) - { - - float fx,fy,fz, interpolated_value; - int shift_x, shift_y, shift_z; - - - /* - * Do volume interpolation if emitter smoothing - * is enabled - */ - if (high_emission_smoothing) { - // convert block position to relative - // for interpolation smoothing - fx = (float)ii/block_size + 0.5f/block_size; - fy = (float)jj/block_size + 0.5f/block_size; - fz = (float)kk/block_size + 0.5f/block_size; - - // calculate trilinear interpolation - interpolated_value = c000 * (1-fx) * (1-fy) * (1-fz) + - c100 * fx * (1-fy) * (1-fz) + - c010 * (1-fx) * fy * (1-fz) + - c001 * (1-fx) * (1-fy) * fz + - c101 * fx * (1-fy) * fz + - c011 * (1-fx) * fy * fz + - c110 * fx * fy * (1-fz) + - c111 * fx * fy * fz; - - - // add some contrast / sharpness - // depending on hi-res block size - - interpolated_value = (interpolated_value-0.4f*sfs->density)*(block_size/2) + 0.4f*sfs->density; - if (interpolated_value<0.0f) interpolated_value = 0.0f; - if (interpolated_value>1.0f) interpolated_value = 1.0f; - - // shift smoke block index - // (because pixel center is actually - // in halfway of the low res block) - shift_x = (x < 1) ? 0 : block_size/2; - shift_y = (y < 1) ? 0 : block_size/2; - shift_z = (z < 1) ? 0 : block_size/2; - } - else { - // without interpolation use same low resolution - // block value for all hi-res blocks - interpolated_value = c111; - shift_x = 0; - shift_y = 0; - shift_z = 0; - } - - // get shifted index for current high resolution block - index_big = smoke_get_index(block_size * x + ii - shift_x, bigres[0], block_size * y + jj - shift_y, bigres[1], block_size * z + kk - shift_z); - - // add emission data to high resolution density - if (absolute_flow) {if (interpolated_value > 0) bigdensity[index_big] = interpolated_value;} - else { - bigdensity[index_big] += interpolated_value; - if (bigdensity[index_big]>1) bigdensity[index_big]=1.0f; - } +static void step(Scene *scene, Object *ob, SmokeModifierData *smd, float fps) +{ + /* stability values copied from wturbulence.cpp */ + const int maxSubSteps = 25; + float maxVel; + // maxVel should be 1.5 (1.5 cell max movement) * dx (cell size) - } // end of hires loop + float dt = DT_DEFAULT; + float maxVelMag = 0.0f; + int totalSubsteps; + int substep = 0; + float dtSubdiv; - } // end of low res loop + SmokeDomainSettings *sds = smd->domain; - // free temporary emission map - if (temp_emission_map) MEM_freeN(temp_emission_map); + /* get max velocity and lower the dt value if it is too high */ + size_t size= sds->res[0] * sds->res[1] * sds->res[2]; - } // end emission + float *velX = smoke_get_velocity_x(sds->fluid); + float *velY = smoke_get_velocity_y(sds->fluid); + float *velZ = smoke_get_velocity_z(sds->fluid); + size_t i; + /* adapt timestep for different framerates, dt = 0.1 is at 25fps */ + dt *= (25.0f / fps); - - } - else { - /* - for () - { - // no psys - BVHTreeNearest nearest; - nearest.index = -1; - nearest.dist = FLT_MAX; + // printf("test maxVel: %f\n", (sds->dx * 1.5) / dt); // gives 0.9 + maxVel = (sds->dx * 1.5); - BLI_bvhtree_find_nearest(sfs->bvh->tree, pco, &nearest, sfs->bvh->nearest_callback, sfs->bvh); - }*/ - } - } - } - if (sds->fluid_group) - go = go->next; - else - base= base->next; - } + for(i = 0; i < size; i++) + { + float vtemp = (velX[i]*velX[i]+velY[i]*velY[i]+velZ[i]*velZ[i]); + if(vtemp > maxVelMag) + maxVelMag = vtemp; } - // do effectors + maxVelMag = sqrt(maxVelMag) * dt * sds->time_scale; + totalSubsteps = (int)((maxVelMag / maxVel) + 1.0f); /* always round up */ + totalSubsteps = (totalSubsteps < 1) ? 1 : totalSubsteps; + totalSubsteps = (totalSubsteps > maxSubSteps) ? maxSubSteps : totalSubsteps; + + // totalSubsteps = 2.0f; // DEBUG + + dtSubdiv = (float)dt / (float)totalSubsteps; + + // printf("totalSubsteps: %d, maxVelMag: %f, dt: %f\n", totalSubsteps, maxVelMag, dt); + + for(substep = 0; substep < totalSubsteps; substep++) { - ListBase *effectors = pdInitEffectors(scene, ob, NULL, sds->effector_weights); + // calc animated obstacle velocities + update_obstacles(scene, ob, sds, dtSubdiv, substep, totalSubsteps); + update_flowsfluids(scene, ob, sds, smd->time); + update_effectors(scene, ob, sds, dtSubdiv); // DG TODO? problem --> uses forces instead of velocity, need to check how they need to be changed with variable dt - if (effectors) - { - float *density = smoke_get_density(sds->fluid); - float *force_x = smoke_get_force_x(sds->fluid); - float *force_y = smoke_get_force_y(sds->fluid); - float *force_z = smoke_get_force_z(sds->fluid); - float *velocity_x = smoke_get_velocity_x(sds->fluid); - float *velocity_y = smoke_get_velocity_y(sds->fluid); - float *velocity_z = smoke_get_velocity_z(sds->fluid); - int x, y, z; - - // precalculate wind forces - for (x = 0; x < sds->res[0]; x++) - for (y = 0; y < sds->res[1]; y++) - for (z = 0; z < sds->res[2]; z++) - { - EffectedPoint epoint; - float voxelCenter[3] = {0,0,0} , vel[3] = {0,0,0} , retvel[3] = {0,0,0}; - unsigned int index = smoke_get_index(x, sds->res[0], y, sds->res[1], z); - - if (density[index] < FLT_EPSILON) - continue; - - vel[0] = velocity_x[index]; - vel[1] = velocity_y[index]; - vel[2] = velocity_z[index]; - - voxelCenter[0] = sds->p0[0] + sds->dx * x + sds->dx * 0.5; - voxelCenter[1] = sds->p0[1] + sds->dx * y + sds->dx * 0.5; - voxelCenter[2] = sds->p0[2] + sds->dx * z + sds->dx * 0.5; - - pd_point_from_loc(scene, voxelCenter, vel, index, &epoint); - pdDoEffectors(effectors, NULL, sds->effector_weights, &epoint, retvel, NULL); - - // TODO dg - do in force! - force_x[index] = MIN2(MAX2(-1.0, retvel[0] * 0.2), 1.0); - force_y[index] = MIN2(MAX2(-1.0, retvel[1] * 0.2), 1.0); - force_z[index] = MIN2(MAX2(-1.0, retvel[2] * 0.2), 1.0); - } - } + smoke_step(sds->fluid, dtSubdiv); - pdEndEffectors(&effectors); - } + // move animated obstacle: Done in update_obstacles() */ + // where to delete old obstacles from array? Done in update_obstacles() */ + } } + void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm) { - if ((smd->type & MOD_SMOKE_TYPE_FLOW)) + if((smd->type & MOD_SMOKE_TYPE_FLOW)) { - if (scene->r.cfra >= smd->time) + if(scene->r.cfra >= smd->time) smokeModifier_init(smd, ob, scene, dm); - if (scene->r.cfra > smd->time) + if(scene->r.cfra > smd->time) { // XXX TODO smd->time = scene->r.cfra; @@ -1366,40 +1675,102 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM copy_m4_m4(smd->flow->mat, ob->obmat); */ } - else if (scene->r.cfra < smd->time) + else if(scene->r.cfra < smd->time) { smd->time = scene->r.cfra; smokeModifier_reset(smd); } } - else if (smd->type & MOD_SMOKE_TYPE_COLL) + else if(smd->type & MOD_SMOKE_TYPE_COLL) { - if (scene->r.cfra >= smd->time) + /* Check if domain resolution changed */ + /* DG TODO: can this be solved more elegant using dependancy graph? */ + { + SmokeCollSettings *scs = smd->coll; + Base *base = scene->base.first; + int changed = 0; + float dx = FLT_MAX; + int haveDomain = 0; + + for ( ; base; base = base->next) + { + SmokeModifierData *smd2 = (SmokeModifierData *)modifiers_findByType(base->object, eModifierType_Smoke); + + if (smd2 && (smd2->type & MOD_SMOKE_TYPE_DOMAIN) && smd2->domain) + { + SmokeDomainSettings *sds = smd2->domain; + + if(sds->dx < dx) + { + dx = sds->dx; + changed = 1; + } + + haveDomain = 1; + } + } + + if(!haveDomain) + return; + + if(changed) + { + if(dx != scs->dx) + { + scs->dx = dx; + smokeModifier_reset(smd); + } + } + } + + if(scene->r.cfra >= smd->time) smokeModifier_init(smd, ob, scene, dm); - if (scene->r.cfra > smd->time) + if(scene->r.cfra > smd->time) { - // XXX TODO + unsigned int i; + SmokeCollSettings *scs = smd->coll; + float *points_old = scs->points_old; + float *points = scs->points; + unsigned int numpoints = scs->numpoints; + + // XXX TODO <-- DG: what is TODO here? smd->time = scene->r.cfra; -#ifdef USE_SMOKE_COLLISION_DM - if (smd->coll->dm) - smd->coll->dm->release(smd->coll->dm); + // rigid movement support + copy_m4_m4(scs->mat_old, scs->mat); + copy_m4_m4(scs->mat, ob->obmat); - smd->coll->dm = CDDM_copy_from_tessface(dm); -#endif + if(scs->type != SM_COLL_ANIMATED) // if(not_animated) + { + // nothing to do, "mat" is already up to date + } + else + { + // XXX TODO: need to update positions + divs - // rigid movement support - copy_m4_m4(smd->coll->mat_old, smd->coll->mat); - copy_m4_m4(smd->coll->mat, ob->obmat); + if(scs->numverts != dm->getNumVerts(dm)) + { + // DG TODO: reset modifier? + return; + } + + for(i = 0; i < numpoints * 3; i++) + { + points_old[i] = points[i]; + } + + DM_ensure_tessface(dm); + fill_scs_points_anim(ob, dm, scs); + } } - else if (scene->r.cfra < smd->time) + else if(scene->r.cfra < smd->time) { smd->time = scene->r.cfra; smokeModifier_reset(smd); } } - else if (smd->type & MOD_SMOKE_TYPE_DOMAIN) + else if(smd->type & MOD_SMOKE_TYPE_DOMAIN) { SmokeDomainSettings *sds = smd->domain; float light[3]; @@ -1416,14 +1787,14 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM BKE_ptcache_id_from_smoke(&pid, ob, smd); BKE_ptcache_id_time(&pid, scene, framenr, &startframe, &endframe, ×cale); - if (!smd->domain->fluid || framenr == startframe) + if(!smd->domain->fluid || framenr == startframe) { BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED); BKE_ptcache_validate(cache, framenr); cache->flag &= ~PTCACHE_REDO_NEEDED; } - if (!smd->domain->fluid && (framenr != startframe) && (smd->domain->flags & MOD_SMOKE_FILE_LOAD)==0 && (cache->flag & PTCACHE_BAKED)==0) + if(!smd->domain->fluid && (framenr != startframe) && (smd->domain->flags & MOD_SMOKE_FILE_LOAD)==0 && (cache->flag & PTCACHE_BAKED)==0) return; smd->domain->flags &= ~MOD_SMOKE_FILE_LOAD; @@ -1436,21 +1807,21 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM // printf("startframe: %d, framenr: %d\n", startframe, framenr); - if (smokeModifier_init(smd, ob, scene, dm)==0) + if(smokeModifier_init(smd, ob, scene, dm)==0) { printf("bad smokeModifier_init\n"); return; } /* try to read from cache */ - if (BKE_ptcache_read(&pid, (float)framenr) == PTCACHE_READ_EXACT) { + if(BKE_ptcache_read(&pid, (float)framenr) == PTCACHE_READ_EXACT) { BKE_ptcache_validate(cache, framenr); smd->time = framenr; return; } /* only calculate something when we advanced a single frame */ - if (framenr != (int)smd->time+1) + if(framenr != (int)smd->time+1) return; /* don't simulate if viewing start frame, but scene frame is not real start frame */ @@ -1462,14 +1833,14 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM smoke_calc_domain(scene, ob, smd); /* if on second frame, write cache for first frame */ - if ((int)smd->time == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact==0)) { + if((int)smd->time == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact==0)) { // create shadows straight after domain initialization so we get nice shadows for startframe, too - if (get_lamp(scene, light)) + if(get_lamp(scene, light)) smoke_calc_transparency(sds->shadow, smoke_get_density(sds->fluid), sds->p0, sds->p1, sds->res, sds->dx, light, calc_voxel_transp, -7.0*sds->dx); - if (sds->wt) + if(sds->wt) { - if (sds->flags & MOD_SMOKE_DISSOLVE) + if(sds->flags & MOD_SMOKE_DISSOLVE) smoke_dissolve_wavelet(sds->wt, sds->diss_speed, sds->flags & MOD_SMOKE_DISSOLVE_LOG); smoke_turbulence_step(sds->wt, sds->fluid); } @@ -1486,30 +1857,31 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM // simulate the actual smoke (c++ code in intern/smoke) // DG: interesting commenting this line + deactivating loading of noise files - if (framenr!=startframe) + if(framenr!=startframe) { - if (sds->flags & MOD_SMOKE_DISSOLVE) + if(sds->flags & MOD_SMOKE_DISSOLVE) smoke_dissolve(sds->fluid, sds->diss_speed, sds->flags & MOD_SMOKE_DISSOLVE_LOG); - smoke_step(sds->fluid, smd->time, scene->r.frs_sec / scene->r.frs_sec_base); + + step(scene, ob, smd, scene->r.frs_sec / scene->r.frs_sec_base); } // create shadows before writing cache so they get stored - if (get_lamp(scene, light)) + if(get_lamp(scene, light)) smoke_calc_transparency(sds->shadow, smoke_get_density(sds->fluid), sds->p0, sds->p1, sds->res, sds->dx, light, calc_voxel_transp, -7.0*sds->dx); - if (sds->wt) + if(sds->wt) { - if (sds->flags & MOD_SMOKE_DISSOLVE) + if(sds->flags & MOD_SMOKE_DISSOLVE) smoke_dissolve_wavelet(sds->wt, sds->diss_speed, sds->flags & MOD_SMOKE_DISSOLVE_LOG); smoke_turbulence_step(sds->wt, sds->fluid); } BKE_ptcache_validate(cache, framenr); - if (framenr != startframe) + if(framenr != startframe) BKE_ptcache_write(&pid, framenr); tend(); - //printf ( "Frame: %d, Time: %f\n", (int)smd->time, ( float ) tval() ); + // printf ( "Frame: %d, Time: %f\n\n", (int)smd->time, ( float ) tval() ); } } @@ -1520,7 +1892,7 @@ static float calc_voxel_transp(float *result, float *input, int res[3], int *pix // T_ray *= T_vox *tRay *= exp(input[index]*correct); - if (result[index] < 0.0f) + if(result[index] < 0.0f) { #pragma omp critical result[index] = *tRay; @@ -1574,7 +1946,7 @@ static void bresenham_linie_3D(int x1, int y1, int z1, int x2, int y2, int z2, f err_1 = dy2 - l; err_2 = dz2 - l; for (i = 0; i < l; i++) { - if (cb(result, input, res, pixel, tRay, correct) <= FLT_EPSILON) + if(cb(result, input, res, pixel, tRay, correct) <= FLT_EPSILON) break; if (err_1 > 0) { pixel[1] += y_inc; @@ -1588,12 +1960,12 @@ static void bresenham_linie_3D(int x1, int y1, int z1, int x2, int y2, int z2, f err_2 += dz2; pixel[0] += x_inc; } - } + } else if ((m >= l) && (m >= n)) { err_1 = dx2 - m; err_2 = dz2 - m; for (i = 0; i < m; i++) { - if (cb(result, input, res, pixel, tRay, correct) <= FLT_EPSILON) + if(cb(result, input, res, pixel, tRay, correct) <= FLT_EPSILON) break; if (err_1 > 0) { pixel[0] += x_inc; @@ -1607,12 +1979,12 @@ static void bresenham_linie_3D(int x1, int y1, int z1, int x2, int y2, int z2, f err_2 += dz2; pixel[1] += y_inc; } - } + } else { err_1 = dy2 - n; err_2 = dx2 - n; for (i = 0; i < n; i++) { - if (cb(result, input, res, pixel, tRay, correct) <= FLT_EPSILON) + if(cb(result, input, res, pixel, tRay, correct) <= FLT_EPSILON) break; if (err_1 > 0) { pixel[1] += y_inc; @@ -1654,7 +2026,7 @@ static void smoke_calc_transparency(float *result, float *input, float *p0, floa float bv[6]; int a, z, slabsize=res[0]*res[1], size= res[0]*res[1]*res[2]; - for (a=0; a= 0.0f) + if(result[index] >= 0.0f) continue; voxelCenter[0] = p0[0] + dx * x + dx * 0.5; voxelCenter[1] = p0[1] + dx * y + dx * 0.5; voxelCenter[2] = p0[2] + dx * z + dx * 0.5; // get starting position (in voxel coords) - if (BLI_bvhtree_bb_raycast(bv, light, voxelCenter, pos) > FLT_EPSILON) + if(BLI_bvhtree_bb_raycast(bv, light, voxelCenter, pos) > FLT_EPSILON) { // we're ouside get_cell(p0, res, dx, pos, cell, 1); diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h index 26b3a3e6c62..3e20b353856 100644 --- a/source/blender/makesdna/DNA_smoke_types.h +++ b/source/blender/makesdna/DNA_smoke_types.h @@ -56,6 +56,11 @@ #define SM_BORDER_VERTICAL 1 #define SM_BORDER_CLOSED 2 +/* collision types */ +#define SM_COLL_STATIC 0 +#define SM_COLL_RIGID 1 +#define SM_COLL_ANIMATED 2 + typedef struct SmokeDomainSettings { struct SmokeModifierData *smd; /* for fast RNA access */ struct FLUID_3D *fluid; @@ -137,15 +142,16 @@ typedef struct SmokeFlowSettings { typedef struct SmokeCollSettings { struct SmokeModifierData *smd; /* for fast RNA access */ struct BVHTree *bvhtree; /* bounding volume hierarchy for this cloth object */ - -// struct DerivedMesh *dm; // UNUSED, ifdef'd in code for now. float *points; float *points_old; - float *vel; + float *vel; // UNUSED + int *tridivs; float mat[4][4]; float mat_old[4][4]; int numpoints; int numverts; // check if mesh changed + int numtris; + float dx; /* global domain cell length taken from (scale / resolution) */ short type; // static = 0, rigid = 1, dynamic = 2 short pad; int pad2; diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c index 69d76c0e342..b1fed62f87b 100644 --- a/source/blender/makesrna/intern/rna_smoke.c +++ b/source/blender/makesrna/intern/rna_smoke.c @@ -16,6 +16,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Contributor(s): Daniel Genrich + * Blender Foundation * * ***** END GPL LICENSE BLOCK ***** */ @@ -336,12 +337,25 @@ static void rna_def_smoke_flow_settings(BlenderRNA *brna) static void rna_def_smoke_coll_settings(BlenderRNA *brna) { + static EnumPropertyItem smoke_coll_type_items[] = { + {SM_COLL_STATIC, "COLLSTATIC", 0, "Static", "Non moving obstacle"}, + {SM_COLL_RIGID, "COLLRIGID", 0, "Rigid", "Rigid obstacle"}, + {SM_COLL_ANIMATED, "COLLANIMATED", 0, "Animated", "Animated obstacle"}, + {0, NULL, 0, NULL, NULL}}; + StructRNA *srna; + PropertyRNA *prop; srna = RNA_def_struct(brna, "SmokeCollSettings", NULL); RNA_def_struct_ui_text(srna, "Collision Settings", "Smoke collision settings"); RNA_def_struct_sdna(srna, "SmokeCollSettings"); RNA_def_struct_path_func(srna, "rna_SmokeCollSettings_path"); + + prop = RNA_def_property(srna, "collision_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "type"); + RNA_def_property_enum_items(prop, smoke_coll_type_items); + RNA_def_property_ui_text(prop, "Collision type", "Collision type"); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset"); } void RNA_def_smoke(BlenderRNA *brna) -- cgit v1.2.3 From 5abadf1f75d7d364f3f770f2c2a14e037b5cb73b Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Sat, 28 Apr 2012 22:59:55 +0000 Subject: Fix for windows compile. --- source/gameengine/Converter/CMakeLists.txt | 1 + source/gameengine/Converter/SConscript | 3 +++ source/gameengine/Ketsji/CMakeLists.txt | 1 + source/gameengine/Ketsji/SConscript | 3 +++ 4 files changed, 8 insertions(+) diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt index b570489d6a2..1826f1ad25b 100644 --- a/source/gameengine/Converter/CMakeLists.txt +++ b/source/gameengine/Converter/CMakeLists.txt @@ -59,6 +59,7 @@ set(INC ) set(INC_SYS + ${PTHREADS_INCLUDE_DIRS} ) diff --git a/source/gameengine/Converter/SConscript b/source/gameengine/Converter/SConscript index 4e2adbdc021..e95ae5448fb 100644 --- a/source/gameengine/Converter/SConscript +++ b/source/gameengine/Converter/SConscript @@ -39,4 +39,7 @@ if env['WITH_BF_CXX_GUARDEDALLOC']: if env['WITH_BF_BULLET']: defs.append('USE_BULLET') +if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', 'win64-mingw'): + incs += ' ' + env['BF_PTHREADS_INC'] + env.BlenderLib ( 'ge_converter', sources, Split(incs), defs, libtype=['core','player'], priority=[305,40], cxx_compileflags=env['BGE_CXXFLAGS']) diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt index 8ed2d2f46db..c7f54838c10 100644 --- a/source/gameengine/Ketsji/CMakeLists.txt +++ b/source/gameengine/Ketsji/CMakeLists.txt @@ -55,6 +55,7 @@ set(INC ) set(INC_SYS + ${PTHREADS_INCLUDE_DIRS} ${GLEW_INCLUDE_PATH} ../../../extern/recastnavigation/Recast/Include ../../../extern/recastnavigation/Detour/Include diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript index 2943acd546d..5fdf250006f 100644 --- a/source/gameengine/Ketsji/SConscript +++ b/source/gameengine/Ketsji/SConscript @@ -47,4 +47,7 @@ if env['WITH_BF_BULLET']: defs.append('USE_BULLET') incs += ' #source/gameengine/Physics/Bullet' +if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', 'win64-mingw'): + incs += ' ' + env['BF_PTHREADS_INC'] + env.BlenderLib ( 'ge_logic_ketsji', sources, Split(incs), defs, libtype=['core','player'], priority=[320,45], cxx_compileflags=env['BGE_CXXFLAGS']) -- cgit v1.2.3 From 72ec4c813a2c544341d0c4ae83369cea60e52c9e Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sat, 28 Apr 2012 23:15:34 +0000 Subject: fix pthread path for windows builds --- source/gameengine/BlenderRoutines/SConscript | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/gameengine/BlenderRoutines/SConscript b/source/gameengine/BlenderRoutines/SConscript index 8f59ec0bf04..998396aba7c 100644 --- a/source/gameengine/BlenderRoutines/SConscript +++ b/source/gameengine/BlenderRoutines/SConscript @@ -35,4 +35,7 @@ if env['WITH_BF_CXX_GUARDEDALLOC']: incs += ' ' + env['BF_BULLET_INC'] incs += ' ' + env['BF_OPENGL_INC'] +if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', 'win64-mingw'): + incs += ' ' + env['BF_PTHREADS_INC'] + env.BlenderLib ( 'ge_blen_routines', sources, Split(incs), defs, libtype=['core','player'], priority=[300,35] , cxx_compileflags=env['BGE_CXXFLAGS']) -- cgit v1.2.3